diff options
| author | Marco Rodolfi <marco.rodolfi@tuta.io> | 2023-05-02 17:42:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-02 16:42:39 +0100 |
| commit | 35e7c80835866575ea1d8f725f8c07183753e49b (patch) | |
| tree | 276e3f5fa6c76328f5e9d34619981d72f763d232 /frontend/src/components/store/Store.tsx | |
| parent | caf37d681f8644c1fdfb8cc04d23aecf7e289e92 (diff) | |
| download | decky-loader-35e7c80835866575ea1d8f725f8c07183753e49b.tar.gz decky-loader-35e7c80835866575ea1d8f725f8c07183753e49b.zip | |
[Feature] Implement internazionalization for Decky Loader (#361)v2.8.0-pre1
* First iteration for internationalization of the loader
* First iteration for internationalization of the loader
* Cleanup node mess
* Cleanup node mess pt2
* Additional touches
* Latest decky changed merged into i18n and updated translation.
* Styling fixes
* Initial backend hosting implementation
* Added correct url path of the loopback server.
* Added correct url path of the loopback server.
* Some better namespaced text.
* Added whitelist for locales path.
* Refactor languages and fix hooks logic bugs.
* Small typo in language translation structure.
* Working backend, automatically swtich languages with steam and language fixes.
* Fix to languages
* Key fixes
* Additional language fixes.
* Additional json changes
* Final text revision and added a vscode tasks to automatically extract text from code.
* Typo in the middleware
* Remove unused imports
* Cleanup whitespaces.
* Import changes
* Revert "Import changes"
This reverts commit 8e8231950fd7cc6cece87040e326d0a72ba79567.
* Update index.d.ts
* Clean up unused imports
* Delete pnpm-lock.yaml
* Update rollup.config.js
* Update PluginInstallModal.tsx
* Update index.tsx
* Update plugin-loader.tsx
* Update plugin-loader.tsx
* Revert "Delete pnpm-lock.yaml"
This reverts commit 3a39f36f2193cc976d36ffe07338239e363d5b04.
* Additional strings reworks.
* Fixes for issues coming from github merge.
* Fixes for master
* Styling fixes
* Styling pt2
* Missed a few strings in master,
* Styling fixes
* Additional master merge fixes.
* Final cleanup and adaptation to master.
* Final empty language cleanup and few string added
* Small changes to italian translation
* Disabled translation on a few components inside plugin-loader for missing react hooks.
* Fixed passing tag to translation.
* Disable debug output for reducing console spam.
* Return correct content type
* Small italian language change
* Added support for country code
* Fixed missing translation for uninstall popup.
* Fix class name shenanigans for toast notification
* Update dependencies
* Fixed github workflow to include the new locales folder
* Update dependencies to latest version (unless it's React) and fixed the new small errors that cropped up
* Missed a file name change
* Updated dev dependencies to latest version
* Missed a few dev dependencies
* Revert "Update dependencies to latest version (unless it's React) and fixed the new small errors that cropped up"
Messed up merge with a different main branch
* Messed up deletion of rollup config.
* Fix broken pnpm lock file
* Missed a localized string during the merge
* Fixed a parameter mistake in the uninstall text parameter
* Fix pnpm random issues
* Small italian language tweaks
* Fix wrong parameter passed to the uninstall function call
* Another fix on a wrong function parameter
* Additional translation text on the store and branch selection channels
* Changed the default type passed to map to being able to index the two arrays.
* Reverted and reworked the last changes
* Distinguish events in UI for installing vs reinstalling plugins
* Additional fixes for reinstall prompt
* Revert the use of intevalPlural since the parser doesn't seem to support that.
* Missed a routing path in the backend
* Small bugfixes
* Small fixes
* Correctly adding the parameter to the request headers.
* Refactoring of the UI popup modal
* Fix pnpm shenanigans
* Final fixes for the install UI localization
* Clean up unnedeed backend code
* Small rework on text selection.
* Cleaned up parser configuration
* Removed extracttext dependency to pnpmsetup
* Merged translation and cleaned up parser
* Fixed JSON structure after manual merge.
* Added translation to the file picker
* Revert changes to PluginInstallModal
* Reworked the text modal for the final time
* Missed the proper linted text
* Missed the backend change
* Final branch cleanup
* Fixed small translation bleeding
Caused from the manual merge of _old.json files.
* fix extra space in browser.py
* fix extra newline in plugin-loader.tsx
* Cleanup i18next-parser.config.mjs
* Update plugin-loader.tsx
* Cleanup language files
* Better labeling of text
* Fixed language typos in BranchSelect
* Fixed language typos in StoreSelect
* Cleanup plugin-loader.tsx from unused imports
* Removed the path bypass since I'm using authentication from the frontend.
* Reimplemented this component as a functional component.
* Updated dependencies and lockfile
* Removed static route from main.py
Already handled in loader.py
* Small italian coherency fixes
* Fix small typography fixes on plugin name uninstall
* Fixed italian typo on removal popup
* Reenabled manual escaping value in i18next
* Set to fallback to the default language if the string in the JSON file is empty.
* Fixed pnpm wankery
* Added a missed italian text translation string
---------
Co-authored-by: AAGaming <aa@mail.catvibers.me>
Diffstat (limited to 'frontend/src/components/store/Store.tsx')
| -rw-r--r-- | frontend/src/components/store/Store.tsx | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/frontend/src/components/store/Store.tsx b/frontend/src/components/store/Store.tsx index 68f6c077..f2d941cd 100644 --- a/frontend/src/components/store/Store.tsx +++ b/frontend/src/components/store/Store.tsx @@ -9,6 +9,7 @@ import { findModule, } from 'decky-frontend-lib'; import { FC, useEffect, useMemo, useState } from 'react'; +import { useTranslation } from 'react-i18next'; import logo from '../../../assets/plugin_store.png'; import Logger from '../../logger'; @@ -25,6 +26,8 @@ const StorePage: FC<{}> = () => { return false; }); + const { t } = useTranslation(); + useEffect(() => { (async () => { const res = await getPluginList(); @@ -54,13 +57,13 @@ const StorePage: FC<{}> = () => { }} tabs={[ { - title: 'Browse', + title: t('Store.store_tabs.title'), content: <BrowseTab children={{ data: data }} />, id: 'browse', renderTabAddon: () => <span className={TabCount}>{data.length}</span>, }, { - title: 'About', + title: t('Store.store_tabs.about'), content: <AboutTab />, id: 'about', }, @@ -73,10 +76,12 @@ const StorePage: FC<{}> = () => { }; const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { + const { t } = useTranslation(); + const sortOptions = useMemo( (): DropdownOption[] => [ - { data: 1, label: 'Alphabetical (A to Z)' }, - { data: 2, label: 'Alphabetical (Z to A)' }, + { data: 1, label: t('Store.store_tabs.alph_desc') }, + { data: 2, label: t('Store.store_tabs.alph_asce') }, ], [], ); @@ -105,11 +110,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { width: '47.5%', }} > - <span className="DialogLabel">Sort</span> + <span className="DialogLabel">{t("Store.store_sort.label")}</span> <Dropdown - menuLabel="Sort" + menuLabel={t("Store.store_sort.label") as string} rgOptions={sortOptions} - strDefaultLabel="Last Updated (Newest)" + strDefaultLabel={t("Store.store_sort.label_def") as string} selectedOption={selectedSort} onChange={(e) => setSort(e.data)} /> @@ -122,11 +127,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { marginLeft: 'auto', }} > - <span className="DialogLabel">Filter</span> + <span className="DialogLabel">{t("Store.store_filter.label")}</span> <Dropdown - menuLabel="Filter" + menuLabel={t("Store.store_filter.label")} rgOptions={filterOptions} - strDefaultLabel="All" + strDefaultLabel={t("Store.store_filter.label_def")} selectedOption={selectedFilter} onChange={(e) => setFilter(e.data)} /> @@ -136,7 +141,7 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { <div style={{ justifyContent: 'center', display: 'flex' }}> <Focusable style={{ display: 'flex', alignItems: 'center', width: '96%' }}> <div style={{ width: '100%' }}> - <TextField label="Search" value={searchFieldValue} onChange={(e) => setSearchValue(e.target.value)} /> + <TextField label={t("Store.store_search.label")} value={searchFieldValue} onChange={(e) => setSearchValue(e.target.value)} /> </div> </Focusable> </div> @@ -151,11 +156,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { maxWidth: '100%', }} > - <span className="DialogLabel">Sort</span> + <span className="DialogLabel">{t('Store.store_sort.label')}</span> <Dropdown - menuLabel="Sort" + menuLabel={t('Store.store_sort.label') as string} rgOptions={sortOptions} - strDefaultLabel="Last Updated (Newest)" + strDefaultLabel={t('Store.store_sort.label_def') as string} selectedOption={selectedSort} onChange={(e) => setSort(e.data)} /> @@ -165,7 +170,11 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { <div style={{ justifyContent: 'center', display: 'flex' }}> <Focusable style={{ display: 'flex', alignItems: 'center', width: '96%' }}> <div style={{ width: '100%' }}> - <TextField label="Search" value={searchFieldValue} onChange={(e) => setSearchValue(e.target.value)} /> + <TextField + label={t('Store.store_search.label')} + value={searchFieldValue} + onChange={(e) => setSearchValue(e.target.value)} + /> </div> </Focusable> </div> @@ -192,6 +201,8 @@ const BrowseTab: FC<{ children: { data: StorePlugin[] } }> = (data) => { }; const AboutTab: FC<{}> = () => { + const { t } = useTranslation(); + return ( <div style={{ @@ -216,7 +227,7 @@ const AboutTab: FC<{}> = () => { /> <span className="deckyStoreAboutHeader">Testing</span> <span> - Please consider testing new plugins to help the Decky Loader team!{' '} + {t('Store.store_testing_cta')}{' '} <a href="https://deckbrew.xyz/testing" target="_blank" @@ -227,13 +238,10 @@ const AboutTab: FC<{}> = () => { deckbrew.xyz/testing </a> </span> - <span className="deckyStoreAboutHeader">Contributing</span> - <span> - If you would like to contribute to the Decky Plugin Store, check the SteamDeckHomebrew/decky-plugin-template - repository on GitHub. Information on development and distribution is available in the README. - </span> - <span className="deckyStoreAboutHeader">Source Code</span> - <span>All plugin source code is available on SteamDeckHomebrew/decky-plugin-database repository on GitHub.</span> + <span className="deckyStoreAboutHeader">{t('Store.store_contrib.label')}</span> + <span>{t('Store.store_contrib.desc')}</span> + <span className="deckyStoreAboutHeader">{t('Store.store_source.label')}</span> + <span>{t('Store.store_source.desc')}</span> </div> ); }; |
