From 56a8892c12be9587ee647215b749dd70f7ccb37b Mon Sep 17 00:00:00 2001 From: _Neo_ Date: Mon, 23 Mar 2026 17:05:40 +0200 Subject: [PATCH] General changes Pt.1 --- assets/Locales.md | 10 +- assets/Locales/Firmware.json | 529 ++++++++++++++++++ assets/Locales/Keys.json | 329 +++++++++++ src/Ryujinx/Systems/AppHost.cs | 8 +- src/Ryujinx/UI/Helpers/UserErrorDialog.cs | 12 +- .../UI/ViewModels/MainWindowViewModel.cs | 46 +- .../UI/Views/Main/MainMenuBarView.axaml | 12 +- .../UI/Views/Main/MainStatusBarView.axaml | 2 +- 8 files changed, 907 insertions(+), 41 deletions(-) create mode 100644 assets/Locales/Firmware.json create mode 100644 assets/Locales/Keys.json diff --git a/assets/Locales.md b/assets/Locales.md index 39b7e4d46..7968c5b72 100644 --- a/assets/Locales.md +++ b/assets/Locales.md @@ -6,7 +6,7 @@ Each json file holds the locales for a specific part of the emulator, e.g. the S ## Languages in the `/assets/` folder you will find the `Languages.json` file, which defines all the languages supported by the emulator. -The file includes a table of the langauge codes and their langauge names. +The file includes a table of the language codes and their language names. #Example of the format for Languages.json { @@ -38,12 +38,12 @@ If no json file exists for the specific part of the emulator you're working on, { "Locales": [ { - "ID": "MenuBarActionsOpenMiiEditor", + "ID": "SettingsTabInputDirectMouseAccess", "Translations": { - "ar_SA": "", - "en_US": "Mii Editor", + "ar_SA": "الوصول المباشر للفأرة", + "en_US": "Direct Mouse Access", ... - "zh_TW": "Mii 編輯器" + "zh_TW": "滑鼠直接存取" } }, { diff --git a/assets/Locales/Firmware.json b/assets/Locales/Firmware.json new file mode 100644 index 000000000..0990b4da4 --- /dev/null +++ b/assets/Locales/Firmware.json @@ -0,0 +1,529 @@ +{ + "Locales": [ + { + "ID": "MenuBarActions_Install", + "Translations": { + "ar_SA": "تثبيت البرنامج الثابت", + "de_DE": "Firmware installieren", + "el_GR": "Εγκατάσταση Firmware", + "en_US": "Install Firmware", + "es_ES": "Instalar Firmware", + "fr_FR": "Installer le Firmware", + "he_IL": "התקן קושחה", + "it_IT": "Installa firmware", + "ja_JP": "ファームウェアをインストール", + "ko_KR": "펌웨어 설치", + "no_NO": "Installer fastvare", + "pl_PL": "Zainstaluj oprogramowanie", + "pt_BR": "Instalar Firmware", + "ru_RU": "Установить прошивку", + "sv_SE": "Installera firmware", + "th_TH": "ติดตั้งเฟิร์มแวร์", + "tr_TR": "Yazılım Yükle", + "uk_UA": "Встановити прошивку", + "zh_CN": "安装系统固件", + "zh_TW": "安裝韌體" + } + }, + { + "ID": "MenuBarActions_InstallFromFile", + "Translations": { + "ar_SA": ".XCI أو .ZIP", + "de_DE": ".XCI oder .ZIP", + "el_GR": ".XCI ή .ZIP", + "en_US": ".XCI or .ZIP", + "es_ES": ".XCI o .ZIP", + "fr_FR": ".XCI ou .ZIP", + "he_IL": ".XCI או .ZIP", + "it_IT": ".XCI o .ZIP", + "ja_JP": ".XCI または .ZIP", + "ko_KR": ".XCI 또는 .ZIP", + "no_NO": ".XCI eller .ZIP", + "pl_PL": ".XCI lub .ZIP", + "pt_BR": ".XCI ou .ZIP", + "ru_RU": ".XCI или .ZIP", + "sv_SE": ".XCI eller .ZIP", + "th_TH": ".XCI หรือ .ZIP", + "tr_TR": ".XCI veya .ZIP", + "uk_UA": ".XCI або .ZIP", + "zh_CN": ".XCI 或 .ZIP", + "zh_TW": ".XCI 或 .ZIP" + } + }, + { + "ID": "MenuBarActions_InstallFromDirectory", + "Translations": { + "ar_SA": "مجلد", + "de_DE": "Verzeichnis", + "el_GR": "Φάκελος", + "en_US": "Folder", + "es_ES": "Carpeta", + "fr_FR": "Dossier", + "he_IL": "תיקייה", + "it_IT": "Cartella", + "ja_JP": "フォルダー", + "ko_KR": "폴더", + "no_NO": "Mappe", + "pl_PL": "Katalog", + "pt_BR": "Diretório", + "ru_RU": "Папка", + "sv_SE": "Katalog", + "th_TH": "โฟลเดอร์", + "tr_TR": "Klasör", + "uk_UA": "Тека", + "zh_CN": "文件夹", + "zh_TW": "資料夾" + } + }, + { + "ID": "InstallFromFile_DialogTitle", + "Translations": { + "ar_SA": "اختر ملف ‎.XCI‎ أو أرشيف ‎.ZIP‎ لتثبيت البرنامج الثابت منه", + "de_DE": "Wählen Sie eine .XCI-Datei oder ein .ZIP-Archiv aus, um die Firmware zu installieren", + "el_GR": "Επιλέξτε ένα αρχείο .XCI ή ένα αρχείο .ZIP για να εγκαταστήσετε το υλικολογισμικό", + "en_US": "Choose an .XCI file or a .ZIP archive to install firmware from", + "es_ES": "Elige un archivo .XCI o un archivo .ZIP para instalar el firmware", + "fr_FR": "Choisissez un fichier .XCI ou une archive .ZIP pour installer le firmware", + "he_IL": "בחר קובץ ‎.XCI‎ או ארכיון ‎.ZIP‎ להתקנת הקושחה ממנו", + "it_IT": "Scegli un file .XCI o un archivio .ZIP per installare il firmware", + "ja_JP": "ファームウェアをインストールするために .XCI ファイルまたは .ZIP アーカイブを選択", + "ko_KR": "펌웨어를 설치할 .XCI 파일 또는 .ZIP 아카이브를 선택하세요", + "no_NO": "Velg en .XCI-fil eller et .ZIP-arkiv for å installere firmware fra", + "pl_PL": "Wybierz plik .XCI lub archiwum .ZIP, z którego chcesz zainstalować firmware", + "pt_BR": "Escolha um arquivo .XCI ou um arquivo .ZIP para instalar o firmware", + "ru_RU": "Выберите файл .XCI или архив .ZIP для установки прошивки", + "sv_SE": "Välj en .XCI-fil eller ett .ZIP-arkiv för att installera firmware", + "th_TH": "เลือกไฟล์ .XCI หรือไฟล์เก็บถาวร .ZIP เพื่อติดตั้งเฟิร์มแวร์จาก", + "tr_TR": "Firmware yüklemek için bir .XCI dosyası veya .ZIP arşivi seçin", + "uk_UA": "Виберіть файл .XCI або архів .ZIP для встановлення прошивки", + "zh_CN": "选择一个 .XCI 文件或 .ZIP 存档来安装固件", + "zh_TW": "選擇一個 .XCI 檔案或 .ZIP 封存檔來安裝韌體" + } + }, + { + "ID": "InstallFromFolder_DialogTitle", + "Translations": { + "ar_SA": "اختر مجلد لتثبيت الكوشحة منه", + "de_DE": "Wählen Sie einen ORDNER aus, um die Firmware zu installieren", + "el_GR": "Επιλέξτε έναν ΦΆΚΕΛΟ για να εγκαταστήσετε το firmware", + "en_US": "Choose a FOLDER to install firmware from", + "es_ES": "Elige una CARPETA para instalar el firmware", + "fr_FR": "Choisissez un DOSSIER pour installer le firmware", + "he_IL": "בחר תיקיה להתקנת הקושחה ממנה", + "it_IT": "Scegli una CARTELLA per installare il firmware", + "ja_JP": "ファームウェアをインストールするフォルダを選択", + "ko_KR": "펌웨어를 설치할 폴더를 선택하세요", + "no_NO": "Velg en MAPPE for å installere firmware fra", + "pl_PL": "Wybierz FOLDER, z którego chcesz zainstalować firmware", + "pt_BR": "Escolha uma PASTA para instalar o firmware", + "ru_RU": "Выберите ПАПКУ для установки прошивки", + "sv_SE": "Välj en MAPP för att installera firmware från", + "th_TH": "เลือกโฟลเดอร์เพื่อติดตั้งเฟิร์มแวร์จากนั้น", + "tr_TR": "Firmware yüklemek için bir KLASÖR seçin", + "uk_UA": "Виберіть ПАПКУ для встановлення прошивки", + "zh_CN": "选择一个文件夹来安装固件", + "zh_TW": "選擇一個資料夾來安裝韌體" + } + }, + { + "ID": "StatusBar_Version", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Firmware Version: {0}", + "es_ES": "Versión del Firmware: {0}", + "fr_FR": "Version du Firmware : {0}", + "he_IL": "", + "it_IT": "Versione firmware: {0}", + "ja_JP": "", + "ko_KR": "펌웨어 버전 : {0}", + "no_NO": "Fastvareversjon: {0}", + "pl_PL": "", + "pt_BR": "Versão do Firmware: {0}", + "ru_RU": "Версия прошивки: {0}", + "sv_SE": "Firmware-version: {0}", + "th_TH": "เวอร์ชันเฟิร์มแวร์: {0}", + "tr_TR": "", + "uk_UA": "Версія прошивки: {0}", + "zh_CN": "系统固件版本:{0}", + "zh_TW": "系統韌體版本: {0}" + } + }, + { + "ID": "DialogInstall_EmbeddedMessage", + "Translations": { + "ar_SA": "هل ترغب في تثبيت البرنامج الثابت المدمج في هذه اللعبة؟ (البرنامج الثابت {0})", + "de_DE": "Die in diesem Spiel enthaltene Firmware installieren? (Firmware {0})", + "el_GR": "Θα θέλατε να εγκαταστήσετε το Firmware που είναι ενσωματωμένο σε αυτό το παιχνίδι; (Firmware {0})", + "en_US": "Would you like to install the firmware embedded in this game? (Firmware {0})", + "es_ES": "¿Quieres instalar el firmware incluido en este juego? (Firmware versión {0})", + "fr_FR": "Voulez-vous installer le firmware intégré dans ce jeu ? (Firmware {0})", + "he_IL": "האם תרצו להתקין את הקושחה המוטמעת במשחק הזה? (קושחה {0})", + "it_IT": "Vuoi installare il firmware incluso in questo gioco? (Firmware {0})", + "ja_JP": "このゲームに含まれるファームウェアをインストールしてよろしいですか? (ファームウェア {0})", + "ko_KR": "이 게임에 포함된 펌웨어를 설치하시겠습니까?(Firmware {0})", + "no_NO": "Ønsker du å installere fastvaren innebygd i dette spillet? (Firmware {0})", + "pl_PL": "Czy chcesz zainstalować firmware wbudowany w tę grę? (Firmware {0})", + "pt_BR": "Gostaria de instalar o firmware incluso neste jogo? (Firmware {0})", + "ru_RU": "Хотите установить прошивку, встроенную в эту игру? (Прошивка {0})", + "sv_SE": "Vill du installera det firmware som är inbäddat i detta spel? (Firmware {0})", + "th_TH": "คุณต้องการติดตั้งเฟิร์มแวร์ที่ฝังอยู่ในเกมนี้หรือไม่? (เฟิร์มแวร์ {0})", + "tr_TR": "Bu oyunun içine gömülü olan yazılımı yüklemek ister misiniz? (Firmware {0})", + "uk_UA": "Бажаєте встановити прошивку, вбудовану в цю гру? (Прошивка {0})", + "zh_CN": "要安装游戏文件中内嵌的系统固件吗?(固件版本 {0})", + "zh_TW": "您想安裝遊戲內建的韌體嗎? (韌體 {0})" + } + }, + { + "ID": "DialogInstall_EmbeddedMessage_Success", + "Translations": { + "ar_SA": "لم يتم العثور على أي برنامج ثابت مثبت ولكن ريوجينكس كان قادرا على تثبيت البرنامج الثابت {0} من اللعبة المقدمة.\nسيبدأ المحاكي الآن.", + "de_DE": "Es wurde keine installierte Firmware gefunden, aber Ryujinx konnte die Firmware {0} aus dem bereitgestellten Spiel installieren.\nRyujinx wird nun gestartet.", + "el_GR": "Δεν βρέθηκε εγκατεστημένο υλικολογισμικό, αλλά το Ryujinx κατάφερε να εγκαταστήσει το υλικολογισμικό {0} από το παρεχόμενο παιχνίδι.\nΟ προσομοιωτής θα ξεκινήσει τώρα.", + "en_US": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "es_ES": "No se encontró ningún firmware instalado, pero Ryujinx pudo instalar el firmware {0} del juego proporcionado.\nEl emulador iniciará.", + "fr_FR": "Aucun firmware installé n'a été trouvé mais Ryujinx a pu installer le firmware {0} à partir du jeu fourni.\nL'émulateur va maintenant démarrer.", + "he_IL": "לא נמצאה קושחה מותקנת אבל ריוג'ינקס הצליח להתקין קושחה {0} מהמשחק שסופק. \nהאמולטור יופעל כעת.", + "it_IT": "Non è stato trovato alcun firmware installato, ma Ryujinx è riuscito ad installare il firmware {0} dal gioco fornito.\nL'emulatore si avvierà adesso.", + "ja_JP": "ファームウェアがインストールされていませんが, ゲームに含まれるファームウェア {0} をインストールできます.\nエミュレータが開始します.", + "ko_KR": "설치된 펌웨어를 찾을 수 없지만 Ryujinx는 제공된 게임에서 펌웨어 {0}을(를) 설치할 수 있습니다.\n이제 에뮬레이터가 시작됩니다.", + "no_NO": "Det ble ikke funnet noen installert fastvare, men Ryujinx kunne installere fastvare {0} fra det oppgitte spillet.\nemulatoren vil nå starte.", + "pl_PL": "Nie znaleziono zainstalowanego oprogramowania, ale Ryujinx był w stanie zainstalować oprogramowanie {0} z dostarczonej gry.\n\nEmulator uruchomi się teraz.", + "pt_BR": "Nenhum firmware instalado foi encontrado, mas o Ryujinx conseguiu instalar o firmware {0} a partir do jogo fornecido.\nO emulador será iniciado agora.", + "ru_RU": "Установленной прошивки не было найдено, но Ryujinx удалось установить прошивку {0} из предоставленной игры.\nТеперь запустится эмулятор.", + "sv_SE": "Inget installerat firmware hittades men Ryujinx kunde installera firmware {0} från angiven spel.\nEmulatorn kommer nu att startas.", + "th_TH": "ไม่พบเฟิร์มแวร์ที่ติดตั้งไว้ แต่ Ryujinx จะติดตั้งเฟิร์มแวร์ได้ {0} จากเกมที่ให้มา\nขณะนี้โปรแกรมจำลองจะเริ่มทำงาน", + "tr_TR": "Yüklü bir firmware bulunamadı, ancak Ryujinx sağlanan oyundan firmware {0} yüklemeyi başardı.\nEmülatör şimdi başlatılacak.", + "uk_UA": "Встановлену прошивку не знайдено, але Ryujinx вдалося встановити прошивку {0} з наданої гри.\nТепер запуститься емулятор.", + "zh_CN": "Ryujinx 模拟器已经从当前游戏文件中安装了系统固件 {0} 。\n模拟器现在可以正常运行了。", + "zh_TW": "未找到已安裝的韌體,但 Ryujinx 可以從現有的遊戲安裝韌體{0}。\n模擬器現在可以執行。" + } + }, + { + "ID": "DialogInstall_NoFirmwareInstalledMessage", + "Translations": { + "ar_SA": "لا يوجد برنامج ثابت مثبت", + "de_DE": "Keine Firmware installiert", + "el_GR": "Δεν έχει εγκατασταθεί Firmware", + "en_US": "No Firmware Installed", + "es_ES": "No hay Firmware Instalado", + "fr_FR": "Aucun Firmware Installé", + "he_IL": "לא מותקנת קושחה", + "it_IT": "Nessun firmware installato", + "ja_JP": "ファームウェアがインストールされていません", + "ko_KR": "펌웨어가 설치되어 있지 않음", + "no_NO": "Ingen fastvare installert", + "pl_PL": "Brak Zainstalowanego Firmware'u", + "pt_BR": "Nenhum Firmware Instalado", + "ru_RU": "Прошивка не установлена", + "sv_SE": "Inget firmware installerat", + "th_TH": "ไม่มีการติดตั้งเฟิร์มแวร์", + "tr_TR": "Yazılım Yüklü Değil", + "uk_UA": "Прошивка не встановлена", + "zh_CN": "未安装系统固件", + "zh_TW": "未安裝韌體" + } + }, + { + "ID": "DialogInstall_InstalledMessage", + "Translations": { + "ar_SA": "تم تثبيت البرنامج الثابت {0}", + "de_DE": "Firmware {0} wurde installiert", + "el_GR": "Το Firmware {0} εγκαταστάθηκε", + "en_US": "Firmware {0} was installed", + "es_ES": "Se Instaló el Firmware {0}", + "fr_FR": "Le firmware {0} a été installé", + "he_IL": "הקושחה {0} הותקנה", + "it_IT": "Il firmware {0} è stato installato", + "ja_JP": "ファームウェア {0} がインストールされました", + "ko_KR": "펌웨어 {0}이(가) 설치됨", + "no_NO": "fastvare {0} ble installert", + "pl_PL": "Firmware {0} został zainstalowany", + "pt_BR": "Firmware {0} foi instalado", + "ru_RU": "Прошивка {0} была установлена", + "sv_SE": "Firmware {0} installerades", + "th_TH": "เฟิร์มแวร์ {0} ติดตั้งแล้ว", + "tr_TR": "Yazılım {0} yüklendi", + "uk_UA": "Встановлено прошивку {0}", + "zh_CN": "已安装系统固件 {0}", + "zh_TW": "已安裝韌體{0}" + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwareNotFoundErrorMessage", + "Translations": { + "ar_SA": "لم يتم العثور على برنامج ثابت للنظام صالح في {0}.", + "de_DE": "Es wurde keine gültige System-Firmware gefunden in {0}.", + "el_GR": "Δεν βρέθηκε έγκυρο Firmware συστήματος στο {0}.", + "en_US": "A valid system firmware was not found in {0}.", + "es_ES": "No se pudo encontrar un firmware válido en {0}.", + "fr_FR": "Un firmware valide n'a pas été trouvé dans {0}.", + "he_IL": "לא נמצאה קושחת מערכת תקפה ב-{0}.", + "it_IT": "Un firmware del sistema valido non è stato trovato in {0}.", + "ja_JP": "{0} には有効なシステムファームウェアがありません.", + "ko_KR": "{0}에서 유효한 시스템 펌웨어를 찾을 수 없습니다.", + "no_NO": "En gyldig systemfastvare ble ikke funnet i {0}.", + "pl_PL": "Nie znaleziono prawidłowego firmware'u systemowego w {0}.", + "pt_BR": "Um firmware de sistema válido não foi encontrado em {0}.", + "ru_RU": "Не удалось найти действительную системную прошивку в {0}.", + "sv_SE": "Ett giltigt systemfirmware hittades inte i {0}.", + "th_TH": "ไม่พบเฟิร์มแวร์ของระบบที่ถูกต้อง {0}.", + "tr_TR": "{0} da geçerli bir sistem firmware'i bulunamadı.", + "uk_UA": "Дійсна прошивка системи не знайдена в {0}.", + "zh_CN": "在路径 {0} 中找不到有效的 Switch 系统固件。", + "zh_TW": "在 {0} 中未發現有效的系統韌體。" + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwareInstallTitle", + "Translations": { + "ar_SA": "تثبيت البرنامج الثابت {0}", + "de_DE": "Installiere Firmware {0}", + "el_GR": "Εγκατάσταση Firmware {0}", + "en_US": "Install Firmware {0}", + "es_ES": "Instalar Firmware {0}", + "fr_FR": "Installer le Firmware {0}", + "he_IL": "התקן קושחה {0}", + "it_IT": "Installa firmware {0}", + "ja_JP": "ファームウェア {0} をインストール", + "ko_KR": "펌웨어 {0} 설치", + "no_NO": "Installer fastvare {0}", + "pl_PL": "Zainstaluj Firmware {0}", + "pt_BR": "Instalar Firmware {0}", + "ru_RU": "Установить прошивку {0}", + "sv_SE": "Installera firmware {0}", + "th_TH": "ติดตั้งเฟิร์มแวร์ {0}", + "tr_TR": "Firmware {0} Yükle", + "uk_UA": "Встановити прошивку {0}", + "zh_CN": "安装系统固件 {0}", + "zh_TW": "安裝韌體 {0}" + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwareInstallMessage", + "Translations": { + "ar_SA": "سيتم تثبيت إصدار النظام {0}.", + "de_DE": "Systemversion {0} wird jetzt installiert.", + "el_GR": "Θα εγκατασταθεί η έκδοση συστήματος {0}.", + "en_US": "System version {0} will be installed.", + "es_ES": "Se instalará la versión de sistema {0}.", + "fr_FR": "La version {0} du système sera installée.", + "he_IL": "גירסת המערכת {0} תותקן.", + "it_IT": "La versione del sistema {0} sarà installata.", + "ja_JP": "システムバージョン {0} がインストールされます.", + "ko_KR": "시스템 버전 {0}이(가) 설치됩니다.", + "no_NO": "Systemversjon {0} vil bli installert.", + "pl_PL": "Wersja systemu {0} zostanie zainstalowana.", + "pt_BR": "A versão do sistema {0} será instalada.", + "ru_RU": "Будет установлена версия прошивки {0}.", + "sv_SE": "Systemversion {0} kommer att installeras.", + "th_TH": "ระบบเวอร์ชั่น {0} ได้รับการติดตั้งเร็วๆ นี้", + "tr_TR": "Sistem sürümü {0} yüklenecek.", + "uk_UA": "Буде встановлено версію системи {0}.", + "zh_CN": "即将安装系统固件版本 {0} 。", + "zh_TW": "即將安裝系統韌體版本 {0}。" + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwareInstallSubMessage", + "Translations": { + "ar_SA": "\n\nهذا سيحل محل إصدار النظام الحالي {0}.", + "de_DE": "\n\nDies wird die aktuelle Systemversion {0} ersetzen.", + "el_GR": "\n\nΑυτό θα αντικαταστήσει την τρέχουσα έκδοση συστήματος {0}.", + "en_US": "\n\nThis will replace the current system version {0}.", + "es_ES": "\n\nEsto reemplazará la versión de sistema actual, {0}.", + "fr_FR": "\n\nCela remplacera la version actuelle du système {0}.", + "he_IL": "\n\nזה יחליף את גרסת המערכת הנוכחית {0}.", + "it_IT": "\n\nQuesta sostituirà l'attuale versione del sistema ({0}).", + "ja_JP": "\n\n現在のシステムバージョン {0} を置き換えます.", + "ko_KR": "\n\n현재 시스템 버전 {0}을(를) 대체합니다.", + "no_NO": "\n\nDette erstatter den gjeldende systemversjonen {0}.", + "pl_PL": "\n\nZastąpi to obecną wersję systemu {0}.", + "pt_BR": "\n\nIsso substituirá a versão do sistema atual {0}.", + "ru_RU": "\n\nЭто заменит текущую версию прошивки {0}.", + "sv_SE": "\n\nDetta kommer att ersätta aktuella systemversionen {0}.", + "th_TH": "\n\nสิ่งนี้จะแทนที่เวอร์ชั่นของระบบเวอร์ชั่นปัจจุบัน {0}.", + "tr_TR": "\n\nBu şimdiki sistem sürümünün yerini alacak {0}.", + "uk_UA": "\n\nЦе замінить поточну версію системи {0}.", + "zh_CN": "\n\n替换当前系统固件版本 {0} 。", + "zh_TW": "\n\n這將取代目前的系統韌體版本 {0}。" + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwaresInstallConfirmMessage", + "Translations": { + "ar_SA": "\nهل تريد المتابعة؟", + "de_DE": "\n\nMöchtest du fortfahren?", + "el_GR": "\n\nΘέλετε να συνεχίσετε;", + "en_US": "\n\nDo you want to continue?", + "es_ES": "\n\n¿Continuar?", + "fr_FR": "\n\nVoulez-vous continuer ?", + "he_IL": "\n\nהאם ברצונך להמשיך?", + "it_IT": "\n\nVuoi continuare?", + "ja_JP": "\n\n続けてよろしいですか?", + "ko_KR": "\n\n계속하시겠습니까?", + "no_NO": "\n\nVil du fortsette?", + "pl_PL": "\n\nCzy chcesz kontynuować?", + "pt_BR": "\n\nDeseja continuar?", + "ru_RU": "\n\nПродолжить?", + "sv_SE": "\n\nVill du fortsätta?", + "th_TH": "\n\nคุณต้องการดำเนินการต่อหรือไม่?", + "tr_TR": "\n\nDevam etmek istiyor musunuz?", + "uk_UA": "\n\nВи хочете продовжити?", + "zh_CN": "\n\n是否继续?", + "zh_TW": "\n\n您確定要繼續嗎?" + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwareInstallWaitMessage", + "Translations": { + "ar_SA": "تثبيت البرنامج الثابت...", + "de_DE": "Firmware wird installiert...", + "el_GR": "Εγκατάσταση Firmware...", + "en_US": "Installing Firmware...", + "es_ES": "Instalando Firmware...", + "fr_FR": "Installation du Firmware...", + "he_IL": "מתקין קושחה...", + "it_IT": "Installazione del firmware...", + "ja_JP": "ファームウェアをインストール中...", + "ko_KR": "펌웨어 설치 중...", + "no_NO": "Installerer fastvare...", + "pl_PL": "Instalowanie firmware'u...", + "pt_BR": "Instalando firmware...", + "ru_RU": "Установка прошивки...", + "sv_SE": "Installerar firmware...", + "th_TH": "กำลังติดตั้งเฟิร์มแวร์...", + "tr_TR": "Firmware yükleniyor...", + "uk_UA": "Встановлення прошивки...", + "zh_CN": "安装系统固件中...", + "zh_TW": "正在安裝韌體..." + } + }, + { + "ID": "DialogFirmwareInstaller_FirmwareInstallSuccessMessage", + "Translations": { + "ar_SA": "تم تثبيت إصدار النظام {0} بنجاح.", + "de_DE": "Systemversion {0} wurde erfolgreich installiert.", + "el_GR": "Η έκδοση συστήματος {0} εγκαταστάθηκε με επιτυχία.", + "en_US": "System version {0} successfully installed.", + "es_ES": "Versión de sistema {0} instalada con éxito.", + "fr_FR": "Version du système {0} installée avec succès.", + "he_IL": "גרסת המערכת {0} הותקנה בהצלחה.", + "it_IT": "La versione del sistema {0} è stata installata.", + "ja_JP": "システムバージョン {0} が正常にインストールされました.", + "ko_KR": "시스템 버전 {0}이(가) 설치되었습니다.", + "no_NO": "Systemversjon {0} ble installert.", + "pl_PL": "Wersja systemu {0} została pomyślnie zainstalowana.", + "pt_BR": "Versão do sistema {0} instalada com sucesso.", + "ru_RU": "Прошивка версии {0} успешно установлена.", + "sv_SE": "Systemversion {0} har installerats.", + "th_TH": "ระบบเวอร์ชั่น {0} ติดตั้งเรียบร้อยแล้ว", + "tr_TR": "Sistem sürümü {0} başarıyla yüklendi.", + "uk_UA": "Версію системи {0} успішно встановлено.", + "zh_CN": "成功安装系统固件版本 {0} 。", + "zh_TW": "成功安裝系統韌體版本 {0}。" + } + }, + { + "ID": "UserError_NoFirmware", + "Translations": { + "ar_SA": "لم يتم العثور على البرنامج الثابت", + "de_DE": "Firmware nicht gefunden", + "el_GR": "Το firmware δε βρέθηκε", + "en_US": "Firmware not found", + "es_ES": "No se encontró Firmware", + "fr_FR": "Firmware introuvable", + "he_IL": "קושחה לא נמצאה", + "it_IT": "Firmware non trovato", + "ja_JP": "ファームウェアがありません", + "ko_KR": "펌웨어를 찾을 수 없음", + "no_NO": "Fastvare ikke funnet", + "pl_PL": "Nie znaleziono firmware'u", + "pt_BR": "Firmware não encontrado", + "ru_RU": "Прошивка не найдена", + "sv_SE": "Firmware hittades inte", + "th_TH": "ไม่พบ เฟิร์มแวร์", + "tr_TR": "Firmware bulunamadı", + "uk_UA": "Прошивка не знайдена", + "zh_CN": "未安装系统固件", + "zh_TW": "找不到韌體" + } + }, + { + "ID": "UserError_NoFirmware_Description", + "Translations": { + "ar_SA": "لم يتمكن ريوجينكس من العثور على أية برامج ثابتة مثبتة", + "de_DE": "Ryujinx konnte keine installierte Firmware finden!", + "el_GR": "Το Ryujinx δεν κατάφερε να εντοπίσει κανένα εγκατεστημένο firmware", + "en_US": "Ryujinx was unable to find any firmwares installed", + "es_ES": "Ryujinx no pudo encontrar un firmware instalado.", + "fr_FR": "Ryujinx n'a pas trouvé de firmware installé", + "he_IL": "ריוג'ינקס לא הצליחה למצוא קושחה מותקנת", + "it_IT": "Ryujinx non è riuscito a trovare alcun firmware installato", + "ja_JP": "インストールされたファームウェアが見つかりませんでした", + "ko_KR": "Ryujinx가 설치된 펌웨어를 찾을 수 없음", + "no_NO": "Ryujinx kunne ikke finne noen fastvare installert", + "pl_PL": "Ryujinx nie mógł znaleźć żadnego zainstalowanego firmware'u", + "pt_BR": "Ryujinx não conseguiu encontrar nenhum Firmware instalado", + "ru_RU": "Ryujinx не удалось найти ни одной установленной прошивки", + "sv_SE": "Ryujinx kunde inte hitta några installerade firmwares", + "th_TH": "Ryujinx ไม่พบ เฟิร์มแวร์ที่ติดตั้งไว้ในเครื่องของคุณ", + "tr_TR": "Ryujinx yüklü herhangi firmware bulamadı", + "uk_UA": "Ryujinx не вдалося знайти жодної встановленої прошивки", + "zh_CN": "Ryujinx 模拟器未安装 Switch 系统固件", + "zh_TW": "Ryujinx 無法找到已安裝的任何韌體" + } + }, + { + "ID": "UserError_FirmwareParsingFailed", + "Translations": { + "ar_SA": "خطأ في تحليل البرنامج الثابت", + "de_DE": "Firmware-Analysierung-Fehler", + "el_GR": "Σφάλμα ανάλυσης firmware", + "en_US": "Firmware parsing error", + "es_ES": "Error al analizar el Firmware", + "fr_FR": "Erreur d'analyse du firmware", + "he_IL": "שגיאת ניתוח קושחה", + "it_IT": "Errore di analisi del firmware", + "ja_JP": "ファームウェアのパーズエラー", + "ko_KR": "펌웨어 구문 분석 오류", + "no_NO": "Fastvare analysefeil", + "pl_PL": "Błąd parsowania firmware'u", + "pt_BR": "Erro de análise de firmware", + "ru_RU": "Ошибка извлечения прошивки", + "sv_SE": "Tolkningsfel i firmware", + "th_TH": "เกิดข้อผิดพลาดในการวิเคราะห์เฟิร์มแวร์", + "tr_TR": "Firmware çözümleme hatası", + "uk_UA": "Помилка аналізу прошивки", + "zh_CN": "固件文件解析出错", + "zh_TW": "韌體解析錯誤" + } + }, + { + "ID": "UserError_FirmwareParsingFailed_Description", + "Translations": { + "ar_SA": "لم يتمكن ريوجينكس من تحليل البرامج الثابتة المتوفرة. يحدث هذا عادة بسبب المفاتيح القديمة.", + "de_DE": "Ryujinx konnte die zu verfügung gestellte Firmware nicht analysieren. Ein möglicher Grund dafür sind veraltete keys.", + "el_GR": "Το Ryujinx δεν κατάφερε να αναλύσει το συγκεκριμένο firmware. Αυτό συνήθως οφείλετε σε ξεπερασμένα/παλιά κλειδιά.", + "en_US": "Ryujinx was unable to parse the provided firmware. This is usually caused by outdated keys.", + "es_ES": "Ryujinx no pudo analizar el firmware. Normalmente esto ocurre debido a keys desfasadas.", + "fr_FR": "Ryujinx n'a pas pu analyser le firmware fourni. Cela est généralement dû à des clés obsolètes.", + "he_IL": "ריוג'ינקס לא הצליחה לנתח את הקושחה שסופקה. זה נגרם בדרך כלל על ידי מפתחות לא עדכניים.", + "it_IT": "Ryujinx non è riuscito ad analizzare il firmware. Questo di solito è causato da chiavi non aggiornate.", + "ja_JP": "ファームウェアをパーズできませんでした.通常,古いキーが原因です.", + "ko_KR": "Ryujinx가 제공된 펌웨어를 구문 분석하지 못했습니다. 일반적으로 오래된 키로 인해 발생합니다.", + "no_NO": "Ryujinx klarte ikke å analysere levert fastvare. Dette er vanligvis forårsaket av utdaterte nøkler.", + "pl_PL": "Ryujinx nie był w stanie zparsować dostarczonego firmware'u. Jest to zwykle spowodowane nieaktualnymi kluczami.", + "pt_BR": "Ryujinx não conseguiu ler o Firmware fornecido. Geralmente isso é causado por chaves desatualizadas.", + "ru_RU": "Ryujinx не удалось распаковать выбранную прошивку. Обычно это вызвано устаревшими ключами.", + "sv_SE": "Ryujinx kunde inte tolka angiven firmware. Detta sker oftast med utdaterade nycklar.", + "th_TH": "Ryujinx ไม่สามารถวิเคราะห์เฟิร์มแวร์ที่ให้มาได้ ซึ่งมักมีสาเหตุมาจากคีย์ที่เก่าจนเกินไป", + "tr_TR": "Ryujinx temin edilen firmware'i çözümleyemedi. Bu durum genellikle güncel olmayan keys'den kaynaklanır.", + "uk_UA": "Ryujinx не вдалося проаналізувати прошивку. Зазвичай це спричинено застарілими ключами.", + "zh_CN": "Ryujinx 模拟器无法解密当前固件,一般是由于使用了旧版的密钥导致的。", + "zh_TW": "Ryujinx 無法解析所提供的韌體。這通常是由於金鑰過時造成的。" + } + } + ] +} diff --git a/assets/Locales/Keys.json b/assets/Locales/Keys.json new file mode 100644 index 000000000..9a7daf8b3 --- /dev/null +++ b/assets/Locales/Keys.json @@ -0,0 +1,329 @@ +{ + "Locales": [ + { + "ID": "MenuBarActions_Install", + "Translations": { + "ar_SA": "تثبيت المفاتيح", + "de_DE": "Schlüssel installieren", + "el_GR": "Εγκατάσταση Κλειδιών", + "en_US": "Install Keys", + "es_ES": "Instalar Claves", + "fr_FR": "Installer des Clés", + "he_IL": "התקנת מפתחות", + "it_IT": "Installa chiavi", + "ja_JP": "キーをインストール", + "ko_KR": "설치 키", + "no_NO": "Installere nøkler", + "pl_PL": "Zainstaluj klucze", + "pt_BR": "Instalar Chaves", + "ru_RU": "Установить ключи", + "sv_SE": "Installera nycklar", + "th_TH": "ติดตั้ง Keys", + "tr_TR": "Anahtarları Yükle", + "uk_UA": "Встановити Ключі", + "zh_CN": "安装密匙", + "zh_TW": "安裝金鑰" + } + }, + { + "ID": "MenuBarActions_InstallFromKeys", + "Translations": { + "ar_SA": null, + "de_DE": null, + "el_GR": null, + "en_US": ".KEYS", + "es_ES": null, + "fr_FR": null, + "he_IL": null, + "it_IT": null, + "ja_JP": null, + "ko_KR": null, + "no_NO": null, + "pl_PL": null, + "pt_BR": null, + "ru_RU": null, + "sv_SE": null, + "th_TH": null, + "tr_TR": null, + "uk_UA": null, + "zh_CN": null, + "zh_TW": null + } + }, + { + "ID": "MenuBarFileActions_InstallFromFolder", + "Translations": { + "ar_SA": "مجلد", + "de_DE": "Verzeichnis", + "el_GR": "Φάκελος", + "en_US": "Folder", + "es_ES": "Carpeta", + "fr_FR": "Dossier", + "he_IL": "תיקיה", + "it_IT": "Cartella", + "ja_JP": "フォルダ", + "ko_KR": "폴더", + "no_NO": "Mappe", + "pl_PL": "Folder", + "pt_BR": "Diretório", + "ru_RU": "Папка", + "sv_SE": "Katalog", + "th_TH": "ไดเรกทอรี", + "tr_TR": "Klasör", + "uk_UA": "Тека", + "zh_CN": "文件夹", + "zh_TW": "資料夾" + } + }, + { + "ID": "InstallFromFile_DialogTitle", + "Translations": { + "ar_SA": "اختر ملف .KEYS", + "de_DE": "Wählen Sie eine .KEYS-Datei aus", + "el_GR": "Επιλέξτε ένα αρχείο .KEYS", + "en_US": "Choose a .KEYS file", + "es_ES": "Elige un archivo .KEYS", + "fr_FR": "Choisissez un fichier .KEYS", + "he_IL": "בחר קובץ .KEYS", + "it_IT": "Scegli un file .KEYS", + "ja_JP": ".KEYS ファイルを選択", + "ko_KR": ".KEYS 파일을 선택하세요", + "no_NO": "Velg en .KEYS-fil", + "pl_PL": "Wybierz plik .KEYS", + "pt_BR": "Escolha um arquivo .KEYS", + "ru_RU": "Выберите файл .KEYS", + "sv_SE": "Välj en .KEYS-fil", + "th_TH": "เลือกไฟล์ .KEYS", + "tr_TR": ".KEYS dosyasını seçin", + "uk_UA": "Виберіть файл .KEYS", + "zh_CN": "选择一个 .KEYS 文件", + "zh_TW": "選擇一個 .KEYS 檔案" + } + }, + { + "ID": "InstallFromFolder_DialogTitle", + "Translations": { + "ar_SA": "اختر مجلد لتثبيت المفاتيح منه", + "de_DE": "Wählen Sie einen ORDNER aus, um die Schlüssel zu installieren", + "el_GR": "Επιλέξτε έναν ΦΆΚΕΛΟ για να εγκαταστήσετε τα κλειδιά", + "en_US": "Choose a FOLDER to install keys from", + "es_ES": "Elige una CARPETA para instalar las claves", + "fr_FR": "Choisissez un DOSSIER pour installer les clés", + "he_IL": "בחר תיקיה להתקנת המפתחות ממנו", + "it_IT": "Scegli una CARTELLA per installare le chiavi", + "ja_JP": "フォルダを選択してキーをインストール", + "ko_KR": "폴더를 선택하여 키를 설치하세요", + "no_NO": "Velg en MAPPE for å installere nøklene fra", + "pl_PL": "Wybierz FOLDER, aby zainstalować klucze", + "pt_BR": "Escolha uma PASTA para instalar as chaves", + "ru_RU": "Выберите ПАПКУ для установки ключей", + "sv_SE": "Välj en MAPP för att installera nycklar från", + "th_TH": "เลือกโฟลเดอร์เพื่อติดตั้งคีย์จาก", + "tr_TR": "KLASÖR seçin ve anahtarları yükleyin", + "uk_UA": "Виберіть ПАПКУ для встановлення ключів", + "zh_CN": "选择一个文件夹来安装密钥", + "zh_TW": "選擇一個資料夾來安裝密鑰" + } + }, + { + "ID": "DialogKeysInstaller_InstallConfirmMessage", + "Translations": { + "ar_SA": "\nهل تريد المتابعة؟", + "de_DE": "\n\nMöchtest du fortfahren?", + "el_GR": "\n\nΘέλετε να συνεχίσετε;", + "en_US": "\n\nDo you want to continue?", + "es_ES": "\n\n¿Continuar?", + "fr_FR": "\n\nVoulez-vous continuer ?", + "he_IL": "\n\nהאם ברצונך להמשיך?", + "it_IT": "\n\nVuoi continuare?", + "ja_JP": "\n\n続けてよろしいですか?", + "ko_KR": "\n\n계속하시겠습니까?", + "no_NO": "\n\nVil du fortsette?", + "pl_PL": "\n\nCzy chcesz kontynuować?", + "pt_BR": "\n\nDeseja continuar?", + "ru_RU": "\n\nПродолжить?", + "sv_SE": "\n\nVill du fortsätta?", + "th_TH": "\n\nคุณต้องการดำเนินการต่อหรือไม่?", + "tr_TR": "\n\nDevam etmek istiyor musunuz?", + "uk_UA": "\n\nВи хочете продовжити?", + "zh_CN": "\n\n是否继续?", + "zh_TW": "\n\n您確定要繼續嗎?" + } + }, + { + "ID": "DialogKeysInstaller_KeysNotFoundErrorMessage", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "An invalid Keys file was found in {0}", + "es_ES": "Se halló un archivo Keys inválido en {0}", + "fr_FR": "Un fichier de Clés invalide a été trouvé dans {0}", + "he_IL": "", + "it_IT": "È stato trovato un file di chiavi non valido in {0}", + "ja_JP": "", + "ko_KR": "{0}에서 잘못된 키 파일이 발견", + "no_NO": "En ugyldig Keys-fil ble funnet i {0}.", + "pl_PL": "", + "pt_BR": "Um arquivo Chaves inválido foi encontrado em {0}", + "ru_RU": "В {0} найден некорректный файл ключей", + "sv_SE": "En ogiltig nyckelfil hittades i {0}", + "th_TH": "พบไฟล์ Keys ที่ไม่ถูกต้องใน {0}", + "tr_TR": "", + "uk_UA": "Виявлено неправильний файл ключів у теці {0}", + "zh_CN": "在 {0} 发现了一个无效的密匙文件", + "zh_TW": "找到無效的金鑰檔案 {0}" + } + }, + { + "ID": "DialogKeysInstaller_KeysInstallMessage", + "Translations": { + "ar_SA": "سيتم تثبيت ملف مفاتيح جديد.", + "de_DE": "Eine neue Schlüsseldatei wird installiert.", + "el_GR": "Ένα νέο αρχείο Κλειδιών θα εγκατασταθεί.", + "en_US": "New Keys file will be installed.", + "es_ES": "Un nuevo archivo de Claves será instalado.", + "fr_FR": "Nouveau fichier de Clés sera installé.", + "he_IL": "קובץ מפתחות חדש יותקן.", + "it_IT": "Un nuovo file di chiavi sarà installato.", + "ja_JP": "新しいキー ファイルがインストールされます。", + "ko_KR": "새로운 키 파일이 설치됩니다.", + "no_NO": "Ny Keys-fil vil bli installert.", + "pl_PL": "Nowy plik kluczy zostanie zainstalowany.", + "pt_BR": "O novo arquivo Chaves será instalado.", + "ru_RU": "Будут установлены новые ключи.", + "sv_SE": "Ny nyckelfil kommer att installeras.", + "th_TH": "กำลังติดตั้งไฟล์ Keys ใหม่", + "tr_TR": "Yeni anahtar dosyası yüklenecek.", + "uk_UA": "Новий файл Ключів буде встановлено.", + "zh_CN": "将会安装新密匙文件。", + "zh_TW": "將會安裝新增的金鑰檔案。" + } + }, + { + "ID": "DialogKeysInstaller_KeysInstallSubMessage", + "Translations": { + "ar_SA": "\n\nقد يحل هذا محل بعض المفاتيح المثبتة حاليًا.", + "de_DE": "\n\nDies könnte einige der derzeit installierten Schlüssel ersetzen.", + "el_GR": "\n\nΑυτό μπορεί να αντικαταστήσει μερικά από τα τρέχοντα εγκατεστημένα κλειδιά.", + "en_US": "\n\nThis may replace some of the current installed Keys.", + "es_ES": "\n\nEsto puede reemplazar algunas de las Keys actualmente instaladas.", + "fr_FR": "\n\nCela peut remplacer certaines des Clés actuellement installées.", + "he_IL": "\n\nזה עשוי להחליף חלק מהמפתחות המותקנים הנוכחיים.", + "it_IT": "\n\nAlcune delle chiavi già installate potrebbero essere sovrascritte.", + "ja_JP": "\n\nこれにより、現在インストールされているキーの一部が置き換えられる場合があります。", + "ko_KR": "\n\n이로 인해 현재 설치된 키 중 일부가 대체될 수 있습니다.", + "no_NO": "\n\nDette kan erstatte noen av de nåværende installerte nøklene.", + "pl_PL": "\n\nTo może zastąpić niektóre z aktualnie zainstalowanych kluczy.", + "pt_BR": "\n\nIsso pode substituir algumas das chaves instaladas atualmente.", + "ru_RU": "\n\nЭто может заменить некоторые из текущих установленных ключей.", + "sv_SE": "\n\nDetta kan ersätta några av de redan installerade nycklarna.", + "th_TH": "\n\nสิ่งนี้อาจทำให้ไฟล์ Keys บางส่วนที่ติดตั้งอยู่ถูกแทนที่", + "tr_TR": "\n\nBu, şu anda kurulu olan anahtarların bazılarının yerine geçebilir.", + "uk_UA": "\n\nЦе замінить собою поточні файли Ключів.", + "zh_CN": "\n\n这也许会替换掉一些当前已安装的密匙", + "zh_TW": "\n\n這將取代部分已安裝的金鑰。" + } + }, + { + "ID": "DialogKeysInstaller_KeysInstallWaitMessage", + "Translations": { + "ar_SA": "جارٍ تثبيت المفاتيح...", + "de_DE": "Schlüssel werden installiert...", + "el_GR": "Εγκατάσταση κλειδιών...", + "en_US": "Installing Keys...", + "es_ES": "Instalando Claves...", + "fr_FR": "Installation des Clés...", + "he_IL": "מתקין מפתחות...", + "it_IT": "Installazione delle chiavi...", + "ja_JP": "キーをインストールしています...", + "ko_KR": "키 설치 중...", + "no_NO": "Installere nøkler...", + "pl_PL": "Instalowanie kluczy...", + "pt_BR": "Instalando Chaves...", + "ru_RU": "Установка ключей...", + "sv_SE": "Installerar nycklar...", + "th_TH": "กำลังดำเนินการติดตั้ง Keys...", + "tr_TR": "Anahtarlar yükleniyor...", + "uk_UA": "Встановлення Ключів...", + "zh_CN": "安装密匙中。。。", + "zh_TW": "正在安裝金鑰..." + } + }, + { + "ID": "DialogKeysInstaller_KeysInstallSuccessMessage", + "Translations": { + "ar_SA": "تم تثبيت ملف المفاتيح الجديد بنجاح.", + "de_DE": "Neue Schlüsseldatei erfolgreich installiert.", + "el_GR": "Το νέο αρχείο Κλειδιών εγκαταστάθηκε με επιτυχία.", + "en_US": "New Keys file successfully installed.", + "es_ES": "Nuevo archivo Keys instalado con éxito.", + "fr_FR": "Nouveau fichier de Clés a été installé.", + "he_IL": "הקובץ החדש של המפתחות הותקן בהצלחה.", + "it_IT": "Nuovo file di chiavi installato con successo.", + "ja_JP": "新しいキー ファイルが正常にインストールされました。", + "ko_KR": "새로운 키 파일이 성공적으로 설치되었습니다.", + "no_NO": "Ny Keys -fil installert.", + "pl_PL": "Nowy plik kluczy został pomyślnie zainstalowany.", + "pt_BR": "Novo arquivo de chaves instalado com sucesso.", + "ru_RU": "Новые ключи успешно установлены.", + "sv_SE": "Ny nyckelfil installerades.", + "th_TH": "การติดตั้งไฟล์ Keys ใหม่เสร็จสมบูรณ์แล้ว", + "tr_TR": "Yeni anahtar dosyası başarıyla yüklendi.", + "uk_UA": "Нові ключі встановлено.", + "zh_CN": "已成功安装新密匙文件", + "zh_TW": "成功安裝新增的金鑰檔案。" + } + }, + { + "ID": "UserError_NoKeys", + "Translations": { + "ar_SA": "المفاتيح غير موجودة", + "de_DE": "Keys nicht gefunden", + "el_GR": "Τα κλειδιά δεν βρέθηκαν", + "en_US": "Keys not found", + "es_ES": "No se encontraron claves", + "fr_FR": "Clés non trouvées", + "he_IL": "המפתחות לא נמצאו", + "it_IT": "Chiavi non trovate", + "ja_JP": "Keys がありません", + "ko_KR": "키를 찾을 수 없음", + "no_NO": "Finner ikke nøkler", + "pl_PL": "Nie znaleziono kluczy", + "pt_BR": "Chaves não encontradas", + "ru_RU": "Ключи не найдены", + "sv_SE": "Nycklarna hittades inte", + "th_TH": "ไม่พบ คีย์", + "tr_TR": "Keys bulunamadı", + "uk_UA": "Ключі не знайдено", + "zh_CN": "找不到密钥Keys", + "zh_TW": "找不到金鑰" + } + }, + { + "ID": "UserError_NoKeys_Description", + "Translations": { + "ar_SA": "لم يتمكن ريوجينكس من العثور على ملف 'prod.keys' الخاص بك", + "de_DE": "Ryujinx konnte deine 'prod.keys' Datei nicht finden", + "el_GR": "Το Ryujinx δεν κατάφερε να εντοπίσει το αρχείο 'prod.keys'", + "en_US": "Ryujinx was unable to find your 'prod.keys' file", + "es_ES": "Ryujinx no pudo encontrar tus 'prod.keys'.", + "fr_FR": "Ryujinx n'a pas pu trouver votre fichier 'prod.keys'", + "he_IL": "ריוג'ינקס לא הצליח למצוא את קובץ ה-'prod.keys' שלך", + "it_IT": "Ryujinx non è riuscito a trovare il file 'prod.keys'", + "ja_JP": "'prod.keys' が見つかりませんでした", + "ko_KR": "Ryujinx가 'prod.keys' 파일을 찾지 못함", + "no_NO": "Ryujinx kunne ikke finne 'prod.keys' filen din", + "pl_PL": "Ryujinx nie mógł znaleźć twojego pliku 'prod.keys'", + "pt_BR": "Ryujinx não conseguiu encontrar o seu arquivo 'prod.keys'", + "ru_RU": "Ryujinx не удалось найти ваш 'prod.keys' файл", + "sv_SE": "Ryujinx kunde inte hitta din 'prod.keys'-fil", + "th_TH": "Ryujinx ไม่พบไฟล์ 'prod.keys' ในเครื่องของคุณ", + "tr_TR": "Ryujinx 'prod.keys' dosyasını bulamadı", + "uk_UA": "Ryujinx не вдалося знайти ваш файл «prod.keys».", + "zh_CN": "Ryujinx 模拟器找不到“prod.keys”密钥文件", + "zh_TW": "Ryujinx 無法找到您的「prod.keys」檔案" + } + } + ] +} diff --git a/src/Ryujinx/Systems/AppHost.cs b/src/Ryujinx/Systems/AppHost.cs index 4b1e9cdb5..5e30333c8 100644 --- a/src/Ryujinx/Systems/AppHost.cs +++ b/src/Ryujinx/Systems/AppHost.cs @@ -704,8 +704,8 @@ namespace Ryujinx.Ava.Systems if (userError is UserError.NoFirmware) { UserResult result = await ContentDialogHelper.CreateConfirmationDialog( - LocaleManager.Instance[LocaleKeys.DialogFirmwareNoFirmwareInstalledMessage], - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogFirmwareInstallEmbeddedMessage, firmwareVersion.VersionString), + LocaleManager.Instance[LocaleKeys.Firmware_DialogInstall_NoFirmwareInstalledMessage], + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Firmware_DialogInstall_EmbeddedMessage, firmwareVersion.VersionString), LocaleManager.Instance[LocaleKeys.InputDialogYes], LocaleManager.Instance[LocaleKeys.InputDialogNo], string.Empty); @@ -735,8 +735,8 @@ namespace Ryujinx.Ava.Systems _viewModel.RefreshFirmwareStatus(); await ContentDialogHelper.CreateInfoDialog( - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogFirmwareInstalledMessage, firmwareVersion.VersionString), - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogFirmwareInstallEmbeddedSuccessMessage, firmwareVersion.VersionString), + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Firmware_DialogInstall_InstalledMessage, firmwareVersion.VersionString), + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Firmware_DialogInstall_EmbeddedMessage_Success, firmwareVersion.VersionString), LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, LocaleManager.Instance[LocaleKeys.RyujinxInfo]); diff --git a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs index c30fb4348..837791eda 100644 --- a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs +++ b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs @@ -14,9 +14,9 @@ namespace Ryujinx.Ava.UI.Helpers private static string GetErrorTitle(UserError error) => error switch { - UserError.NoKeys => LocaleManager.Instance[LocaleKeys.UserErrorNoKeys], - UserError.NoFirmware => LocaleManager.Instance[LocaleKeys.UserErrorNoFirmware], - UserError.FirmwareParsingFailed => LocaleManager.Instance[LocaleKeys.UserErrorFirmwareParsingFailed], + UserError.NoKeys => LocaleManager.Instance[LocaleKeys.Keys_UserError_NoKeys], + UserError.NoFirmware => LocaleManager.Instance[LocaleKeys.Firmware_UserError_NoFirmware], + UserError.FirmwareParsingFailed => LocaleManager.Instance[LocaleKeys.Firmware_UserError_FirmwareParsingFailed], UserError.ApplicationNotFound => LocaleManager.Instance[LocaleKeys.UserErrorApplicationNotFound], UserError.Unknown => LocaleManager.Instance[LocaleKeys.UserErrorUnknown], _ => LocaleManager.Instance[LocaleKeys.UserErrorUndefined], @@ -25,9 +25,9 @@ namespace Ryujinx.Ava.UI.Helpers private static string GetErrorDescription(UserError error) => error switch { - UserError.NoKeys => LocaleManager.Instance[LocaleKeys.UserErrorNoKeysDescription], - UserError.NoFirmware => LocaleManager.Instance[LocaleKeys.UserErrorNoFirmwareDescription], - UserError.FirmwareParsingFailed => LocaleManager.Instance[LocaleKeys.UserErrorFirmwareParsingFailedDescription], + UserError.NoKeys => LocaleManager.Instance[LocaleKeys.Keys_UserError_NoKeys_Description], + UserError.NoFirmware => LocaleManager.Instance[LocaleKeys.Firmware_UserError_NoFirmware_Description], + UserError.FirmwareParsingFailed => LocaleManager.Instance[LocaleKeys.Firmware_UserError_FirmwareParsingFailed_Description], UserError.ApplicationNotFound => LocaleManager.Instance[LocaleKeys.UserErrorApplicationNotFoundDescription], UserError.Unknown => LocaleManager.Instance[LocaleKeys.UserErrorUnknownDescription], _ => LocaleManager.Instance[LocaleKeys.UserErrorUndefinedDescription], diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index ae84a15a2..3e28107a2 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -941,25 +941,25 @@ namespace Ryujinx.Ava.UI.ViewModels { await ContentDialogHelper.CreateErrorDialog( LocaleManager.Instance.UpdateAndGetDynamicValue( - LocaleKeys.DialogFirmwareInstallerFirmwareNotFoundErrorMessage, filename)); + LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareNotFoundErrorMessage, filename)); return; } string dialogTitle = LocaleManager.Instance.UpdateAndGetDynamicValue( - LocaleKeys.DialogFirmwareInstallerFirmwareInstallTitle, firmwareVersion.VersionString); + LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareInstallTitle, firmwareVersion.VersionString); string dialogMessage = LocaleManager.Instance.UpdateAndGetDynamicValue( - LocaleKeys.DialogFirmwareInstallerFirmwareInstallMessage, firmwareVersion.VersionString); + LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareInstallMessage, firmwareVersion.VersionString); SystemVersion currentVersion = ContentManager.GetCurrentFirmwareVersion(); if (currentVersion != null) { dialogMessage += LocaleManager.Instance.UpdateAndGetDynamicValue( - LocaleKeys.DialogFirmwareInstallerFirmwareInstallSubMessage, currentVersion.VersionString); + LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareInstallSubMessage, currentVersion.VersionString); } dialogMessage += - LocaleManager.Instance[LocaleKeys.DialogFirmwareInstallerFirmwareInstallConfirmMessage]; + LocaleManager.Instance[LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwaresInstallConfirmMessage]; UserResult result = await ContentDialogHelper.CreateConfirmationDialog( dialogTitle, @@ -969,7 +969,7 @@ namespace Ryujinx.Ava.UI.ViewModels LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); UpdateWaitWindow waitingDialog = new(dialogTitle, - LocaleManager.Instance[LocaleKeys.DialogFirmwareInstallerFirmwareInstallWaitMessage]); + LocaleManager.Instance[LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareInstallWaitMessage]); if (result == UserResult.Yes) { @@ -991,7 +991,7 @@ namespace Ryujinx.Ava.UI.ViewModels waitingDialog.Close(); string message = LocaleManager.Instance.UpdateAndGetDynamicValue( - LocaleKeys.DialogFirmwareInstallerFirmwareInstallSuccessMessage, + LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareInstallSuccessMessage, firmwareVersion.VersionString); await ContentDialogHelper.CreateInfoDialog( @@ -1059,18 +1059,18 @@ namespace Ryujinx.Ava.UI.ViewModels } string dialogTitle = - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogKeysInstallerKeysInstallTitle); + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Keys_MenuBarActions_Install); string dialogMessage = - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogKeysInstallerKeysInstallMessage); + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Keys_DialogKeysInstaller_KeysInstallMessage); if (ContentManager.AreKeysAlreadyPresent(systemDirectory)) { dialogMessage += LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys - .DialogKeysInstallerKeysInstallSubMessage); + .Keys_DialogKeysInstaller_KeysInstallSubMessage); } - dialogMessage += LocaleManager.Instance[LocaleKeys.DialogKeysInstallerKeysInstallConfirmMessage]; + dialogMessage += LocaleManager.Instance[LocaleKeys.Keys_DialogKeysInstaller_InstallConfirmMessage]; UserResult result = await ContentDialogHelper.CreateConfirmationDialog( dialogTitle, @@ -1080,7 +1080,7 @@ namespace Ryujinx.Ava.UI.ViewModels LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); UpdateWaitWindow waitingDialog = new(dialogTitle, - LocaleManager.Instance[LocaleKeys.DialogKeysInstallerKeysInstallWaitMessage]); + LocaleManager.Instance[LocaleKeys.Keys_DialogKeysInstaller_KeysInstallWaitMessage]); if (result == UserResult.Yes) { @@ -1103,7 +1103,7 @@ namespace Ryujinx.Ava.UI.ViewModels string message = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys - .DialogKeysInstallerKeysInstallSuccessMessage); + .Keys_DialogKeysInstaller_KeysInstallSuccessMessage); await ContentDialogHelper.CreateInfoDialog( dialogTitle, @@ -1125,7 +1125,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (ex is FormatException) { message = LocaleManager.Instance.UpdateAndGetDynamicValue( - LocaleKeys.DialogKeysInstallerKeysNotFoundErrorMessage, filename); + LocaleKeys.Keys_DialogKeysInstaller_KeysNotFoundErrorMessage, filename); } await ContentDialogHelper.CreateErrorDialog(message); @@ -1414,9 +1414,10 @@ namespace Ryujinx.Ava.UI.ViewModels { Optional result = await StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions { + Title = LocaleManager.Instance[LocaleKeys.Firmware_InstallFromFile_DialogTitle], FileTypeFilter = new List { - new(LocaleManager.Instance[LocaleKeys.FileDialogAllTypes]) + new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) { Patterns = ["*.xci", "*.zip"], AppleUniformTypeIdentifiers = ["com.ryujinx.xci", "public.zip-archive"], @@ -1445,7 +1446,10 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task InstallFirmwareFromFolder() { - Optional result = await StorageProvider.OpenSingleFolderPickerAsync(); + Optional result = await StorageProvider.OpenSingleFolderPickerAsync(new FolderPickerOpenOptions + { + Title = LocaleManager.Instance[LocaleKeys.Firmware_InstallFromFolder_DialogTitle] + }); if (result.HasValue) { @@ -1457,6 +1461,7 @@ namespace Ryujinx.Ava.UI.ViewModels { Optional result = await StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions { + Title = LocaleManager.Instance[LocaleKeys.Keys_InstallFromFile_DialogTitle], FileTypeFilter = new List { new("KEYS") @@ -1476,7 +1481,10 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task InstallKeysFromFolder() { - Optional result = await StorageProvider.OpenSingleFolderPickerAsync(); + Optional result = await StorageProvider.OpenSingleFolderPickerAsync(new FolderPickerOpenOptions + { + Title = LocaleManager.Instance[LocaleKeys.Keys_InstallFromFolder_DialogTitle] + }); if (result.HasValue) { @@ -1830,14 +1838,14 @@ namespace Ryujinx.Ava.UI.ViewModels if (version != null) { - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarSystemVersion, + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Firmware_StatusBar_Version, version.VersionString); hasApplet = version.Major > 3; } else { - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarSystemVersion, "NaN"); + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Firmware_StatusBar_Version, "NaN"); } IsAppletMenuActive = hasApplet; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 5e41017d8..ac18314cd 100755 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -248,13 +248,13 @@ IsEnabled="{Binding IsGameRunning}" /> - - - + + + - - - + + + diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml index 9c566a0bf..c6dd130d9 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml @@ -329,7 +329,7 @@ Margin="5, 0, 0, 0" HorizontalAlignment="Right" VerticalAlignment="Center" - Text="{ext:Locale StatusBarSystemVersion}" /> + Text="{ext:Locale Firmware_StatusBar_Version}" />