mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2026-01-30 19:42:49 +00:00
Merge branch 'ui-actions-new' into 'master'
UI: Actions Menu See merge request [ryubing/ryujinx!232](https://git.ryujinx.app/ryubing/ryujinx/-/merge_requests/232)
This commit is contained in:
commit
6695dfed8e
@ -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": "滑鼠直接存取"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
454
assets/Locales/Amiibo.json
Normal file
454
assets/Locales/Amiibo.json
Normal file
@ -0,0 +1,454 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "MenuBarActions_ScanAmiibo",
|
||||
"Translations": {
|
||||
"ar_SA": "فحص Amiibo",
|
||||
"de_DE": "Amiibo scannen",
|
||||
"el_GR": "Σάρωση Amiibo",
|
||||
"en_US": "Scan Amiibo",
|
||||
"es_ES": "Escanear Amiibo",
|
||||
"fr_FR": "Scanner un Amiibo",
|
||||
"he_IL": "סרוק אמיבו",
|
||||
"it_IT": "Scansiona un Amiibo",
|
||||
"ja_JP": "Amiibo をスキャン",
|
||||
"ko_KR": "Amiibo 스캔",
|
||||
"no_NO": "Skann en Amiibo",
|
||||
"pl_PL": "Skanuj Amiibo",
|
||||
"pt_BR": "Escanear um Amiibo",
|
||||
"ru_RU": "Сканировать Amiibo",
|
||||
"sv_SE": "Skanna en Amiibo",
|
||||
"th_TH": "สแกน Amiibo",
|
||||
"tr_TR": "Tara Amiibo",
|
||||
"uk_UA": "Сканувати Amiibo",
|
||||
"zh_CN": "扫描 Amiibo",
|
||||
"zh_TW": "掃描 Amiibo"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarActions_ScanAmiiboBin",
|
||||
"Translations": {
|
||||
"ar_SA": "فحص Amiibo (.BIN)",
|
||||
"de_DE": "Amiibo scannen (.BIN)",
|
||||
"el_GR": "Σάρωση Amiibo (.BIN)",
|
||||
"en_US": "Scan Amiibo (.BIN)",
|
||||
"es_ES": "Escanear un Amiibo (.BIN)",
|
||||
"fr_FR": "Scanner un Amiibo (.BIN)",
|
||||
"he_IL": "סרוק Amiibo (.BIN)",
|
||||
"it_IT": "Scansiona un Amiibo (.BIN)",
|
||||
"ja_JP": "Amiibo をスキャン (.BIN)",
|
||||
"ko_KR": "Amiibo 스캔 (.BIN)",
|
||||
"no_NO": "Skann en Amiibo (.BIN)",
|
||||
"pl_PL": "Skanuj Amiibo (.BIN)",
|
||||
"pt_BR": "Escanear um Amiibo (.BIN)",
|
||||
"ru_RU": "Сканировать Amiibo (.BIN)",
|
||||
"sv_SE": "Skanna en Amiibo (.BIN)",
|
||||
"th_TH": "สแกน Amiibo (.BIN)",
|
||||
"tr_TR": "Tara Amiibo (.BIN)",
|
||||
"uk_UA": "Сканувати Amiibo (.BIN)",
|
||||
"zh_CN": "扫描 Amiibo (.BIN)",
|
||||
"zh_TW": "掃描 Amiibo (.BIN)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogApiTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "أميبو API",
|
||||
"de_DE": "Amiibo-API",
|
||||
"el_GR": "API για Amiibo.",
|
||||
"en_US": "Amiibo API",
|
||||
"es_ES": "API Amiibo",
|
||||
"fr_FR": "API Amiibo",
|
||||
"he_IL": "ממשק תכנות אמיבו",
|
||||
"it_IT": "API Amiibo",
|
||||
"ja_JP": "",
|
||||
"ko_KR": null,
|
||||
"no_NO": "",
|
||||
"pl_PL": "API Amiibo",
|
||||
"pt_BR": "API Amiibo",
|
||||
"ru_RU": "API Amiibo",
|
||||
"sv_SE": "Amiibo-API",
|
||||
"th_TH": "อามิโบ้ API",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "API Amiibo",
|
||||
"zh_CN": null,
|
||||
"zh_TW": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogApiFailFetchMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "حدث خطأ أثناء جلب المعلومات من API.",
|
||||
"de_DE": "Beim Abrufen von Informationen aus der API ist ein Fehler aufgetreten.",
|
||||
"el_GR": "Παρουσιάστηκε σφάλμα κατά την ανάκτηση πληροφοριών από το API.",
|
||||
"en_US": "An error occured while fetching information from the API.",
|
||||
"es_ES": "Ocurrió un error al recibir información de la API.",
|
||||
"fr_FR": "Une erreur est survenue lors de la récupération des informations de l'API.",
|
||||
"he_IL": "אירעה שגיאה בעת שליפת מידע מהממשק.",
|
||||
"it_IT": "Si è verificato un errore durante il recupero delle informazioni dall'API.",
|
||||
"ja_JP": "API からの情報取得中にエラーが発生しました.",
|
||||
"ko_KR": "API에서 정보를 가져오는 중에 오류가 발생했습니다.",
|
||||
"no_NO": "En feil oppstod under henting av informasjon fra API.",
|
||||
"pl_PL": "Wystąpił błąd podczas pobierania informacji z API.",
|
||||
"pt_BR": "Um erro ocorreu ao tentar obter informações da API.",
|
||||
"ru_RU": "Произошла ошибка при получении информации из API.",
|
||||
"sv_SE": "Ett fel inträffade vid hämtning av information från API.",
|
||||
"th_TH": "เกิดข้อผิดพลาดขณะเรียกข้อมูลจาก API",
|
||||
"tr_TR": "API'dan bilgi alırken bir hata oluştu.",
|
||||
"uk_UA": "Під час отримання інформації з API сталася помилка.",
|
||||
"zh_CN": "从 API 获取信息时出错。",
|
||||
"zh_TW": "從 API 取得資訊時出現錯誤。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogApiConnectErrorMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "غير قادر على الاتصال بخادم API أميبو. قد تكون الخدمة معطلة أو قد تحتاج إلى التحقق من اتصالك بالإنترنت.",
|
||||
"de_DE": "Verbindung zum Amiibo API Server kann nicht hergestellt werden. Der Dienst ist möglicherweise nicht verfügbar oder es existiert keine Internetverbindung.",
|
||||
"el_GR": "Δεν είναι δυνατή η σύνδεση με τον διακομιστή Amiibo API. Η υπηρεσία μπορεί να είναι εκτός λειτουργίας ή μπορεί να χρειαστεί να επαληθεύσετε ότι έχετε ενεργή σύνδεσή στο Διαδίκτυο.",
|
||||
"en_US": "Unable to connect to Amiibo API server. The service may be down or you may need to verify your internet connection is online.",
|
||||
"es_ES": "No se pudo conectar al servidor de la API Amiibo. El servicio puede estar caído o tu conexión a internet puede haberse desconectado.",
|
||||
"fr_FR": "Impossible de se connecter au serveur API Amiibo. Le service est peut-être hors service ou vous devriez peut-être vérifier que votre connexion internet est connectée.",
|
||||
"he_IL": "לא ניתן להתחבר לממשק שרת האמיבו. ייתכן שהשירות מושבת או שתצטרך לוודא שהחיבור לאינטרנט שלך מקוון.",
|
||||
"it_IT": "Impossibile connettersi al server dell'API Amiibo. Il servizio potrebbe non essere disponibile o potresti non essere connesso a Internet.",
|
||||
"ja_JP": "Amiibo API サーバに接続できませんでした. サーバがダウンしているか, インターネット接続に問題があるかもしれません.",
|
||||
"ko_KR": "Amiibo API 서버에 연결할 수 없습니다. 서비스가 다운되었거나 인터넷 연결이 온라인 상태인지 확인이 필요합니다.",
|
||||
"no_NO": "Kan ikke koble til Amiibo API server. Tjenesten kan være nede, eller du må kanskje verifisere at din internettforbindelse er tilkoblet.",
|
||||
"pl_PL": "Nie można połączyć się z serwerem API Amiibo. Usługa może nie działać lub może być konieczne sprawdzenie, czy połączenie internetowe jest online.",
|
||||
"pt_BR": "Não foi possível conectar ao servidor da API Amiibo. O serviço pode estar fora do ar ou você precisa verificar sua conexão com a Internet.",
|
||||
"ru_RU": "Не удалось подключиться к серверу Amiibo API. Служба может быть недоступна или вам может потребоваться проверить ваше интернет-соединение.",
|
||||
"sv_SE": "Kunde inte ansluta till Amiibo API-server. Tjänsten kanske är nere eller så behöver du kontrollera att din internetanslutning fungerar.",
|
||||
"th_TH": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ Amiibo API บางบริการอาจหยุดทำงาน หรือไม่คุณต้องทำการตรวจสอบว่าอินเทอร์เน็ตของคุณอยู่ในสถานะเชื่อมต่ออยู่หรือไม่",
|
||||
"tr_TR": "Amiibo API sunucusuna bağlanılamadı. Sunucu çevrimdışı olabilir veya uygun bir internet bağlantınızın olduğunu kontrol etmeniz gerekebilir.",
|
||||
"uk_UA": "Неможливо підключитися до сервера Amiibo API. Можливо, служба не працює або вам потрібно перевірити, чи є підключення до Інтернету.",
|
||||
"zh_CN": "无法连接到 Amiibo API 服务器,服务可能已关闭,或者没有连接互联网。",
|
||||
"zh_TW": "無法連接 Amiibo API 伺服器。服務可能已停機,或者您可能需要確認網際網路連線是否在線上。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AboutDisclaimerMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "AmiiboAPI (www.amiiboapi.com) يتم \nاستخدامه في محاكاة أمبيو لدينا.",
|
||||
"de_DE": "AmiiboAPI (www.amiiboapi.com) wird in unserer Amiibo \nEmulation benutzt.",
|
||||
"el_GR": "Το AmiiboAPI (www.amiiboapi.com) χρησιμοποιείται\nστην προσομοίωση Amiibo.",
|
||||
"en_US": "AmiiboAPI (www.amiiboapi.com) is used\nin our Amiibo emulation.",
|
||||
"es_ES": "Utilizamos AmiiboAPI (www.amiiboapi.com)\nen nuestra emulación de Amiibo.",
|
||||
"fr_FR": "AmiiboAPI (www.amiiboapi.com) est utilisé\ndans notre émulation Amiibo.",
|
||||
"he_IL": "ממשק אמיבו (www.amiiboapi.com) משומש בהדמיית האמיבו שלנו.",
|
||||
"it_IT": "AmiiboAPI (www.amiiboapi.com) è usata\nnella nostra emulazione Amiibo.",
|
||||
"ja_JP": "AmiiboAPI (www.amiiboapi.com) は\nAmiibo エミュレーションに使用されています.",
|
||||
"ko_KR": "AmiiboAPI(www.amiiboapi.com)는\nAmiibo 에뮬레이션에 사용됩니다.",
|
||||
"no_NO": "AmiiboAPI (www.amiiboapi.com) brukes sammen med\ni vår Amiibo-emulsjon.",
|
||||
"pl_PL": "AmiiboAPI (www.amiiboapi.com) jest używane\nw naszej emulacji Amiibo.",
|
||||
"pt_BR": "AmiiboAPI (www.amiiboapi.com) é usado\nem nossa emulação de Amiibo.",
|
||||
"ru_RU": "Amiibo API (www.amiiboapi.com) используется для эмуляции Amiibo.",
|
||||
"sv_SE": "AmiiboAPI (www.amiiboapi.com) används\ni vår Amiibo-emulation.",
|
||||
"th_TH": "AmiiboAPI (www.amiiboapi.com) ถูกใช้\nในการจำลอง อะมิโบ ของเรา",
|
||||
"tr_TR": "Amiibo emülasyonumuzda \nAmiiboAPI (www.amiiboapi.com) kullanılmaktadır.",
|
||||
"uk_UA": "AmiiboAPI (www.amiiboapi.com) використовується в нашій емуляції Amiibo.",
|
||||
"zh_CN": "我们的 Amiibo 模拟使用了\nAmiiboAPI (www.amiiboapi.com)。",
|
||||
"zh_TW": "我們在 Amiibo 模擬中\n使用了 AmiiboAPI (www.amiiboapi.com)。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "SeriesLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "سلسلة",
|
||||
"de_DE": "Serie",
|
||||
"el_GR": "Σειρά",
|
||||
"en_US": "Series",
|
||||
"es_ES": "Serie",
|
||||
"fr_FR": "Séries",
|
||||
"he_IL": "סדרה",
|
||||
"it_IT": "Serie",
|
||||
"ja_JP": "シリーズ",
|
||||
"ko_KR": "시리즈",
|
||||
"no_NO": "Serie",
|
||||
"pl_PL": "Seria",
|
||||
"pt_BR": "Série",
|
||||
"ru_RU": "Серия",
|
||||
"sv_SE": "Serie",
|
||||
"th_TH": "ซีรีส์",
|
||||
"tr_TR": "Seri",
|
||||
"uk_UA": "Серія",
|
||||
"zh_CN": "系列",
|
||||
"zh_TW": "系列"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "ScanButtonLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "فحص Amiibo",
|
||||
"de_DE": "Amiibo einscannen",
|
||||
"el_GR": "Σαρώστε το Amiibo",
|
||||
"en_US": "Scan Amiibo",
|
||||
"es_ES": "Escanear Amiibo",
|
||||
"fr_FR": "Scanner l'Amiibo",
|
||||
"he_IL": "סרוק את ה-Amiibo",
|
||||
"it_IT": "Scansiona l'Amiibo",
|
||||
"ja_JP": "Amiiboをスキャン",
|
||||
"ko_KR": "Amiibo 스캔하기",
|
||||
"no_NO": "Skanne Amiibo",
|
||||
"pl_PL": "Zeskanuj Amiibo",
|
||||
"pt_BR": "Escanear Amiibo",
|
||||
"ru_RU": "Сканировать Amiibo",
|
||||
"sv_SE": "Skanna Amiibo",
|
||||
"th_TH": "สแกน Amiibo",
|
||||
"tr_TR": "Amiibo'yu tara",
|
||||
"uk_UA": "Сканувати Amiibo",
|
||||
"zh_CN": "扫描 Amiibo",
|
||||
"zh_TW": "掃描 Amiibo"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "OptionsShowAllLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "عرض Amiibo غير متوافقة",
|
||||
"de_DE": "Zeige inkompatible Amiibo",
|
||||
"el_GR": "Εμφάνιση μη συμβατών Amiibo",
|
||||
"en_US": "Show Incompatible Amiibo",
|
||||
"es_ES": "Mostrar Amiibo Incompatibles",
|
||||
"fr_FR": "Montrer les Amiibo Incompatibles",
|
||||
"he_IL": "הצג Amiibo שאינם תואמים",
|
||||
"it_IT": "Mostra Amiibo incompatibili",
|
||||
"ja_JP": "非互換のAmiiboを表示",
|
||||
"ko_KR": "호환되지 않는 Amiibo 표시",
|
||||
"no_NO": "Vis inkompatible Amiibo",
|
||||
"pl_PL": "Pokaż niekompatybilne Amiibo",
|
||||
"pt_BR": "Mostrar Amiibo incompatíveis",
|
||||
"ru_RU": "Показать несовместимые Amiibo",
|
||||
"sv_SE": "Visa inkompatibla Amiibo",
|
||||
"th_TH": "แสดง Amiibo ที่ไม่เข้ากัน",
|
||||
"tr_TR": "Uyumsuz Amiibo'yu göster",
|
||||
"uk_UA": "Показати несумісні Amiibo",
|
||||
"zh_CN": "显示不兼容的 Amiibo",
|
||||
"zh_TW": "顯示不相容的 Amiibo"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "OptionsUsRandomTagLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "هاك: UUID عشوائي",
|
||||
"de_DE": "Hack: Zufällige UUID",
|
||||
"el_GR": "Hack: Τυχαίο UUID",
|
||||
"en_US": "Hack: Random UUID",
|
||||
"es_ES": "Hack: UUID aleatorio",
|
||||
"fr_FR": "Hack : UUID aléatoire",
|
||||
"he_IL": "האק: UUID אקראי",
|
||||
"it_IT": "Hack: UUID casuale",
|
||||
"ja_JP": "ハック: ランダム UUID",
|
||||
"ko_KR": "핵: 무작위 UUID",
|
||||
"no_NO": "Hack: Tilfeldig UUID",
|
||||
"pl_PL": "Hack: Losowy UUID",
|
||||
"pt_BR": "Hack: UUID aleatório",
|
||||
"ru_RU": "Хак: Случайный UUID",
|
||||
"sv_SE": "Hack: Slumpmässig UUID",
|
||||
"th_TH": "แฮ็ค: UUID สุ่ม",
|
||||
"tr_TR": "Hack: Rastgele UUID",
|
||||
"uk_UA": "Хак: Випадковий UUID",
|
||||
"zh_CN": "Hack:随机 UUID",
|
||||
"zh_TW": "Hack:隨機 UUID"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "CabinetDialog",
|
||||
"Translations": {
|
||||
"ar_SA": "أدخل اسم أميبو الجديد",
|
||||
"de_DE": "Gib den neuen Namen deines Amiibo ein",
|
||||
"el_GR": "Εισαγάγετε το νέο όνομα του Amiibo σας",
|
||||
"en_US": "Enter your Amiibo's new name",
|
||||
"es_ES": "Ingresa el nuevo nombre de tu Amiibo",
|
||||
"fr_FR": "Entrez le nouveau nom de votre Amiibo",
|
||||
"he_IL": "הזן את השם החדש של ה-Amiibo שלך",
|
||||
"it_IT": "Inserisci il nuovo nome del tuo Amiibo",
|
||||
"ja_JP": "Amiibo の新しい名前を入力してください",
|
||||
"ko_KR": "Amiibo의 새 이름을 입력하세요",
|
||||
"no_NO": "Skriv inn det nye navnet til Amiiboen din",
|
||||
"pl_PL": "Wprowadź nową nazwę swojego Amiibo",
|
||||
"pt_BR": "Digite o novo nome do seu Amiibo",
|
||||
"ru_RU": "Введите новое имя вашего Amiibo",
|
||||
"sv_SE": "Ange det nya namnet för din Amiibo",
|
||||
"th_TH": "กรุณาใส่ชื่อใหม่ของ Amiibo ของคุณ",
|
||||
"tr_TR": "Amiibo'nuzun yeni adını girin",
|
||||
"uk_UA": "Введіть нове ім'я вашого Amiibo",
|
||||
"zh_CN": "输入你的 Amiibo 的新名字",
|
||||
"zh_TW": "輸入你的 Amiibo 新名稱"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "CabinetTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Cabinet Dialog",
|
||||
"es_ES": "Diálogo Gabinete",
|
||||
"fr_FR": "Dialogue de Cabinet",
|
||||
"he_IL": "",
|
||||
"it_IT": "Modale del Cabinet",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "캐비닛 대화 상자",
|
||||
"no_NO": "Dialogboks for kabinett",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Diálogo do Gabinete",
|
||||
"ru_RU": "Сообщение кабинета",
|
||||
"sv_SE": "Cabinet-dialog",
|
||||
"th_TH": "กล่องโต้ตอบไฟล์ Cabinet",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Сповіщення Cabinet",
|
||||
"zh_CN": "档案对话框",
|
||||
"zh_TW": "Cabinet 對話方塊"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "CabinetScanDialog",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Please scan your Amiibo now.",
|
||||
"es_ES": "Escanea tu Amiibo ahora.",
|
||||
"fr_FR": "Veuillez scannez votre Amiibo.",
|
||||
"he_IL": "",
|
||||
"it_IT": "Scansiona ora il tuo Amiibo.",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "지금 Amiibo를 스캔하세요.",
|
||||
"no_NO": "Vennligst skann Amiiboene dine nå.",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Por favor, escaneie seu Amiibo agora.",
|
||||
"ru_RU": "Пожалуйста, сканируйте ваш Amiibo.",
|
||||
"sv_SE": "Skanna din Amiibo nu.",
|
||||
"th_TH": "กรุณาสแกน Amiibo ของคุณตอนนี้",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Будь ласка, проскануйте Ваш Amiibo.",
|
||||
"zh_CN": "请现在扫描你的 Amiibo",
|
||||
"zh_TW": "請掃描你的 Amiibo。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "OpenBinFileDialogTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "حدد ملف .BIN يحتوي على Amiibo",
|
||||
"de_DE": "Wähle eine .BIN-Datei mit einem Amiibo",
|
||||
"el_GR": "Επιλέξτε ένα αρχείο .BIN με ένα Amiibo",
|
||||
"en_US": "Choose a .BIN file with an Amiibo",
|
||||
"es_ES": "Selecciona un archivo .BIN con un Amiibo",
|
||||
"fr_FR": "Sélectionnez un fichier .BIN avec un Amiibo",
|
||||
"he_IL": "בחר קובץ .BIN עם Amiibo",
|
||||
"it_IT": "Seleziona un file .BIN con un Amiibo",
|
||||
"ja_JP": "Amiiboが含まれる .BIN ファイルを選択",
|
||||
"ko_KR": "Amiibo가 포함된 .BIN 파일을 선택",
|
||||
"no_NO": "Velg en .BIN-fil med et Amiibo",
|
||||
"pl_PL": "Wybierz plik .BIN z Amiibo",
|
||||
"pt_BR": "Selecione um arquivo .BIN com um Amiibo",
|
||||
"ru_RU": "Выберите .BIN файл с Amiibo",
|
||||
"sv_SE": "Välj en .BIN-fil med ett Amiibo",
|
||||
"th_TH": "เลือกไฟล์ .BIN ที่มี Amiibo",
|
||||
"tr_TR": "Amiibo içeren bir .BIN dosyası seçin",
|
||||
"uk_UA": "Виберіть .BIN файл з Amiibo",
|
||||
"zh_CN": "选择一个包含Amiibo的 .BIN 文件",
|
||||
"zh_TW": "選擇一個包含Amiibo的 .BIN 檔案"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Amiibo",
|
||||
"Translations": {
|
||||
"ar_SA": "أميبو",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Amiibo",
|
||||
"es_ES": null,
|
||||
"fr_FR": null,
|
||||
"he_IL": "אמיבו",
|
||||
"it_IT": "",
|
||||
"ja_JP": "",
|
||||
"ko_KR": null,
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": null,
|
||||
"ru_RU": null,
|
||||
"sv_SE": null,
|
||||
"th_TH": "อมิโบ้",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": null,
|
||||
"zh_TW": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Usage",
|
||||
"Translations": {
|
||||
"ar_SA": "الاستخدام:\n",
|
||||
"de_DE": "Nutzung:\n",
|
||||
"el_GR": "Χρήση:\n",
|
||||
"en_US": "Usage:\n",
|
||||
"es_ES": "Uso:\n",
|
||||
"fr_FR": "Utilisation :\n",
|
||||
"he_IL": "שימוש:\n",
|
||||
"it_IT": "Utilizzo:\n",
|
||||
"ja_JP": "使用法:\n",
|
||||
"ko_KR": "사용법 :\n",
|
||||
"no_NO": "Forbruk:\n",
|
||||
"pl_PL": "Użycie:\n",
|
||||
"pt_BR": "Uso:\n",
|
||||
"ru_RU": "Применение:\n",
|
||||
"sv_SE": "Användning:\n",
|
||||
"th_TH": "การใช้งาน:\n",
|
||||
"tr_TR": "Kullanım:\n",
|
||||
"uk_UA": "Використання:\n",
|
||||
"zh_CN": "用法:\n",
|
||||
"zh_TW": "用途:\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "UsageWritable",
|
||||
"Translations": {
|
||||
"ar_SA": "الاستخدام (يمكنه حفظ البيانات):\n",
|
||||
"de_DE": "Nutzung (Kann Daten speichern):\n",
|
||||
"el_GR": "Χρήση (Μπορεί να αποθηκεύσει δεδομένα):\n",
|
||||
"en_US": "Usage (Can Save Data):\n",
|
||||
"es_ES": "Uso (Puede guardar datos):\n",
|
||||
"fr_FR": "Utilisation (Peut enregistrer des données) :\n",
|
||||
"he_IL": "שימוש (יכול לשמור נתונים):\n",
|
||||
"it_IT": "Utilizzo (Può salvare dati):\n",
|
||||
"ja_JP": "使用法(データを保存できます):\n",
|
||||
"ko_KR": "사용법 (데이터 저장 가능):\n",
|
||||
"no_NO": "Bruk (Kan lagre data):\n",
|
||||
"pl_PL": "Użycie (Może zapisywać dane):\n",
|
||||
"pt_BR": "Uso (Pode salvar dados):\n",
|
||||
"ru_RU": "Применение (Может сохранять данные):\n",
|
||||
"sv_SE": "Användning (Kan spara data):\n",
|
||||
"th_TH": "การใช้งาน (สามารถบันทึกข้อมูลได้):\n",
|
||||
"tr_TR": "Kullanım (Veri kaydedebilir):\n",
|
||||
"uk_UA": "Використання (Може зберігати дані):\n",
|
||||
"zh_CN": "用法(可保存数据):\n",
|
||||
"zh_TW": "用途(可儲存資料):\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Unknown",
|
||||
"Translations": {
|
||||
"ar_SA": "غير معروف",
|
||||
"de_DE": "Unbekannt",
|
||||
"el_GR": "Άγνωστο",
|
||||
"en_US": "Unknown",
|
||||
"es_ES": "Desconocido",
|
||||
"fr_FR": "Inconnu",
|
||||
"he_IL": "לא ידוע",
|
||||
"it_IT": "Sconosciuto",
|
||||
"ja_JP": "不明",
|
||||
"ko_KR": "알 수 없음",
|
||||
"no_NO": "Ukjent",
|
||||
"pl_PL": "Nieznane",
|
||||
"pt_BR": "Desconhecido",
|
||||
"ru_RU": "Неизвестно",
|
||||
"sv_SE": "Okänt",
|
||||
"th_TH": "ไม่รู้จัก",
|
||||
"tr_TR": "Bilinmeyen",
|
||||
"uk_UA": "Невідомо",
|
||||
"zh_CN": "未知",
|
||||
"zh_TW": "未知"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
529
assets/Locales/Firmware.json
Normal file
529
assets/Locales/Firmware.json
Normal file
@ -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 無法解析所提供的韌體。這通常是由於金鑰過時造成的。"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
329
assets/Locales/Keys.json
Normal file
329
assets/Locales/Keys.json
Normal file
@ -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」檔案"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
29
assets/Locales/MiiEditor.json
Normal file
29
assets/Locales/MiiEditor.json
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "MenuBarActions_OpenEditor",
|
||||
"Translations": {
|
||||
"ar_SA": "محرر Mii",
|
||||
"de_DE": "Mii-Editor",
|
||||
"el_GR": "Επεξεργαστής Mii",
|
||||
"en_US": "Mii Editor",
|
||||
"es_ES": "Editor de Mii",
|
||||
"fr_FR": "Éditeur de Mii",
|
||||
"he_IL": "עורך Mii",
|
||||
"it_IT": "Editor di Mii",
|
||||
"ja_JP": "Miiエディター",
|
||||
"ko_KR": "Mii 편집기",
|
||||
"no_NO": "Mii-redigerer",
|
||||
"pl_PL": "Edytor Mii",
|
||||
"pt_BR": "Editor de Mii",
|
||||
"ru_RU": "Редактор Mii",
|
||||
"sv_SE": "Mii-redigerare",
|
||||
"th_TH": "ตัวแก้ไข Mii",
|
||||
"tr_TR": "Mii Düzenleyicisi",
|
||||
"uk_UA": "Редактор Mii",
|
||||
"zh_CN": "Mii 编辑器",
|
||||
"zh_TW": "Mii 編輯器"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
904
assets/Locales/XCITrimmer.json
Normal file
904
assets/Locales/XCITrimmer.json
Normal file
@ -0,0 +1,904 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "MenuBarActions_OpenTrimmer",
|
||||
"Translations": {
|
||||
"ar_SA": "محرر XCI",
|
||||
"de_DE": "XCI-Trimmer",
|
||||
"el_GR": "Επεξεργαστής XCI",
|
||||
"en_US": "XCI Trimmer",
|
||||
"es_ES": "Recortador de XCI",
|
||||
"fr_FR": "Réducteur de XCI",
|
||||
"he_IL": "מעמד XCI",
|
||||
"it_IT": "Trimmer XCI",
|
||||
"ja_JP": "XCIトリマー",
|
||||
"ko_KR": "XCI 파일 트리머",
|
||||
"no_NO": "XCI-trimmer",
|
||||
"pl_PL": "Przycinacz XCI",
|
||||
"pt_BR": "Cortador de XCI",
|
||||
"ru_RU": "Триммер XCI",
|
||||
"sv_SE": "XCI-trimmer",
|
||||
"th_TH": "ตัวตัด XCI",
|
||||
"tr_TR": "XCI Kesici",
|
||||
"uk_UA": "Тример XCI",
|
||||
"zh_CN": "XCI 剪裁工具",
|
||||
"zh_TW": "XCI 修剪工具"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarActions_OpenTrimmer_ToolTip",
|
||||
"Translations": {
|
||||
"ar_SA": "يقلل من حجم ملفات XCI (نسخ بطاقات الألعاب) عن طريق إزالة المساحة الفارغة وغير المستخدمة. لا يؤثر على أداء اللعبة.",
|
||||
"de_DE": "Reduziert die Größe der XCI-Dateien (Spiele-Cartridge-Dumps) durch Entfernen von leerem, ungenutztem Speicher. Hat keine Auswirkungen auf die Spielleistung.",
|
||||
"el_GR": "Μειώνει το μέγεθος των αρχείων XCI (αντίγραφα καρτών παιχνιδιών) αφαιρώντας κενό, αχρησιμοποίητο χώρο. Δεν επηρεάζει την απόδοση του παιχνιδιού.",
|
||||
"en_US": "Reduces XCI file sizes (game cartridge dumps) by removing empty, unused space. Does not impact game performance.",
|
||||
"es_ES": "Reduce el tamaño de los archivos XCI (copias de cartuchos de juegos) eliminando espacio vacío y no utilizado. No afecta al rendimiento del juego.",
|
||||
"fr_FR": "Réduit la taille des fichiers XCI (copies de cartouches de jeux) en supprimant l'espace vide et inutilisé. N'affecte pas les performances du jeu.",
|
||||
"he_IL": "מקטין את גודל קבצי ה-XCI (גיבויים של קרטידות משחק) על ידי הסרת שטח ריק ולא בשימוש. לא משפיע על ביצועי המשחק.",
|
||||
"it_IT": "Riduce la dimensione dei file XCI (backup di cartucce di gioco) rimuovendo spazio vuoto e inutilizzato. Non influisce sulle prestazioni del gioco.",
|
||||
"ja_JP": "XCIファイル(ゲームカートリッジのダンプ)のサイズを空の未使用スペースを削除することにより減らします。ゲームのパフォーマンスには影響しません。",
|
||||
"ko_KR": "XCI 파일(게임 카트리지 덤프)의 크기를 빈 공간과 사용되지 않는 데이터를 제거하여 줄입니다. 게임 성능에 영향을 미치지 않습니다.",
|
||||
"no_NO": "Reduserer størrelsen på XCI-filene (spillkassett-dumper) ved å fjerne tomt, ubrukt plass. Påvirker ikke spillprestasjonen.",
|
||||
"pl_PL": "Redukuje rozmiar plików XCI (zrzutów kartridży gier) przez usunięcie pustej, nieużywanej przestrzeni. Nie wpływa na wydajność gry.",
|
||||
"pt_BR": "Reduz o tamanho dos arquivos XCI (dumps de cartuchos de jogos) removendo espaço vazio e não utilizado. Não afeta o desempenho do jogo.",
|
||||
"ru_RU": "Уменьшает размер файлов XCI (дампов картриджей игр) удалением пустого, неиспользуемого пространства. Не влияет на производительность игры.",
|
||||
"sv_SE": "Minskar storleken på XCI-filer (spelkartridgdumps) genom att ta bort tomt, oanvänt utrymme. Påverkar inte spelprestanda.",
|
||||
"th_TH": "ลดขนาดไฟล์ XCI (ดัมพ์ตลับเกม) โดยการลบพื้นที่ว่างและไม่ได้ใช้งานออกจากไฟล์ ไม่กระทบต่อประสิทธิภาพเกม",
|
||||
"tr_TR": "XCI dosya boyutlarını (oyun kartuşu dökümleri) boş ve kullanılmayan alanları kaldırarak küçültür. Oyun performansını etkilemez.",
|
||||
"uk_UA": "Зменшує розмір файлів XCI (дампів картриджів ігор) видаленням порожнього, невикористовуваного простору. Не впливає на продуктивність гри.",
|
||||
"zh_CN": "通过删除空的、未使用的空间来减少 XCI 文件(游戏卡带转储)大小。不会影响游戏性能。",
|
||||
"zh_TW": "透過移除空的、未使用的空間來減少 XCI 檔案(遊戲卡匣轉存)大小。對遊戲性能無影響。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "GameListContextMenu_Trim",
|
||||
"Translations": {
|
||||
"ar_SA": "تقليم XCI",
|
||||
"de_DE": "Zuschneiden der XCI",
|
||||
"el_GR": "Κοπή XCI",
|
||||
"en_US": "Trim XCI",
|
||||
"es_ES": "Recortar XCI",
|
||||
"fr_FR": "Réduire le XCI",
|
||||
"he_IL": "חתוך XCI",
|
||||
"it_IT": "Riduci il XCI",
|
||||
"ja_JP": "XCIをトリム",
|
||||
"ko_KR": "XCI 트림",
|
||||
"no_NO": null,
|
||||
"pl_PL": "Przytnij XCI",
|
||||
"pt_BR": "Reduzir o XCI",
|
||||
"ru_RU": "Обрезать XCI",
|
||||
"sv_SE": "Optimera XCI",
|
||||
"th_TH": "ลดขนาด XCI",
|
||||
"tr_TR": "XCI'yi Kırp",
|
||||
"uk_UA": "Нарізка XCI",
|
||||
"zh_CN": "精简 XCI",
|
||||
"zh_TW": "修剪 XCI"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "StatusBar_Trimming",
|
||||
"Translations": {
|
||||
"ar_SA": "جاري تقليم: {0}",
|
||||
"de_DE": "Schneide: {0}",
|
||||
"el_GR": "Κόβει το: {0}",
|
||||
"en_US": "Trimming: {0}",
|
||||
"es_ES": "Recortando: {0}",
|
||||
"fr_FR": "Réduction de: {0}",
|
||||
"he_IL": "חיתוך: {0}",
|
||||
"it_IT": "Riduzione di: {0}",
|
||||
"ja_JP": "{0} をトリミング中:",
|
||||
"ko_KR": "{0} 트리밍:",
|
||||
"no_NO": "Trimming av: {0}",
|
||||
"pl_PL": "Przycinanie: {0}",
|
||||
"pt_BR": "Reduzindo: {0}",
|
||||
"ru_RU": "Обрезка: {0}",
|
||||
"sv_SE": "Trimmar: {0}",
|
||||
"th_TH": "กำลังตัด: {0}",
|
||||
"tr_TR": "{0} Kısaltılıyor:",
|
||||
"uk_UA": "Обрізка: {0}",
|
||||
"zh_CN": "正在修剪: {0}",
|
||||
"zh_TW": "正在修剪: {0}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_PartialLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "جزئي",
|
||||
"de_DE": "Teilweise",
|
||||
"el_GR": "Μερικό",
|
||||
"en_US": "Partial",
|
||||
"es_ES": "Parcial",
|
||||
"fr_FR": "Partiel",
|
||||
"he_IL": "חלקי",
|
||||
"it_IT": "Parziale",
|
||||
"ja_JP": "部分的",
|
||||
"ko_KR": "일부",
|
||||
"no_NO": "Delvis",
|
||||
"pl_PL": "Częściowy",
|
||||
"pt_BR": "Parcial",
|
||||
"ru_RU": "Частично",
|
||||
"sv_SE": "Delvis",
|
||||
"th_TH": "ยังไม่สมบูรณ์",
|
||||
"tr_TR": "Kısmi",
|
||||
"uk_UA": "Часткові",
|
||||
"zh_CN": "分区",
|
||||
"zh_TW": "部分"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_TrimmableLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "غير مُقَصَّص",
|
||||
"de_DE": "Ungetrimmt",
|
||||
"el_GR": "Ακέραιο",
|
||||
"en_US": "Untrimmed",
|
||||
"es_ES": "Sin Recortar",
|
||||
"fr_FR": "Non Réduit",
|
||||
"he_IL": "לא מקוצץ",
|
||||
"it_IT": "Non Rifilato",
|
||||
"ja_JP": "未トリミング",
|
||||
"ko_KR": "트리밍되지 않음",
|
||||
"no_NO": "Ikke trimmet",
|
||||
"pl_PL": "Nieprzycięty",
|
||||
"pt_BR": "Não Reduzido",
|
||||
"ru_RU": "Не обрезан",
|
||||
"sv_SE": "Oklippt",
|
||||
"th_TH": "ยังไม่ตัดแต่ง",
|
||||
"tr_TR": "Kesilmemiş",
|
||||
"uk_UA": "Не обрізані",
|
||||
"zh_CN": "未修剪",
|
||||
"zh_TW": "未修剪"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_UntrimmableLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "مقصوص",
|
||||
"de_DE": "Getrimmt",
|
||||
"el_GR": "Κομμένο",
|
||||
"en_US": "Trimmed",
|
||||
"es_ES": "Recortado",
|
||||
"fr_FR": "Réduit",
|
||||
"he_IL": "מקוצץ",
|
||||
"it_IT": "Rifilato",
|
||||
"ja_JP": "トリミング済み",
|
||||
"ko_KR": "트리밍됨",
|
||||
"no_NO": "Trimmet",
|
||||
"pl_PL": "Przycięty",
|
||||
"pt_BR": "Reduzido",
|
||||
"ru_RU": "Обрезан",
|
||||
"sv_SE": "Optimerad",
|
||||
"th_TH": "ตัดแต่งแล้ว",
|
||||
"tr_TR": "Kesilmiş",
|
||||
"uk_UA": "Обрізані",
|
||||
"zh_CN": "经过瘦身的",
|
||||
"zh_TW": "已修剪"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_FailedLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "(فشل)",
|
||||
"de_DE": "(Fehlgeschlagen)",
|
||||
"el_GR": "(Απέτυχε)",
|
||||
"en_US": "(Failed)",
|
||||
"es_ES": "(Fallido)",
|
||||
"fr_FR": "(Échoué)",
|
||||
"he_IL": "(נכשל)",
|
||||
"it_IT": "(Fallito)",
|
||||
"ja_JP": "(失敗)",
|
||||
"ko_KR": "(실패)",
|
||||
"no_NO": "(Mislyktes)",
|
||||
"pl_PL": "(Niepowodzenie)",
|
||||
"pt_BR": "(Falhou)",
|
||||
"ru_RU": "(Ошибка)",
|
||||
"sv_SE": "(Misslyckades)",
|
||||
"th_TH": "(ล้มเหลว)",
|
||||
"tr_TR": "(Başarısız)",
|
||||
"uk_UA": "(Невдача)",
|
||||
"zh_CN": "(失败)",
|
||||
"zh_TW": "(失敗)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Title_CanSaveLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "حفظ {0} ميغابايت",
|
||||
"de_DE": "Speichern {0} MB",
|
||||
"el_GR": "Αποθήκευση {0} MB",
|
||||
"en_US": "Save {0} MB",
|
||||
"es_ES": "Ahorra {0} MB",
|
||||
"fr_FR": "Économisez {0} Mo",
|
||||
"he_IL": "שמור {0} מגה-בייט",
|
||||
"it_IT": "Risparmia {0} MB",
|
||||
"ja_JP": "{0}MBを保存",
|
||||
"ko_KR": "{0}MB 저장",
|
||||
"no_NO": "Spare {0} MB",
|
||||
"pl_PL": "Zapisz {0} MB",
|
||||
"pt_BR": "Salvar {0} MB",
|
||||
"ru_RU": "Освободить {0} Мб",
|
||||
"sv_SE": "Spara {0} MB",
|
||||
"th_TH": "บันทึก {0} เมกะไบต์",
|
||||
"tr_TR": "Kaydet {0} MB",
|
||||
"uk_UA": "Зберегти {0} Мб",
|
||||
"zh_CN": "能节约 {0} MB",
|
||||
"zh_TW": "可節省 {0} MB"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Title_SavingLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "تم حفظ {0} ميغابايت",
|
||||
"de_DE": "Gespeichert {0} MB",
|
||||
"el_GR": "Αποθηκεύτηκαν {0} MB",
|
||||
"en_US": "Saved {0} MB",
|
||||
"es_ES": "{0} MB Ahorrado(s)",
|
||||
"fr_FR": "{0} Mo Économisés",
|
||||
"he_IL": "נשמרו {0} מגה-בייט",
|
||||
"it_IT": "Risparmiati {0} MB",
|
||||
"ja_JP": "{0}MBが保存されました",
|
||||
"ko_KR": "{0}MB 저장됨",
|
||||
"no_NO": "Spart {0} Mb",
|
||||
"pl_PL": "Zapisano {0} MB",
|
||||
"pt_BR": "Salvo {0} Mb",
|
||||
"ru_RU": "Освобождено {0} Мб",
|
||||
"sv_SE": "Sparade {0} Mb",
|
||||
"th_TH": "บันทึกแล้ว {0} เมกะไบต์",
|
||||
"tr_TR": "Kaydedildi {0} MB",
|
||||
"uk_UA": "Збережено {0} Мб",
|
||||
"zh_CN": "节约了 {0} MB",
|
||||
"zh_TW": "已節省 {0} MB"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFileDialog_PrimaryText",
|
||||
"Translations": {
|
||||
"ar_SA": "يقوم بتقليص المساحة غير المستخدمة في XCI لتوفير مساحة القرص.",
|
||||
"de_DE": "Trimmt ungenutzten Speicherplatz in der XCI, um Speicherplatz zu sparen.",
|
||||
"el_GR": "Περικόπτει τον μη χρησιμοποιούμενο χώρο στο XCI για εξοικονόμηση χώρου στον δίσκο.",
|
||||
"en_US": "Trims unused space in the XCI to save disk space.",
|
||||
"es_ES": "Recorta el espacio no utilizado en el XCI para ahorrar espacio en disco.",
|
||||
"fr_FR": "Supprime l’espace inutilisé dans le XCI afin d’économiser de l’espace disque.",
|
||||
"he_IL": "מקצץ שטח לא בשימוש ב-XCI כדי לחסוך מקום בדיסק.",
|
||||
"it_IT": "Rimuove lo spazio inutilizzato nell'XCI per risparmiare spazio su disco.",
|
||||
"ja_JP": "XCI内の未使用領域をトリムしてディスク容量を節約します。",
|
||||
"ko_KR": "XCI의 사용되지 않는 공간을 트리밍하여 디스크 공간을 절약합니다.",
|
||||
"no_NO": "Fjerner ubrukt plass i XCI for å spare diskplass.",
|
||||
"pl_PL": "Przycina nieużywane miejsce w XCI, aby zaoszczędzić miejsce na dysku.",
|
||||
"pt_BR": "Remove o espaço não utilizado no XCI para economizar espaço em disco.",
|
||||
"ru_RU": "Обрезает неиспользуемое пространство в XCI для экономии места на диске.",
|
||||
"sv_SE": "Trimmar oanvänt utrymme i XCI för att spara diskutrymme.",
|
||||
"th_TH": "ตัดแต่งพื้นที่ที่ไม่ได้ใช้งานใน XCI เพื่อประหยัดพื้นที่ดิสก์",
|
||||
"tr_TR": "Disk alanından tasarruf etmek için XCI'deki kullanılmayan alanı kırpar.",
|
||||
"uk_UA": "Обрізає невикористаний простір у XCI для економії місця на диску.",
|
||||
"zh_CN": "修剪 XCI 中的未使用空间以节省磁盘空间。",
|
||||
"zh_TW": "修剪 XCI 中的未使用空間以節省磁碟空間。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFileDialog_SecondaryText",
|
||||
"Translations": {
|
||||
"ar_SA": "حجم الملف: {0:n} ميجابايت\nحجم اللعبة: {1:n} ميجابايت\nالتوفير: {2:n} ميجابايت",
|
||||
"de_DE": "Dateigröße: {0:n} MB\nSpielgröße: {1:n} MB\nErsparnis: {2:n} MB",
|
||||
"el_GR": "Μέγεθος αρχείου: {0:n} MB\nΜέγεθος παιχνιδιού: {1:n} MB\nΕξοικονόμηση: {2:n} MB",
|
||||
"en_US": "File Size: {0:n} MB\nGame Size: {1:n} MB\nSavings: {2:n} MB",
|
||||
"es_ES": "Tamaño de archivo: {0:n} MB\nTamaño del juego: {1:n} MB\nAhorro: {2:n} MB",
|
||||
"fr_FR": "Taille du fichier: {0:n} Mo\nTaille du jeu: {1:n} Mo\nÉconomies: {2:n} Mo",
|
||||
"he_IL": "גודל הקובץ: {0:n} MB\nגודל המשחק: {1:n} MB\nחיסכון: {2:n} MB",
|
||||
"it_IT": "Dimensione file: {0:n} MB\nDimensione del gioco: {1:n} MB\nRisparmio: {2:n} MB",
|
||||
"ja_JP": "ファイルサイズ: {0:n} MB\nゲームサイズ: {1:n} MB\n節約: {2:n} MB",
|
||||
"ko_KR": "파일 크기: {0:n} MB\n게임 크기: {1:n} MB\n절약: {2:n} MB",
|
||||
"no_NO": "Filstørrelse: {0:n} MB\nSpillstørrelse: {1:n} MB\nBesparelse: {2:n} MB",
|
||||
"pl_PL": "Rozmiar pliku: {0:n} MB\nRozmiar gry: {1:n} MB\nOszczędności: {2:n} MB",
|
||||
"pt_BR": "Tamanho do arquivo: {0:n} MB\nTamanho do jogo: {1:n} MB\nEconomia: {2:n} MB",
|
||||
"ru_RU": "Размер файла: {0:n} Мб\nРазмер игры: {1:n} MB\nЭкономия: {2:n} Мб",
|
||||
"sv_SE": "Filstorlek: {0:n} MB\nSpelstorlek: {1:n} MB\nSparat: {2:n} MB",
|
||||
"th_TH": "ขนาดไฟล์: {0:n} MB\nขนาดเกม: {1:n} MB\nการประหยัด: {2:n} MB",
|
||||
"tr_TR": "Dosya Boyutu: {0:n} MB\nOyun Boyutu: {1:n} MB\nTasarruf: {2:n} MB",
|
||||
"uk_UA": "Розмір файлу: {0:n} Мб\nРозмір гри: {1:n} MB\nЕкономія: {2:n} Мб",
|
||||
"zh_CN": "文件大小: {0:n} MB\n游戏大小: {1:n} MB\n节省: {2:n} MB",
|
||||
"zh_TW": "檔案大小: {0:n} MB\n遊戲大小: {1:n} MB\n節省: {2:n} MB"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_NoTrimNecessary",
|
||||
"Translations": {
|
||||
"ar_SA": "لا حاجة لتقليص XCI. تحقق من السجلات للتفاصيل.",
|
||||
"de_DE": "XCI muss nicht beschnitten werden. Überprüfen Sie die Logs für Details.",
|
||||
"el_GR": "Το XCI δεν χρειάζεται να μειωθεί. Ελέγξτε τα αρχεία καταγραφής για λεπτομέρειες.",
|
||||
"en_US": "XCI does not require trimming. Check logs for details.",
|
||||
"es_ES": "El XCI no necesita ser recortado. Verifica los logs para detalles.",
|
||||
"fr_FR": "Le XCI n’a pas besoin d’être réduit. Référez-vous aux journaux pour détails.",
|
||||
"he_IL": "XCI לא צריך להיות מקוצץ. עיין ביומנים לפרטים.",
|
||||
"it_IT": "Non è necessario ridurre la dimensione del XCI. Controlla i log per dettagli.",
|
||||
"ja_JP": "XCIはトリミングする必要はありません。詳細についてはログを確認してください。",
|
||||
"ko_KR": "XCI는 트리밍할 필요가 없습니다. 자세한 내용은 로그를 확인.",
|
||||
"no_NO": "XCI trenger ikke å trimmes. Sjekk loggene for detaljer.",
|
||||
"pl_PL": "XCI nie wymaga przycinania. Sprawdź dzienniki, aby uzyskać szczegóły.",
|
||||
"pt_BR": "O XCI não precisa ser reduzido. Verifique os logs para detalhes.",
|
||||
"ru_RU": "XCI не требует обрезки. Проверьте логи для подробностей.",
|
||||
"sv_SE": "XCI behöver inte optimeras. Kontrollera loggen för detaljer.",
|
||||
"th_TH": "XCI ไม่จำเป็นต้องถูกตัดแต่ง โปรดตรวจสอบบันทึกสำหรับรายละเอียด",
|
||||
"tr_TR": "XCI kırpılmasına gerek yok. Ayrıntılar için günlükleri kontrol edin.",
|
||||
"uk_UA": "XCI не потребує обрізання. Перевірте журнали для отримання деталей.",
|
||||
"zh_CN": "XCI 不需要被瘦身。查看日志以获得更多细节。",
|
||||
"zh_TW": "XCI 不需要修剪。檢查日誌以取得更多資訊。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_NoUntrimPossible",
|
||||
"Translations": {
|
||||
"ar_SA": "لا يمكن إعادة التعديل على XCI. تحقق من السجلات للتفاصيل.",
|
||||
"de_DE": "XCI kann nicht wiederhergestellt werden. Überprüfen Sie die Logs für Details.",
|
||||
"el_GR": "Το XCI δεν μπορεί να επαναφερθεί. Ελέγξτε τα αρχεία καταγραφής για λεπτομέρειες.",
|
||||
"en_US": "XCI cannot be untrimmed. Check logs for details.",
|
||||
"es_ES": "El recorte del XCI no puede ser deshecho. Verifica los registros para detalles.",
|
||||
"fr_FR": "Le XCI ne peut être restauré. Référez-vous aux journaux pour détails.",
|
||||
"he_IL": "לא ניתן להחזיר את XCI לגרסתו המקורית. עיין ביומנים לפרטים.",
|
||||
"it_IT": "XCI non può essere ripristinato. Controlla i log per dettagli.",
|
||||
"ja_JP": "XCIは元に戻せません。詳細はログを確認してください。",
|
||||
"ko_KR": "XCI는 복원할 수 없습니다. 자세한 내용은 로그를 확인.",
|
||||
"no_NO": "XCI kan ikke gjenopprettes. Sjekk loggene for detaljer.",
|
||||
"pl_PL": "XCI nie może zostać przywrócone. Sprawdź dzienniki, aby uzyskać szczegóły.",
|
||||
"pt_BR": "XCI não pode ser desfeito. Verifique os logs para detalhes.",
|
||||
"ru_RU": "XCI не может быть восстановлен. Проверьте журналы для подробностей.",
|
||||
"sv_SE": "XCI kan inte återställas. Kontrollera loggen för detaljer.",
|
||||
"th_TH": "ไม่สามารถคืนค่า XCI ได้ โปรดตรวจสอบบันทึกสำหรับรายละเอียด",
|
||||
"tr_TR": "XCI geri alınamaz. Ayrıntılar için günlükleri kontrol edin.",
|
||||
"uk_UA": "XCI не можна відновити. Перевірте журнали для деталей.",
|
||||
"zh_CN": "XCI 不能恢复。查看日志以获取详情。",
|
||||
"zh_TW": "XCI 無法恢復。檢查日誌以取得詳情。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_ReadOnlyFileCannotFix",
|
||||
"Translations": {
|
||||
"ar_SA": "XCI للقراءة فقط ولا يمكن جعله قابلًا للكتابة. تحقق من السجلات للتفاصيل.",
|
||||
"de_DE": "XCI ist schreibgeschützt und konnte nicht beschreibbar gemacht werden. Überprüfen Sie die Logs für Details.",
|
||||
"el_GR": "Το XCI είναι μόνο για ανάγνωση και δεν γίνεται γράψιμο. Ελέγξτε τα logs για λεπτομέρειες.",
|
||||
"en_US": "XCI is Read Only and could not be made writable. Check logs for details.",
|
||||
"es_ES": "XCI es solo lectura y no se puede escribir. Verifica los registros para detalles.",
|
||||
"fr_FR": "XCI en Lecture Seule et n'a pas pu être rendu écrivable. Référez-vous aux journaux pour détails.",
|
||||
"he_IL": "XCI רק לקריאה ולא ניתן להפוך אותו לניתן לכתיבה. בדוק את היומנים לפרטים.",
|
||||
"it_IT": "XCI è solo lettura e non può essere scritto. Controlla i log per dettagli.",
|
||||
"ja_JP": "XCIは読み取り専用で書き込み不可。ログを確認してください。",
|
||||
"ko_KR": "XCI 파일은 읽기 전용이며 쓰기 불가. 로그를 확인하십시오.",
|
||||
"no_NO": "XCI er skrivebeskyttet og kunne ikke gjøres skrivbar. Sjekk loggene for detaljer.",
|
||||
"pl_PL": "XCI jest tylko do odczytu i nie można zapisać. Sprawdź logi dla szczegółów.",
|
||||
"pt_BR": "XCI é somente leitura e não pode ser gravado. Verifique os logs para detalhes.",
|
||||
"ru_RU": "XCI только для чтения, не стал доступен для записи. Проверьте журналы для подробностей.",
|
||||
"sv_SE": "XCI är skrivskyddad och kunde inte göras skrivbar. Kontrollera loggen för detaljer.",
|
||||
"th_TH": "XCI เป็นอ่านอย่างเดียวและไม่สามารถเขียนได้ ตรวจสอบบันทึกสำหรับรายละเอียด",
|
||||
"tr_TR": "XCI sadece okunabilir, yazılamaz. Günlükleri kontrol edin için detaylar.",
|
||||
"uk_UA": "XCI тільки для читання і не можна записати. Перевірте логи для деталей.",
|
||||
"zh_CN": "XCI 只读,无法写入。查看日志以获取详情。",
|
||||
"zh_TW": "XCI 檔案唯讀,無法寫入。檢查日誌以取得詳情。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_FileSizeChanged",
|
||||
"Translations": {
|
||||
"ar_SA": "تم تغيير حجم XCI منذ مسحه ضوئيًا. تأكد من أن الملف غير قيد الكتابة وحاول مرة أخرى.",
|
||||
"de_DE": "Die Größe von XCI hat sich seit dem Scannen geändert. Stellen Sie sicher, dass die Datei nicht beschrieben wird, und versuchen Sie es erneut.",
|
||||
"el_GR": "Το μέγεθος του XCI έχει αλλάξει από τότε που σκανάρεται. Ελέγξτε ότι το αρχείο δεν γράφεται και προσπαθήστε ξανά.",
|
||||
"en_US": "XCI size changed since last scan. Ensure the file is not being written to and try again.",
|
||||
"es_ES": "El tamaño de XCI ha cambiado desde que fue escaneado. Verifica que no se esté escribiendo al archivo y vuelve a intentarlo.",
|
||||
"fr_FR": "La taille de XCI a changé depuis son analyse. Vérifiez que le fichier n’est pas en cours d’écriture, puis réessayez.",
|
||||
"he_IL": "גודל ה-XCI השתנה מאז סריקתו. ודא שהקובץ לא נכתב ונסה שוב.",
|
||||
"it_IT": "La dimensione di XCI è cambiata da quando è stato scansionato. Controlla che il file non sia scritto e riprova.",
|
||||
"ja_JP": "XCIのサイズがスキャン後に変更されました。ファイルが書き込まれていないことを確認し、再試行してください。",
|
||||
"ko_KR": "XCI 크기가 스캔 후 변경되었습니다. 파일이 쓰여지고 있지 않은지 확인하고 다시 시도하세요.",
|
||||
"no_NO": "XCI har endret størrelse siden den ble skannet. Kontroller at det ikke skrives til filen, og prøv på nytt.",
|
||||
"pl_PL": "Rozmiar XCI zmienił się od momentu zeskanowania. Sprawdź, czy plik nie jest zapisywany, a następnie spróbuj ponownie.",
|
||||
"pt_BR": "O tamanho de XCI mudou desde que foi escaneado. Verifique se o arquivo não está sendo gravado e tente novamente.",
|
||||
"ru_RU": "Размер XCI изменился после сканирования. Проверьте, не записывается ли файл, и попробуйте снова.",
|
||||
"sv_SE": "XCI har ändrats i storlek sedan den lästes av. Kontrollera att filen inte skrivs till och försök igen.",
|
||||
"th_TH": "ขนาด XCI เปลี่ยนไปตั้งแต่การสแกนครั้งล่าสุด ตรวจสอบว่าไฟล์ไม่ได้ถูกเขียน และลองใหม่",
|
||||
"tr_TR": "XCI dosyasının boyutu tarandıktan sonra değişti. Dosyaya yazılmadığından emin olun ve tekrar deneyin.",
|
||||
"uk_UA": "Розмір XCI змінився з моменту сканування. Перевірте, чи не записується файл, та спробуйте знову.",
|
||||
"zh_CN": "XCI 在扫描后大小发生了变化。请检查文件是否未被写入,然后重试。",
|
||||
"zh_TW": "XCI 檔案大小自上次掃描以來已經改變。請檢查檔案是否未被寫入,然後再嘗試。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_FreeSpaceCheckFailed",
|
||||
"Translations": {
|
||||
"ar_SA": "XCI يحتوي على بيانات في المساحة الحرة. لا يعد من الآمن تقليصه.",
|
||||
"de_DE": "XCI enthält Daten im freien Speicherbereich. Es ist nicht sicher, sie zu trimmen.",
|
||||
"el_GR": "Το XCI περιέχει δεδομένα στην περιοχή ελεύθερου χώρου. Δεν είναι ασφαλές να το μειώσετε.",
|
||||
"en_US": "XCI has data in the free space area. It is not safe to trim.",
|
||||
"es_ES": "XCI tiene datos en el área de espacio libre. No es seguro recortarlo.",
|
||||
"fr_FR": "XCI contient des données dans la zone d'espace libre. Il n'est pas sûr de le réduire.",
|
||||
"he_IL": "XCI מכיל נתונים באזור של שטח פנוי. לא בטוח לגזור אותו.",
|
||||
"it_IT": "XCI contiene dati nell'area di spazio libero. Non è sicuro ridurre la sua dimensione.",
|
||||
"ja_JP": "XCIファイルには空き領域にデータが含まれているため、トリミングするのは安全ではありません。",
|
||||
"ko_KR": "XCI 파일에 여유 공간 영역에 데이터가 있으므로 트리밍하는 것이 안전하지 않습니다.",
|
||||
"no_NO": "XCI har data i den ledige plassen. Det er ikke trygt å trimme den.",
|
||||
"pl_PL": "XCI zawiera dane w obszarze wolnego miejsca. Nie jest bezpieczne go przycinać.",
|
||||
"pt_BR": "XCI tem dados na área de espaço livre. Não é seguro reduzi-lo.",
|
||||
"ru_RU": "XCI содержит данные в свободной области. Его обрезка небезопасна.",
|
||||
"sv_SE": "XCI har data i det lediga utrymmet. Det är inte säkert att optimera.",
|
||||
"th_TH": "XCI มีข้อมูลในพื้นที่ว่าง จึงไม่ปลอดภัยที่จะทำการตัดแต่ง",
|
||||
"tr_TR": "XCI dosyasının boş alanında veriler var. Bu yüzden kesilmesi güvenli değildir.",
|
||||
"uk_UA": "XCI містить дані в зоні вільного простору. Тому обрізка небезпечна.",
|
||||
"zh_CN": "XCI 文件的空闲区域内有数据。不能安全瘦身。",
|
||||
"zh_TW": "XCI 檔案有數據儲存於空閒區域。修剪不安全。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_InvalidXCIFile",
|
||||
"Translations": {
|
||||
"ar_SA": "XCI يحتوي على بيانات غير صالحة. تحقق من السجلات للتفاصيل.",
|
||||
"de_DE": "XCI enthält ungültige Daten. Überprüfen Sie die Protokolle für Details.",
|
||||
"el_GR": "Το XCI περιέχει μη έγκυρα δεδομένα. Ελέγξτε τα αρχεία καταγραφής για λεπτομέρειες.",
|
||||
"en_US": "XCI contains invalid data. Check logs for details.",
|
||||
"es_ES": "XCI contiene datos inválidos. Lee el registro para detalles.",
|
||||
"fr_FR": "XCI contient des données invalides. Référez-vous aux journaux pour détails.",
|
||||
"he_IL": "XCI מכיל נתונים לא חוקיים. בדוק את היומנים לפרטים.",
|
||||
"it_IT": "XCI contiene dati non validi. Controlla i log per dettagli.",
|
||||
"ja_JP": "XCIファイルに無効なデータが含まれています。ログを確認してください。",
|
||||
"ko_KR": "XCI 파일에 유효하지 않은 데이터가 포함되어 있습니다. 로그를 확인하세요.",
|
||||
"no_NO": "XCI-filen inneholder ugyldige data. Sjekk loggene for detaljer.",
|
||||
"pl_PL": "XCI zawiera nieprawidłowe dane. Sprawdź dzienniki, aby uzyskać szczegóły.",
|
||||
"pt_BR": "XCI contém dados inválidos. Verifique os logs para detalhes.",
|
||||
"ru_RU": "XCI содержит недопустимые данные. Проверьте журналы для подробностей.",
|
||||
"sv_SE": "XCI-filen innehåller ogiltig data. Kontrollera loggen för detaljer.",
|
||||
"th_TH": "XCI มีข้อมูลที่ไม่ถูกต้อง โปรดตรวจสอบบันทึกสำหรับรายละเอียด",
|
||||
"tr_TR": "XCI dosyası geçersiz veriler içeriyor. Günlükleri kontrol edin.",
|
||||
"uk_UA": "XCI містить недійсні дані. Перевірте журнали для деталей.",
|
||||
"zh_CN": "XCI 文件含有无效数据。查看日志以获得更多细节。",
|
||||
"zh_TW": "XCI 檔案帶有無效的數據。檢查日誌以取得更多資訊"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_FileIOWriteError",
|
||||
"Translations": {
|
||||
"ar_SA": "لا يمكن فتح XCI للكتابة. تحقق من السجلات للتفاصيل.",
|
||||
"de_DE": "XCI konnte nicht zum Schreiben geöffnet werden. Überprüfen Sie die Protokolle für Details.",
|
||||
"el_GR": "Το XCI δεν μπόρεσε να ανοιχτεί για εγγραφή. Ελέγξτε τα αρχεία καταγραφής για λεπτομέρειες.",
|
||||
"en_US": "XCI could not be opened for writing. Check logs for details.",
|
||||
"es_ES": "XCI no se puede abrir para escribir. Lee el registro para detalles.",
|
||||
"fr_FR": "XCI n'a pas pu être ouvert pour écriture. Consultez les journaux pour détails.",
|
||||
"he_IL": "לא ניתן לפתוח XCI לכתיבה. בדוק את היומנים לפרטים.",
|
||||
"it_IT": "XCI non può essere aperto in scrittura. Controlla i log per dettagli.",
|
||||
"ja_JP": "XCIは書き込み用に開けませんでした。ログを確認してください。",
|
||||
"ko_KR": "XCI를 쓰기 위해 열 수 없습니다. 로그를 확인하세요.",
|
||||
"no_NO": "XCI kunne ikke åpnes for skriving. Sjekk loggene for detaljer.",
|
||||
"pl_PL": "Nie można otworzyć XCI do zapisu. Sprawdź dzienniki, aby uzyskać szczegóły.",
|
||||
"pt_BR": "XCI não pôde ser aberto para gravação. Verifique os logs para detalhes.",
|
||||
"ru_RU": "Не удалось открыть XCI для записи. Проверьте журналы для подробностей.",
|
||||
"sv_SE": "XCI kunde inte öppnas för skrivning. Kontrollera loggen för detaljer.",
|
||||
"th_TH": "ไม่สามารถเปิด XCI เพื่อเขียนข้อมูลได้ โปรดตรวจสอบบันทึกสำหรับรายละเอียด",
|
||||
"tr_TR": "XCI yazma için açılamadı. Günlükleri kontrol edin.",
|
||||
"uk_UA": "Не вдалося відкрити XCI для запису. Перевірте журнали для деталей.",
|
||||
"zh_CN": "XCI 不能写入。查看日志以获得更多细节。",
|
||||
"zh_TW": "XCI 無法開啟以進行寫入。請檢查日誌以取得更多資訊。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_FailedPrimaryText",
|
||||
"Translations": {
|
||||
"ar_SA": "فشل في تقليم XCI",
|
||||
"de_DE": "Trimming der XCI fehlgeschlagen",
|
||||
"el_GR": "Η περικοπή του XCI απέτυχε",
|
||||
"en_US": "Failed to trim XCI",
|
||||
"es_ES": "El recorte del XCI falló",
|
||||
"fr_FR": "Réduction du XCI a échoué",
|
||||
"he_IL": "נכשל בניסיונות לקצץ את XCI",
|
||||
"it_IT": "Riduzione del XCI fallita",
|
||||
"ja_JP": "XCIのトリミングに失敗しました",
|
||||
"ko_KR": "XCI 트리밍에 실패",
|
||||
"no_NO": "Trimming av XCI mislyktes",
|
||||
"pl_PL": "Nie udało się przyciąć XCI",
|
||||
"pt_BR": "A redução do XCI falhou",
|
||||
"ru_RU": "Обрезка XCI не удалась",
|
||||
"sv_SE": "Optimering av XCI misslyckades",
|
||||
"th_TH": "การตัดแต่ง XCI ล้มเหลว",
|
||||
"tr_TR": "XCI kesme başarısız",
|
||||
"uk_UA": "Не вдалося обрізати XCI",
|
||||
"zh_CN": "XCI 瘦身失败",
|
||||
"zh_TW": "修剪 XCI 失敗"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_Cancelled",
|
||||
"Translations": {
|
||||
"ar_SA": "تم إلغاء العملية",
|
||||
"de_DE": "Der Vorgang wurde abgebrochen",
|
||||
"el_GR": "Η λειτουργία ακυρώθηκε",
|
||||
"en_US": "The operation was cancelled",
|
||||
"es_ES": "La operación fue cancelada",
|
||||
"fr_FR": "L'opération a été annulée",
|
||||
"he_IL": "הפעולה בוטלה",
|
||||
"it_IT": "L'operazione è stata annullata",
|
||||
"ja_JP": "操作がキャンセルされました",
|
||||
"ko_KR": "작업이 취소됨",
|
||||
"no_NO": "Operasjonen ble avlyst",
|
||||
"pl_PL": "Operacja została anulowana",
|
||||
"pt_BR": "A operação foi cancelada",
|
||||
"ru_RU": "Операция была отменена",
|
||||
"sv_SE": "Åtgärden avbröts",
|
||||
"th_TH": "การดำเนินการถูกยกเลิกแล้ว",
|
||||
"tr_TR": "İşlem iptal edildi",
|
||||
"uk_UA": "Операція перервана",
|
||||
"zh_CN": "操作已取消",
|
||||
"zh_TW": "操作已取消"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TrimFile_FileUndertermined",
|
||||
"Translations": {
|
||||
"ar_SA": "لم يتم إجراء أي عملية",
|
||||
"de_DE": "Es wurde keine Operation durchgeführt",
|
||||
"el_GR": "Καμία ενέργεια δεν εκτελέστηκε",
|
||||
"en_US": "No operation was performed",
|
||||
"es_ES": "No se realizó ninguna operación",
|
||||
"fr_FR": "Aucune opération n'a été effectuée",
|
||||
"he_IL": "לא בוצעה שום פעולה",
|
||||
"it_IT": "Non è stata effettuata alcuna operazione",
|
||||
"ja_JP": "操作は実行されませんでした",
|
||||
"ko_KR": "작업이 수행되지 않음",
|
||||
"no_NO": "Ingen operasjon ble utført",
|
||||
"pl_PL": "Nie wykonano żadnej operacji",
|
||||
"pt_BR": "Nenhuma operação foi realizada",
|
||||
"ru_RU": "Операция не была выполнена",
|
||||
"sv_SE": "Ingen åtgärd genomfördes",
|
||||
"th_TH": "ไม่มีการดำเนินการใด ๆ ที่ถูกทำขึ้น",
|
||||
"tr_TR": "Hiçbir işlem yapılmadı",
|
||||
"uk_UA": "Операція не була виконана",
|
||||
"zh_CN": "未执行操作",
|
||||
"zh_TW": "未執行任何操作"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatusCount",
|
||||
"Translations": {
|
||||
"ar_SA": "العناوين المحددة: {0}/{1}",
|
||||
"de_DE": "Titel Ausgewählt: {0}/{1}",
|
||||
"el_GR": "Τίτλοι Επιλεγμένοι: {0}/{1}",
|
||||
"en_US": "Titles Selected: {0}/{1}",
|
||||
"es_ES": "Títulos Seleccionados: {0}/{1}",
|
||||
"fr_FR": "Fichiers Sélectionnés: {0}/{1}",
|
||||
"he_IL": "כותרות נבחרות: {0}/{1}",
|
||||
"it_IT": "Titoli Selezionati: {0}/{1}",
|
||||
"ja_JP": "タイトル選択済み: {0}/{1}",
|
||||
"ko_KR": "선택된 타이틀: {0}/{1}",
|
||||
"no_NO": "Valgte Titler: {0}/{1}",
|
||||
"pl_PL": "Wybrane Tytuły: {0}/{1}",
|
||||
"pt_BR": "Títulos Selecionados: {0}/{1}",
|
||||
"ru_RU": "Файлы Выбраны: {0}/{1}",
|
||||
"sv_SE": "Markerade Spel: {0}/{1}",
|
||||
"th_TH": "เลือกหัวข้อ: {0}/{1}",
|
||||
"tr_TR": "Seçilen Başlıklar: {0}/{1}",
|
||||
"uk_UA": "Обрані Тайтли: {0}/{1}",
|
||||
"zh_CN": "已选标题: {0}/{1}",
|
||||
"zh_TW": "已選擇標題: {0}/{1}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatusCount_WithFilter",
|
||||
"Translations": {
|
||||
"ar_SA": "{0} من {1} عنوان(عناوين) مُحدد (عرض: {2})",
|
||||
"de_DE": "{0} von {1} Titel(n) Ausgewählt (Anzeige: {2})",
|
||||
"el_GR": "{0} από {1} Τίτλο(ους) Επιλεγμένο(οι) (Εμφάνιση: {2})",
|
||||
"en_US": "{0} of {1} Title(s) Selected (Display: {2})",
|
||||
"es_ES": "{0} de {1} Título(s) Seleccionado(s) (Mostrar: {2})",
|
||||
"fr_FR": "{0} sur {1} Fichier(s) Sélectionnés (Affichage: {2})",
|
||||
"he_IL": "{0} מתוך {1} כותר(ות) נבחר(ו) (הצגה: {2})",
|
||||
"it_IT": "{0} di {1} titoli selezionati (Visualizza: {2})",
|
||||
"ja_JP": "{0} / {1} タイトル選択済み (表示: {2})",
|
||||
"ko_KR": "{1}개 타이틀 중 {0}개 선택됨 (표시: {2})",
|
||||
"no_NO": "{0} av {1} Tittel(er) valgt (Visning: {2})",
|
||||
"pl_PL": "{0} z {1} wybranych tytuł(ów) (Wyświetl: {2})",
|
||||
"pt_BR": "{0} de {1} Título(s) Selecionado(s) (Exibir: {2})",
|
||||
"ru_RU": "{0} из {1} файл(а/ов) выбран(о) (Отображение: {2})",
|
||||
"sv_SE": "{0} av {1} spel markerade (Visning: {2})",
|
||||
"th_TH": "เลือก {0} จาก {1} รายการ (แสดงผล: {2})",
|
||||
"tr_TR": "{0} / {1} Başlık(lar) Seçildi (Gösterim: {2})",
|
||||
"uk_UA": "{0} з {1} тайтл(ів) обрано (Відображення: {2})",
|
||||
"zh_CN": "在 {1} 中选中了 {0} 个游戏 (显示:{2})",
|
||||
"zh_TW": "已選擇 {1} 之 {0} 的遊戲 (顯示:{2})"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_Trimming",
|
||||
"Translations": {
|
||||
"ar_SA": "جارٍ تقليم...",
|
||||
"de_DE": "Trimme...",
|
||||
"el_GR": "Κοπή...",
|
||||
"en_US": "Trimming...",
|
||||
"es_ES": "Recortando...",
|
||||
"fr_FR": "Réduction...",
|
||||
"he_IL": "חותך...",
|
||||
"it_IT": "Riducendo...",
|
||||
"ja_JP": "トリミング中...",
|
||||
"ko_KR": "트리밍 중...",
|
||||
"no_NO": "Trimming...",
|
||||
"pl_PL": "Przycinanie...",
|
||||
"pt_BR": "Reduzindo...",
|
||||
"ru_RU": "Обрезка...",
|
||||
"sv_SE": "Optimerar...",
|
||||
"th_TH": "กำลังตัดแต่ง...",
|
||||
"tr_TR": "Kesiliyor...",
|
||||
"uk_UA": "Обрізка...",
|
||||
"zh_CN": "瘦身中。。。",
|
||||
"zh_TW": "正在修剪..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_Untrimming",
|
||||
"Translations": {
|
||||
"ar_SA": "جارٍ إلغاء تقليم...",
|
||||
"de_DE": "Untrimming...",
|
||||
"el_GR": "Ανακάμψη...",
|
||||
"en_US": "Untrimming...",
|
||||
"es_ES": "Restaurando...",
|
||||
"fr_FR": "Restaurer...",
|
||||
"he_IL": "משחזר...",
|
||||
"it_IT": "Restaurando...",
|
||||
"ja_JP": "トリミング解除中...",
|
||||
"ko_KR": "트리밍 해제 중...",
|
||||
"no_NO": "Untrimming...",
|
||||
"pl_PL": "Przywracanie...",
|
||||
"pt_BR": "Restaurando redução...",
|
||||
"ru_RU": "Восстановление...",
|
||||
"sv_SE": "Återställer...",
|
||||
"th_TH": "กำลังฟื้นฟู...",
|
||||
"tr_TR": "Yeniden yapılandırılıyor...",
|
||||
"uk_UA": "Відновлення...",
|
||||
"zh_CN": "正在恢复...",
|
||||
"zh_TW": "正在恢復..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TitleStatus_Failed",
|
||||
"Translations": {
|
||||
"ar_SA": "فشل",
|
||||
"de_DE": "Fehlgeschlagen",
|
||||
"el_GR": "Απέτυχε",
|
||||
"en_US": "Failed",
|
||||
"es_ES": "Fallido",
|
||||
"fr_FR": "Échoué",
|
||||
"he_IL": "נכשל",
|
||||
"it_IT": "Fallito",
|
||||
"ja_JP": "失敗",
|
||||
"ko_KR": "실패",
|
||||
"no_NO": "Mislyktes",
|
||||
"pl_PL": "Niepowodzenie",
|
||||
"pt_BR": "Falhou",
|
||||
"ru_RU": "Ошибка",
|
||||
"sv_SE": "Misslyckades",
|
||||
"th_TH": "ล้มเหลว",
|
||||
"tr_TR": "Başarısız",
|
||||
"uk_UA": "Невдача",
|
||||
"zh_CN": "失败",
|
||||
"zh_TW": "失敗"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "TotalSavings",
|
||||
"Translations": {
|
||||
"ar_SA": "توفير المساحة:",
|
||||
"de_DE": "Platzeinsparung:",
|
||||
"el_GR": "Εξοικονόμηση Χώρου:",
|
||||
"en_US": "Space Savings:",
|
||||
"es_ES": "Ahorro de Espacio:",
|
||||
"fr_FR": "Économie d’Espace :",
|
||||
"he_IL": "חיסכון במקום:",
|
||||
"it_IT": "Risparmio di Spazio:",
|
||||
"ja_JP": "空き容量の節約:",
|
||||
"ko_KR": "공간 절약:",
|
||||
"no_NO": "Plassbesparelse:",
|
||||
"pl_PL": "Oszczędność miejsca:",
|
||||
"pt_BR": "Economia de Espaço:",
|
||||
"ru_RU": "Экономия места:",
|
||||
"sv_SE": "Utrymmesbesparing:",
|
||||
"th_TH": "การประหยัดพื้นที่:",
|
||||
"tr_TR": "Alan Tasarrufu:",
|
||||
"uk_UA": "Економія місця:",
|
||||
"zh_CN": "空间节省:",
|
||||
"zh_TW": "空間節省:"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "CanStillSaveMB",
|
||||
"Translations": {
|
||||
"ar_SA": "({0} MB المتبقية)",
|
||||
"de_DE": "({0} MB verbleibend)",
|
||||
"el_GR": "({0} MB απομένοντα)",
|
||||
"en_US": "({0} MB Remaining)",
|
||||
"es_ES": "({0} MB Restantes)",
|
||||
"fr_FR": "({0} Mo Restants)",
|
||||
"he_IL": "(נותרו {0} MB)",
|
||||
"it_IT": "({0} MB rimanenti)",
|
||||
"ja_JP": "(残り {0} MB)",
|
||||
"ko_KR": "(남은 {0} MB)",
|
||||
"no_NO": "({0} MB gjenstående)",
|
||||
"pl_PL": "({0} MB pozostałe)",
|
||||
"pt_BR": "({0} MB restantes)",
|
||||
"ru_RU": "(Осталось {0} Мб)",
|
||||
"sv_SE": "({0} MB kvar)",
|
||||
"th_TH": "(เหลือ {0} MB)",
|
||||
"tr_TR": "({0} MB Kalan)",
|
||||
"uk_UA": "(Залишилося {0} Мб)",
|
||||
"zh_CN": "(剩余 {0} MB)",
|
||||
"zh_TW": "(剩餘 {0} MB)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "SavingsMb",
|
||||
"Translations": {
|
||||
"ar_SA": null,
|
||||
"de_DE": null,
|
||||
"el_GR": null,
|
||||
"en_US": "{0} MB",
|
||||
"es_ES": null,
|
||||
"fr_FR": "{0} Mo",
|
||||
"he_IL": null,
|
||||
"it_IT": "{0} MB",
|
||||
"ja_JP": null,
|
||||
"ko_KR": "{0}MB",
|
||||
"no_NO": null,
|
||||
"pl_PL": null,
|
||||
"pt_BR": null,
|
||||
"ru_RU": "{0} Мб",
|
||||
"sv_SE": null,
|
||||
"th_TH": "{0} เมกะไบต์",
|
||||
"tr_TR": null,
|
||||
"uk_UA": "{0} Мб",
|
||||
"zh_CN": null,
|
||||
"zh_TW": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "SelectAll",
|
||||
"Translations": {
|
||||
"ar_SA": "اختر الكل",
|
||||
"de_DE": "Alles auswählen",
|
||||
"el_GR": "Επιλογή όλων",
|
||||
"en_US": "Select All",
|
||||
"es_ES": "Seleccionar Todo",
|
||||
"fr_FR": "Sélectionner Tout",
|
||||
"he_IL": "בחר הכל",
|
||||
"it_IT": "Seleziona tutto",
|
||||
"ja_JP": "すべて選択",
|
||||
"ko_KR": "모두 선택",
|
||||
"no_NO": "Velg alle",
|
||||
"pl_PL": "Zaznacz wszystko",
|
||||
"pt_BR": "Selecionar tudo",
|
||||
"ru_RU": "Выбрать все",
|
||||
"sv_SE": "Markera alla",
|
||||
"th_TH": "เลือกทั้งหมด",
|
||||
"tr_TR": "Hepsini seç",
|
||||
"uk_UA": "Вибрати все",
|
||||
"zh_CN": "选择全部",
|
||||
"zh_TW": "選擇全部"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DeselectAll",
|
||||
"Translations": {
|
||||
"ar_SA": "إلغاء تحديد",
|
||||
"de_DE": "Abwählen",
|
||||
"el_GR": "Αποεπιλογή",
|
||||
"en_US": "Deselect",
|
||||
"es_ES": "Deseleccionar",
|
||||
"fr_FR": "Désélectionner",
|
||||
"he_IL": "בטל בחירה",
|
||||
"it_IT": "Deseleziona",
|
||||
"ja_JP": "選択解除",
|
||||
"ko_KR": "선택 취소",
|
||||
"no_NO": "Avmarkere",
|
||||
"pl_PL": "Odznacz",
|
||||
"pt_BR": "Desmarcar",
|
||||
"ru_RU": "Отменить выбор",
|
||||
"sv_SE": "Avmarkera",
|
||||
"th_TH": "ยกเลิกการเลือก",
|
||||
"tr_TR": "Kaldır",
|
||||
"uk_UA": "Скасувати вибір",
|
||||
"zh_CN": "取消选择",
|
||||
"zh_TW": "取消選擇"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "SortName",
|
||||
"Translations": {
|
||||
"ar_SA": "عنوان",
|
||||
"de_DE": "Titel",
|
||||
"el_GR": "Τίτλος",
|
||||
"en_US": "Title",
|
||||
"es_ES": "Título",
|
||||
"fr_FR": "Titre",
|
||||
"he_IL": "כותרת",
|
||||
"it_IT": "Titolo",
|
||||
"ja_JP": "タイトル",
|
||||
"ko_KR": "타이틀",
|
||||
"no_NO": "Tittel",
|
||||
"pl_PL": "Tytuł",
|
||||
"pt_BR": "Título",
|
||||
"ru_RU": "Название",
|
||||
"sv_SE": "Titel",
|
||||
"th_TH": "ชื่อไฟล์",
|
||||
"tr_TR": "Başlık",
|
||||
"uk_UA": "Назва",
|
||||
"zh_CN": "标题",
|
||||
"zh_TW": "名稱"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "SortSaved",
|
||||
"Translations": {
|
||||
"ar_SA": "التوفير",
|
||||
"de_DE": "Einsparungen",
|
||||
"el_GR": "Εξοικονόμηση",
|
||||
"en_US": "Savings",
|
||||
"es_ES": "Ahorros",
|
||||
"fr_FR": "Économies",
|
||||
"he_IL": "חיסכון",
|
||||
"it_IT": "Risparmio",
|
||||
"ja_JP": "節約",
|
||||
"ko_KR": "절약",
|
||||
"no_NO": "Besparelser",
|
||||
"pl_PL": "Oszczędności",
|
||||
"pt_BR": "Economia",
|
||||
"ru_RU": "Экономия",
|
||||
"sv_SE": "Sparande",
|
||||
"th_TH": "การประหยัด",
|
||||
"tr_TR": "Tasarruf",
|
||||
"uk_UA": "Економія",
|
||||
"zh_CN": "节省",
|
||||
"zh_TW": "節省"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Trim",
|
||||
"Translations": {
|
||||
"ar_SA": "قص",
|
||||
"de_DE": "Trimmen",
|
||||
"el_GR": "Κοπή",
|
||||
"en_US": "Trim",
|
||||
"es_ES": "Recortar",
|
||||
"fr_FR": "Réduire",
|
||||
"he_IL": "גזירה",
|
||||
"it_IT": "Ridurre",
|
||||
"ja_JP": "トリム",
|
||||
"ko_KR": "트리밍",
|
||||
"no_NO": "Trim",
|
||||
"pl_PL": "Przyciąć",
|
||||
"pt_BR": "Reduzir",
|
||||
"ru_RU": "Обрезать",
|
||||
"sv_SE": "Trimma",
|
||||
"th_TH": "ตัดแต่ง",
|
||||
"tr_TR": "Kısalt",
|
||||
"uk_UA": "Обрізати",
|
||||
"zh_CN": "修剪",
|
||||
"zh_TW": "修剪"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "Untrim",
|
||||
"Translations": {
|
||||
"ar_SA": "استعادة",
|
||||
"de_DE": "Wiederherstellen",
|
||||
"el_GR": "Επαναφορά",
|
||||
"en_US": "Untrim",
|
||||
"es_ES": "Restaurar",
|
||||
"fr_FR": "Restaurer",
|
||||
"he_IL": "שחזור",
|
||||
"it_IT": "Ripristina",
|
||||
"ja_JP": "復元",
|
||||
"ko_KR": "복원",
|
||||
"no_NO": "Gjenopprett",
|
||||
"pl_PL": "Przywróć",
|
||||
"pt_BR": "Restaurar",
|
||||
"ru_RU": "Восстановить",
|
||||
"sv_SE": "Återställ",
|
||||
"th_TH": "กู้คืน",
|
||||
"tr_TR": "Geri Yükle",
|
||||
"uk_UA": "Відновити",
|
||||
"zh_CN": "恢复",
|
||||
"zh_TW": "恢復"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -26,7 +26,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
||||
case AppletId.LibAppletOff:
|
||||
return new BrowserApplet();
|
||||
case AppletId.MiiEdit:
|
||||
Logger.Warning?.Print(LogClass.Application, $"Please use the MiiEdit inside File/Open Applet");
|
||||
Logger.Warning?.Print(LogClass.Application, $"Please use the Mii Editor inside Actions/Tools");
|
||||
return new DummyApplet(system);
|
||||
case AppletId.Cabinet:
|
||||
return new CabinetApplet(system);
|
||||
|
||||
@ -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]);
|
||||
|
||||
@ -187,7 +187,7 @@ namespace Ryujinx.Ava.UI.Applet
|
||||
StringLengthMax = 25
|
||||
};
|
||||
(UserResult result, string userInput) =
|
||||
await SwkbdAppletDialog.ShowInputDialog(LocaleManager.Instance[LocaleKeys.CabinetDialog], args);
|
||||
await SwkbdAppletDialog.ShowInputDialog(LocaleManager.Instance[LocaleKeys.Amiibo_CabinetDialog], args);
|
||||
if (result == UserResult.Ok)
|
||||
{
|
||||
inputText = userInput;
|
||||
@ -212,11 +212,11 @@ namespace Ryujinx.Ava.UI.Applet
|
||||
{
|
||||
dialogCloseEvent.Set();
|
||||
await ContentDialogHelper.CreateInfoDialog(
|
||||
LocaleManager.Instance[LocaleKeys.CabinetScanDialog],
|
||||
LocaleManager.Instance[LocaleKeys.Amiibo_CabinetScanDialog],
|
||||
string.Empty,
|
||||
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
||||
string.Empty,
|
||||
LocaleManager.Instance[LocaleKeys.CabinetTitle]
|
||||
LocaleManager.Instance[LocaleKeys.Amiibo_CabinetTitle]
|
||||
);
|
||||
});
|
||||
dialogCloseEvent.WaitOne();
|
||||
|
||||
@ -103,10 +103,10 @@
|
||||
<MenuItem
|
||||
Command="{Binding TrimXci}"
|
||||
CommandParameter="{Binding}"
|
||||
Header="{ext:Locale GameListContextMenuTrimXCI}"
|
||||
Header="{ext:Locale XCITrimmer_GameListContextMenu_Trim}"
|
||||
IsEnabled="{Binding TrimXCIEnabled}"
|
||||
Icon="{ext:Icon fa-solid fa-scissors}"
|
||||
ToolTip.Tip="{ext:Locale GameListContextMenuTrimXCIToolTip}" />
|
||||
IsVisible="{Binding IsXCIFile}"
|
||||
Icon="{ext:Icon fa-solid fa-scissors}" />
|
||||
<MenuItem Header="{ext:Locale GameListContextMenuCacheManagement}" Icon="{ext:Icon fa-solid fa-memory}">
|
||||
<MenuItem
|
||||
Command="{Binding PurgePtcCache}"
|
||||
|
||||
@ -33,11 +33,11 @@ namespace Ryujinx.Ava.UI.Helpers
|
||||
|
||||
if (app.CurrentSavingsB < app.PotentialSavingsB)
|
||||
{
|
||||
return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TitleXCICanSaveLabel, ((app.PotentialSavingsB - app.CurrentSavingsB) / _bytesPerMB).CoerceAtLeast(0));
|
||||
return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.XCITrimmer_Title_CanSaveLabel, ((app.PotentialSavingsB - app.CurrentSavingsB) / _bytesPerMB).CoerceAtLeast(0));
|
||||
}
|
||||
else
|
||||
{
|
||||
return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TitleXCISavingLabel, (app.CurrentSavingsB / _bytesPerMB).CoerceAtLeast(0));
|
||||
return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.XCITrimmer_Title_SavingLabel, (app.CurrentSavingsB / _bytesPerMB).CoerceAtLeast(0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -31,10 +31,10 @@ namespace Ryujinx.Ava.UI.Helpers
|
||||
}
|
||||
|
||||
return app.PercentageProgress != null ? String.Empty :
|
||||
app.ProcessingOutcome is not OperationOutcome.Successful and not OperationOutcome.Undetermined ? LocaleManager.Instance[LocaleKeys.TitleXCIStatusFailedLabel] :
|
||||
app.Trimmable & app.Untrimmable ? LocaleManager.Instance[LocaleKeys.TitleXCIStatusPartialLabel] :
|
||||
app.Trimmable ? LocaleManager.Instance[LocaleKeys.TitleXCIStatusTrimmableLabel] :
|
||||
app.Untrimmable ? LocaleManager.Instance[LocaleKeys.TitleXCIStatusUntrimmableLabel] :
|
||||
app.ProcessingOutcome is not OperationOutcome.Successful and not OperationOutcome.Undetermined ? LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatus_FailedLabel] :
|
||||
app.Trimmable & app.Untrimmable ? LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatus_PartialLabel] :
|
||||
app.Trimmable ? LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatus_TrimmableLabel] :
|
||||
app.Untrimmable ? LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatus_UntrimmableLabel] :
|
||||
String.Empty;
|
||||
}
|
||||
|
||||
|
||||
@ -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],
|
||||
|
||||
@ -9,17 +9,17 @@ namespace Ryujinx.Ava.UI.Helpers
|
||||
{
|
||||
public string LocalizedText => opOutcome switch
|
||||
{
|
||||
OperationOutcome.NoTrimNecessary => LocaleManager.Instance[LocaleKeys.TrimXCIFileNoTrimNecessary],
|
||||
OperationOutcome.NoUntrimPossible => LocaleManager.Instance[LocaleKeys.TrimXCIFileNoUntrimPossible],
|
||||
OperationOutcome.NoTrimNecessary => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_NoTrimNecessary],
|
||||
OperationOutcome.NoUntrimPossible => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_NoUntrimPossible],
|
||||
OperationOutcome.ReadOnlyFileCannotFix => LocaleManager.Instance[
|
||||
LocaleKeys.TrimXCIFileReadOnlyFileCannotFix],
|
||||
LocaleKeys.XCITrimmer_TrimFile_ReadOnlyFileCannotFix],
|
||||
OperationOutcome.FreeSpaceCheckFailed => LocaleManager.Instance[
|
||||
LocaleKeys.TrimXCIFileFreeSpaceCheckFailed],
|
||||
OperationOutcome.InvalidXCIFile => LocaleManager.Instance[LocaleKeys.TrimXCIFileInvalidXCIFile],
|
||||
OperationOutcome.FileIOWriteError => LocaleManager.Instance[LocaleKeys.TrimXCIFileFileIOWriteError],
|
||||
OperationOutcome.FileSizeChanged => LocaleManager.Instance[LocaleKeys.TrimXCIFileFileSizeChanged],
|
||||
OperationOutcome.Cancelled => LocaleManager.Instance[LocaleKeys.TrimXCIFileCancelled],
|
||||
OperationOutcome.Undetermined => LocaleManager.Instance[LocaleKeys.TrimXCIFileFileUndertermined],
|
||||
LocaleKeys.XCITrimmer_TrimFile_FreeSpaceCheckFailed],
|
||||
OperationOutcome.InvalidXCIFile => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_InvalidXCIFile],
|
||||
OperationOutcome.FileIOWriteError => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_FileIOWriteError],
|
||||
OperationOutcome.FileSizeChanged => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_FileSizeChanged],
|
||||
OperationOutcome.Cancelled => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_Cancelled],
|
||||
OperationOutcome.Undetermined => LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_FileUndertermined],
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
|
||||
@ -317,40 +317,43 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
_amiiboSeries.Clear();
|
||||
_amiibos.Clear();
|
||||
|
||||
for (int i = 0; i < _amiiboList.Count; i++)
|
||||
foreach (var amiibo in _amiiboList)
|
||||
{
|
||||
if (!_amiiboSeries.Contains(_amiiboList[i].AmiiboSeries))
|
||||
if (!_amiiboSeries.Contains(amiibo.AmiiboSeries))
|
||||
{
|
||||
if (!ShowAllAmiibo)
|
||||
{
|
||||
foreach (AmiiboApiGamesSwitch game in _amiiboList[i].GamesSwitch)
|
||||
bool compatible = amiibo.GamesSwitch.Any(game => game != null && game.GameId.Contains(TitleId));
|
||||
if (compatible)
|
||||
{
|
||||
if (game != null)
|
||||
{
|
||||
if (game.GameId.Contains(TitleId))
|
||||
{
|
||||
AmiiboSeries.Add(_amiiboList[i].AmiiboSeries);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
_amiiboSeries.Add(amiibo.AmiiboSeries);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AmiiboSeries.Add(_amiiboList[i].AmiiboSeries);
|
||||
_amiiboSeries.Add(amiibo.AmiiboSeries);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (LastScannedAmiiboId != string.Empty)
|
||||
{
|
||||
SelectLastScannedAmiibo();
|
||||
}
|
||||
else
|
||||
if (ShowAllAmiibo && _amiiboSeries.Count > 0)
|
||||
{
|
||||
SeriesSelectedIndex = 0;
|
||||
}
|
||||
else if (LastScannedAmiiboId != string.Empty)
|
||||
{
|
||||
SelectLastScannedAmiibo();
|
||||
}
|
||||
else if (_amiiboSeries.Count > 0)
|
||||
{
|
||||
SeriesSelectedIndex = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
SeriesSelectedIndex = -1;
|
||||
}
|
||||
|
||||
FilterAmiibo();
|
||||
}
|
||||
|
||||
private void SelectLastScannedAmiibo()
|
||||
@ -360,59 +363,60 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
SeriesSelectedIndex = AmiiboSeries.IndexOf(scanned.AmiiboSeries);
|
||||
AmiiboSelectedIndex = AmiiboList.IndexOf(scanned);
|
||||
}
|
||||
|
||||
|
||||
private void FilterAmiibo()
|
||||
{
|
||||
_amiibos.Clear();
|
||||
|
||||
List<AmiiboApi> amiiboSortedList;
|
||||
|
||||
// If no series selected, just display all available amiibos
|
||||
if (_seriesSelectedIndex < 0)
|
||||
{
|
||||
amiiboSortedList = _amiiboList
|
||||
.OrderBy(amiibo => amiibo.AmiiboSeries)
|
||||
.ThenBy(x => x.Name)
|
||||
.ThenBy(amiibo => amiibo.Name)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
string selectedSeries = _amiiboSeries[SeriesSelectedIndex];
|
||||
|
||||
amiiboSortedList = _amiiboList
|
||||
.Where(amiibo => amiibo.AmiiboSeries == _amiiboSeries[SeriesSelectedIndex])
|
||||
.OrderBy(amiibo => amiibo.Name).ToList();
|
||||
.Where(amiibo => amiibo.AmiiboSeries == selectedSeries)
|
||||
.OrderBy(amiibo => amiibo.Name)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < amiiboSortedList.Count; i++)
|
||||
foreach (var amiibo in amiiboSortedList)
|
||||
{
|
||||
if (!_amiibos.Contains(amiiboSortedList[i]))
|
||||
if (!_showAllAmiibo)
|
||||
{
|
||||
if (!_showAllAmiibo)
|
||||
{
|
||||
foreach (AmiiboApiGamesSwitch game in amiiboSortedList[i].GamesSwitch)
|
||||
{
|
||||
if (game != null)
|
||||
{
|
||||
if (game.GameId.Contains(TitleId))
|
||||
{
|
||||
_amiibos.Add(amiiboSortedList[i]);
|
||||
bool compatible = amiibo.GamesSwitch.Any(game => game != null && game.GameId.Contains(TitleId));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (compatible)
|
||||
{
|
||||
_amiibos.Add(amiiboSortedList[i]);
|
||||
_amiibos.Add(amiibo);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_amiibos.Add(amiibo);
|
||||
}
|
||||
}
|
||||
|
||||
AmiiboSelectedIndex = 0;
|
||||
}
|
||||
int restoredIndex = -1;
|
||||
for (int i = 0; i < _amiibos.Count; i++)
|
||||
{
|
||||
if (_amiibos[i].GetId() == LastScannedAmiiboId)
|
||||
{
|
||||
restoredIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
AmiiboSelectedIndex = restoredIndex != -1 ? restoredIndex : (_amiibos.Count > 0 ? 0 : -1);
|
||||
}
|
||||
|
||||
private void SetAmiiboDetails()
|
||||
{
|
||||
ResetAmiiboPreview();
|
||||
@ -420,44 +424,40 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
Usage = string.Empty;
|
||||
|
||||
if (_amiiboSelectedIndex < 0 || _amiibos.Count < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AmiiboApi selected = _amiibos[_amiiboSelectedIndex];
|
||||
|
||||
string imageUrl = _amiiboList.FirstOrDefault(amiibo => amiibo.Equals(selected)).Image;
|
||||
string imageUrl = selected.Image;
|
||||
|
||||
StringBuilder usageStringBuilder = new();
|
||||
bool writable = false;
|
||||
|
||||
for (int i = 0; i < _amiiboList.Count; i++)
|
||||
foreach (var game in selected.GamesSwitch)
|
||||
{
|
||||
if (_amiiboList[i].Equals(selected))
|
||||
if (game != null && game.GameId.Contains(TitleId))
|
||||
{
|
||||
bool writable = false;
|
||||
|
||||
foreach (AmiiboApiGamesSwitch item in _amiiboList[i].GamesSwitch)
|
||||
foreach (var usageItem in game.AmiiboUsage)
|
||||
{
|
||||
if (item.GameId.Contains(TitleId))
|
||||
{
|
||||
foreach (AmiiboApiUsage usageItem in item.AmiiboUsage)
|
||||
{
|
||||
usageStringBuilder.Append($"{Environment.NewLine}- {usageItem.Usage.Replace("/", Environment.NewLine + "-")}");
|
||||
usageStringBuilder.Append($"{Environment.NewLine}- {usageItem.Usage.Replace("/", Environment.NewLine + "-")}");
|
||||
|
||||
writable = usageItem.Write;
|
||||
}
|
||||
}
|
||||
if (usageItem.Write)
|
||||
writable = true;
|
||||
}
|
||||
|
||||
if (usageStringBuilder.Length == 0)
|
||||
{
|
||||
usageStringBuilder.Append($"{LocaleManager.Instance[LocaleKeys.Unknown]}.");
|
||||
}
|
||||
|
||||
Usage = $"{LocaleManager.Instance[LocaleKeys.Usage]} {(writable ? $" ({LocaleManager.Instance[LocaleKeys.Writable]})" : string.Empty)} : {usageStringBuilder}";
|
||||
}
|
||||
}
|
||||
|
||||
if (usageStringBuilder.Length == 0)
|
||||
{
|
||||
usageStringBuilder.Append($"{LocaleManager.Instance[LocaleKeys.Amiibo_Unknown]}.");
|
||||
}
|
||||
|
||||
Usage =
|
||||
(writable
|
||||
? $"{LocaleManager.Instance[LocaleKeys.Amiibo_UsageWritable]}"
|
||||
: $"{LocaleManager.Instance[LocaleKeys.Amiibo_Usage]}")
|
||||
+ usageStringBuilder;
|
||||
|
||||
_ = UpdateAmiiboPreview(imageUrl);
|
||||
}
|
||||
|
||||
@ -510,8 +510,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
Logger.Error?.Print(LogClass.Application, $"Failed to request amiibo data: {exception}");
|
||||
}
|
||||
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogAmiiboApiTitle],
|
||||
LocaleManager.Instance[LocaleKeys.DialogAmiiboApiFailFetchMessage],
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.Amiibo_DialogApiTitle],
|
||||
LocaleManager.Instance[LocaleKeys.Amiibo_DialogApiFailFetchMessage],
|
||||
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
||||
string.Empty,
|
||||
LocaleManager.Instance[LocaleKeys.RyujinxInfo]);
|
||||
@ -560,8 +560,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
private static async Task ShowInfoDialog()
|
||||
{
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogAmiiboApiTitle],
|
||||
LocaleManager.Instance[LocaleKeys.DialogAmiiboApiConnectErrorMessage],
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.Amiibo_DialogApiTitle],
|
||||
LocaleManager.Instance[LocaleKeys.Amiibo_DialogApiConnectErrorMessage],
|
||||
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
||||
string.Empty,
|
||||
LocaleManager.Instance[LocaleKeys.RyujinxInfo]);
|
||||
|
||||
@ -456,6 +456,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
|
||||
public bool HasCompatibilityEntry => SelectedApplication.HasPlayabilityInfo;
|
||||
|
||||
public bool IsXCIFile => Path.GetExtension(SelectedApplication.Path)?.ToLower() == ".xci";
|
||||
|
||||
public bool HasDlc => ApplicationLibrary.HasDlcs(SelectedApplication.Id);
|
||||
|
||||
@ -907,25 +909,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,
|
||||
@ -935,7 +937,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)
|
||||
{
|
||||
@ -957,7 +959,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
waitingDialog.Close();
|
||||
|
||||
string message = LocaleManager.Instance.UpdateAndGetDynamicValue(
|
||||
LocaleKeys.DialogFirmwareInstallerFirmwareInstallSuccessMessage,
|
||||
LocaleKeys.Firmware_DialogFirmwareInstaller_FirmwareInstallSuccessMessage,
|
||||
firmwareVersion.VersionString);
|
||||
|
||||
await ContentDialogHelper.CreateInfoDialog(
|
||||
@ -1025,18 +1027,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.AreKeysAlredyPresent(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,
|
||||
@ -1046,7 +1048,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)
|
||||
{
|
||||
@ -1069,7 +1071,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
string message =
|
||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys
|
||||
.DialogKeysInstallerKeysInstallSuccessMessage);
|
||||
.Keys_DialogKeysInstaller_KeysInstallSuccessMessage);
|
||||
|
||||
await ContentDialogHelper.CreateInfoDialog(
|
||||
dialogTitle,
|
||||
@ -1091,7 +1093,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);
|
||||
@ -1357,9 +1359,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
Optional<IStorageFile> result = await StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.Firmware_InstallFromFile_DialogTitle],
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
{
|
||||
new(LocaleManager.Instance[LocaleKeys.FileDialogAllTypes])
|
||||
new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats])
|
||||
{
|
||||
Patterns = ["*.xci", "*.zip"],
|
||||
AppleUniformTypeIdentifiers = ["com.ryujinx.xci", "public.zip-archive"],
|
||||
@ -1388,7 +1391,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
public async Task InstallFirmwareFromFolder()
|
||||
{
|
||||
Optional<IStorageFolder> result = await StorageProvider.OpenSingleFolderPickerAsync();
|
||||
Optional<IStorageFolder> result = await StorageProvider.OpenSingleFolderPickerAsync(new FolderPickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.Firmware_InstallFromFolder_DialogTitle]
|
||||
});
|
||||
|
||||
if (result.HasValue)
|
||||
{
|
||||
@ -1400,6 +1406,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
Optional<IStorageFile> result = await StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.Keys_InstallFromFile_DialogTitle],
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
{
|
||||
new("KEYS")
|
||||
@ -1419,7 +1426,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
public async Task InstallKeysFromFolder()
|
||||
{
|
||||
Optional<IStorageFolder> result = await StorageProvider.OpenSingleFolderPickerAsync();
|
||||
Optional<IStorageFolder> result = await StorageProvider.OpenSingleFolderPickerAsync(new FolderPickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.Keys_InstallFromFolder_DialogTitle]
|
||||
});
|
||||
|
||||
if (result.HasValue)
|
||||
{
|
||||
@ -1773,14 +1783,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;
|
||||
@ -1841,17 +1851,35 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public async Task OpenBinFile()
|
||||
public async Task OpenCheatManagerForCurrentApp()
|
||||
{
|
||||
if (IsGameRunning)
|
||||
{
|
||||
string name = AppHost.Device.Processes.ActiveApplication.ApplicationControlProperties.Title[(int)AppHost.Device.System.State.DesiredTitleLanguage].NameString.ToString();
|
||||
|
||||
await StyleableAppWindow.ShowAsync(
|
||||
new CheatWindow(
|
||||
Window.VirtualFileSystem,
|
||||
AppHost.Device.Processes.ActiveApplication.ProgramIdText,
|
||||
name,
|
||||
SelectedApplication.Path)
|
||||
);
|
||||
|
||||
AppHost.Device.EnableCheats();
|
||||
}
|
||||
}
|
||||
|
||||
public async Task OpenAmiiboBinFile()
|
||||
{
|
||||
if (AppHost.Device.System.SearchingForAmiibo(out _) && IsGameRunning)
|
||||
{
|
||||
Optional<IStorageFile> result = await StorageProvider.OpenSingleFilePickerAsync(
|
||||
new FilePickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.OpenFileDialogTitle],
|
||||
Title = LocaleManager.Instance[LocaleKeys.Amiibo_OpenBinFileDialogTitle],
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
{
|
||||
new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats])
|
||||
new("BIN")
|
||||
{
|
||||
Patterns = ["*.bin"],
|
||||
}
|
||||
@ -2015,7 +2043,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
if (notifyUser != null)
|
||||
{
|
||||
await ContentDialogHelper.CreateWarningDialog(
|
||||
LocaleManager.Instance[LocaleKeys.TrimXCIFileFailedPrimaryText],
|
||||
LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFile_FailedPrimaryText],
|
||||
notifyUser
|
||||
);
|
||||
}
|
||||
@ -2041,18 +2069,17 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
if (trimmer.CanBeTrimmed)
|
||||
{
|
||||
double savings = (double)trimmer.DiskSpaceSavingsB / 1024.0 / 1024.0;
|
||||
double currentFileSize = (double)trimmer.FileSizeB / 1024.0 / 1024.0;
|
||||
double cartDataSize = (double)trimmer.DataSizeB / 1024.0 / 1024.0;
|
||||
string secondaryText = LocaleManager.Instance.UpdateAndGetDynamicValue(
|
||||
LocaleKeys.TrimXCIFileDialogSecondaryText, currentFileSize, cartDataSize, savings);
|
||||
int savings = (int)Math.Round((double)trimmer.DiskSpaceSavingsB / 1024.0 / 1024.0);
|
||||
int currentFileSize = (int)Math.Round((double)trimmer.FileSizeB / 1024.0 / 1024.0);
|
||||
int cartDataSize = (int)Math.Round((double)trimmer.DataSizeB / 1024.0 / 1024.0);
|
||||
string secondaryText = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.XCITrimmer_TrimFileDialog_SecondaryText, currentFileSize.ToString("0"), cartDataSize.ToString("0"), savings.ToString("0"));
|
||||
|
||||
UserResult result = await ContentDialogHelper.CreateConfirmationDialog(
|
||||
LocaleManager.Instance[LocaleKeys.TrimXCIFileDialogPrimaryText],
|
||||
LocaleManager.Instance[LocaleKeys.XCITrimmer_TrimFileDialog_PrimaryText],
|
||||
secondaryText,
|
||||
LocaleManager.Instance[LocaleKeys.Continue],
|
||||
LocaleManager.Instance[LocaleKeys.Cancel],
|
||||
LocaleManager.Instance[LocaleKeys.GameListContextMenuTrimXCI]
|
||||
LocaleManager.Instance[LocaleKeys.XCITrimmer_GameListContextMenu_Trim]
|
||||
);
|
||||
|
||||
if (result == UserResult.Yes)
|
||||
@ -2062,8 +2089,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
Dispatcher.UIThread.Post(() =>
|
||||
{
|
||||
StatusBarProgressStatusText =
|
||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarXCIFileTrimming,
|
||||
Path.GetFileName(filename));
|
||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.XCITrimmer_StatusBar_Trimming,
|
||||
Path.GetFileNameWithoutExtension(filename));
|
||||
StatusBarProgressStatusVisible = true;
|
||||
StatusBarProgressMaximum = 1;
|
||||
StatusBarProgressValue = 0;
|
||||
|
||||
@ -115,6 +115,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
nameof(PotentialSavings),
|
||||
nameof(ActualSavings),
|
||||
nameof(CanTrim),
|
||||
nameof(SavingsDifference),
|
||||
nameof(CanUntrim));
|
||||
|
||||
DisplayedChanged();
|
||||
@ -312,13 +313,14 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public void SelectDisplayed()
|
||||
public void SelectAll()
|
||||
{
|
||||
SelectedXCIFiles.Clear();
|
||||
SelectedXCIFiles.AddRange(DisplayedXCIFiles);
|
||||
SelectionChanged();
|
||||
}
|
||||
|
||||
public void DeselectDisplayed()
|
||||
public void DeselectAll()
|
||||
{
|
||||
SelectedXCIFiles.RemoveMany(DisplayedXCIFiles);
|
||||
SelectionChanged();
|
||||
@ -426,16 +428,16 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
return _processingMode switch
|
||||
{
|
||||
ProcessingMode.Trimming => string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerTitleStatusTrimming], DisplayedXCIFiles.Count),
|
||||
ProcessingMode.Untrimming => string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerTitleStatusUntrimming], DisplayedXCIFiles.Count),
|
||||
ProcessingMode.Trimming => LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatus_Trimming],
|
||||
ProcessingMode.Untrimming => LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatus_Untrimming],
|
||||
_ => string.Empty
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
return string.IsNullOrEmpty(Search) ?
|
||||
string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerTitleStatusCount], SelectedXCIFiles.Count, AllXCIFiles.Count) :
|
||||
string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerTitleStatusCountWithFilter], SelectedXCIFiles.Count, AllXCIFiles.Count, DisplayedXCIFiles.Count);
|
||||
string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatusCount], SelectedXCIFiles.Count, AllXCIFiles.Count) :
|
||||
string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmer_TitleStatusCount_WithFilter], SelectedXCIFiles.Count, AllXCIFiles.Count, DisplayedXCIFiles.Count);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -466,8 +468,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
return SortingField switch
|
||||
{
|
||||
SortField.Name => LocaleManager.Instance[LocaleKeys.XCITrimmerSortName],
|
||||
SortField.Saved => LocaleManager.Instance[LocaleKeys.XCITrimmerSortSaved],
|
||||
SortField.Name => LocaleManager.Instance[LocaleKeys.XCITrimmer_SortName],
|
||||
SortField.Saved => LocaleManager.Instance[LocaleKeys.XCITrimmer_SortSaved],
|
||||
_ => string.Empty,
|
||||
};
|
||||
}
|
||||
@ -517,7 +519,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerSavingsMb], AllXCIFiles.Sum(xci => xci.PotentialSavingsB / BytesPerMb));
|
||||
return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmer_SavingsMb], AllXCIFiles.Sum(xci => xci.PotentialSavingsB / BytesPerMb));
|
||||
}
|
||||
}
|
||||
|
||||
@ -525,7 +527,19 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerSavingsMb], AllXCIFiles.Sum(xci => xci.CurrentSavingsB / BytesPerMb));
|
||||
return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmer_SavingsMb], AllXCIFiles.Sum(xci => xci.CurrentSavingsB / BytesPerMb));
|
||||
}
|
||||
}
|
||||
|
||||
public string SavingsDifference
|
||||
{
|
||||
get
|
||||
{
|
||||
long potentialSavings = AllXCIFiles.Sum(xci => xci.PotentialSavingsB);
|
||||
long actualSavings = AllXCIFiles.Sum(xci => xci.CurrentSavingsB);
|
||||
long differenceMb = (potentialSavings - actualSavings) / BytesPerMb;
|
||||
|
||||
return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmer_CanStillSaveMB], differenceMb);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -105,7 +105,7 @@
|
||||
FontSize="10"
|
||||
LineHeight="12"
|
||||
PointerPressed="AmiiboLabel_OnPointerPressed"
|
||||
Text="{ext:Locale AboutAmiiboDisclaimerMessage}"
|
||||
Text="{ext:Locale Amiibo_AboutDisclaimerMessage}"
|
||||
TextAlignment="Center"
|
||||
TextWrapping="Wrap" />
|
||||
<StackPanel
|
||||
|
||||
@ -13,102 +13,101 @@
|
||||
x:DataType="viewModels:XciTrimmerViewModel"
|
||||
Focusable="True"
|
||||
mc:Ignorable="d">
|
||||
<Grid Margin="20 0 20 0" RowDefinitions="Auto,Auto,*,Auto,Auto">
|
||||
<Grid Margin="25,10,25,0" RowDefinitions="Auto,Auto,*,Auto,Auto">
|
||||
<Panel
|
||||
Margin="10 10 10 10"
|
||||
Margin="0,0,0,10"
|
||||
Grid.Row="0">
|
||||
<TextBlock Text="{Binding Status}" />
|
||||
</Panel>
|
||||
<Panel
|
||||
Margin="0 0 10 10"
|
||||
IsVisible="{Binding !Processing}"
|
||||
Grid.Row="1">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||
<StackPanel
|
||||
Grid.Column="0"
|
||||
Orientation="Horizontal">
|
||||
<DropDownButton
|
||||
Width="150"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
Content="{Binding SortingFieldName}">
|
||||
<DropDownButton.Flyout>
|
||||
<Flyout Placement="Bottom">
|
||||
<StackPanel
|
||||
Margin="0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical">
|
||||
<StackPanel>
|
||||
<RadioButton
|
||||
Checked="Sort_Checked"
|
||||
Content="{ext:Locale XCITrimmerSortName}"
|
||||
GroupName="Sort"
|
||||
IsChecked="{Binding IsSortedByName, Mode=OneTime}"
|
||||
Tag="Name" />
|
||||
<RadioButton
|
||||
Checked="Sort_Checked"
|
||||
Content="{ext:Locale XCITrimmerSortSaved}"
|
||||
GroupName="Sort"
|
||||
IsChecked="{Binding IsSortedBySaved, Mode=OneTime}"
|
||||
Tag="Saved" />
|
||||
</StackPanel>
|
||||
<Border
|
||||
Width="60"
|
||||
Height="2"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Stretch"
|
||||
BorderBrush="White"
|
||||
BorderThickness="0,1,0,0">
|
||||
<Separator Height="0" HorizontalAlignment="Stretch" />
|
||||
</Border>
|
||||
<Grid Margin="0,0,0,10" Grid.Row="1" IsVisible="{Binding !Processing}" ColumnDefinitions="Auto,*">
|
||||
<StackPanel
|
||||
Grid.Column="0"
|
||||
Orientation="Horizontal"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center">
|
||||
<Button
|
||||
Name="SelectAllButton"
|
||||
MinWidth="90"
|
||||
Margin="0,0,10,0"
|
||||
Command="{Binding SelectAll}">
|
||||
<TextBlock Text="{ext:Locale XCITrimmer_SelectAll}" />
|
||||
</Button>
|
||||
<Button
|
||||
Name="DeselectAllButton"
|
||||
MinWidth="90"
|
||||
Margin="0,0,0,0"
|
||||
Command="{Binding DeselectAll}">
|
||||
<TextBlock Text="{ext:Locale XCITrimmer_DeselectAll}" />
|
||||
</Button>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Orientation="Horizontal"
|
||||
Grid.Column="1"
|
||||
HorizontalAlignment="Right">
|
||||
<DropDownButton
|
||||
Width="150"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
Content="{Binding SortingFieldName}">
|
||||
<DropDownButton.Flyout>
|
||||
<Flyout Placement="Bottom">
|
||||
<StackPanel
|
||||
Margin="0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical">
|
||||
<StackPanel>
|
||||
<RadioButton
|
||||
Checked="Order_Checked"
|
||||
Content="{ext:Locale OrderAscending}"
|
||||
GroupName="Order"
|
||||
IsChecked="{Binding SortingAscending, Mode=OneTime}"
|
||||
Tag="Ascending" />
|
||||
Checked="Sort_Checked"
|
||||
Content="{ext:Locale XCITrimmer_SortName}"
|
||||
GroupName="Sort"
|
||||
IsChecked="{Binding IsSortedByName, Mode=OneTime}"
|
||||
Tag="Name" />
|
||||
<RadioButton
|
||||
Checked="Order_Checked"
|
||||
Content="{ext:Locale OrderDescending}"
|
||||
GroupName="Order"
|
||||
IsChecked="{Binding !SortingAscending, Mode=OneTime}"
|
||||
Tag="Descending" />
|
||||
Checked="Sort_Checked"
|
||||
Content="{ext:Locale XCITrimmer_SortSaved}"
|
||||
GroupName="Sort"
|
||||
IsChecked="{Binding IsSortedBySaved, Mode=OneTime}"
|
||||
Tag="Saved" />
|
||||
</StackPanel>
|
||||
</Flyout>
|
||||
</DropDownButton.Flyout>
|
||||
</DropDownButton>
|
||||
</StackPanel>
|
||||
<Border
|
||||
Width="60"
|
||||
Height="2"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Stretch"
|
||||
BorderBrush="White"
|
||||
BorderThickness="0,1,0,0">
|
||||
<Separator Height="0" HorizontalAlignment="Stretch" />
|
||||
</Border>
|
||||
<RadioButton
|
||||
Checked="Order_Checked"
|
||||
Content="{ext:Locale OrderAscending}"
|
||||
GroupName="Order"
|
||||
IsChecked="{Binding SortingAscending, Mode=OneTime}"
|
||||
Tag="Ascending" />
|
||||
<RadioButton
|
||||
Checked="Order_Checked"
|
||||
Content="{ext:Locale OrderDescending}"
|
||||
GroupName="Order"
|
||||
IsChecked="{Binding !SortingAscending, Mode=OneTime}"
|
||||
Tag="Descending" />
|
||||
</StackPanel>
|
||||
</Flyout>
|
||||
</DropDownButton.Flyout>
|
||||
</DropDownButton>
|
||||
<TextBox
|
||||
Grid.Column="1"
|
||||
MinHeight="29"
|
||||
MaxHeight="29"
|
||||
Margin="5 0 5 0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Width="200"
|
||||
MaxWidth="200"
|
||||
Margin="5,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
HorizontalAlignment="Right"
|
||||
Watermark="{ext:Locale Search}"
|
||||
Text="{Binding Search}" />
|
||||
<StackPanel
|
||||
Grid.Column="2"
|
||||
Orientation="Horizontal">
|
||||
<Button
|
||||
Name="SelectDisplayedButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Command="{Binding SelectDisplayed}">
|
||||
<TextBlock Text="{ext:Locale XCITrimmerSelectDisplayed}" />
|
||||
</Button>
|
||||
<Button
|
||||
Name="DeselectDisplayedButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Command="{Binding DeselectDisplayed}">
|
||||
<TextBlock Text="{ext:Locale XCITrimmerDeselectDisplayed}" />
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Panel>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Margin="0 0 0 10"
|
||||
Margin="0,0,0,20"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
BorderBrush="{DynamicResource AppListHoverBackgroundColor}"
|
||||
@ -124,45 +123,50 @@
|
||||
SelectedItems="{Binding SelectedDisplayedXCIFiles, Mode=OneWay}"
|
||||
ItemsSource="{Binding DisplayedXCIFiles}"
|
||||
IsEnabled="{Binding !Processing}">
|
||||
<ListBox.Styles>
|
||||
<Style Selector="ListBoxItem">
|
||||
<Setter Property="Margin" Value="0" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
</ListBox.Styles>
|
||||
<ListBox.DataTemplates>
|
||||
<DataTemplate
|
||||
DataType="models:XCITrimmerFileModel">
|
||||
<Panel Margin="10">
|
||||
<Grid ColumnDefinitions="65*,35*">
|
||||
<Grid ColumnDefinitions="65*,40*">
|
||||
<TextBlock
|
||||
Grid.Column="0"
|
||||
Margin="10,0,10,0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="2"
|
||||
TextWrapping="Wrap"
|
||||
TextTrimming="CharacterEllipsis"
|
||||
Text="{Binding Name}">
|
||||
</TextBlock>
|
||||
<Grid Grid.Column="1" ColumnDefinitions="50*,70*">
|
||||
<ProgressBar
|
||||
Height="10"
|
||||
Margin="10,0,10,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Center"
|
||||
CornerRadius="5"
|
||||
IsVisible="{Binding $parent[UserControl].((viewModels:XciTrimmerViewModel)DataContext).Processing}"
|
||||
Maximum="100"
|
||||
Minimum="0"
|
||||
Value="{Binding PercentageProgress}" />
|
||||
<TextBlock
|
||||
Grid.Column="0"
|
||||
Margin="10 0 10 0"
|
||||
Margin="10,0,10,0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="2"
|
||||
TextWrapping="Wrap"
|
||||
TextTrimming="CharacterEllipsis"
|
||||
Text="{Binding Name}">
|
||||
</TextBlock>
|
||||
<Grid Grid.Column="1" ColumnDefinitions="45*,55*">
|
||||
<ProgressBar
|
||||
Height="10"
|
||||
Margin="10 0 10 0"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Center"
|
||||
CornerRadius="5"
|
||||
IsVisible="{Binding $parent[UserControl].((viewModels:XciTrimmerViewModel)DataContext).Processing}"
|
||||
Maximum="100"
|
||||
Minimum="0"
|
||||
Value="{Binding PercentageProgress}" />
|
||||
<TextBlock
|
||||
Grid.Column="0"
|
||||
Margin="10 0 10 0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{Binding ., Converter={x:Static helpers:XCITrimmerFileStatusConverter.Instance}}">
|
||||
MaxLines="1"
|
||||
Text="{Binding ., Converter={x:Static helpers:XCITrimmerFileStatusConverter.Instance}}">
|
||||
<ToolTip IsOpen="{Binding IsFailed}">
|
||||
<ToolTip.Tip>
|
||||
<StackPanel
|
||||
IsVisible="{Binding IsFailed}">
|
||||
<StackPanel>
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
Text="{ext:Locale XCITrimmerTitleStatusFailed}" />
|
||||
Text="{ext:Locale XCITrimmer_TitleStatus_Failed}" />
|
||||
<TextBlock
|
||||
Text="{Binding ., Converter={x:Static helpers:XCITrimmerFileStatusDetailConverter.Instance}}"
|
||||
MaxLines="5"
|
||||
@ -172,74 +176,47 @@
|
||||
TextWrapping="Wrap"/>
|
||||
</StackPanel>
|
||||
</ToolTip.Tip>
|
||||
</TextBlock>
|
||||
<TextBlock
|
||||
Grid.Column="1"
|
||||
Margin="10 0 10 0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{Binding ., Converter={x:Static helpers:XCITrimmerFileSpaceSavingsConverter.Instance}}">>
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
</ToolTip>
|
||||
</TextBlock>
|
||||
<TextBlock
|
||||
Grid.Column="1"
|
||||
Margin="10,0,10,0"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{Binding ., Converter={x:Static helpers:XCITrimmerFileSpaceSavingsConverter.Instance}}">
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
</Panel>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ListBox.DataTemplates>
|
||||
<ListBox.Styles>
|
||||
<Style Selector="ListBoxItem">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
</ListBox.Styles>
|
||||
</ListBox>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Margin="0 0 0 10"
|
||||
HorizontalAlignment="Stretch"
|
||||
BorderBrush="{DynamicResource AppListHoverBackgroundColor}"
|
||||
BorderThickness="1"
|
||||
CornerRadius="5"
|
||||
Padding="2.5">
|
||||
<Grid ColumnDefinitions="Auto,*" RowDefinitions="Auto,Auto">
|
||||
<TextBlock
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Classes="h1"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{ext:Locale XCITrimmerPotentialSavings}" />
|
||||
<TextBlock
|
||||
Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
Classes="h1"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{ext:Locale XCITrimmerActualSavings}" />
|
||||
<TextBlock
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{Binding PotentialSavings}" />
|
||||
<TextBlock
|
||||
Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{Binding ActualSavings}" />
|
||||
</Grid>
|
||||
</Border>
|
||||
<StackPanel Grid.Row="3" Margin="0,0,0,20" Spacing="5" HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
MaxLines="1"
|
||||
Text="{ext:Locale XCITrimmer_TotalSavings}" />
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="Regular"
|
||||
MaxLines="1"
|
||||
Text="{Binding ActualSavings}" />
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="Regular"
|
||||
MaxLines="1"
|
||||
Text="{Binding SavingsDifference}" />
|
||||
</StackPanel>
|
||||
<Panel
|
||||
Grid.Row="4"
|
||||
Margin="0,10,0,0"
|
||||
HorizontalAlignment="Stretch">
|
||||
<Grid ColumnDefinitions="*,Auto">
|
||||
<StackPanel
|
||||
@ -250,18 +227,16 @@
|
||||
<Button
|
||||
Name="TrimButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Click="Trim"
|
||||
IsEnabled="{Binding CanTrim}">
|
||||
<TextBlock Text="{ext:Locale XCITrimmerTrim}" />
|
||||
<TextBlock Text="{ext:Locale XCITrimmer_Trim}" />
|
||||
</Button>
|
||||
<Button
|
||||
Name="UntrimButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Click="Untrim"
|
||||
IsEnabled="{Binding CanUntrim}">
|
||||
<TextBlock Text="{ext:Locale XCITrimmerUntrim}" />
|
||||
<TextBlock Text="{ext:Locale XCITrimmer_Untrim}" />
|
||||
</Button>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
@ -272,7 +247,6 @@
|
||||
<Button
|
||||
Name="CancellingButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Click="Cancel"
|
||||
IsEnabled="False">
|
||||
<Button.IsVisible>
|
||||
@ -286,7 +260,6 @@
|
||||
<Button
|
||||
Name="CancelButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Click="Cancel">
|
||||
<Button.IsVisible>
|
||||
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
||||
@ -299,10 +272,9 @@
|
||||
<Button
|
||||
Name="CloseButton"
|
||||
MinWidth="90"
|
||||
Margin="5"
|
||||
Click="Close"
|
||||
IsVisible="{Binding !Processing}">
|
||||
<TextBlock Text="{ext:Locale InputDialogClose}" />
|
||||
<TextBlock Text="{ext:Locale SettingsButtonClose}" />
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
@ -29,7 +29,7 @@ namespace Ryujinx.Ava.UI.Views.Dialog
|
||||
{
|
||||
ViewModel = new XciTrimmerViewModel(RyujinxApp.MainWindow.ViewModel)
|
||||
},
|
||||
Title = LocaleManager.Instance[LocaleKeys.XCITrimmerWindowTitle]
|
||||
Title = LocaleManager.Instance[LocaleKeys.XCITrimmer_MenuBarActions_OpenTrimmer]
|
||||
};
|
||||
|
||||
Style bottomBorder = new(x => x.OfType<Grid>().Name("DialogSpace").Child().OfType<Border>());
|
||||
|
||||
@ -167,19 +167,19 @@
|
||||
Icon="{ext:Icon fa-solid fa-stop}"
|
||||
InputGesture="Escape"
|
||||
IsEnabled="{Binding IsGameRunning}" />
|
||||
<MenuItem Command="{Binding SimulateWakeUpMessage}" Header="{ext:Locale MenuBarOptionsSimulateWakeUpMessage}" Icon="{ext:Icon fa-solid fa-sun}" />
|
||||
<MenuItem Command="{Binding SimulateWakeUpMessage}" Header="{ext:Locale MenuBarOptionsSimulateWakeUpMessage}" Icon="{ext:Icon fa-solid fa-sun}" InputGesture="Ctrl+M" />
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Command="{Binding OpenAmiiboWindow}"
|
||||
AttachedToVisualTree="ScanAmiiboMenuItem_AttachedToVisualTree"
|
||||
Header="{ext:Locale MenuBarActionsScanAmiibo}"
|
||||
Header="{ext:Locale Amiibo_MenuBarActions_ScanAmiibo}"
|
||||
Icon="{ext:Icon fa-solid fa-cube}"
|
||||
InputGesture="Ctrl + A"
|
||||
IsEnabled="{Binding IsAmiiboRequested}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenBinFile}"
|
||||
Command="{Binding OpenAmiiboBinFile}"
|
||||
AttachedToVisualTree="ScanBinAmiiboMenuItem_AttachedToVisualTree"
|
||||
Header="{ext:Locale MenuBarActionsScanAmiiboBin}"
|
||||
Header="{ext:Locale Amiibo_MenuBarActions_ScanAmiiboBin}"
|
||||
Icon="{ext:Icon fa-solid fa-cube}"
|
||||
IsVisible="{Binding CanScanAmiiboBinaries}"
|
||||
InputGesture="Ctrl + B"
|
||||
@ -197,9 +197,10 @@
|
||||
InputGesture="{Binding ShowUiKey}"
|
||||
IsEnabled="{Binding IsGameRunning}" />
|
||||
<MenuItem
|
||||
Name="CheatManagerMenuItem"
|
||||
Command="{Binding OpenCheatManagerForCurrentApp}"
|
||||
Header="{ext:Locale GameListContextMenuManageCheat}"
|
||||
Icon="{ext:Icon fa-solid fa-code}"
|
||||
InputGesture="Ctrl + C"
|
||||
IsEnabled="{Binding IsGameRunning}" />
|
||||
<Separator IsVisible="{Binding RenderDocIsAvailable}" />
|
||||
<MenuItem
|
||||
@ -226,13 +227,13 @@
|
||||
IsEnabled="{Binding IsGameRunning}" />
|
||||
</MenuItem>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarActions}" IsVisible="{Binding EnableNonGameRunningControls}">
|
||||
<MenuItem Header="{ext:Locale MenuBarActionsInstallKeys}" Icon="{ext:Icon fa-solid fa-key}">
|
||||
<MenuItem Command="{Binding InstallKeysFromFile}" Header="{ext:Locale MenuBarFileActionsInstallKeysFromFile}" Icon="{ext:Icon fa-solid fa-file-code}" />
|
||||
<MenuItem Command="{Binding InstallKeysFromFolder}" Header="{ext:Locale MenuBarFileActionsInstallKeysFromFolder}" Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
<MenuItem Header="{ext:Locale Keys_MenuBarActions_Install}" Icon="{ext:Icon fa-solid fa-key}">
|
||||
<MenuItem Command="{Binding InstallKeysFromFile}" Header="{ext:Locale Keys_MenuBarActions_InstallFromKeys}" Icon="{ext:Icon fa-solid fa-file-code}" />
|
||||
<MenuItem Command="{Binding InstallKeysFromFolder}" Header="{ext:Locale Keys_MenuBarFileActions_InstallFromFolder}" Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
</MenuItem>
|
||||
<MenuItem Header="{ext:Locale MenuBarActionsInstallFirmware}" Icon="{ext:Icon fa-solid fa-floppy-disk}">
|
||||
<MenuItem Command="{Binding InstallFirmwareFromFile}" Header="{ext:Locale MenuBarActionsInstallFirmwareFromFile}" Icon="{ext:Icon fa-solid fa-file-code}" />
|
||||
<MenuItem Command="{Binding InstallFirmwareFromFolder}" Header="{ext:Locale MenuBarActionsInstallFirmwareFromDirectory}" Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
<MenuItem Header="{ext:Locale Firmware_MenuBarActions_Install}" Icon="{ext:Icon fa-solid fa-floppy-disk}">
|
||||
<MenuItem Command="{Binding InstallFirmwareFromFile}" Header="{ext:Locale Firmware_MenuBarActions_InstallFromFile}" Icon="{ext:Icon fa-solid fa-file-code}" />
|
||||
<MenuItem Command="{Binding InstallFirmwareFromFolder}" Header="{ext:Locale Firmware_MenuBarActions_InstallFromDirectory}" Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
</MenuItem>
|
||||
<MenuItem Header="{ext:Locale MenuBarActionsManageFileTypes}" IsVisible="{Binding ManageFileTypesVisible}" Icon="{ext:Icon fa-solid fa-clipboard}">
|
||||
<MenuItem Name="InstallFileTypesMenuItem" Header="{ext:Locale MenuBarActionsInstallFileTypes}" IsEnabled="{Binding AreMimeTypesRegistered, Converter={x:Static BoolConverters.Not}}" Icon="{ext:Icon fa-solid fa-square-plus}" />
|
||||
@ -241,8 +242,8 @@
|
||||
<Separator />
|
||||
<MenuItem Header="{ext:Locale MenuBarActionsTools}" Icon="{ext:Icon fa-solid fa-toolbox}">
|
||||
<MenuItem
|
||||
Name="MiiAppletMenuItem" Header="{ext:Locale MenuBarActionsOpenMiiEditor}" Icon="{ext:Icon fa-solid fa-face-grin-wide}" ToolTip.Tip="{ext:Locale MenuBarActionsOpenMiiEditorToolTip}" />
|
||||
<MenuItem Name="XciTrimmerMenuItem" Header="{ext:Locale MenuBarActionsXCITrimmer}" Icon="{ext:Icon fa-solid fa-scissors}" />
|
||||
Name="MiiAppletMenuItem" Header="{ext:Locale MiiEditor_MenuBarActions_OpenEditor}" Icon="{ext:Icon fa-solid fa-face-grin-wide}" />
|
||||
<MenuItem Name="XciTrimmerMenuItem" Header="{ext:Locale XCITrimmer_MenuBarActions_OpenTrimmer}" Icon="{ext:Icon fa-solid fa-scissors}" ToolTip.Tip="{ext:Locale XCITrimmer_MenuBarActions_OpenTrimmer_ToolTip}" />
|
||||
</MenuItem>
|
||||
</MenuItem>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarView}">
|
||||
|
||||
@ -43,7 +43,6 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
PauseEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.Pause());
|
||||
ResumeEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.Resume());
|
||||
StopEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted());
|
||||
CheatManagerMenuItem.Command = Commands.CreateSilentFail(OpenCheatManagerForCurrentApp);
|
||||
InstallFileTypesMenuItem.Command = Commands.Create(InstallFileTypes);
|
||||
UninstallFileTypesMenuItem.Command = Commands.Create(UninstallFileTypes);
|
||||
XciTrimmerMenuItem.Command = Commands.Create(XciTrimmerView.Show);
|
||||
@ -153,7 +152,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
ViewModel.LoadConfigurableHotKeys();
|
||||
}
|
||||
|
||||
public AppletMetadata MiiApplet => new(ViewModel.ContentManager, "miiEdit", 0x0100000000001009);
|
||||
public AppletMetadata MiiApplet => new(ViewModel.ContentManager, LocaleManager.Instance[LocaleKeys.MiiEditor_MenuBarActions_OpenEditor], 0x0100000000001009);
|
||||
|
||||
public async Task OpenMiiApplet()
|
||||
{
|
||||
@ -163,24 +162,6 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
await ViewModel.LoadApplication(appData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData);
|
||||
}
|
||||
|
||||
public async Task OpenCheatManagerForCurrentApp()
|
||||
{
|
||||
if (!ViewModel.IsGameRunning)
|
||||
return;
|
||||
|
||||
string name = ViewModel.AppHost.Device.Processes.ActiveApplication.ApplicationControlProperties.Title[(int)ViewModel.AppHost.Device.System.State.DesiredTitleLanguage].NameString.ToString();
|
||||
|
||||
await StyleableAppWindow.ShowAsync(
|
||||
new CheatWindow(
|
||||
Window.VirtualFileSystem,
|
||||
ViewModel.AppHost.Device.Processes.ActiveApplication.ProgramIdText,
|
||||
name,
|
||||
ViewModel.SelectedApplication.Path)
|
||||
);
|
||||
|
||||
ViewModel.AppHost.Device.EnableCheats();
|
||||
}
|
||||
|
||||
private void ScanAmiiboMenuItem_AttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e)
|
||||
{
|
||||
if (sender is MenuItem)
|
||||
|
||||
@ -50,17 +50,18 @@
|
||||
VerticalAlignment="Center"
|
||||
IsVisible="{Binding EnableNonGameRunningControls}"
|
||||
Text="{ext:Locale StatusBarGamesLoaded}" />
|
||||
<controls:MiniVerticalSeparator Grid.Column="2" IsVisible="{Binding StatusBarProgressStatusVisible}" />
|
||||
<TextBlock
|
||||
Name="StatusBarProgressStatus"
|
||||
Grid.Column="2"
|
||||
Grid.Column="3"
|
||||
MinWidth="200"
|
||||
Margin="10,0,5,0"
|
||||
Margin="5,0,5,0"
|
||||
VerticalAlignment="Center"
|
||||
IsVisible="{Binding StatusBarProgressStatusVisible}"
|
||||
Text="{Binding StatusBarProgressStatusText}" />
|
||||
<ProgressBar
|
||||
Name="LoadProgressBar"
|
||||
Grid.Column="3"
|
||||
Grid.Column="4"
|
||||
MinWidth="200"
|
||||
Height="6"
|
||||
VerticalAlignment="Center"
|
||||
@ -69,9 +70,9 @@
|
||||
IsVisible="{Binding StatusBarVisible}"
|
||||
Maximum="{Binding StatusBarProgressMaximum}"
|
||||
Value="{Binding StatusBarProgressValue}" />
|
||||
<controls:MiniVerticalSeparator Grid.Column="4" IsVisible="{Binding ShowTotalTimePlayed}" />
|
||||
<controls:MiniVerticalSeparator Grid.Column="5" IsVisible="{Binding ShowTotalTimePlayed}" />
|
||||
<TextBlock
|
||||
Grid.Column="5"
|
||||
Grid.Column="6"
|
||||
Margin="5,0,5,0"
|
||||
VerticalAlignment="Center"
|
||||
IsVisible="{Binding ShowTotalTimePlayed}"
|
||||
@ -267,7 +268,7 @@
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Grid.Column="3"
|
||||
Margin="0, 0, 5, 0"
|
||||
Margin="0,0,5,0"
|
||||
IsVisible="{Binding IsGameRunning}"
|
||||
VerticalAlignment="Center"
|
||||
Orientation="Horizontal">
|
||||
@ -305,7 +306,7 @@
|
||||
<Binding Path="UpdateAvailable" />
|
||||
</MultiBinding>
|
||||
</StackPanel.IsVisible>
|
||||
<Button Margin="0, 0, 5, -2"
|
||||
<Button Margin="0,0,5,-2"
|
||||
Command="{Binding UpdateCommand}"
|
||||
Background="{DynamicResource SystemAccentColor}">
|
||||
<TextBlock
|
||||
@ -326,10 +327,10 @@
|
||||
<controls:MiniVerticalSeparator IsVisible="{Binding IsGameRunning}" />
|
||||
<TextBlock
|
||||
Name="FirmwareStatus"
|
||||
Margin="5, 0, 0, 0"
|
||||
Margin="5,0,0,0"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
Text="{ext:Locale StatusBarSystemVersion}" />
|
||||
Text="{ext:Locale Firmware_StatusBar_Version}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@ -14,77 +14,79 @@
|
||||
x:DataType="viewModels:AmiiboWindowViewModel"
|
||||
CanResize="False"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
Width="800"
|
||||
Width="850"
|
||||
MinHeight="650"
|
||||
Height="650"
|
||||
Height="700"
|
||||
SizeToContent="Manual"
|
||||
MinWidth="600"
|
||||
Focusable="True">
|
||||
<Design.DataContext>
|
||||
<viewModels:AmiiboWindowViewModel />
|
||||
</Design.DataContext>
|
||||
<Grid RowDefinitions="Auto,Auto,*,Auto" Margin="15" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
|
||||
<Grid Name="FlushControls" ColumnDefinitions="Auto,Auto" Grid.Row="1" Margin="-15">
|
||||
<controls:RyujinxLogo
|
||||
<Grid Grid.Row="0" RowDefinitions="Auto,Auto,*,Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
|
||||
<!-- UI FlushControls -->
|
||||
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto,Auto" Name="FlushControls">
|
||||
<controls:RyujinxLogo
|
||||
Grid.Column="0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Top"
|
||||
Margin="8, 8, 7, 0"
|
||||
ToolTip.Tip="{ext:WindowTitle Amiibo}" />
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Margin="0, 0, 0, 20">
|
||||
<StackPanel Spacing="10" Orientation="Horizontal" HorizontalAlignment="Left">
|
||||
<TextBlock VerticalAlignment="Center" Text="{ext:Locale AmiiboSeriesLabel}" />
|
||||
<ComboBox Margin="0, 8, 0, 0" SelectedIndex="{Binding SeriesSelectedIndex}" ItemsSource="{Binding AmiiboSeries}" MinWidth="100" />
|
||||
</StackPanel>
|
||||
Margin="7,0,7,0"
|
||||
ToolTip.Tip="{ext:WindowTitle Amiibo_Amiibo}" />
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal">
|
||||
<TextBlock Margin="8,0,0,0" VerticalAlignment="Center" Text="{ext:Locale Amiibo_SeriesLabel}" />
|
||||
<ComboBox Margin="5,5,0,5" SelectedIndex="{Binding SeriesSelectedIndex}" ItemsSource="{Binding AmiiboSeries}" MinWidth="100" />
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Column="2" Margin="15,0,0,0" IsChecked="{Binding ShowAllAmiibo}">
|
||||
<TextBlock Text="{ext:Locale Amiibo_OptionsShowAllLabel}" />
|
||||
</CheckBox>
|
||||
<CheckBox Grid.Column="3" Margin="15,0,0,0" IsChecked="{Binding UseRandomUuid}" HotKey="H">
|
||||
<TextBlock Text="{ext:Locale Amiibo_OptionsUsRandomTagLabel}" />
|
||||
</CheckBox>
|
||||
</Grid>
|
||||
<Grid Name="NormalControls" ColumnDefinitions="*,*" Grid.Row="1" HorizontalAlignment="Stretch" >
|
||||
<StackPanel Spacing="10" Orientation="Horizontal" HorizontalAlignment="Left">
|
||||
<TextBlock VerticalAlignment="Center" Text="{ext:Locale AmiiboSeriesLabel}" />
|
||||
<ComboBox SelectedIndex="{Binding SeriesSelectedIndex}" ItemsSource="{Binding AmiiboSeries}" MinWidth="100" />
|
||||
|
||||
<!-- UI NormalControls -->
|
||||
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Name="NormalControls">
|
||||
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Margin="15,0,0,0" VerticalAlignment="Center" Text="{ext:Locale Amiibo_SeriesLabel}" />
|
||||
<ComboBox Margin="5,5,0,5" SelectedIndex="{Binding SeriesSelectedIndex}" ItemsSource="{Binding AmiiboSeries}" MinWidth="100" />
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Column="1" Margin="15,0,0,0" IsChecked="{Binding ShowAllAmiibo}">
|
||||
<TextBlock Text="{ext:Locale Amiibo_OptionsShowAllLabel}" />
|
||||
</CheckBox>
|
||||
<CheckBox Grid.Column="2" Margin="15,0,0,0" IsChecked="{Binding UseRandomUuid}" HotKey="H">
|
||||
<TextBlock Text="{ext:Locale Amiibo_OptionsUsRandomTagLabel}" />
|
||||
</CheckBox>
|
||||
</Grid>
|
||||
<DockPanel Grid.Row="2">
|
||||
|
||||
<!-- Amiibo ListBox, Images, Buttons -->
|
||||
<StackPanel Grid.Row="2" Margin="0,20,0,20" Orientation="Horizontal" HorizontalAlignment="Center" Spacing="50">
|
||||
<ListBox
|
||||
DockPanel.Dock="Left"
|
||||
Width="300"
|
||||
Margin="20"
|
||||
Padding="5"
|
||||
SelectionMode="Single"
|
||||
ItemsSource="{Binding AmiiboList}"
|
||||
SelectedIndex="{Binding AmiiboSelectedIndex}">
|
||||
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Margin="10, 0, 0 ,0" Text="{Binding Name}" />
|
||||
<TextBlock Margin="10,0,0,0" Text="{Binding Name}" />
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
<StackPanel Margin="20">
|
||||
<Image Source="{Binding AmiiboImage}" Height="350" Width="150" HorizontalAlignment="Center" />
|
||||
<ScrollViewer MaxHeight="120" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"
|
||||
Margin="20" VerticalAlignment="Top" HorizontalAlignment="Stretch">
|
||||
<TextBlock TextWrapping="Wrap" Text="{Binding Usage}" HorizontalAlignment="Center"
|
||||
TextAlignment="Center" />
|
||||
<StackPanel Width="300">
|
||||
<Image Source="{Binding AmiiboImage}" Height="400" Width="200" />
|
||||
<ScrollViewer MaxHeight="120" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Margin="20" VerticalAlignment="Top" HorizontalAlignment="Stretch">
|
||||
<TextBlock TextWrapping="Wrap" Text="{Binding Usage}" HorizontalAlignment="Center" TextAlignment="Center" />
|
||||
</ScrollViewer>
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
<Grid Grid.Row="3" ColumnDefinitions="Auto,Auto,*,Auto,Auto">
|
||||
<CheckBox Margin="10" Grid.Column="0" VerticalContentAlignment="Center"
|
||||
IsChecked="{Binding ShowAllAmiibo}"
|
||||
Content="{ext:Locale AmiiboOptionsShowAllLabel}" />
|
||||
<CheckBox HotKey="H"
|
||||
Margin="10" VerticalContentAlignment="Center" Grid.Column="1"
|
||||
IsChecked="{Binding UseRandomUuid}"
|
||||
Content="{ext:Locale AmiiboOptionsUsRandomTagLabel}" />
|
||||
</StackPanel>
|
||||
<Grid Grid.Row="3" Margin="0,0,10,10" ColumnDefinitions="Auto,Auto,*,Auto,Auto">
|
||||
<Button Grid.Column="3"
|
||||
IsEnabled="{Binding EnableScanning}"
|
||||
Width="80"
|
||||
Name="ScanButton"
|
||||
HotKey="Return"
|
||||
Content="{ext:Locale AmiiboScanButtonLabel}"
|
||||
Content="{ext:Locale Amiibo_ScanButtonLabel}"
|
||||
Click="ScanButton_Click" />
|
||||
<Button Grid.Column="4"
|
||||
Margin="10,0"
|
||||
Margin="10,0,0,0"
|
||||
Width="80"
|
||||
Name="CancelButton"
|
||||
HotKey="Escape"
|
||||
|
||||
@ -20,7 +20,7 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
FlushControls.IsVisible = !ConfigurationState.Instance.ShowOldUI;
|
||||
NormalControls.IsVisible = ConfigurationState.Instance.ShowOldUI;
|
||||
|
||||
Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo);
|
||||
Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo_Amiibo);
|
||||
}
|
||||
|
||||
public AmiiboWindow()
|
||||
@ -31,7 +31,7 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
|
||||
if (Program.PreviewerDetached)
|
||||
{
|
||||
Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo);
|
||||
Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo_Amiibo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,9 @@
|
||||
<KeyBinding Gesture="F9" Command="{Binding ToggleDockMode}" />
|
||||
<KeyBinding Gesture="Escape" Command="{Binding ExitCurrentState}" />
|
||||
<KeyBinding Gesture="Ctrl+A" Command="{Binding OpenAmiiboWindow}" />
|
||||
<KeyBinding Gesture="Ctrl+B" Command="{Binding OpenBinFile}" />
|
||||
<KeyBinding Gesture="Ctrl+B" Command="{Binding OpenAmiiboBinFile}" />
|
||||
<KeyBinding Gesture="Ctrl+C" Command="{Binding OpenCheatManagerForCurrentApp}" />
|
||||
<KeyBinding Gesture="Ctrl+M" Command="{Binding SimulateWakeUpMessage}" />
|
||||
<KeyBinding Gesture="Ctrl+Shift+R" Command="{Binding ReloadRenderDocApi}" />
|
||||
<KeyBinding Gesture="Ctrl+Shift+C" Command="{Binding ToggleCapture}" />
|
||||
</Window.KeyBindings>
|
||||
@ -107,24 +109,12 @@
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
IsVisible="{Binding ShowLoadProgress}" ColumnDefinitions="Auto,*">
|
||||
<Border
|
||||
Grid.RowSpan="2"
|
||||
Grid.Column="0"
|
||||
<Image
|
||||
Margin="20"
|
||||
Width="256"
|
||||
Height="256"
|
||||
Margin="10"
|
||||
Padding="4"
|
||||
BorderBrush="Black"
|
||||
BorderThickness="2"
|
||||
BoxShadow="4 4 32 8 #40000000"
|
||||
CornerRadius="3"
|
||||
IsVisible="{Binding ShowLoadProgress}">
|
||||
<Image
|
||||
Width="256"
|
||||
Height="256"
|
||||
IsVisible="{Binding ShowLoadProgress}"
|
||||
Source="{Binding SelectedIcon, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" />
|
||||
</Border>
|
||||
IsVisible="{Binding ShowLoadProgress}"
|
||||
Source="{Binding SelectedIcon, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" />
|
||||
<Grid
|
||||
Grid.Column="1"
|
||||
HorizontalAlignment="Stretch"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user