diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index b79a48d06..ec8a2aaac 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -11475,126 +11475,126 @@ { "ID": "DialogConfirmationTitle", "Translations": { - "ar_SA": "ريوجينكس - تأكيد", - "de_DE": "Ryujinx - Bestätigung", - "el_GR": "Ryujinx - Επιβεβαίωση", - "en_US": "Ryujinx - Confirmation", - "es_ES": "Ryujinx - Confirmación", + "ar_SA": "{0} - تأكيد", + "de_DE": "{0} - Bestätigung", + "el_GR": "{0} - Επιβεβαίωση", + "en_US": "{0} - Confirmation", + "es_ES": "{0} - Confirmación", "fr_FR": "", - "he_IL": "ריוג'ינקס - אישור", - "it_IT": "Ryujinx - Conferma", - "ja_JP": "Ryujinx - 確認", - "ko_KR": "Ryujinx - 확인", - "no_NO": "Ryujinx - Bekreftelse", - "pl_PL": "Ryujinx - Potwierdzenie", - "pt_BR": "Ryujinx - Confirmação", - "ru_RU": "Ryujinx - Подтверждение", - "sv_SE": "Ryujinx - Bekräftelse", - "th_TH": "Ryujinx - ยืนยัน", - "tr_TR": "Ryujinx - Onay", - "uk_UA": "Ryujinx - Підтвердження", - "zh_CN": "Ryujinx - 确认", - "zh_TW": "Ryujinx - 確認" + "he_IL": "{0} - אישור", + "it_IT": "{0} - Conferma", + "ja_JP": "{0} - 確認", + "ko_KR": "{0} - 확인", + "no_NO": "{0} - Bekreftelse", + "pl_PL": "{0} - Potwierdzenie", + "pt_BR": "{0} - Confirmação", + "ru_RU": "{0} - Подтверждение", + "sv_SE": "{0} - Bekräftelse", + "th_TH": "{0} - ยืนยัน", + "tr_TR": "{0} - Onay", + "uk_UA": "{0} - Підтвердження", + "zh_CN": "{0} - 确认", + "zh_TW": "{0} - 確認" } }, { "ID": "DialogUpdaterTitle", "Translations": { - "ar_SA": "ريوجينكس - المحدث", + "ar_SA": "{0} - المحدث", "de_DE": "", - "el_GR": "Ryujinx - Ενημερωτής", - "en_US": "Ryujinx - Updater", - "es_ES": "Ryujinx - Actualizador", - "fr_FR": "Ryujinx - Mise à Jour", - "he_IL": "ריוג'ינקס - מעדכן", - "it_IT": "Ryujinx - Aggiornamento", - "ja_JP": "Ryujinx - アップデータ", - "ko_KR": "Ryujinx - 업데이터", - "no_NO": "Ryujinx – Oppdaterer", - "pl_PL": "Ryujinx - Asystent aktualizacji", - "pt_BR": "Ryujinx - Atualizador", - "ru_RU": "Ryujinx - Обновление", - "sv_SE": "Ryujinx - Uppdatering", - "th_TH": "Ryujinx - อัพเดต", - "tr_TR": "Ryujinx - Güncelleyici", - "uk_UA": "Ryujinx - Програма оновлення", - "zh_CN": "Ryujinx - 更新", - "zh_TW": "Ryujinx - 更新程式" + "el_GR": "{0} - Ενημερωτής", + "en_US": "{0} - Updater", + "es_ES": "{0} - Actualizador", + "fr_FR": "{0} - Mise à Jour", + "he_IL": "{0} - מעדכן", + "it_IT": "{0} - Aggiornamento", + "ja_JP": "{0} - アップデータ", + "ko_KR": "{0} - 업데이터", + "no_NO": "{0} – Oppdaterer", + "pl_PL": "{0} - Asystent aktualizacji", + "pt_BR": "{0} - Atualizador", + "ru_RU": "{0} - Обновление", + "sv_SE": "{0} - Uppdatering", + "th_TH": "{0} - อัพเดต", + "tr_TR": "{0} - Güncelleyici", + "uk_UA": "{0} - Програма оновлення", + "zh_CN": "{0} - 更新", + "zh_TW": "{0} - 更新程式" } }, { "ID": "DialogErrorTitle", "Translations": { - "ar_SA": "ريوجينكس - خطأ", - "de_DE": "Ryujinx - Fehler", - "el_GR": "Ryujinx - Σφάλμα", - "en_US": "Ryujinx - Error", + "ar_SA": "{0} - خطأ", + "de_DE": "{0} - Fehler", + "el_GR": "{0} - Σφάλμα", + "en_US": "{0} - Error", "es_ES": "", - "fr_FR": "Ryujinx - Erreur", - "he_IL": "ריוג'ינקס - שגיאה", - "it_IT": "Ryujinx - Errore", - "ja_JP": "Ryujinx - エラー", - "ko_KR": "Ryujinx - 오류", - "no_NO": "Ryujinx - Feil", - "pl_PL": "Ryujinx - Błąd", - "pt_BR": "Ryujinx - Erro", - "ru_RU": "Ryujinx - Ошибка", - "sv_SE": "Ryujinx - Fel", - "th_TH": "Ryujinx - ผิดพลาด", - "tr_TR": "Ryujinx - Hata", - "uk_UA": "Ryujinx - Помилка", - "zh_CN": "Ryujinx - 错误", - "zh_TW": "Ryujinx - 錯誤" + "fr_FR": "{0} - Erreur", + "he_IL": "{0} - שגיאה", + "it_IT": "{0} - Errore", + "ja_JP": "{0} - エラー", + "ko_KR": "{0} - 오류", + "no_NO": "{0} - Feil", + "pl_PL": "{0} - Błąd", + "pt_BR": "{0} - Erro", + "ru_RU": "{0} - Ошибка", + "sv_SE": "{0} - Fel", + "th_TH": "{0} - ผิดพลาด", + "tr_TR": "{0} - Hata", + "uk_UA": "{0} - Помилка", + "zh_CN": "{0} - 错误", + "zh_TW": "{0} - 錯誤" } }, { "ID": "DialogWarningTitle", "Translations": { - "ar_SA": "ريوجينكس - تحذير", - "de_DE": "Ryujinx - Warnung", - "el_GR": "Ryujinx - Προειδοποίηση", - "en_US": "Ryujinx - Warning", - "es_ES": "Ryujinx - Advertencia", - "fr_FR": "Ryujinx - Avertissement", - "he_IL": "ריוג'ינקס - אזהרה", - "it_IT": "Ryujinx - Avviso", - "ja_JP": "Ryujinx - 警告", - "ko_KR": "Ryujinx - 경고", - "no_NO": "Ryujinx - Advarsel", - "pl_PL": "Ryujinx - Ostrzeżenie", - "pt_BR": "Ryujinx - Alerta", - "ru_RU": "Ryujinx - Предупреждение", - "sv_SE": "Ryujinx - Varning", - "th_TH": "Ryujinx - คำเตือน", - "tr_TR": "Ryujinx - Uyarı", - "uk_UA": "Ryujinx - Попередження", - "zh_CN": "Ryujinx - 警告", - "zh_TW": "Ryujinx - 警告" + "ar_SA": "{0} - تحذير", + "de_DE": "{0} - Warnung", + "el_GR": "{0} - Προειδοποίηση", + "en_US": "{0} - Warning", + "es_ES": "{0} - Advertencia", + "fr_FR": "{0} - Avertissement", + "he_IL": "{0} - אזהרה", + "it_IT": "{0} - Avviso", + "ja_JP": "{0} - 警告", + "ko_KR": "{0} - 경고", + "no_NO": "{0} - Advarsel", + "pl_PL": "{0} - Ostrzeżenie", + "pt_BR": "{0} - Alerta", + "ru_RU": "{0} - Предупреждение", + "sv_SE": "{0} - Varning", + "th_TH": "{0} - คำเตือน", + "tr_TR": "{0} - Uyarı", + "uk_UA": "{0} - Попередження", + "zh_CN": "{0} - 警告", + "zh_TW": "{0} - 警告" } }, { "ID": "DialogExitTitle", "Translations": { - "ar_SA": "ريوجينكس - الخروج", - "de_DE": "Ryujinx - Beenden", - "el_GR": "Ryujinx - Έξοδος", - "en_US": "Ryujinx - Exit", - "es_ES": "Ryujinx - Salir", - "fr_FR": "Ryujinx - Quitter", - "he_IL": "ריוג'ינקס - יציאה", - "it_IT": "Ryujinx - Esci", - "ja_JP": "Ryujinx - 終了", - "ko_KR": "Ryujinx - 종료", - "no_NO": "Ryujinx - Avslutt", - "pl_PL": "Ryujinx - Wyjdź", - "pt_BR": "Ryujinx - Sair", - "ru_RU": "Ryujinx - Выход", - "sv_SE": "Ryujinx - Avslut", - "th_TH": "Ryujinx - ออก", - "tr_TR": "Ryujinx - Çıkış", - "uk_UA": "Ryujinx - Вихід", - "zh_CN": "Ryujinx - 退出", - "zh_TW": "Ryujinx - 結束" + "ar_SA": "{0} - الخروج", + "de_DE": "{0} - Beenden", + "el_GR": "{0} - Έξοδος", + "en_US": "{0} - Exit", + "es_ES": "{0} - Salir", + "fr_FR": "{0} - Quitter", + "he_IL": "{0} - יציאה", + "it_IT": "{0} - Esci", + "ja_JP": "{0} - 終了", + "ko_KR": "{0} - 종료", + "no_NO": "{0} - Avslutt", + "pl_PL": "{0} - Wyjdź", + "pt_BR": "{0} - Sair", + "ru_RU": "{0} - Выход", + "sv_SE": "{0} - Avslut", + "th_TH": "{0} - ออก", + "tr_TR": "{0} - Çıkış", + "uk_UA": "{0} - Вихід", + "zh_CN": "{0} - 退出", + "zh_TW": "{0} - 結束" } }, { @@ -17025,26 +17025,26 @@ { "ID": "DialogStopEmulationTitle", "Translations": { - "ar_SA": "ريوجينكس - إيقاف المحاكاة", - "de_DE": "Ryujinx - Beende Emulation", - "el_GR": "Ryujinx - Διακοπή εξομοίωσης", - "en_US": "Ryujinx - Stop Emulation", - "es_ES": "Ryujinx - Detener emulación", - "fr_FR": "Ryujinx - Arrêt de l'émulation", - "he_IL": "ריוג'ינקס - עצור אמולציה", - "it_IT": "Ryujinx - Ferma emulazione", - "ja_JP": "Ryujinx - エミュレーションを中止", - "ko_KR": "Ryujinx - 에뮬레이션 중지", - "no_NO": "Ryujinx - Stopp emulasjon", - "pl_PL": "Ryujinx - Zatrzymaj Emulację", - "pt_BR": "Ryujinx - Parar emulação", - "ru_RU": "Ryujinx - Остановка эмуляции", - "sv_SE": "Ryujinx - Stoppa emulering", - "th_TH": "Ryujinx - หยุดการจำลอง", - "tr_TR": "Ryujinx - Emülasyonu Durdur", - "uk_UA": "Ryujinx - Зупинити емуляцію", - "zh_CN": "Ryujinx - 停止模拟", - "zh_TW": "Ryujinx - 停止模擬" + "ar_SA": "{0} - إيقاف المحاكاة", + "de_DE": "{0} - Beende Emulation", + "el_GR": "{0} - Διακοπή εξομοίωσης", + "en_US": "{0} - Stop Emulation", + "es_ES": "{0} - Detener emulación", + "fr_FR": "{0} - Arrêt de l'émulation", + "he_IL": "{0} - עצור אמולציה", + "it_IT": "{0} - Ferma emulazione", + "ja_JP": "{0} - エミュレーションを中止", + "ko_KR": "{0} - 에뮬레이션 중지", + "no_NO": "{0} - Stopp emulasjon", + "pl_PL": "{0} - Zatrzymaj Emulację", + "pt_BR": "{0} - Parar emulação", + "ru_RU": "{0} - Остановка эмуляции", + "sv_SE": "{0} - Stoppa emulering", + "th_TH": "{0} - หยุดการจำลอง", + "tr_TR": "{0} - Emülasyonu Durdur", + "uk_UA": "{0} - Зупинити емуляцію", + "zh_CN": "{0} - 停止模拟", + "zh_TW": "{0} - 停止模擬" } }, { @@ -17950,51 +17950,51 @@ { "ID": "RyujinxInfo", "Translations": { - "ar_SA": "ريوجينكس - معلومات", + "ar_SA": "{0} - معلومات", "de_DE": "", - "el_GR": "Ryujinx - Πληροφορίες", - "en_US": "Ryujinx - Info", + "el_GR": "{0} - Πληροφορίες", + "en_US": "{0} - Info", "es_ES": "", "fr_FR": "", - "he_IL": "ריוג'ינקס - מידע", - "it_IT": "Ryujinx - Informazioni", - "ja_JP": "Ryujinx - 情報", - "ko_KR": "Ryujinx - 정보", - "no_NO": "Ryujinx - Informasjon", + "he_IL": "{0} - מידע", + "it_IT": "{0} - Informazioni", + "ja_JP": "{0} - 情報", + "ko_KR": "{0} - 정보", + "no_NO": "{0} - Informasjon", "pl_PL": "", - "pt_BR": "Ryujinx - Informação", - "ru_RU": "Ryujinx - Информация", + "pt_BR": "{0} - Informação", + "ru_RU": "{0} - Информация", "sv_SE": "", - "th_TH": "Ryujinx – ข้อมูล", - "tr_TR": "Ryujinx - Bilgi", - "uk_UA": "Ryujin x - Інформація", - "zh_CN": "Ryujinx - 信息", - "zh_TW": "Ryujinx - 資訊" + "th_TH": "{0} – ข้อมูล", + "tr_TR": "{0} - Bilgi", + "uk_UA": "{0} - Інформація", + "zh_CN": "{0} - 信息", + "zh_TW": "{0} - 資訊" } }, { "ID": "RyujinxConfirm", "Translations": { - "ar_SA": "ريوجينكس - تأكيد", - "de_DE": "Ryujinx - Bestätigung", - "el_GR": "Ryujinx - Επιβεβαίωση", - "en_US": "Ryujinx - Confirmation", - "es_ES": "Ryujinx - Confirmación", + "ar_SA": "{0} - تأكيد", + "de_DE": "{0} - Bestätigung", + "el_GR": "{0} - Επιβεβαίωση", + "en_US": "{0} - Confirmation", + "es_ES": "{0} - Confirmación", "fr_FR": "", - "he_IL": "ריוג'ינקס - אישור", - "it_IT": "Ryujinx - Conferma", - "ja_JP": "Ryujinx - 確認", - "ko_KR": "Ryujinx - 확인", - "no_NO": "Ryujinx - Bekreftelse", - "pl_PL": "Ryujinx - Potwierdzenie", - "pt_BR": "Ryujinx - Confirmação", - "ru_RU": "Ryujinx - Подтверждение", - "sv_SE": "Ryujinx - Bekräfta", - "th_TH": "Ryujinx - ยืนยัน", - "tr_TR": "Ryujinx - Doğrulama", - "uk_UA": "Ryujinx - Підтвердження", - "zh_CN": "Ryujinx - 确认", - "zh_TW": "Ryujinx - 確認" + "he_IL": "{0} - אישור", + "it_IT": "{0} - Conferma", + "ja_JP": "{0} - 確認", + "ko_KR": "{0} - 확인", + "no_NO": "{0} - Bekreftelse", + "pl_PL": "{0} - Potwierdzenie", + "pt_BR": "{0} - Confirmação", + "ru_RU": "{0} - Подтверждение", + "sv_SE": "{0} - Bekräfta", + "th_TH": "{0} - ยืนยัน", + "tr_TR": "{0} - Doğrulama", + "uk_UA": "{0} - Підтвердження", + "zh_CN": "{0} - 确认", + "zh_TW": "{0} - 確認" } }, { @@ -18800,26 +18800,26 @@ { "ID": "RyujinxUpdater", "Translations": { - "ar_SA": "محدث ريوجينكس", - "de_DE": "Ryujinx - Updater", - "el_GR": "Ryujinx Ενημερωτής", - "en_US": "Ryujinx Updater", - "es_ES": "Actualizador de Ryujinx", - "fr_FR": "Mise à jour de Ryujinx", - "he_IL": "מעדכן ריוג'ינקס", - "it_IT": "Aggiornamento di Ryujinx", - "ja_JP": "Ryujinx アップデータ", - "ko_KR": "Ryujinx 업데이터", - "no_NO": "Ryujinx Oppgradering", - "pl_PL": "Aktualizator Ryujinx", - "pt_BR": "Atualizador do Ryujinx", - "ru_RU": "Ryujinx - Обновление", - "sv_SE": "Uppdaterare för Ryujinx", - "th_TH": "ตัวอัปเดต Ryujinx", - "tr_TR": "Ryujinx Güncelleyicisi", - "uk_UA": "Програма оновлення Ryujinx", - "zh_CN": "Ryujinx 更新", - "zh_TW": "Ryujinx 更新程式" + "ar_SA": "محدث {0}", + "de_DE": "", + "el_GR": "{0} Ενημερωτής", + "en_US": "{0} Updater", + "es_ES": "Actualizador de {0}", + "fr_FR": "Mise à jour de {0}", + "he_IL": "מעדכן {0}", + "it_IT": "Aggiornamento di {0}", + "ja_JP": "{0} アップデータ", + "ko_KR": "{0} 업데이터", + "no_NO": "{0} Oppgradering", + "pl_PL": "Aktualizator {0}", + "pt_BR": "Atualizador do {0}", + "ru_RU": "{0} Обновление", + "sv_SE": "Uppdaterare för {0}", + "th_TH": "ตัวอัปเดต {0}", + "tr_TR": "{0} Güncelleyicisi", + "uk_UA": "Програма оновлення {0}", + "zh_CN": "{0} 更新", + "zh_TW": "{0} 更新程式" } }, { diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index e3ff7c78c..4c86a6177 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -44,6 +44,16 @@ namespace Ryujinx.Ava.Common.Locale ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath); } + + SetDynamicValues(LocaleKeys.DialogConfirmationTitle, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.DialogUpdaterTitle, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.DialogErrorTitle, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.DialogWarningTitle, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.DialogExitTitle, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.DialogStopEmulationTitle, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.RyujinxInfo, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.RyujinxConfirm, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.RyujinxUpdater, RyujinxApp.FullAppName); } public string this[LocaleKeys key] @@ -88,11 +98,16 @@ namespace Ryujinx.Ava.Common.Locale public static string FormatDynamicValue(LocaleKeys key, params object[] values) => Instance.UpdateAndGetDynamicValue(key, values); - public string UpdateAndGetDynamicValue(LocaleKeys key, params object[] values) + public void SetDynamicValues(LocaleKeys key, params object[] values) { _dynamicValues[key] = values; OnPropertyChanged("Translation"); + } + + public string UpdateAndGetDynamicValue(LocaleKeys key, params object[] values) + { + SetDynamicValues(key, values); return this[key]; } diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index 95bc92c3d..be24315f6 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -22,12 +22,12 @@ namespace Ryujinx.Ava { public class RyujinxApp : Application { - internal static string FormatTitle(LocaleKeys? windowTitleKey = null) + internal static string FormatTitle(LocaleKeys? windowTitleKey = null, bool includeVersion = true) => windowTitleKey is null - ? $"{FullAppName} {Program.Version}" - : $"{FullAppName} {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}"; + ? $"{FullAppName}{(includeVersion ? $" {Program.Version}" : string.Empty)}" + : $"{FullAppName}{(includeVersion ? $" {Program.Version}" : string.Empty)} - {LocaleManager.Instance[windowTitleKey.Value]}"; - public static readonly string FullAppName = ReleaseInformation.IsCanaryBuild ? "Ryujinx Canary" : "Ryujinx"; + public static readonly string FullAppName = string.Intern(ReleaseInformation.IsCanaryBuild ? "Ryujinx Canary" : "Ryujinx"); public static MainWindow MainWindow => Current! .ApplicationLifetime.Cast() diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index b55983642..669e338df 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -302,7 +302,7 @@ namespace Ryujinx.Ava.UI.Windows LinuxHelper.RecommendedVmMaxMapCount); UserResult response = await ContentDialogHelper.ShowTextDialog( - $"Ryujinx - {LocaleManager.Instance[LocaleKeys.LinuxVmMaxMapCountDialogTitle]}", + RyujinxApp.FormatTitle(LocaleKeys.LinuxVmMaxMapCountDialogTitle, false), LocaleManager.Instance[LocaleKeys.LinuxVmMaxMapCountDialogTextPrimary], LocaleManager.Instance[LocaleKeys.LinuxVmMaxMapCountDialogTextSecondary], LocaleManager.Instance[LocaleKeys.LinuxVmMaxMapCountDialogButtonUntilRestart],