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 /backend | |
| 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 'backend')
| -rw-r--r-- | backend/browser.py | 4 | ||||
| -rw-r--r-- | backend/loader.py | 6 | ||||
| -rw-r--r-- | backend/locales/en-US.json | 183 | ||||
| -rw-r--r-- | backend/locales/it-IT.json | 184 | ||||
| -rw-r--r-- | backend/utilities.py | 5 |
5 files changed, 378 insertions, 4 deletions
diff --git a/backend/browser.py b/backend/browser.py index 74354edf..db3d2f50 100644 --- a/backend/browser.py +++ b/backend/browser.py @@ -209,12 +209,12 @@ class PluginBrowser: if self.loader.watcher: self.loader.watcher.disabled = False - async def request_plugin_install(self, artifact, name, version, hash): + async def request_plugin_install(self, artifact, name, version, hash, install_type): request_id = str(time()) self.install_requests[request_id] = PluginInstallContext(artifact, name, version, hash) tab = await get_gamepadui_tab() await tab.open_websocket() - await tab.evaluate_js(f"DeckyPluginLoader.addPluginInstallPrompt('{name}', '{version}', '{request_id}', '{hash}')") + await tab.evaluate_js(f"DeckyPluginLoader.addPluginInstallPrompt('{name}', '{version}', '{request_id}', '{hash}', {install_type})") async def confirm_plugin_install(self, request_id): request = self.install_requests.pop(request_id) diff --git a/backend/loader.py b/backend/loader.py index a21aad09..8c4c4a7f 100644 --- a/backend/loader.py +++ b/backend/loader.py @@ -77,6 +77,7 @@ class Loader: server_instance.add_routes([ web.get("/frontend/{path:.*}", self.handle_frontend_assets), + web.get("/locales/{path:.*}", self.handle_frontend_locales), web.get("/plugins", self.get_plugins), web.get("/plugins/{plugin_name}/frontend_bundle", self.handle_frontend_bundle), web.post("/plugins/{plugin_name}/methods/{method_name}", self.handle_plugin_method_call), @@ -99,6 +100,11 @@ class Loader: return web.FileResponse(file, headers={"Cache-Control": "no-cache"}) + async def handle_frontend_locales(self, request): + file = path.join(path.dirname(__file__), "locales", request.match_info["path"]) + + return web.FileResponse(file, headers={"Cache-Control": "no-cache", "Content-Type": "application/json"}) + async def get_plugins(self, request): plugins = list(self.plugins.values()) return web.json_response([{"name": str(i) if not i.legacy else "$LEGACY_"+str(i), "version": i.version} for i in plugins]) diff --git a/backend/locales/en-US.json b/backend/locales/en-US.json new file mode 100644 index 00000000..70a7a7ae --- /dev/null +++ b/backend/locales/en-US.json @@ -0,0 +1,183 @@ +{ + "BranchSelect": { + "update_channel": { + "label": "Update Channel", + "prerelease": "Prerelease", + "stable": "Stable", + "testing": "Testing" + } + }, + "Developer": { + "5secreload": "Reloading in 5 seconds", + "disabling": "Disabling", + "enabling": "Enabling" + }, + "FilePickerIndex": { + "folder": { + "select": "Use this folder" + } + }, + "PluginCard": { + "plugin_full_access": "This plugin has full access to your Steam Deck.", + "plugin_install": "Install", + "plugin_no_desc": "No description provided.", + "plugin_version_label": "Plugin Version" + }, + "PluginInstallModal": { + "install": { + "button_idle": "Install", + "button_processing": "Installing", + "desc": "Are you sure you want to install {{artifact}} {{version}}?", + "title": "Install {{artifact}}" + }, + "no_hash": "This plugin does not have a hash, you are installing it at your own risk.", + "reinstall": { + "button_idle": "Reinstall", + "button_processing": "Reinstalling", + "desc": "Are you sure you want to reinstall {{artifact}} {{version}}?", + "title": "Reinstall {{artifact}}" + }, + "update": { + "button_idle": "Update", + "button_processing": "Updating", + "desc": "Are you sure you want to update {{artifact}} {{version}}?", + "title": "Update {{name}}" + } + }, + "PluginListIndex": { + "no_plugin": "No plugins installed!", + "plugin_actions": "Plugin Actions", + "reinstall": "Reinstall", + "reload": "Reload", + "uninstall": "Uninstall", + "update_to": "Update to {{name}}" + }, + "PluginLoader": { + "decky_title": "Decky", + "decky_update_available": "Update to {{tag_name}} available!", + "error": "Error", + "plugin_error_uninstall": "Please go to {{-icon}} in the Decky menu if you need to uninstall this plugin.", + "plugin_load_error": { + "message": "Error loading plugin {{name}}", + "toast": "Error loading {{name}}" + }, + "plugin_uninstall": { + "button": "Uninstall", + "desc": "Are you sure you want to uninstall {{name}}?", + "title": "Uninstall {{name}}" + }, + "plugin_update_one": "Updates available for 1 plugin!", + "plugin_update_other": "Updates available for {{count}} plugins!" + }, + "RemoteDebugging": { + "remote_cef": { + "desc": "Allow unauthenticated access to the CEF debugger to anyone in your network", + "label": "Allow Remote CEF Debugging" + } + }, + "SettingsDeveloperIndex": { + "header_other": "Other", + "react_devtools": { + "desc": "Enables connection to a computer running React DevTools. Changing this setting will reload Steam. Set the IP address before enabling.", + "ip_label": "IP", + "label": "Enable React DevTools" + }, + "third_party_plugins": { + "button_install": "Install", + "button_zip": "Browse", + "header": "Third-Party Plugins", + "label_desc": "URL", + "label_url": "Install Plugin from URL", + "label_zip": "Install Plugin from ZIP File" + }, + "toast_zip": { + "body": "Installation failed! Only ZIP files are supported.", + "title": "Decky" + }, + "valve_internal": { + "desc1": "Enables the Valve internal developer menu.", + "desc2": "Do not touch anything in this menu unless you know what it does.", + "label": "Enable Valve Internal" + } + }, + "SettingsGeneralIndex": { + "about": { + "decky_version": "Decky Version", + "header": "About" + }, + "beta": { + "header": "Beta participation" + }, + "developer_mode": { + "desc": "Enables Decky's developer settings.", + "label": "Developer mode" + }, + "other": { + "header": "Other" + }, + "updates": { + "header": "Updates" + } + }, + "SettingsIndex": { + "developer_title": "Developer", + "general_title": "General", + "navbar_settings": "Decky Settings", + "plugins_title": "Plugins" + }, + "Store": { + "store_contrib": { + "desc": "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.", + "label": "Contributing" + }, + "store_filter": { + "label": "Filter", + "label_def": "All" + }, + "store_search": { + "label": "Search" + }, + "store_sort": { + "label": "Sort", + "label_def": "Last Updated (Newest)" + }, + "store_source": { + "desc": "All plugin source code is available on SteamDeckHomebrew/decky-plugin-database repository on GitHub.", + "label": "Source Code" + }, + "store_tabs": { + "about": "About", + "alph_asce": "Alphabetical (Z to A)", + "alph_desc": "Alphabetical (A to Z)", + "title": "Browse" + }, + "store_testing_cta": "Please consider testing new plugins to help the Decky Loader team!" + }, + "StoreSelect": { + "custom_store": { + "label": "Custom Store", + "url_label": "URL" + }, + "store_channel": { + "custom": "Custom", + "default": "Default", + "label": "Store Channel", + "testing": "Testing" + } + }, + "Updater": { + "decky_updates": "Decky Updates", + "no_patch_notes_desc": "no patch notes for this version", + "patch_notes_desc": "Patch Notes", + "updates": { + "check_button": "Check For Updates", + "checking": "'Checking", + "cur_version": "Current version: {{ver}}", + "install_button": "Install Update", + "label": "Updates", + "lat_version": "Up to date: running {{ver}}", + "reloading": "Reloading", + "updating": "Updating" + } + } +} diff --git a/backend/locales/it-IT.json b/backend/locales/it-IT.json new file mode 100644 index 00000000..e6f6625c --- /dev/null +++ b/backend/locales/it-IT.json @@ -0,0 +1,184 @@ +{ + "BranchSelect": { + "update_channel": { + "label": "Canale di aggiornamento", + "prerelease": "Prerilascio", + "stable": "Stabile", + "testing": "In prova" + } + }, + "Developer": { + "5secreload": "Ricaricando in 5 secondi", + "disabling": "Disabilitando", + "enabling": "Abilitando" + }, + "FilePickerIndex": { + "folder": { + "select": "Usa questa cartella" + } + }, + "PluginCard": { + "plugin_full_access": "Questo plugin ha accesso completo al tuo Steam Deck.", + "plugin_install": "Installa", + "plugin_no_desc": "Nessuna descrizione fornita.", + "plugin_version_label": "Versione Plugin" + }, + "PluginInstallModal": { + "install": { + "button_idle": "Installa", + "button_processing": "Installando", + "desc": "Sei sicuro di voler installare {{artifact}} {{version}}?", + "title": "Installa {{artifact}}" + }, + "no_hash": "Questo plugin non ha un hash associato, lo stai installando a tuo rischio e pericolo.", + "reinstall": { + "button_idle": "Reinstalla", + "button_processing": "Reinstallando", + "desc": "Sei sicuro di voler reinstallare {{artifact}} {{version}}?", + "title": "Reinstalla {{artifact}}" + }, + "update": { + "button_idle": "Aggiorna", + "button_processing": "Aggiornando", + "desc": "Sei sicuro di voler aggiornare {{artifact}} {{version}}?", + "title": "Aggiorna {{artifact}}" + } + }, + "PluginListIndex": { + "no_plugin": "Nessun plugin installato!", + "plugin_actions": "Operazioni sui plugins", + "reinstall": "Reinstalla", + "reload": "Ricarica", + "uninstall": "Rimuovi", + "update_to": "Aggiorna a {{name}}" + }, + "PluginLoader": { + "decky_title": "Decky", + "decky_update_available": "Disponibile aggiornamento a {{tag_name}}!", + "error": "Errore", + "plugin_error_uninstall": "Per rimuovere questo plugin vai su {{-icon}} nel menu di Decky.", + "plugin_load_error": { + "message": "Errore caricando il plugin {{name}}", + "toast": "Errore caricando {{name}}" + }, + "plugin_uninstall": { + "button": "Rimuovi", + "desc": "Sei sicuro di voler rimuovere {{name}}?", + "title": "Rimuovi {{name}}" + }, + "plugin_update_one": "Aggiornamento disponibile per un plugin!", + "plugin_update_many": "Aggiornamento disponibile per {{count}} plugins!", + "plugin_update_other": "Aggiornamento disponibile per {{count}} plugins!" + }, + "RemoteDebugging": { + "remote_cef": { + "desc": "Permetti l'accesso non autenticato al debugger di CEF da tutti gli indirizzi sulla tua rete locale.", + "label": "Permetti il debug remoto di CEF" + } + }, + "SettingsDeveloperIndex": { + "header_other": "Altro", + "react_devtools": { + "desc": "Abilita la connessione ad un computer che esegue i DevTools di React. Cambiando questa impostazione ricaricherà Steam. Imposta l'indirizzo IP prima di abilitarlo.", + "ip_label": "IP", + "label": "Abilita i DevTools di React" + }, + "third_party_plugins": { + "button_install": "Installa", + "button_zip": "Seleziona", + "header": "Plugin di terze parti", + "label_desc": "URL", + "label_url": "Installa plugin da un'indirizzo web", + "label_zip": "Installa plugin da un file ZIP" + }, + "toast_zip": { + "body": "Installazione non riuscita, solo i file ZIP sono supportati!", + "title": "Decky" + }, + "valve_internal": { + "desc1": "Abilita il menu di sviluppo interno di Valve.", + "desc2": "Non toccare nulla in questo menu se non sai quello che fa.", + "label": "Abilita Menu Sviluppatore" + } + }, + "SettingsGeneralIndex": { + "about": { + "decky_version": "Versione di Decky", + "header": "Riguardo a" + }, + "beta": { + "header": "Partecipazione alla beta" + }, + "developer_mode": { + "desc": "Abilità le impostazioni di sviluppo di Decky.", + "label": "Modalità sviluppatore" + }, + "other": { + "header": "Altro" + }, + "updates": { + "header": "Aggiornamenti" + } + }, + "SettingsIndex": { + "developer_title": "Sviluppatore", + "general_title": "Generali", + "navbar_settings": "Impostazioni Decky", + "plugins_title": "Plugins" + }, + "Store": { + "store_contrib": { + "desc": "Se desideri contribuire allo store di Decky, puoi trovare un template caricato su GitHub all'indirizzo SteamDeckHomebrew/decky-plugin-template. Informazioni riguardo sviluppo e distribuzione sono disponibili nel README.", + "label": "Contribuisci" + }, + "store_filter": { + "label": "Filtra", + "label_def": "Tutto" + }, + "store_search": { + "label": "Cerca" + }, + "store_sort": { + "label": "Ordina", + "label_def": "Ultimo aggiornato (Più recente)" + }, + "store_source": { + "desc": "Tutto il codice sorgente dei plugin è disponibile su GitHub all'indirizzo SteamDeckHomebrew/decky-plugin-database", + "label": "Codice Sorgente" + }, + "store_tabs": { + "about": "Riguardo a", + "alph_asce": "Alfabetico (Z a A)", + "alph_desc": "Alfabetico (A a Z)", + "title": "Sfoglia" + }, + "store_testing_cta": "Valuta la possibilità di testare nuovi plugin per aiutare il team di Decky Loader!" + }, + "StoreSelect": { + "custom_store": { + "label": "Negozio custom", + "url_label": "URL" + }, + "store_channel": { + "custom": "Personalizzato", + "default": "Default", + "label": "Canale del negozio", + "testing": "In prova" + } + }, + "Updater": { + "decky_updates": "Aggiornamento di Decky", + "no_patch_notes_desc": "nessuna patch notes per questa versione", + "patch_notes_desc": "Cambiamenti", + "updates": { + "check_button": "Cerca aggiornamenti", + "checking": "Controllando", + "cur_version": "Versione attuale: {{ver}}", + "install_button": "Installa aggiornamento", + "label": "Aggiornamenti", + "lat_version": "Aggiornato. Eseguendo {{ver}}", + "reloading": "Ricaricando", + "updating": "Aggiornando" + } + } +} diff --git a/backend/utilities.py b/backend/utilities.py index 4abb16dc..d3db51c9 100644 --- a/backend/utilities.py +++ b/backend/utilities.py @@ -61,12 +61,13 @@ class Utilities: res["success"] = False return web.json_response(res) - async def install_plugin(self, artifact="", name="No name", version="dev", hash=False): + async def install_plugin(self, artifact="", name="No name", version="dev", hash=False, install_type=0): return await self.context.plugin_browser.request_plugin_install( artifact=artifact, name=name, version=version, - hash=hash + hash=hash, + install_type=install_type ) async def confirm_plugin_install(self, request_id): |
