diff --git a/assets/Locales/Root.json b/assets/Locales/Root.json index aa8937247..d3926b4b1 100644 --- a/assets/Locales/Root.json +++ b/assets/Locales/Root.json @@ -600,31 +600,6 @@ "zh_TW": "設定(_S)" } }, - { - "ID": "MenuBarOptionsManageUserProfiles", - "Translations": { - "ar_SA": "_ملفات المستخدمين", - "de_DE": "_Benutzerprofile", - "el_GR": "_Προφίλ Χρηστών", - "en_US": "_User Profiles", - "es_ES": "_Perfiles de Usuario", - "fr_FR": "_Profils d'Utilisateurs", - "he_IL": "_פרופילי משתמש", - "it_IT": "_Profili utent", - "ja_JP": "ユーザプロファイル(_M)", - "ko_KR": "사용자 프로필(_M)", - "no_NO": "_Brukerprofiler", - "pl_PL": "_Profile użytkowników", - "pt_BR": "_Perfis de usuário", - "ru_RU": "_Учётные записи", - "sv_SE": "_Användarprofiler", - "th_TH": "_โปรไฟล์ผู้ใช้งาน", - "tr_TR": "_Kullanıcı Profilleri", - "uk_UA": "_Профілі користувачів", - "zh_CN": "用户配置文件(_M)", - "zh_TW": "使用者設定檔(_M)" - } - }, { "ID": "MenuBarActions", "Translations": { @@ -2679,25 +2654,25 @@ "ID": "CreateCustomConfigurationToolTip", "Translations": { "ar_SA": "ينشئ تكوينًا مستقلًا للعبة الحالية", - "de_DE": "Erstellt eine unabhängige Konfiguration für das aktuelle Spiel", - "el_GR": "Δημιουργεί μια ανεξάρτητη διαμόρφωση για το τρέχον παιχνίδι", - "en_US": "Creates an independent configuration for the selected game", - "es_ES": "Crea una configuración independiente para el juego actual", - "fr_FR": "Crée une configuration indépendante pour le jeu sélectionné", + "de_DE": "Erstellt eine unabhängige Konfiguration für das aktuelle Spiel.", + "el_GR": "Δημιουργεί μια ανεξάρτητη διαμόρφωση για το τρέχον παιχνίδι.", + "en_US": "Creates an independent configuration for the selected game.", + "es_ES": "Crea una configuración independiente para el juego actual.", + "fr_FR": "Crée une configuration indépendante pour le jeu sélectionné.", "he_IL": "יוצר תצורה עצמאית למשחק הנוכחי", - "it_IT": "Crea una configurazione indipendente per il gioco attuale", - "ja_JP": "現在のゲーム用の独立した設定を作成します", - "ko_KR": "현재 게임에 대한 독립적인 설정을 생성합니다", - "no_NO": "Oppretter en uavhengig konfigurasjon for det gjeldende spillet", - "pl_PL": "Tworzy niezależną konfigurację dla bieżącej gry", - "pt_BR": "Cria uma configuração independente para o jogo atual", - "ru_RU": "Создаёт независимую конфигурацию для выбранной игры", - "sv_SE": "Skapar en oberoende konfiguration för det aktuella spelet", + "it_IT": "Crea una configurazione indipendente per il gioco attuale.", + "ja_JP": "現在のゲーム用の独立した設定を作成します。", + "ko_KR": "현재 게임에 대한 독립적인 설정을 생성합니다.", + "no_NO": "Oppretter en uavhengig konfigurasjon for det gjeldende spillet.", + "pl_PL": "Tworzy niezależną konfigurację dla bieżącej gry.", + "pt_BR": "Cria uma configuração independente para o jogo atual.", + "ru_RU": "Создаёт независимую конфигурацию для выбранной игры.", + "sv_SE": "Skapar en oberoende konfiguration för det aktuella spelet.", "th_TH": "สร้างการกำหนดค่าที่เป็นอิสระสำหรับเกมปัจจุบัน", - "tr_TR": "Mevcut oyun için bağımsız bir yapılandırma oluşturur", - "uk_UA": "Створюйте незалежну конфігурацію для поточної гри", - "zh_CN": "为当前游戏创建独立的配置", - "zh_TW": "為已選擇的遊戲建立遊戲獨立自訂 (game-specific) 的設定檔" + "tr_TR": "Mevcut oyun için bağımsız bir yapılandırma oluşturur.", + "uk_UA": "Створює незалежну конфігурацію для поточної гри.", + "zh_CN": "为当前游戏创建独立的配置。", + "zh_TW": "為已選擇的遊戲建立獨立設定檔。" } }, { @@ -3581,7 +3556,7 @@ "ar_SA": "يعرض واجهة Ryujinx القديمة التي تذكر بإصدار Ryujinx 1.1.1403. هذا الخيار مفعل بشكل افتراضي على الأنظمة غير ويندوز.\n\nشريط العنوان الكلاسيكي عاد وتمت إعادة العروض الكبرى للتخطيط، مثل موضع التنقل في الإعدادات.", "de_DE": "Zeigt die ältere Ryujinx-Benutzeroberfläche, die an Ryujinx 1.1.1403 erinnert. Diese Option ist standardmäßig auf Plattformen aktiviert, die nicht Windows sind.\n\nDie klassische Titelleiste ist zurück und wesentliche Layoutänderungen werden rückgängig gemacht, wie zum Beispiel die Platzierung der Einstellungen-Navigation.", "el_GR": "Εμφανίζει την παλαιότερη διεπαφή χρήστη Ryujinx που θυμίζει το Ryujinx 1.1.1403. Αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή σε πλατφόρμες που δεν είναι Windows.\n\nΗ κλασική γραμμή τίτλου επιστρέφει και βασικές επεξεργασίες στη διάταξη αντιστρέφονται, όπως η θέση της πλοήγησης ρυθμίσεων.", - "en_US": "Shows the older Ryujinx UI reminiscent of Ryujinx 1.1.1403. This option enabled by default on platforms that are not Windows.\n\nThe classic title bar is back and major layout reworkings are reversed, such as the settings navigation placement.", + "en_US": "Shows the older Ryujinx UI reminiscent of Ryujinx 1.1.1403. This option is enabled by default on platforms that are not Windows.\n\nThe classic title bar is back and major layout reworkings are reversed, such as the settings navigation placement.", "es_ES": "Muestra la antigua interfaz Ryujinx que recuerda a Ryujinx 1.1.1403. Esta opción está activada por defecto en plataformas que no son Windows.\n\nLa barra de título clásica ha vuelto y los grandes cambios en el diseño se revierten, como la colocación de la navegación de ajustes.", "fr_FR": "Affiche l’ancienne interface Ryujinx rappelant Ryujinx 1.1.1403. Cette option est activée par défaut sur les plateformes autres que Windows.\n\nLa barre de titre classique est de retour et les grandes modifications de disposition sont annulées, comme le placement de la navigation des paramètres.", "he_IL": "מציג את ממשק המשתמש הישן של Ryujinx המזכיר את Ryujinx 1.1.1403. אפשרות זו מופעלת כברירת מחדל בפלטפורמות שאינן Windows.\n\nסרגל הכותרת הקלאסי חזר ועיצוב הממשק העיקרי התהפך, כמו מיקום הניווט בהגדרות.", @@ -11075,131 +11050,6 @@ "zh_TW": "右搖桿" } }, - { - "ID": "UserProfilesSelectedUserProfile", - "Translations": { - "ar_SA": "الملف الشخصي المحدد للمستخدم:", - "de_DE": "Ausgewähltes Profil:", - "el_GR": "Επιλεγμένο Προφίλ Χρήστη:", - "en_US": "Selected User Profile:", - "es_ES": "Perfil de Usuario Seleccionado:", - "fr_FR": "Profil utilisateur sélectionné :", - "he_IL": "פרופיל המשתמש הנבחר:", - "it_IT": "Profilo utente selezionato:", - "ja_JP": "選択されたユーザプロファイル:", - "ko_KR": "선택된 사용자 프로필 :", - "no_NO": "Valgt brukerprofil:", - "pl_PL": "Wybrany profil użytkownika:", - "pt_BR": "Perfil de Usuário Selecionado:", - "ru_RU": "Выбранный пользовательский профиль:", - "sv_SE": "Vald användarprofil:", - "th_TH": "เลือกโปรไฟล์ผู้ใช้งาน:", - "tr_TR": "Seçili Kullanıcı Profili:", - "uk_UA": "Вибраний профіль користувача:", - "zh_CN": "选定的用户账户:", - "zh_TW": "選取的使用者設定檔:" - } - }, - { - "ID": "UserProfilesSaveProfileName", - "Translations": { - "ar_SA": "حفظ اسم الملف الشخصي", - "de_DE": "Profilname speichern", - "el_GR": "Αποθήκευση Ονόματος Προφίλ", - "en_US": "Save Profile Name", - "es_ES": "Guardar Nombre de Perfil", - "fr_FR": "Enregistrer le nom du profil", - "he_IL": "שמור שם פרופיל", - "it_IT": "Salva nome del profilo", - "ja_JP": "プロファイル名をセーブ", - "ko_KR": "프로필 이름 저장", - "no_NO": "Lagre profilnavnet", - "pl_PL": "Zapisz nazwę profilu", - "pt_BR": "Salvar Nome de Perfil", - "ru_RU": "Сохранить имя профиля", - "sv_SE": "Spara profilnamn", - "th_TH": "บันทึกชื่อโปรไฟล์", - "tr_TR": "Profil İsmini Kaydet", - "uk_UA": "Зберегти ім'я профілю", - "zh_CN": "保存名称", - "zh_TW": "儲存設定檔名稱" - } - }, - { - "ID": "UserProfilesChangeProfileImage", - "Translations": { - "ar_SA": "تغيير صورة الملف الشخصي", - "de_DE": "Profilbild ändern", - "el_GR": "Αλλαγή Εικόνας Προφίλ", - "en_US": "Change Profile Image", - "es_ES": "Cambiar Imagen de Perfil", - "fr_FR": "Changer l'Image de Profil", - "he_IL": "שנה תמונת פרופיל", - "it_IT": "Cambia immagine profilo", - "ja_JP": "プロファイル画像を変更", - "ko_KR": "프로필 이미지 변경", - "no_NO": "Endre profilbilde", - "pl_PL": "Zmień obrazek profilu", - "pt_BR": "Mudar Imagem de Perfil", - "ru_RU": "Изменить аватар", - "sv_SE": "Byt profilbild", - "th_TH": "เปลี่ยนรูปโปรไฟล์", - "tr_TR": "Profil Resmini Değiştir", - "uk_UA": "Змінити зображення профілю", - "zh_CN": "更换头像", - "zh_TW": "變更設定檔圖像" - } - }, - { - "ID": "UserProfilesAvailableUserProfiles", - "Translations": { - "ar_SA": "الملفات الشخصية للمستخدم المتاحة:", - "de_DE": "Verfügbare Profile:", - "el_GR": "Διαθέσιμα Προφίλ Χρηστών:", - "en_US": "Available User Profiles:", - "es_ES": "Perfiles de Usuario Disponibles:", - "fr_FR": "Profils Utilisateurs Disponibles :", - "he_IL": "פרופילי משתמש זמינים:", - "it_IT": "Profili utente disponibili:", - "ja_JP": "利用可能なユーザプロファイル:", - "ko_KR": "사용 가능한 사용자 프로필 :", - "no_NO": "Tilgjengelige brukerprofiler:", - "pl_PL": "Dostępne profile użytkownika:", - "pt_BR": "Perfis de Usuário Disponíveis:", - "ru_RU": "Доступные профили пользователей:", - "sv_SE": "Tillgängliga användarprofiler:", - "th_TH": "โปรไฟล์ผู้ใช้ที่ใช้งานได้:", - "tr_TR": "Mevcut Kullanıcı Profilleri:", - "uk_UA": "Доступні профілі користувачів:", - "zh_CN": "现有用户账户:", - "zh_TW": "可用的使用者設定檔:" - } - }, - { - "ID": "UserProfilesAddNewProfile", - "Translations": { - "ar_SA": "إنشاء ملف الشخصي", - "de_DE": "Neues Profil", - "el_GR": "Προσθήκη Νέου Προφίλ", - "en_US": "Create Profile", - "es_ES": "Añadir Nuevo Perfil", - "fr_FR": "Créer un Profil", - "he_IL": "צור פרופיל", - "it_IT": "Aggiungi nuovo profilo", - "ja_JP": "プロファイルを作成", - "ko_KR": "프로필 만들기", - "no_NO": "Opprett Profil", - "pl_PL": "Utwórz profil", - "pt_BR": "Criar Perfil", - "ru_RU": "Добавить новый профиль", - "sv_SE": "Skapa profil", - "th_TH": "สร้างโปรไฟล์ใหม่", - "tr_TR": "Yeni Profil Ekle", - "uk_UA": "Створити профіль", - "zh_CN": "新建账户", - "zh_TW": "建立設定檔" - } - }, { "ID": "UserProfilesDelete", "Translations": { @@ -11225,181 +11075,6 @@ "zh_TW": "刪除" } }, - { - "ID": "UserProfilesClose", - "Translations": { - "ar_SA": "إغلاق", - "de_DE": "Schließen", - "el_GR": "Κλείσιμο", - "en_US": "Close", - "es_ES": "Cerrar", - "fr_FR": "Fermer", - "he_IL": "סגור", - "it_IT": "Chiudi", - "ja_JP": "閉じる", - "ko_KR": "닫기", - "no_NO": "Lukk", - "pl_PL": "Zamknij", - "pt_BR": "Fechar", - "ru_RU": "Закрыть", - "sv_SE": "Stäng", - "th_TH": "ปิด", - "tr_TR": "Kapat", - "uk_UA": "Закрити", - "zh_CN": "关闭", - "zh_TW": "關閉" - } - }, - { - "ID": "ProfileNameSelectionWatermark", - "Translations": { - "ar_SA": "اختر اسم مستعار", - "de_DE": "Wähle einen Spitznamen", - "el_GR": "Επιλέξτε ψευδώνυμο", - "en_US": "Choose a Nickname", - "es_ES": "Escoge un Apodo", - "fr_FR": "Choisir un Pseudonyme", - "he_IL": "בחרו כינוי", - "it_IT": "Scegli un soprannome", - "ja_JP": "ニックネームを選択", - "ko_KR": "별명 선택", - "no_NO": "Velg ett kallenavn", - "pl_PL": "Wybierz pseudonim", - "pt_BR": "Escolha um Apelido", - "ru_RU": "Введите никнейм", - "sv_SE": "Välj ett smeknamn", - "th_TH": "เลือก ชื่อเล่น", - "tr_TR": "Kullanıcı Adı Seç", - "uk_UA": "Оберіть псевдонім", - "zh_CN": "输入昵称", - "zh_TW": "選擇暱稱" - } - }, - { - "ID": "ProfileImageSelectionTitle", - "Translations": { - "ar_SA": "تحديد صورة الملف الشخصي", - "de_DE": "Auswahl des Profilbildes", - "el_GR": "Επιλογή Εικόνας Προφίλ", - "en_US": "Profile Image Selection", - "es_ES": "Selección de Imagen de Perfil", - "fr_FR": "Sélection de l'Image de Profil", - "he_IL": "בחירת תמונת פרופיל", - "it_IT": "Selezione dell'immagine profilo", - "ja_JP": "プロファイル画像選択", - "ko_KR": "프로필 이미지 선택", - "no_NO": "Valg av profilbilde", - "pl_PL": "Wybór Obrazu Profilu", - "pt_BR": "Seleção da Imagem de Perfil", - "ru_RU": "Выбор изображения профиля", - "sv_SE": "Välj profilbild", - "th_TH": "เลือก รูปโปรไฟล์ ของคุณ", - "tr_TR": "Profil Resmi Seçimi", - "uk_UA": "Вибір зображення профілю", - "zh_CN": "选择头像", - "zh_TW": "設定檔圖像選取" - } - }, - { - "ID": "ProfileImageSelectionHeader", - "Translations": { - "ar_SA": "اختر صورة الملف الشخصي", - "de_DE": "Wähle ein Profilbild aus", - "el_GR": "Επιλέξτε μία Εικόνα Προφίλ", - "en_US": "Choose a Profile Image", - "es_ES": "Elige una Imagen de Perfil", - "fr_FR": "Choisir l'Image de Profil", - "he_IL": "בחרו תמונת פרופיל", - "it_IT": "Scegli un'immagine profilo", - "ja_JP": "プロファイル画像を選択", - "ko_KR": "프로필 이미지를 선택", - "no_NO": "Velg et profilbilde", - "pl_PL": "Wybierz zdjęcie profilowe", - "pt_BR": "Escolha uma Imagem de Perfil", - "ru_RU": "Выбор аватара", - "sv_SE": "Välj en profilbild", - "th_TH": "เลือก รูปโปรไฟล์", - "tr_TR": "Profil Resmi Seç", - "uk_UA": "Виберіть зображення профілю", - "zh_CN": "选择合适的头像图片", - "zh_TW": "選擇設定檔圖像" - } - }, - { - "ID": "ProfileImageSelectionNote", - "Translations": { - "ar_SA": "يمكنك استيراد صورة ملف شخصي مخصصة، أو تحديد صورة رمزية من البرامج الثابتة للنظام", - "de_DE": "Es kann ein eigenes Profilbild importiert werden oder ein Avatar aus der System-Firmware", - "el_GR": "Μπορείτε να εισαγάγετε μία προσαρμοσμένη εικόνα προφίλ ή να επιλέξετε ένα avatar από το Firmware", - "en_US": "You may import a custom profile image, or select an avatar from system firmware", - "es_ES": "Puedes importar una imagen de perfil personalizada, o seleccionar un avatar del firmware de sistema", - "fr_FR": "Vous pouvez importer une image de profil personnalisée ou sélectionner un avatar depuis le firmware système", - "he_IL": "אתם יכולים לייבא תמונת פרופיל מותאמת אישית, או לבחור אווטאר מקושחת המערכת", - "it_IT": "Puoi importare un'immagine profilo personalizzata o selezionare un avatar dal firmware del sistema", - "ja_JP": "カスタム画像をインポート, またはファームウェア内のアバターを選択できます", - "ko_KR": "사용자 지정 프로필 이미지를 가져오거나 시스템 펌웨어에서 아바타 선택 가능", - "no_NO": "Du kan importere et tilpasset profilbilde, eller velge en avatar fra system fastvare", - "pl_PL": "Możesz zaimportować niestandardowy obraz profilu lub wybrać awatar z firmware'u systemowego", - "pt_BR": "Você pode importar uma imagem customizada, ou selecionar um avatar do Firmware", - "ru_RU": "Вы можете импортировать собственное изображение или выбрать аватар из системной прошивки.", - "sv_SE": "Du kan importera en anpassad profilbild eller välja en avatar från systemets firmware", - "th_TH": "คุณสามารถนำเข้ารูปโปรไฟล์ที่กำหนดเองได้ หรือ เลือกรูปที่มีจากระบบ", - "tr_TR": "Özel bir profil resmi içeri aktarabilir veya sistem avatarlarından birini seçebilirsiniz", - "uk_UA": "Ви можете імпортувати власне зображення профілю або вибрати аватар із мікропрограми системи", - "zh_CN": "您可以导入自定义头像,或从模拟器系统固件中选择预设头像", - "zh_TW": "您可以匯入自訂的設定檔圖像,或從系統韌體中選取大頭貼。" - } - }, - { - "ID": "ProfileImageSelectionImportImage", - "Translations": { - "ar_SA": "استيراد ملف الصورة", - "de_DE": "Bilddatei importieren", - "el_GR": "Εισαγωγή Αρχείου Εικόνας", - "en_US": "Import Image File", - "es_ES": "Importar Imagen", - "fr_FR": "Importer une image", - "he_IL": "ייבוא קובץ תמונה", - "it_IT": "Importa file immagine", - "ja_JP": "画像ファイルをインポート", - "ko_KR": "이미지 파일 가져오기", - "no_NO": "Importer bildefil", - "pl_PL": "Importuj Plik Obrazu", - "pt_BR": "Importar Arquivo de Imagem", - "ru_RU": "Импорт изображения", - "sv_SE": "Importera bildfil", - "th_TH": "นำเข้า ไฟล์รูปภาพ", - "tr_TR": "Resim İçeri Aktar", - "uk_UA": "Імпорт файлу зображення", - "zh_CN": "导入图像文件", - "zh_TW": "匯入圖像檔案" - } - }, - { - "ID": "ProfileImageSelectionSelectAvatar", - "Translations": { - "ar_SA": "حدد الصورة الرمزية من البرنامج الثابتة", - "de_DE": "Firmware-Avatar auswählen", - "el_GR": "Επιλέξτε Avatar από Firmware", - "en_US": "Select Firmware Avatar", - "es_ES": "Seleccionar Avatar del Firmware", - "fr_FR": "Choisir un Avatar du Firmware", - "he_IL": "בחרו אוואטר קושחה", - "it_IT": "Seleziona avatar dal firmware", - "ja_JP": "ファームウェア内のアバターを選択", - "ko_KR": "펌웨어 아바타 선택", - "no_NO": "Velg fastvare profilbilde", - "pl_PL": "Wybierz domyślny awatar z oprogramowania konsoli", - "pt_BR": "Selecionar Avatar do Firmware", - "ru_RU": "Встроенные аватары", - "sv_SE": "Välj avatar från firmware", - "th_TH": "เลือก รูปอวาต้า จากระบบ", - "tr_TR": "Yazılım Avatarı Seç", - "uk_UA": "Виберіть аватар прошивки ", - "zh_CN": "选择预设头像", - "zh_TW": "選取韌體大頭貼" - } - }, { "ID": "InputDialogTitle", "Translations": { @@ -11603,25 +11278,25 @@ { "ID": "AvatarChoose", "Translations": { - "ar_SA": "اختر الصورة الرمزية", - "de_DE": "Bestätigen", - "el_GR": "Επιλογή", + "ar_SA": "اختر الأفاتار", + "de_DE": "Wähle Avatar", + "el_GR": "Επιλέξτε Avatar", "en_US": "Choose Avatar", - "es_ES": "Escoger", + "es_ES": "Elegir Avatar", "fr_FR": "Choisir un Avatar", - "he_IL": "בחרו דמות", - "it_IT": "Scegli", - "ja_JP": "選択", + "he_IL": "בחרו אוואטר", + "it_IT": "Scegli Avatar", + "ja_JP": "アバターを選択", "ko_KR": "아바타 선택", - "no_NO": "Velg profilbilde", + "no_NO": "Velg avatar", "pl_PL": "Wybierz awatar", - "pt_BR": "Escolha o Avatar", + "pt_BR": "Escolher Avatar", "ru_RU": "Выбрать аватар", "sv_SE": "Välj avatar", - "th_TH": "เลือก รูปอวาต้า ของคุณ", - "tr_TR": "Seç", - "uk_UA": "Вибрати", - "zh_CN": "保存选定头像", + "th_TH": "เลือกอวาต้าของคุณ", + "tr_TR": "Avatar Seç", + "uk_UA": "Вибрати аватар", + "zh_CN": "选择头像", "zh_TW": "選擇大頭貼" } }, @@ -11650,31 +11325,6 @@ "zh_TW": "設定背景顏色" } }, - { - "ID": "AvatarClose", - "Translations": { - "ar_SA": "إغلاق", - "de_DE": "Schließen", - "el_GR": "Κλείσιμο", - "en_US": "Close", - "es_ES": "Cerrar", - "fr_FR": "Fermer", - "he_IL": "סגור", - "it_IT": "Chiudi", - "ja_JP": "閉じる", - "ko_KR": "닫기", - "no_NO": "Lukk", - "pl_PL": "Zamknij", - "pt_BR": "Fechar", - "ru_RU": "Закрыть", - "sv_SE": "Stäng", - "th_TH": "ปิด", - "tr_TR": "Kapat", - "uk_UA": "Закрити", - "zh_CN": "关闭", - "zh_TW": "關閉" - } - }, { "ID": "ControllerSettingsLoadProfileToolTip", "Translations": { @@ -11901,28 +11551,53 @@ } }, { - "ID": "GameListContextMenuToggleFavorite", + "ID": "GameListContextMenuAddToFavorites", "Translations": { - "ar_SA": "تعيين كمفضل", - "de_DE": "Als Favoriten hinzufügen/entfernen", - "el_GR": "Εναλλαγή Αγαπημένου", - "en_US": "Toggle Favorite", - "es_ES": "Marcar Favorito", - "fr_FR": "Basculer Favori", - "he_IL": "למתג העדפה", - "it_IT": "Preferito", - "ja_JP": "お気に入りを切り替え", - "ko_KR": "즐겨찾기 전환", - "no_NO": "Vis/Skjul favoritter", - "pl_PL": "Przełącz na ulubione", - "pt_BR": "Marcar como Favorito", - "ru_RU": "Добавить/Убрать статус избранного", - "sv_SE": "Växla som favorit", - "th_TH": "สลับรายการโปรด", - "tr_TR": "Favori Ayarla", - "uk_UA": "Додати в обрані", - "zh_CN": "收藏", - "zh_TW": "加入/移除為我的最愛" + "ar_SA": "أضف إلى المفضلة", + "de_DE": "Zu Favoriten hinzufügen", + "el_GR": "Προσθήκη στα αγαπημένα", + "en_US": "Add to Favorites", + "es_ES": "Agregar a Favoritos", + "fr_FR": "Ajouter aux Favoris", + "he_IL": "הוסף למועדפים", + "it_IT": "Aggiungi ai preferiti", + "ja_JP": "お気に入りに追加", + "ko_KR": "즐겨찾기에 추가", + "no_NO": "Legg til i favoritter", + "pl_PL": "Dodaj do ulubionych", + "pt_BR": "Adicionar aos Favoritos", + "ru_RU": "Добавить в Избранное", + "sv_SE": "Lägg till i favoriter", + "th_TH": "เพิ่มไปยังรายการโปรด", + "tr_TR": "Favorilere Ekle", + "uk_UA": "Додати в обране", + "zh_CN": "添加到收藏夹", + "zh_TW": "加入最愛" + } + }, + { + "ID": "GameListContextMenuRemoveFromFavorites", + "Translations": { + "ar_SA": "إزالة من المفضلة", + "de_DE": "Aus den Favoriten entfernen", + "el_GR": "Αφαίρεση από τα αγαπημένα", + "en_US": "Remove from Favorites", + "es_ES": "Eliminar de Favoritos", + "fr_FR": "Retirer des Favoris", + "he_IL": "הסר מהמועדפים", + "it_IT": "Rimuovi dai preferiti", + "ja_JP": "お気に入りから削除", + "ko_KR": "즐겨찾기에서 제거", + "no_NO": "Fjern fra favoritter", + "pl_PL": "Usuń z ulubionych", + "pt_BR": "Remover dos Favoritos", + "ru_RU": "Удалить из Избранного", + "sv_SE": "Ta bort från favoriter", + "th_TH": "ลบออกจากรายการโปรด", + "tr_TR": "Favorilerden Kaldır", + "uk_UA": "Видалити з обраного", + "zh_CN": "从收藏夹中移除", + "zh_TW": "從最愛中移除" } }, { @@ -13628,50 +13303,50 @@ { "ID": "DialogWarning", "Translations": { - "ar_SA": "تحذير", - "de_DE": "Warnung", - "el_GR": "Προειδοποίηση", - "en_US": "Warning", - "es_ES": "Advertencia", - "fr_FR": "Avertissement", - "he_IL": "אזהרה", - "it_IT": "Avviso", - "ja_JP": "警告", - "ko_KR": "경고", - "no_NO": "Advarsel", - "pl_PL": "Uwaga", - "pt_BR": "Alerta", - "ru_RU": "Внимание", - "sv_SE": "Varning", - "th_TH": "คำเตือน", - "tr_TR": "Uyarı", - "uk_UA": "Увага", - "zh_CN": "警告", - "zh_TW": "警告" + "ar_SA": "تحذير!", + "de_DE": "WARNUNG!", + "el_GR": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ!", + "en_US": "WARNING!", + "es_ES": "ADVERTENCIA!", + "fr_FR": "AVERTISSEMENT!", + "he_IL": "אזהרה!", + "it_IT": "AVVISO!", + "ja_JP": "警告!", + "ko_KR": "경고!", + "no_NO": "ADVARSSEL!", + "pl_PL": "UWAGA!", + "pt_BR": "ALERTA!", + "ru_RU": "ВНИМАНИЕ!", + "sv_SE": "VARNING!", + "th_TH": "คำเตือน!", + "tr_TR": "UYARI!", + "uk_UA": "УВАГА!", + "zh_CN": "警告!", + "zh_TW": "警告!" } }, { "ID": "DialogPPTCDeletionMessage", "Translations": { - "ar_SA": "أنت على وشك الإنتظار لإعادة بناء ذاكرة التخزين المؤقت للترجمة المستمرة (PPTC) عند الإقلاع التالي لـ:\n\n{0}\n\nأمتأكد من رغبتك في المتابعة؟", - "de_DE": "Du bist dabei den PPTC für das folgende Spiel als ungültig zu markieren:\n\n{0}\n\nWirklich fortfahren?", - "el_GR": "Πρόκειται να διαγράψετε την προσωρινή μνήμη PPTC για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", + "ar_SA": "أنت على وشك إضافة مهمة لإعادة بناء ذاكرة التخزين المؤقت للترجمة المستمرة عند الإقلاع التالي لـ:\n\n{0}\n\nهل أنت متأكد أنك تريد المتابعة؟", + "de_DE": "Du bist dabei, eine PPTC-Wiederherstellung für das folgende Spiel in der Warteschlange zu setzen:\n\n{0}\n\nWirklich fortfahren?", + "el_GR": "Πρόκειται να προγραμματίσετε την αναδόμηση της προσωρινής μνήμης PPTC για:\n\n{0}\n\nΕίστε σίγουροι ότι θέλετε να συνεχίσετε;", "en_US": "You are about to queue a PPTC rebuild on the next boot of:\n\n{0}\n\nAre you sure you want to proceed?", - "es_ES": "Vas a borrar la caché de PPTC para:\n\n{0}\n\n¿Estás seguro de querer continuar?", + "es_ES": "Vas a encolar una reconstrucción de PPTC para:\n\n{0}\n\n¿Estás seguro de querer continuar?", "fr_FR": "Vous êtes sur le point de programmer une reconstruction PPTC au prochain démarrage de :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", - "he_IL": "אם תמשיכו אתם עומדים לגרום לבנייה מחדש של מטמון ה-PPTC עבור:\n\n{0}", + "he_IL": "אם תמשיכו, אתם עומדים להוסיף משימת בניית מטמון PPTC מחדש עבור:\n\n{0}\n\nהאם אתם בטוחים שברצונכם להמשיך?", "it_IT": "Stai per accodare la rigenerazione della cache PPTC al prossimo avvio per:\n\n{0}\n\nSei sicuro di voler proseguire?", "ja_JP": "次回起動時に PPTC を再構築します:\n\n{0}\n\n実行してよろしいですか?", - "ko_KR": "다음에 부팅할 때, PPTC 재구축을 대기열에 추가하려고 합니다.\n\n{0}\n\n계속하시겠습니까?", - "no_NO": "Du er i ferd med å bygge en PPTC i køen ved neste oppstart av:\n\n{0}\n\nEr du sikker på at du vil fortsette?", - "pl_PL": "Masz zamiar umieścić w kolejce rekompilację PPTC przy następnym uruchomieniu:\n\n{0}\n\nCzy na pewno chcesz kontynuować?", + "ko_KR": "다음 부팅 시, PPTC 재구축을 대기열에 추가하려고 합니다:\n\n{0}\n\n계속하시겠습니까?", + "no_NO": "Du er i ferd med å sette en PPTC-gjenoppbygging i kø ved neste oppstart av:\n\n{0}\n\nEr du sikker på at du vil fortsette?", + "pl_PL": "Masz zamiar dodać do kolejki rekonstrukcję PPTC przy następnym uruchomieniu:\n\n{0}\n\nCzy na pewno chcesz kontynuować?", "pt_BR": "Você está prestes a enfileirar uma reconstrução PPTC na próxima inicialização de:\n\n{0}\n\nTem certeza de que deseja continuar?", - "ru_RU": "Вы собираетесь перестроить кэш PPTC при следующем запуске для:\n\n{0}\n\nВы уверены, что хотите продолжить?", - "sv_SE": "Du är på väg att kölägga en PPTC rebuild vid nästa uppstart av:\n\n{0}\n\nÄr du säker på att du vill fortsätta?", - "th_TH": "คุณกำลังตั้งค่าให้มีการสร้าง PPTC ใหม่ในการบูตครั้งถัดไป:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", - "tr_TR": "Belirtilen PPTC cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", - "uk_UA": "Ви збираєтеся видалити кеш PPTC для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", - "zh_CN": "您即将删除:\n\n{0} 的 PPTC 缓存文件\n\n确定吗?", + "ru_RU": "Вы собираетесь добавить задачу по перестроению кэша PPTC при следующем запуске для:\n\n{0}\n\nВы уверены, что хотите продолжить?", + "sv_SE": "Du är på väg att kölägga en PPTC-återuppbyggnad vid nästa uppstart av:\n\n{0}\n\nÄr du säker på att du vill fortsätta?", + "th_TH": "คุณกำลังจะตั้งค่าสร้าง PPTC ใหม่ในการบูตครั้งถัดไป:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", + "tr_TR": "Belirtilen PPTC cache yeniden oluşturulacak:\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", + "uk_UA": "Ви збираєтесь додати завдання на відновлення кешу PPTC при наступному запуску для:\n\n{0}\n\nВи впевнені, що хочете продовжити?", + "zh_CN": "您即将排队重新构建以下游戏的 PPTC 缓存文件,在下次启动时执行:\n\n{0}\n\n确定吗?", "zh_TW": "您將在下一次啟動時佇列重建以下遊戲的 PPTC:\n\n{0}\n\n您確定要繼續嗎?" } }, @@ -13703,51 +13378,51 @@ { "ID": "DialogPPTCNukeMessage", "Translations": { - "ar_SA": "", - "de_DE": "", - "el_GR": "", - "en_US": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", - "es_ES": "Está a punto de eliminar todos los datos PPTC de:\n\n{0}\n\n¿Está seguro de que desea continuar?", - "fr_FR": "Vous êtes sur le point de supprimer toutes les données PPTC de :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", - "he_IL": "", - "it_IT": "Stai per eliminare tutti i dati PPTC da:\n\n{0}\n\nSei sicuro di voler procedere?", - "ja_JP": "", - "ko_KR": "다음에서 모든 PPTC 데이터를 제거하려고 합니다:\n\n{0}\n\n계속하시겠습니까?", - "no_NO": "Du er i ferd med å slette alle PPTC-data fra:\n\n{0}\n\n\nEr du sikker på at du vil fortsette?", - "pl_PL": "", - "pt_BR": "Você está prestes a limpar todos os dados PPTC de:\n\n{0}\n\nTem certeza de que deseja continuar?", - "ru_RU": "Вы собираетесь удалить все данные PPTC из:\n\n{0}\n\nВы уверены, что хотите продолжить?", - "sv_SE": "Du är på väg att ta bort allt PPTC-data från:\n\n{0}\n\nÄr du säker på att du vill fortsätta?", - "th_TH": "คุณกำลังจะล้างข้อมูล PPTC ทั้งหมดจาก:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", - "tr_TR": "", - "uk_UA": "Ви збираєтесь видалити всі дані PPTC з:\n\n{0}\n\nБажаєте продовжити цю операцію?", - "zh_CN": "您正要清理 PPTC 数据:\n\n{0}\n\n您确实要继续吗?", - "zh_TW": "您將要刪除以下遊戲的 PPTC:\n\n{0}\n\n您確定要繼續嗎?" + "ar_SA": "أنت على وشك حذف بيانات PPTC من:\n\n{0}\n\nهل تريد المتابعة؟", + "de_DE": "Du bist dabei, die PPTC-Daten von:\n\n{0}\n\nMöchtest du fortfahren?", + "el_GR": "Πρόκειται να διαγράψετε τα δεδομένα PPTC από:\n\n{0}\n\nΘέλετε να συνεχίσετε;", + "en_US": "You are about to delete PPTC data from:\n\n{0}\n\nDo you want to proceed?", + "es_ES": "Está a punto de eliminar los datos PPTC de:\n\n{0}\n\n¿Desea continuar?", + "fr_FR": "Vous êtes sur le point de supprimer les données PPTC de :\n\n{0}\n\nVoulez-vous continuer ?", + "he_IL": "אתה עומד למחוק את נתוני ה-PPTC מ:\n\n{0}\n\nהאם ברצונך להמשיך?", + "it_IT": "Stai per eliminare i dati PPTC da:\n\n{0}\n\nVuoi procedere?", + "ja_JP": "PPTCデータを以下から削除しようとしています:\n\n{0}\n\n続行しますか?", + "ko_KR": "다음에서 PPTC 데이터를 삭제하려고 합니다:\n\n{0}\n\n계속하시겠습니까?", + "no_NO": "Du er i ferd med å slette PPTC-data fra:\n\n{0}\n\nVil du fortsette?", + "pl_PL": "Zamierzasz usunąć dane PPTC z:\n\n{0}\n\nChcesz kontynuować?", + "pt_BR": "Você está prestes a excluir os dados PPTC de:\n\n{0}\n\nVocê deseja continuar?", + "ru_RU": "Вы собираетесь удалить данные PPTC из:\n\n{0}\n\nХотите продолжить?", + "sv_SE": "Du är på väg att ta bort PPTC-data från:\n\n{0}\n\nVill du fortsätta?", + "th_TH": "คุณกำลังจะลบข้อมูล PPTC จาก:\n\n{0}\n\nคุณต้องการดำเนินการต่อหรือไม่?", + "tr_TR": "PPTC verilerini şu kaynaktan silmek üzeresiniz:\n\n{0}\n\nDevam etmek istiyor musunuz?", + "uk_UA": "Ви збираєтесь видалити всі дані PPTC з:\n\n{0}\n\nБажаєте продовжити?", + "zh_CN": "您即将删除 PPTC 数据:\n\n{0}\n\n您要继续吗?", + "zh_TW": "您將要刪除以下遊戲的 PPTC:\n\n{0}\n\n您確定要繼續嗎?" } }, { "ID": "DialogShaderDeletionMessage", "Translations": { - "ar_SA": "أنت على وشك حذف ذاكرة المظللات المؤقتة ل:\n\n{0}\n\nهل انت متأكد انك تريد المتابعة؟", - "de_DE": "Du bist dabei, den Shader Cache zu löschen für :\n\n{0}\n\nWirklich fortfahren?", - "el_GR": "Πρόκειται να διαγράψετε την προσωρινή μνήμη Shader για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", - "en_US": "You are about to delete the Shader cache for :\n\n{0}\n\nAre you sure you want to proceed?", - "es_ES": "Vas a borrar la caché de sombreadores para:\n\n{0}\n\n¿Estás seguro de querer continuar?", - "fr_FR": "Vous êtes sur le point de supprimer le cache des shaders pour :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", - "he_IL": "אם תמשיכו אתם עומדים למחוק את מטמון ההצללות עבור:\n\n{0}", - "it_IT": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nSei sicuro di voler proseguire?", - "ja_JP": "シェーダーキャッシュを破棄しようとしています:\n\n{0}\n\n実行してよろしいですか?", - "ko_KR": "다음 셰이더 캐시를 삭제 :\n\n{0}\n\n계속하시겠습니까?", - "no_NO": "Du er i ferd med å slette Shader cachen for :\n\n{0}\n\nEr du sikker på at du vil fortsette?", - "pl_PL": "Zamierzasz usunąć cache Shaderów dla :\n\n{0}\n\nNa pewno chcesz kontynuować?", - "pt_BR": "Você está prestes a apagar o cache de Shader para :\n\n{0}\n\nTem certeza que deseja continuar?", - "ru_RU": "Вы собираетесь удалить кэш шейдеров для:\n\n{0}\n\nВы уверены, что хотите продолжить?", - "sv_SE": "Du är på väg att ta bort shader cache för :\n\n{0}\n\nÄr du säker på att du vill fortsätta?", - "th_TH": "คุณกำลังจะลบแคชแสงเงา:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", - "tr_TR": "Belirtilen Shader cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", - "uk_UA": "Ви збираєтеся видалити кеш шейдерів для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", - "zh_CN": "您即将删除:\n\n{0} 的着色器缓存文件\n\n确定吗?", - "zh_TW": "您將刪除以下遊戲的著色器快取:\n\n{0}\n\n您確定要繼續嗎?" + "ar_SA": "أنت على وشك حذف ذاكرة المظللات المؤقتة ل:\n\n{0}\n\nهل تريد المتابعة؟", + "de_DE": "Du bist dabei, den Shader-Cache zu löschen für:\n\n{0}\n\nMöchtest du fortfahren?", + "el_GR": "Πρόκειται να διαγράψετε την προσωρινή μνήμη Shader για:\n\n{0}\n\nΘέλετε να συνεχίσετε;", + "en_US": "You are about to delete shader cache for:\n\n{0}\n\nDo you want to proceed?", + "es_ES": "Vas a borrar la caché de sombreadores para:\n\n{0}\n\n¿Deseas continuar?", + "fr_FR": "Vous êtes sur le point de supprimer le cache des shaders pour :\n\n{0}\n\nVoulez-vous continuer ?", + "he_IL": "אתה עומד למחוק את מטמון ההצללות עבור:\n\n{0}\n\nהאם ברצונך להמשיך?", + "it_IT": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nVuoi procedere?", + "ja_JP": "シェーダーキャッシュを削除しようとしています:\n\n{0}\n\n続行しますか?", + "ko_KR": "다음 셰이더 캐시를 삭제하려고 합니다:\n\n{0}\n\n계속하시겠습니까?", + "no_NO": "Du er i ferd med å slette shader-cachen for:\n\n{0}\n\nVil du fortsette?", + "pl_PL": "Zamierzasz usunąć cache shaderów dla:\n\n{0}\n\nChcesz kontynuować?", + "pt_BR": "Você está prestes a apagar o cache de shader para:\n\n{0}\n\nVocê deseja continuar?", + "ru_RU": "Вы собираетесь удалить кэш шейдеров для:\n\n{0}\n\nХотите продолжить?", + "sv_SE": "Du är på väg att ta bort shader-cache för:\n\n{0}\n\nVill du fortsätta?", + "th_TH": "คุณกำลังจะลบแคชเชดเดอร์สำหรับ:\n\n{0}\n\nคุณต้องการดำเนินการต่อหรือไม่?", + "tr_TR": "Belirtilen shader cache silinecek:\n\n{0}\n\nDevam etmek istiyor musunuz?", + "uk_UA": "Ви збираєтеся видалити кеш шейдерів для:\n\n{0}\n\nБажаєте продовжити?", + "zh_CN": "您即将删除着色器缓存文件:\n\n{0}\n\n确定继续吗?", + "zh_TW": "您即將刪除以下遊戲的著色器快取:\n\n{0}\n\n確定繼續嗎?" } }, { @@ -14203,101 +13878,26 @@ { "ID": "DialogUserProfileDeletionConfirmMessage", "Translations": { - "ar_SA": "هل تريد حذف الملف الشخصي المحدد", - "de_DE": "Möchtest du das ausgewählte Profil löschen?", - "el_GR": "Θέλετε να διαγράψετε το επιλεγμένο προφίλ", - "en_US": "Do you want to delete the selected profile", - "es_ES": "¿Quieres eliminar el perfil seleccionado?", - "fr_FR": "Voulez-vous supprimer le profil sélectionné ?", - "he_IL": "האם ברצונך למחוק את הפרופיל שנבחר", - "it_IT": "Vuoi eliminare il profilo selezionato?", - "ja_JP": "選択されたプロファイルを削除しますか", + "ar_SA": "هل حذف الملف الشخصي المحدد؟", + "de_DE": "Löschen Sie das ausgewählte Profil?", + "el_GR": "Διαγραφή του επιλεγμένου προφίλ;", + "en_US": "Delete the selected profile?", + "es_ES": "¿Eliminar el perfil seleccionado?", + "fr_FR": "Supprimer le profil sélectionné ?", + "he_IL": "האם למחוק את הפרופיל שנבחר?", + "it_IT": "Eliminare il profilo selezionato?", + "ja_JP": "選択されたプロファイルを削除しますか?", "ko_KR": "선택한 프로필을 삭제하시겠습니까?", - "no_NO": "Vil du slette den valgte profilen", - "pl_PL": "Czy chcesz usunąć wybrany profil", - "pt_BR": "Deseja deletar o perfil selecionado", + "no_NO": "Slette den valgte profilen?", + "pl_PL": "Usunąć wybrany profil?", + "pt_BR": "Excluir o perfil selecionado?", "ru_RU": "Удалить выбранный профиль?", - "sv_SE": "Vill du ta bort den valda profilen", - "th_TH": "คุณต้องการลบโปรไฟล์ที่เลือกหรือไม่?", - "tr_TR": "Seçilen profili silmek istiyor musunuz", - "uk_UA": "Ви хочете видалити вибраний профіль", - "zh_CN": "是否删除所选账户", - "zh_TW": "您是否要刪除所選設定檔" - } - }, - { - "ID": "DialogUserProfileUnsavedChangesTitle", - "Translations": { - "ar_SA": "تحذير - التغييرات غير محفوظة", - "de_DE": "Warnung - Nicht gespeicherte Änderungen", - "el_GR": "Προσοχή - Μην Αποθηκευμένες Αλλαγές.", - "en_US": "Warning - Unsaved Changes", - "es_ES": "Advertencia - Cambios Sin Guardar", - "fr_FR": "Avertissement - Modifications Non Enregistrées", - "he_IL": "אזהרה - שינויים לא שמורים", - "it_IT": "Attenzione - Modifiche non salvate", - "ja_JP": "警告 - 保存されていない変更", - "ko_KR": "경고 - 저장되지 않은 변경 사항", - "no_NO": "Advarsel - Ulagrede endringer", - "pl_PL": "Uwaga - Niezapisane zmiany", - "pt_BR": "Alerta - Alterações não salvas", - "ru_RU": "Внимание - Несохраненные изменения", - "sv_SE": "Varning - Ej sparade ändringar", - "th_TH": "คำเตือน - มีการเปลี่ยนแปลงที่ไม่ได้บันทึก", - "tr_TR": "Uyarı - Kaydedilmemiş Değişiklikler", - "uk_UA": "Увага — Незбережені зміни", - "zh_CN": "警告 - 有未保存的更改", - "zh_TW": "警告 - 未儲存的變更" - } - }, - { - "ID": "DialogUserProfileUnsavedChangesMessage", - "Translations": { - "ar_SA": "لقد قمت بإجراء تغييرات على الملف الشخصي لهذا المستخدم هذا ولم يتم حفظها.", - "de_DE": "Sie haben Änderungen an diesem Nutzerprofil vorgenommen, die nicht gespeichert wurden.", - "el_GR": "Έχετε κάνει αλλαγές σε αυτό το προφίλ χρήστη που δεν έχουν αποθηκευτεί.", - "en_US": "You have made changes to this user profile that have not been saved.", - "es_ES": "Ha realizado cambios en este perfil de usuario que no han sido guardados.", - "fr_FR": "Vous avez apporté des modifications à ce profil utilisateur qui n'ont pas été enregistrées.", - "he_IL": "ביצעת שינויים בפרופיל משתמש זה שלא נשמרו.", - "it_IT": "Hai apportato modifiche a questo profilo utente che non sono state salvate.", - "ja_JP": "保存されていないユーザプロファイルを変更しました.", - "ko_KR": "저장되지 않은 사용자 프로필의 변경 사항이 있습니다.", - "no_NO": "Du har gjort endringer i denne brukerprofilen som ikke er lagret.", - "pl_PL": "Wprowadziłeś zmiany dla tego profilu użytkownika, które nie zostały zapisane.", - "pt_BR": "Você fez alterações para este perfil de usuário que não foram salvas.", - "ru_RU": "В эту учётную запись внесены изменения, которые не были сохранены.", - "sv_SE": "Du har gjort ändringar i denna användarprofil som inte har sparats.", - "th_TH": "คุณได้ทำการเปลี่ยนแปลงโปรไฟล์ผู้ใช้นี้โดยไม่ได้รับการบันทึก", - "tr_TR": "Kullanıcı profilinizde kaydedilmemiş değişiklikler var.", - "uk_UA": "Ви зробили зміни у цьому профілю користувача які не було збережено.", - "zh_CN": "您对该账户的更改尚未保存。", - "zh_TW": "您對該使用者設定檔所做的變更尚未儲存。" - } - }, - { - "ID": "DialogUserProfileUnsavedChangesSubMessage", - "Translations": { - "ar_SA": "هل تريد تجاهل التغييرات؟", - "de_DE": "Möchten Sie Ihre Änderungen wirklich verwerfen?", - "el_GR": "Θέλετε να απορρίψετε τις αλλαγές σας;", - "en_US": "Do you want to discard your changes?", - "es_ES": "¿Quieres descartar los cambios realizados?", - "fr_FR": "Voulez-vous annuler vos modifications ?", - "he_IL": "האם ברצונך למחוק את השינויים האחרונים?", - "it_IT": "Vuoi scartare le modifiche?", - "ja_JP": "変更を破棄しますか?", - "ko_KR": "변경 사항을 취소하시겠습니까?", - "no_NO": "Vil du forkaste endringene dine?", - "pl_PL": "Czy chcesz odrzucić zmiany?", - "pt_BR": "Deseja descartar as alterações?", - "ru_RU": "Отменить изменения?", - "sv_SE": "Vill du förkasta dina ändringar?", - "th_TH": "คุณต้องการทิ้งการเปลี่ยนแปลงของคุณหรือไม่?", - "tr_TR": "Yaptığınız değişiklikleri iptal etmek istediğinize emin misiniz?", - "uk_UA": "Бажаєте скасувати зміни?", - "zh_CN": "确定要放弃更改吗?", - "zh_TW": "您確定要放棄變更嗎?" + "sv_SE": "Ta bort den valda profilen?", + "th_TH": "ลบโปรไฟล์ที่เลือก?", + "tr_TR": "Seçilen profili silmek?", + "uk_UA": "Видалити вибраний профіль?", + "zh_CN": "删除所选账户?", + "zh_TW": "刪除所選設定檔?" } }, { @@ -15728,26 +15328,26 @@ { "ID": "MenuBarOptionsChangeLanguage", "Translations": { - "ar_SA": "تغيير اللغة", - "de_DE": "Sprache ändern", - "el_GR": "Αλλαξε γλώσσα", - "en_US": "Change Language", - "es_ES": "Cambiar Idioma", - "fr_FR": "Changer la Langue", - "he_IL": "החלף שפה", - "it_IT": "Cambia lingua", - "ja_JP": "言語を変更", - "ko_KR": "언어 변경", - "no_NO": "Endre språk", - "pl_PL": "Zmień język", - "pt_BR": "Mudar Idioma", - "ru_RU": "Сменить язык", - "sv_SE": "Byt språk", - "th_TH": "เปลี่ยนภาษา", - "tr_TR": "Dili Değiştir", - "uk_UA": "Змінити мову", - "zh_CN": "更改界面语言", - "zh_TW": "變更語言" + "ar_SA": "اللغة", + "de_DE": "Sprache", + "el_GR": "Γλώσσα", + "en_US": "Language", + "es_ES": "Idioma", + "fr_FR": "Langue", + "he_IL": "שפה", + "it_IT": "Lingua", + "ja_JP": "言語", + "ko_KR": "언어", + "no_NO": "Språk", + "pl_PL": "Język", + "pt_BR": "Idioma", + "ru_RU": "Язык", + "sv_SE": "Språk", + "th_TH": "ภาษา", + "tr_TR": "Dil", + "uk_UA": "Мова", + "zh_CN": "语言", + "zh_TW": "語言" } }, { @@ -19475,31 +19075,6 @@ "zh_TW": "Xaml 佈景主題檔案" } }, - { - "ID": "AvatarWindowTitle", - "Translations": { - "ar_SA": "إدارة الحسابات - الصورة الرمزية", - "de_DE": "Profile verwalten - Avatar", - "el_GR": "Διαχείριση Λογαριασμών - Avatar", - "en_US": "Manage Accounts - Avatar", - "es_ES": "Administrar Cuentas - Avatar", - "fr_FR": "Gérer les Comptes - Avatar", - "he_IL": "ניהול חשבונות - אוואטר", - "it_IT": "Gestisci account - Avatar", - "ja_JP": "アカウント - アバター管理", - "ko_KR": "계정 관리 - 아바타", - "no_NO": "Administrer kontoer - Profilbilde", - "pl_PL": "Zarządzaj Kontami — Avatar", - "pt_BR": "Gerenciar Contas - Avatar", - "ru_RU": "Управление аккаунтами - Аватар", - "sv_SE": "Hantera konton - Avatar", - "th_TH": "จัดการบัญชี - อวาต้า", - "tr_TR": "Hesapları Yönet - Avatar", - "uk_UA": "Керування обліковими записами - Аватар", - "zh_CN": "管理账户 - 头像", - "zh_TW": "管理帳戶 - 大頭貼" - } - }, { "ID": "Amiibo", "Translations": { @@ -19975,31 +19550,6 @@ "zh_TW": "沒有修剪" } }, - { - "ID": "UserProfileWindowTitle", - "Translations": { - "ar_SA": "مدير الملفات الشخصية للمستخدمين", - "de_DE": "Benutzerprofile verwalten", - "el_GR": "Διαχειριστής Προφίλ Χρήστη", - "en_US": "User Profiles Manager", - "es_ES": "Administrar Perfiles de Usuario", - "fr_FR": "Gestionnaire de Profils d'Utilisateurs", - "he_IL": "ניהול פרופילי משתמש", - "it_IT": "Gestione profili utente", - "ja_JP": "ユーザプロファイルを管理", - "ko_KR": "사용자 프로필 관리자", - "no_NO": "Bruker Profiler Behandler", - "pl_PL": "Menedżer Profili Użytkowników", - "pt_BR": "Gerenciador de Perfis de Usuário", - "ru_RU": "Управление профилями", - "sv_SE": "Hanterare för användarprofiler", - "th_TH": "จัดการโปรไฟล์ผู้ใช้", - "tr_TR": "Kullanıcı Profillerini Yönet", - "uk_UA": "Менеджер профілів користувачів", - "zh_CN": "管理用户账户", - "zh_TW": "使用者設定檔管理員" - } - }, { "ID": "CheatWindowTitle", "Translations": { @@ -20775,31 +20325,6 @@ "zh_TW": "{0} 模組" } }, - { - "ID": "UserProfilesEditProfile", - "Translations": { - "ar_SA": "تعديل المحدد", - "de_DE": "Profil bearbeiten", - "el_GR": "Επεξεργασία Επιλεγμένων", - "en_US": "Edit Selected", - "es_ES": "Editar Selección", - "fr_FR": "Éditer la Sélection", - "he_IL": "ערוך נבחר/ים", - "it_IT": "Modifica selezionati", - "ja_JP": "編集", - "ko_KR": "선택 항목 편집", - "no_NO": "Rediger Valgte", - "pl_PL": "Edytuj Zaznaczone", - "pt_BR": "Editar selecionado", - "ru_RU": "Изменить выбранные", - "sv_SE": "Redigera markerade", - "th_TH": "แก้ไขที่เลือกแล้ว", - "tr_TR": "Seçiliyi Düzenle", - "uk_UA": "Редагувати вибране", - "zh_CN": "编辑所选", - "zh_TW": "編輯所選" - } - }, { "ID": "Continue", "Translations": { @@ -20850,31 +20375,6 @@ "zh_TW": "取消" } }, - { - "ID": "Save", - "Translations": { - "ar_SA": "حفظ", - "de_DE": "Speichern", - "el_GR": "Αποθήκευση", - "en_US": "Save", - "es_ES": "Guardar", - "fr_FR": "Enregistrer", - "he_IL": "שמור", - "it_IT": "Salva", - "ja_JP": "セーブ", - "ko_KR": "저장", - "no_NO": "Lagre", - "pl_PL": "Zapisz", - "pt_BR": "Salvar", - "ru_RU": "Сохранить", - "sv_SE": "Spara", - "th_TH": "บันทึก", - "tr_TR": "Kaydet", - "uk_UA": "Зберегти", - "zh_CN": "保存", - "zh_TW": "儲存" - } - }, { "ID": "Discard", "Translations": { @@ -20925,81 +20425,6 @@ "zh_TW": "暫停" } }, - { - "ID": "UserProfilesSetProfileImage", - "Translations": { - "ar_SA": "تعيين صورة الملف الشخصي", - "de_DE": "Profilbild einrichten", - "el_GR": "Ορισμός Εικόνας Προφίλ", - "en_US": "Set Profile Image", - "es_ES": "Elegir Imagen de Perfil ", - "fr_FR": "Définir l'Image de Profil", - "he_IL": "הגדר תמונת פרופיל", - "it_IT": "Imposta immagine profilo", - "ja_JP": "プロファイル画像を設定", - "ko_KR": "프로필 이미지 설정", - "no_NO": "Angi profilbilde", - "pl_PL": "Ustaw Obraz Profilu", - "pt_BR": "Definir Imagem de Perfil", - "ru_RU": "Установить аватар", - "sv_SE": "Välj profilbild", - "th_TH": "ตั้งค่ารูปโปรไฟล์", - "tr_TR": "Profil Resmi Ayarla", - "uk_UA": "Встановити зображення профілю", - "zh_CN": "选择头像", - "zh_TW": "設定設定檔圖像" - } - }, - { - "ID": "UserProfileEmptyNameError", - "Translations": { - "ar_SA": "الاسم مطلوب", - "de_DE": "Name ist erforderlich", - "el_GR": "Απαιτείται όνομα", - "en_US": "Name is required", - "es_ES": "El nombre es obligatorio", - "fr_FR": "Le nom est requis", - "he_IL": "נדרש שם", - "it_IT": "Il nome è obbligatorio", - "ja_JP": "名称が必要です", - "ko_KR": "이름 필수 입력", - "no_NO": "Navn er påkrevd", - "pl_PL": "Nazwa jest wymagana", - "pt_BR": "Nome é obrigatório", - "ru_RU": "Необходимо ввести имя", - "sv_SE": "Namn krävs", - "th_TH": "จำเป็นต้องระบุชื่อ", - "tr_TR": "İsim gerekli", - "uk_UA": "Імʼя обовʼязкове", - "zh_CN": "必须输入名称", - "zh_TW": "名稱為必填" - } - }, - { - "ID": "UserProfileNoImageError", - "Translations": { - "ar_SA": "يجب تعيين صورة الملف الشخصي", - "de_DE": "Bitte ein Profilbild auswählen", - "el_GR": "Η εικόνα προφίλ πρέπει να οριστεί", - "en_US": "Profile image must be set", - "es_ES": "Debe establecerse la imagen de perfil", - "fr_FR": "L'Image du Profil doit être définie", - "he_IL": "נדרשת תמונת פרופיל", - "it_IT": "Dev'essere impostata un'immagine profilo", - "ja_JP": "プロファイル画像が必要です", - "ko_KR": "프로필 이미지를 설정해야 함", - "no_NO": "Profilbilde må være angitt", - "pl_PL": "Należy ustawić obraz profilowy", - "pt_BR": "A Imagem de Perfil Deve ser Definida", - "ru_RU": "Необходимо установить аватар", - "sv_SE": "Profilbild måste anges", - "th_TH": "จำเป็นต้องตั้งค่ารูปโปรไฟล์", - "tr_TR": "Profil resmi ayarlanmalıdır", - "uk_UA": "Зображення профілю обовʼязкове", - "zh_CN": "必须设置头像", - "zh_TW": "必須設定設定檔圖像" - } - }, { "ID": "GameUpdateWindowHeading", "Translations": { @@ -21075,56 +20500,6 @@ "zh_TW": "降低解析度:" } }, - { - "ID": "UserProfilesName", - "Translations": { - "ar_SA": "الاسم:", - "de_DE": "", - "el_GR": "Όνομα:", - "en_US": "Name:", - "es_ES": "Nombre:", - "fr_FR": "Nom :", - "he_IL": "שם:", - "it_IT": "Nome:", - "ja_JP": "名称:", - "ko_KR": "이름 :", - "no_NO": "Navn:", - "pl_PL": "Nazwa:", - "pt_BR": "Nome:", - "ru_RU": "Имя:", - "sv_SE": "Namn:", - "th_TH": "ชื่อ:", - "tr_TR": "İsim:", - "uk_UA": "Імʼя", - "zh_CN": "名称:", - "zh_TW": "名稱:" - } - }, - { - "ID": "UserProfilesUserId", - "Translations": { - "ar_SA": "معرف المستخدم:", - "de_DE": "Benutzer-ID:", - "el_GR": "User Id:", - "en_US": "User ID:", - "es_ES": "ID de Usuario:", - "fr_FR": "Identifiant Utilisateur :", - "he_IL": "מזהה משתמש:", - "it_IT": "ID utente:", - "ja_JP": "ユーザID:", - "ko_KR": "사용자 ID :", - "no_NO": "Bruker ID:", - "pl_PL": "ID Użytkownika:", - "pt_BR": "ID de Usuário:", - "ru_RU": "ID пользователя:", - "sv_SE": "Användar-id:", - "th_TH": "รหัสผู้ใช้:", - "tr_TR": "Kullanıcı Adı:", - "uk_UA": "ID користувача:", - "zh_CN": "用户 ID:", - "zh_TW": "使用者 ID:" - } - }, { "ID": "SettingsTabGraphicsBackend", "Translations": { @@ -21550,56 +20925,6 @@ "zh_TW": "音量" } }, - { - "ID": "UserProfilesManageSaves", - "Translations": { - "ar_SA": "إدارة الحفظ", - "de_DE": "Speicherstände verwalten", - "el_GR": "Διαχείριση Των Save", - "en_US": "Manage Saves", - "es_ES": "Administrar mis Partidas Guardadas", - "fr_FR": "Gérer les Sauvegardes", - "he_IL": "נהל שמורים", - "it_IT": "Gestisci i salvataggi", - "ja_JP": "セーブデータの管理", - "ko_KR": "저장 관리", - "no_NO": "Administrer lagring", - "pl_PL": "Zarządzaj Zapisami", - "pt_BR": "Gerenciar Jogos Salvos", - "ru_RU": "Управление сохранениями", - "sv_SE": "Hantera sparade spel", - "th_TH": "จัดการบันทึก", - "tr_TR": "Kayıtları Yönet", - "uk_UA": "Керувати збереженнями", - "zh_CN": "管理存档", - "zh_TW": "管理存檔" - } - }, - { - "ID": "DeleteUserSave", - "Translations": { - "ar_SA": "هل تريد حذف حفظ المستخدم لهذه اللعبة؟", - "de_DE": "Möchtest du den Spielerstand für dieses Spiel löschen?", - "el_GR": "Επιθυμείτε να διαγράψετε το save χρήστη για το συγκεκριμένο παιχνίδι;", - "en_US": "Do you want to delete user save for this game?", - "es_ES": "¿Quieres borrar los datos de usuario de este juego?", - "fr_FR": "Voulez-vous supprimer la sauvegarde de l'utilisateur pour ce jeu ?", - "he_IL": "האם ברצונך למחוק את תקיית השמור למשחק זה?", - "it_IT": "Vuoi eliminare il salvataggio utente per questo gioco?", - "ja_JP": "このゲームのユーザセーブデータを削除しますか?", - "ko_KR": "이 게임의 사용자 저장을 삭제하시겠습니까?", - "no_NO": "Vil du slette bruker data for dette spillet?", - "pl_PL": "Czy chcesz usunąć zapis użytkownika dla tej gry?", - "pt_BR": "Deseja apagar o jogo salvo do usuário para este jogo?", - "ru_RU": "Удалить сохранения для этой игры?", - "sv_SE": "Vill du ta bort användarsparade spel för detta spel?", - "th_TH": "คุณต้องการลบบันทึกผู้ใช้สำหรับเกมนี้หรือไม่?", - "tr_TR": "Bu oyun için kullanıcı kaydını silmek istiyor musunuz?", - "uk_UA": "Ви хочете видалити збереження користувача для цієї гри?", - "zh_CN": "确定删除此游戏的用户存档吗?", - "zh_TW": "您想刪除此遊戲的使用者存檔嗎?" - } - }, { "ID": "IrreversibleActionNote", "Translations": { @@ -21625,106 +20950,6 @@ "zh_TW": "此動作將無法復原。" } }, - { - "ID": "SaveManagerHeading", - "Translations": { - "ar_SA": "إدارة الحفظ لـ {0} ({1})", - "de_DE": "Spielstände für {0} verwalten", - "el_GR": "Manage Saves for {0}", - "en_US": "Manage Saves for {0} ({1})", - "es_ES": "Administrar Partidas Guardadas para {0}", - "fr_FR": "Gérer les Sauvegardes pour {0} ({1})", - "he_IL": "נהל שמורי משחק עבור {0} ({1})", - "it_IT": "Gestisci salvataggi per {0} ({1})", - "ja_JP": "{0} のセーブデータを管理", - "ko_KR": "{0} ({1})에 대한 저장 관리", - "no_NO": "Administrer lagring for {0} ({1})", - "pl_PL": "Zarządzaj Zapisami dla {0}", - "pt_BR": "Gerenciar Jogos Salvos para {0}", - "ru_RU": "Редактирование сохранений для {0} ({1})", - "sv_SE": "Hantera sparade spel för {0} ({1})", - "th_TH": "จัดการบันทึกสำหรับ {0} ({1})", - "tr_TR": "{0} için Kayıt Dosyalarını Yönet", - "uk_UA": "Керувати збереженнями для {0}", - "zh_CN": "管理 {0} ({1}) 的存档", - "zh_TW": "管理 {0} 的存檔 ({1})" - } - }, - { - "ID": "SaveManagerTitle", - "Translations": { - "ar_SA": "مدير الحفظ", - "de_DE": "Speicherdaten Manager", - "el_GR": "Διαχειριστής Save", - "en_US": "Save Manager", - "es_ES": "Administrador de Datos de Guardado.", - "fr_FR": "Gestionnaire de Sauvegarde", - "he_IL": "מנהל שמירות", - "it_IT": "Gestione salvataggi", - "ja_JP": "セーブデータマネージャ", - "ko_KR": "관리자 저장", - "no_NO": "Lagre behandler", - "pl_PL": "Menedżer Zapisów", - "pt_BR": "Gerenciador de Jogos Salvos", - "ru_RU": "Управление сохранений", - "sv_SE": "Sparhanterare", - "th_TH": "จัดการบันทึก", - "tr_TR": "Kayıt Yöneticisi", - "uk_UA": "Менеджер збереження", - "zh_CN": "存档管理器", - "zh_TW": "存檔管理員" - } - }, - { - "ID": "Name", - "Translations": { - "ar_SA": "الاسم", - "de_DE": "", - "el_GR": "Όνομα", - "en_US": "Name", - "es_ES": "Nombre", - "fr_FR": "Nom", - "he_IL": "שם", - "it_IT": "Nome", - "ja_JP": "名称", - "ko_KR": "이름", - "no_NO": "Navn", - "pl_PL": "Nazwa", - "pt_BR": "Nome", - "ru_RU": "Название", - "sv_SE": "Namn", - "th_TH": "ชื่อ", - "tr_TR": "İsim", - "uk_UA": "Назва", - "zh_CN": "名称", - "zh_TW": "名稱" - } - }, - { - "ID": "Size", - "Translations": { - "ar_SA": "الحجم", - "de_DE": "Größe", - "el_GR": "Μέγεθος", - "en_US": "Size", - "es_ES": "Tamaño", - "fr_FR": "Taille", - "he_IL": "גודל", - "it_IT": "Dimensione", - "ja_JP": "サイズ", - "ko_KR": "크기", - "no_NO": "Størrelse", - "pl_PL": "Rozmiar", - "pt_BR": "Tamanho", - "ru_RU": "Размер", - "sv_SE": "Storlek", - "th_TH": "ขนาด", - "tr_TR": "Boyut", - "uk_UA": "Розмір", - "zh_CN": "大小", - "zh_TW": "大小" - } - }, { "ID": "Search", "Translations": { @@ -21750,106 +20975,6 @@ "zh_TW": "搜尋" } }, - { - "ID": "UserProfilesRecoverLostAccounts", - "Translations": { - "ar_SA": "استعادة الحسابات المفقودة", - "de_DE": "Konto wiederherstellen", - "el_GR": "Ανάκτηση Χαμένων Λογαριασμών", - "en_US": "Recover Lost Accounts", - "es_ES": "Recuperar Cuentas Perdidas", - "fr_FR": "Récupérer les Profils Perdus", - "he_IL": "שחזר חשבון שאבד", - "it_IT": "Recupera account persi", - "ja_JP": "アカウントの復旧", - "ko_KR": "잃어버린 계정 복구", - "no_NO": "Gjenopprett tapte kontoer", - "pl_PL": "Odzyskaj Utracone Konta", - "pt_BR": "Recuperar Contas Perdidas", - "ru_RU": "Восстановить учётные записи", - "sv_SE": "Återskapa förlorade konton", - "th_TH": "กู้คืนบัญชีที่สูญหาย", - "tr_TR": "Kayıp Hesapları Kurtar", - "uk_UA": "Відновлення профілів", - "zh_CN": "恢复丢失的账户", - "zh_TW": "復原遺失的帳戶" - } - }, - { - "ID": "Recover", - "Translations": { - "ar_SA": "استعادة", - "de_DE": "Wiederherstellen", - "el_GR": "Ανάκτηση", - "en_US": "Recover", - "es_ES": "Recuperar", - "fr_FR": "Récupérer", - "he_IL": "שחזר", - "it_IT": "Recupera", - "ja_JP": "復旧", - "ko_KR": "복구", - "no_NO": "Gjenopprett", - "pl_PL": "Odzyskaj", - "pt_BR": "Recuperar", - "ru_RU": "Восстановить", - "sv_SE": "Återskapa", - "th_TH": "กู้คืน", - "tr_TR": "Kurtar", - "uk_UA": "Відновити", - "zh_CN": "恢复", - "zh_TW": "復原" - } - }, - { - "ID": "UserProfilesRecoverHeading", - "Translations": { - "ar_SA": "تم العثور على حفظ للحسابات التالية", - "de_DE": "Speicherstände wurden für die folgenden Konten gefunden", - "el_GR": "Βρέθηκαν save για τους ακόλουθους λογαριασμούς", - "en_US": "Saves were found for the following accounts", - "es_ES": "Datos de guardado fueron encontrados para las siguientes cuentas", - "fr_FR": "Des sauvegardes ont été trouvées pour les profils suivants", - "he_IL": "שמורים נמצאו לחשבונות הבאים", - "it_IT": "Sono stati trovati dei salvataggi per i seguenti account", - "ja_JP": "以下のアカウントのセーブデータが見つかりました", - "ko_KR": "다음 계정에 대한 저장 발견", - "no_NO": "Lagring ble funnet for følgende kontoer", - "pl_PL": "Znaleziono zapisy dla następujących kont", - "pt_BR": "Jogos salvos foram encontrados para as seguintes contas", - "ru_RU": "Были найдены сохранения для следующих аккаунтов", - "sv_SE": "Sparade spel hittades för följande konton", - "th_TH": "พบบันทึกสำหรับบัญชีดังต่อไปนี้", - "tr_TR": "Aşağıdaki hesaplar için kayıtlar bulundu", - "uk_UA": "Знайдено збереження для наступних облікових записів", - "zh_CN": "找到了这些用户的存档数据", - "zh_TW": "發現下列帳戶有一些存檔" - } - }, - { - "ID": "UserProfilesRecoverEmptyList", - "Translations": { - "ar_SA": "لا توجد ملفات شخصية لاستردادها", - "de_DE": "Keine Profile zum Wiederherstellen", - "el_GR": "Δεν υπάρχουν προφίλ για ανάκτηση", - "en_US": "No profiles to recover", - "es_ES": "No hay perfiles a recuperar", - "fr_FR": "Aucun profil à restaurer", - "he_IL": "אין פרופילים לשחזור", - "it_IT": "Nessun profilo da recuperare", - "ja_JP": "復元するプロファイルはありません", - "ko_KR": "복구할 프로필 없음", - "no_NO": "Ingen profiler å gjenopprette", - "pl_PL": "Brak profili do odzyskania", - "pt_BR": "Nenhum perfil para recuperar", - "ru_RU": "Нет учётных записей для восстановления", - "sv_SE": "Inga profiler att återskapa", - "th_TH": "ไม่มีโปรไฟล์ที่สามารถกู้คืนได้", - "tr_TR": "Kurtarılacak profil bulunamadı", - "uk_UA": "Немає профілів для відновлення", - "zh_CN": "没有可以恢复的用户数据", - "zh_TW": "無設定檔可復原" - } - }, { "ID": "GraphicsAATooltip", "Translations": { @@ -22200,56 +21325,6 @@ "zh_TW": "超高階 SMAA" } }, - { - "ID": "UserEditorTitle", - "Translations": { - "ar_SA": "تعديل المستخدم", - "de_DE": "Nutzer bearbeiten", - "el_GR": "Επεξεργασία Χρήστη", - "en_US": "Edit User", - "es_ES": "Editar Usuario", - "fr_FR": "Modifier Utilisateur", - "he_IL": "ערוך משתמש", - "it_IT": "Modifica utente", - "ja_JP": "ユーザを編集", - "ko_KR": "아이디 편집", - "no_NO": "Rediger bruker", - "pl_PL": "Edytuj użytkownika", - "pt_BR": "Editar Usuário", - "ru_RU": "Редактирование пользователя", - "sv_SE": "Redigera användare", - "th_TH": "แก้ไขผู้ใช้", - "tr_TR": "Kullanıcıyı Düzenle", - "uk_UA": "Редагувати користувача", - "zh_CN": "编辑用户", - "zh_TW": "編輯使用者" - } - }, - { - "ID": "UserEditorTitleCreate", - "Translations": { - "ar_SA": "إنشاء مستخدم", - "de_DE": "Nutzer erstellen", - "el_GR": "Δημιουργία Χρήστη", - "en_US": "Create User", - "es_ES": "Crear Usuario", - "fr_FR": "Créer Utilisateur", - "he_IL": "צור משתמש", - "it_IT": "Crea utente", - "ja_JP": "ユーザを作成", - "ko_KR": "아이디 만들기", - "no_NO": "Opprett bruker", - "pl_PL": "Utwórz użytkownika", - "pt_BR": "Criar usuário", - "ru_RU": "Создание пользователя", - "sv_SE": "Skapa användare", - "th_TH": "สร้างผู้ใช้", - "tr_TR": "Kullanıcı Oluştur", - "uk_UA": "Створити користувача", - "zh_CN": "创建用户", - "zh_TW": "建立使用者" - } - }, { "ID": "SettingsTabNetworkInterface", "Translations": { diff --git a/assets/Locales/UserProfiles.json b/assets/Locales/UserProfiles.json new file mode 100644 index 000000000..e37f24872 --- /dev/null +++ b/assets/Locales/UserProfiles.json @@ -0,0 +1,804 @@ +{ + "Locales": [ + { + "ID": "MenuBarOptions_OpenUserProfiles", + "Translations": { + "ar_SA": "_ملفات المستخدمين", + "de_DE": "_Benutzerprofile", + "el_GR": "_Προφίλ Χρηστών", + "en_US": "_User Profiles", + "es_ES": "_Perfiles de Usuario", + "fr_FR": "_Profils d'Utilisateurs", + "he_IL": "_פרופילי משתמש", + "it_IT": "_Profili utent", + "ja_JP": "ユーザプロファイル(_M)", + "ko_KR": "사용자 프로필(_M)", + "no_NO": "_Brukerprofiler", + "pl_PL": "_Profile użytkowników", + "pt_BR": "_Perfis de usuário", + "ru_RU": "_Учётные записи", + "sv_SE": "_Användarprofiler", + "th_TH": "_โปรไฟล์ผู้ใช้งาน", + "tr_TR": "_Kullanıcı Profilleri", + "uk_UA": "_Профілі користувачів", + "zh_CN": "用户配置文件(_M)", + "zh_TW": "使用者設定檔(_M)" + } + }, + { + "ID": "WindowTitle", + "Translations": { + "ar_SA": "ملفات المستخدمين", + "de_DE": "Benutzerprofile", + "el_GR": "Προφίλ Χρηστών", + "en_US": "User Profiles", + "es_ES": "Perfiles de Usuario", + "fr_FR": "Profils d'Utilisateurs", + "he_IL": "פרופילי משתמש", + "it_IT": "Profili utent", + "ja_JP": "ユーザプロファイル", + "ko_KR": "사용자 프로필", + "no_NO": "Brukerprofiler", + "pl_PL": "Profile użytkowników", + "pt_BR": "Perfis de usuário", + "ru_RU": "Учётные записи", + "sv_SE": "Användarprofiler", + "th_TH": "โปรไฟล์ผู้ใช้งาน", + "tr_TR": "Kullanıcı Profilleri", + "uk_UA": "Профілі користувачів", + "zh_CN": "用户配置文件", + "zh_TW": "使用者設定檔" + } + }, + { + "ID": "ManageSaves", + "Translations": { + "ar_SA": "عمليات الحفظ", + "de_DE": "Speicherstände", + "el_GR": "Αποθηκεύσεις", + "en_US": "Saves", + "es_ES": "Partidas", + "fr_FR": "Sauvegardes", + "he_IL": "שמירות", + "it_IT": "Salvataggi", + "ja_JP": "セーブデータ", + "ko_KR": "저장", + "no_NO": "Lagringer", + "pl_PL": "Zapisy", + "pt_BR": "Salvamentos", + "ru_RU": "Сохранения", + "sv_SE": "Sparningar", + "th_TH": "บันทึก", + "tr_TR": "Kayıtlar", + "uk_UA": "Збереження", + "zh_CN": "存档", + "zh_TW": "存檔" + } + }, + { + "ID": "DeleteSaveNote", + "Translations": { + "ar_SA": "هل حذف بيانات حفظ المستخدم لهذه اللعبة؟", + "de_DE": "Löschen Sie die gespeicherten Spielstände dieses Spiels?", + "el_GR": "Διαγραφή των δεδομένων αποθήκευσης αυτού του παιχνιδιού;", + "en_US": "Delete this game's save data?", + "es_ES": "¿Eliminar los datos de guardado de este juego?", + "fr_FR": "Supprimer les données de sauvegarde de ce jeu ?", + "he_IL": "האם למחוק את נתוני השמירה של המשחק הזה?", + "it_IT": "Eliminare i dati di salvataggio di questo gioco?", + "ja_JP": "このゲームのセーブデータを削除しますか?", + "ko_KR": "이 게임의 저장 데이터를 삭제하시겠습니까?", + "no_NO": "Slette lagrede data for dette spillet?", + "pl_PL": "Usunąć dane zapisu dla tej gry?", + "pt_BR": "Excluir os dados salvos deste jogo?", + "ru_RU": "Удалить данные сохранений для этой игры?", + "sv_SE": "Ta bort sparad data för detta spel?", + "th_TH": "ลบข้อมูลบันทึกของเกมนี้หรือไม่?", + "tr_TR": "Bu oyun için kaydedilen veriyi silmek?", + "uk_UA": "Видалити збереження даних для цієї гри?", + "zh_CN": "删除此游戏的存档数据?", + "zh_TW": "刪除此遊戲的存檔資料?" + } + }, + { + "ID": "SaveManagerTitle", + "Translations": { + "ar_SA": "حفظات {0}", + "de_DE": "{0}s Speicherstände", + "el_GR": "Αποθηκεύσεις του {0}", + "en_US": "{0}'s Saves", + "es_ES": "Guardados de {0}", + "fr_FR": "Sauvegardes de {0}", + "he_IL": "שמירות של {0}", + "it_IT": "Salvataggi di {0}", + "ja_JP": "{0} のセーブデータ", + "ko_KR": "{0} 의 저장", + "no_NO": "Lagringer til {0}", + "pl_PL": "Zapisy {0}", + "pt_BR": "Salvamentos de {0}", + "ru_RU": "Сохранения {0}", + "sv_SE": "{0}s Sparningar", + "th_TH": "ข้อมูลที่บันทึกไว้ของ {0}", + "tr_TR": "{0}’nin Kayıtları", + "uk_UA": "Збереження {0}", + "zh_CN": "{0} 的存档", + "zh_TW": "{0} 的存檔" + } + }, + { + "ID": "RecoverLostProfiles", + "Translations": { + "ar_SA": "الملفات الشخصية المفقودة", + "de_DE": "Verlorene Profile", + "el_GR": "Χαμένα προφίλ", + "en_US": "Lost Profiles", + "es_ES": "Perfiles Perdidos", + "fr_FR": "Profils Perdus", + "he_IL": "פרופילים אבודים", + "it_IT": "Profili persi", + "ja_JP": "失われたプロフィール", + "ko_KR": "분실된 프로필", + "no_NO": "Tapte profiler", + "pl_PL": "Utracone profile", + "pt_BR": "Perfis perdidos", + "ru_RU": "Потерянные учёные записи", + "sv_SE": "Förlorade profiler", + "th_TH": "โปรไฟล์ที่สูญหาย", + "tr_TR": "Kayıp profiller", + "uk_UA": "Втрачені профілі", + "zh_CN": "丢失的个人资料", + "zh_TW": "遺失的個人資料" + } + }, + { + "ID": "RecoverLostProfiles_ToolTip", + "Translations": { + "ar_SA": "يستعيد الملفات الشخصية التي لم تُحذف يدويًا والتي تحتوي على حفظات.", + "de_DE": "Stellt nicht manuell gelöschte Profile mit Speicherständen wieder.", + "el_GR": "Ανακτά προφίλ που δεν διαγράφηκαν χειροκίνητα και έχουν αποθηκεύσεις.", + "en_US": "Recovers non-manually-deleted profiles that have saves.", + "es_ES": "Recupera perfiles no eliminados manualmente que tienen guardados.", + "fr_FR": "Récupère les profils non supprimés manuellement ayant des sauvegardes.", + "he_IL": "שחזור פרופילים שלא נמחקו ידנית ויש להם שמירות.", + "it_IT": "Recupera profili non eliminati manualmente che hanno salvataggi.", + "ja_JP": "手動で削除されていない、保存されたプロフィールを回復します。", + "ko_KR": "수동으로 삭제되지 않은 저장된 프로필을 복구합니다.", + "no_NO": "Gjenoppretter profiler som ikke er manuelt slettet og som har lagringer.", + "pl_PL": "Odzyskuje profile, które nie zostały usunięte ręcznie, a które mają zapisy.", + "pt_BR": "Recupera perfis não deletados manualmente que possuem saves.", + "ru_RU": "Восстанавливает учётные записи, не удалённые вручную и имеющие сохранения.", + "sv_SE": "Återställer profiler som inte har raderats manuellt och har sparade data.", + "th_TH": "กู้คืนโปรไฟล์ที่ไม่ได้ลบด้วยตนเองและมีการบันทึก", + "tr_TR": "Manuel olarak silinmemiş ve kayıtlara sahip profilleri kurtarır.", + "uk_UA": "Відновлює учётні записи, які не були видалені вручну і мають збереження.", + "zh_CN": "恢复未手动删除且有存档的个人资料。", + "zh_TW": "恢復未手動刪除且有存檔的個人資料。" + } + }, + { + "ID": "RecoverProfile", + "Translations": { + "ar_SA": "استعادة", + "de_DE": "Wiederherstellen", + "el_GR": "Ανάκτηση", + "en_US": "Recover", + "es_ES": "Recuperar", + "fr_FR": "Récupérer", + "he_IL": "שחזר", + "it_IT": "Recupera", + "ja_JP": "復旧", + "ko_KR": "복구", + "no_NO": "Gjenopprett", + "pl_PL": "Odzyskaj", + "pt_BR": "Recuperar", + "ru_RU": "Восстановить", + "sv_SE": "Återskapa", + "th_TH": "กู้คืน", + "tr_TR": "Kurtar", + "uk_UA": "Відновити", + "zh_CN": "恢复", + "zh_TW": "復原" + } + }, + { + "ID": "RecoverProfile_EmptyList", + "Translations": { + "ar_SA": "لا توجد ملفات شخصية لاستردادها", + "de_DE": "Keine Profile zum Wiederherstellen", + "el_GR": "Δεν υπάρχουν προφίλ για ανάκτηση", + "en_US": "No Profiles To Recover", + "es_ES": "No hay perfiles a recuperar", + "fr_FR": "Aucun profil à restaurer", + "he_IL": "אין פרופילים לשחזור", + "it_IT": "Nessun profilo da recuperare", + "ja_JP": "復元するプロファイルはありません", + "ko_KR": "복구할 프로필 없음", + "no_NO": "Ingen profiler å gjenopprette", + "pl_PL": "Brak profili do odzyskania", + "pt_BR": "Nenhum perfil para recuperar", + "ru_RU": "Нет учётных записей для восстановления", + "sv_SE": "Inga profiler att återskapa", + "th_TH": "ไม่มีโปรไฟล์ที่สามารถกู้คืนได้", + "tr_TR": "Kurtarılacak profil bulunamadı", + "uk_UA": "Немає профілів для відновлення", + "zh_CN": "没有可以恢复的用户数据", + "zh_TW": "無設定檔可復原" + } + }, + { + "ID": "ManageSaves_SortByName", + "Translations": { + "ar_SA": "الاسم", + "de_DE": "", + "el_GR": "Όνομα", + "en_US": "Name", + "es_ES": "Nombre", + "fr_FR": "Nom", + "he_IL": "שם", + "it_IT": "Nome", + "ja_JP": "名称", + "ko_KR": "이름", + "no_NO": "Navn", + "pl_PL": "Nazwa", + "pt_BR": "Nome", + "ru_RU": "Название", + "sv_SE": "Namn", + "th_TH": "ชื่อ", + "tr_TR": "İsim", + "uk_UA": "Назва", + "zh_CN": "名称", + "zh_TW": "名稱" + } + }, + { + "ID": "ManageSaves_SortBySize", + "Translations": { + "ar_SA": "الحجم", + "de_DE": "Größe", + "el_GR": "Μέγεθος", + "en_US": "Size", + "es_ES": "Tamaño", + "fr_FR": "Taille", + "he_IL": "גודל", + "it_IT": "Dimensione", + "ja_JP": "サイズ", + "ko_KR": "크기", + "no_NO": "Størrelse", + "pl_PL": "Rozmiar", + "pt_BR": "Tamanho", + "ru_RU": "Размер", + "sv_SE": "Storlek", + "th_TH": "ขนาด", + "tr_TR": "Boyut", + "uk_UA": "Розмір", + "zh_CN": "大小", + "zh_TW": "大小" + } + }, + { + "ID": "ManageSaves_SortOrderAscending", + "Translations": { + "ar_SA": "تصاعدي", + "de_DE": "Aufsteigend", + "el_GR": "Αύξουσα", + "en_US": "Ascending", + "es_ES": "Ascendente", + "fr_FR": "Croissant", + "he_IL": "סדר עולה", + "it_IT": "Crescente", + "ja_JP": "昇順", + "ko_KR": "오름차순", + "no_NO": "Stigende", + "pl_PL": "Rosnąco", + "pt_BR": "Ascendente", + "ru_RU": "По Возрастанию", + "sv_SE": "Stigande", + "th_TH": "จากน้อยไปมาก", + "tr_TR": "Artan", + "uk_UA": "За зростанням", + "zh_CN": "升序", + "zh_TW": "從小到大" + } + }, + { + "ID": "ManageSaves_SortOrderDescending", + "Translations": { + "ar_SA": "تنازلي", + "de_DE": "Absteigend", + "el_GR": "Φθίνουσα", + "en_US": "Descending", + "es_ES": "Descendente", + "fr_FR": "Décroissant", + "he_IL": "סדר יורד", + "it_IT": "Decrescente", + "ja_JP": "降順", + "ko_KR": "내림차순", + "no_NO": "Synkende", + "pl_PL": "Malejąco", + "pt_BR": "Descendente", + "ru_RU": "По Убыванию", + "sv_SE": "Fallande", + "th_TH": "จากมากไปน้อย", + "tr_TR": "Azalan", + "uk_UA": "За спаданням", + "zh_CN": "降序", + "zh_TW": "從大到小" + } + }, + { + "ID": "ManageSaves_Search", + "Translations": { + "ar_SA": "بحث", + "de_DE": "Suche", + "el_GR": "Αναζήτηση", + "en_US": "Search", + "es_ES": "Buscar", + "fr_FR": "Rechercher", + "he_IL": "חפש", + "it_IT": "Cerca", + "ja_JP": "検索", + "ko_KR": "찾기", + "no_NO": "Søk", + "pl_PL": "Wyszukaj", + "pt_BR": "Buscar", + "ru_RU": "Поиск", + "sv_SE": "Sök", + "th_TH": "ค้นหา", + "tr_TR": "Ara", + "uk_UA": "Пошук", + "zh_CN": "搜索", + "zh_TW": "搜尋" + } + }, + { + "ID": "IrreversibleActionNote", + "Translations": { + "ar_SA": "هذا الإجراء لا يمكن التراجع عنه.", + "de_DE": "Diese Option kann nicht rückgängig gemacht werden.", + "el_GR": "Αυτή η ενέργεια είναι μη αναστρέψιμη.", + "en_US": "This action is not reversible.", + "es_ES": "Esta acción no es reversible.", + "fr_FR": "Cette action n'est pas réversible.", + "he_IL": "הפעולה הזו בלתי הפיכה.", + "it_IT": "Questa azione non è reversibile.", + "ja_JP": "この操作は元に戻せません.", + "ko_KR": "이 작업은 되돌릴 수 없습니다.", + "no_NO": "Denne handlingen er ikke reverserbar.", + "pl_PL": "Ta czynność nie jest odwracalna.", + "pt_BR": "Esta ação não é reversível.", + "ru_RU": "Данное действие является необратимым.", + "sv_SE": "Denna åtgärd går inte att ångra.", + "th_TH": "การดำเนินการนี้ไม่สามารถย้อนกลับได้", + "tr_TR": "Bu eylem geri alınamaz.", + "uk_UA": "Цю дію не можна скасувати.", + "zh_CN": "删除后不可恢复。", + "zh_TW": "此動作將無法復原。" + } + }, + { + "ID": "ButtonClose", + "Translations": { + "ar_SA": "إغلاق", + "de_DE": "Schließen", + "el_GR": "Κλείσιμο", + "en_US": "Close", + "es_ES": "Cerrar", + "fr_FR": "Fermer", + "he_IL": "סגירה", + "it_IT": "Chiudi", + "ja_JP": "閉じる", + "ko_KR": "닫기", + "no_NO": "Lukk", + "pl_PL": "Zamknij", + "pt_BR": "Fechar", + "ru_RU": "Закрыть", + "sv_SE": "Stäng", + "th_TH": "ปิด", + "tr_TR": "Kapat", + "uk_UA": "Закрити", + "zh_CN": "关闭", + "zh_TW": "關閉" + } + }, + { + "ID": "NameLabel", + "Translations": { + "ar_SA": "الاسم:", + "de_DE": null, + "el_GR": "Όνομα:", + "en_US": "Name:", + "es_ES": "Nombre:", + "fr_FR": "Nom :", + "he_IL": "שם:", + "it_IT": "Nome:", + "ja_JP": "名称:", + "ko_KR": "이름 :", + "no_NO": "Navn:", + "pl_PL": "Nazwa:", + "pt_BR": "Nome:", + "ru_RU": "Имя:", + "sv_SE": "Namn:", + "th_TH": "ชื่อ:", + "tr_TR": "İsim:", + "uk_UA": "Імʼя", + "zh_CN": "名称:", + "zh_TW": "名稱:" + } + }, + { + "ID": "ProfileNameSelectionWatermark", + "Translations": { + "ar_SA": "اختر اسم الملف الشخصي", + "de_DE": "Wähle einen Profilnamen", + "el_GR": "Επιλέξτε όνομα προφίλ", + "en_US": "Choose a Profile Name", + "es_ES": "Escoge un Nombre de Perfil", + "fr_FR": "Choisir un Nom de Profil", + "he_IL": "בחרו שם פרופיל", + "it_IT": "Scegli un Nome Profilo", + "ja_JP": "プロフィール名を選択", + "ko_KR": "프로필 이름 선택", + "no_NO": "Velg et Profilnavn", + "pl_PL": "Wybierz nazwę profilu", + "pt_BR": "Escolha um Nome de Perfil", + "ru_RU": "Выберите имя профиля", + "sv_SE": "Välj ett Profilnamn", + "th_TH": "เลือก ชื่อโปรไฟล์", + "tr_TR": "Profil Adı Seç", + "uk_UA": "Оберіть ім'я профілю", + "zh_CN": "选择个人资料名称", + "zh_TW": "選擇個人資料名稱" + } + }, + { + "ID": "UserIdLabel", + "Translations": { + "ar_SA": "معرف المستخدم:", + "de_DE": "Benutzer-ID:", + "el_GR": "Ταυτότητα Χρήστη:", + "en_US": "User ID:", + "es_ES": "ID de Usuario:", + "fr_FR": "Identifiant Utilisateur :", + "he_IL": "מזהה משתמש:", + "it_IT": "ID utente:", + "ja_JP": "ユーザID:", + "ko_KR": "사용자 ID :", + "no_NO": "Bruker ID:", + "pl_PL": "ID Użytkownika:", + "pt_BR": "ID de Usuário:", + "ru_RU": "ID пользователя:", + "sv_SE": "Användar-id:", + "th_TH": "รหัสผู้ใช้:", + "tr_TR": "Kullanıcı ID:", + "uk_UA": "ID користувача:", + "zh_CN": "用户 ID:", + "zh_TW": "使用者 ID:" + } + }, + { + "ID": "ProfileImage_Import", + "Translations": { + "ar_SA": "استيراد الصورة", + "de_DE": "Bild importieren", + "el_GR": "Εισαγωγή Εικόνας", + "en_US": "Import Image", + "es_ES": "Importar Imagen", + "fr_FR": "Importer une image", + "he_IL": "ייבוא תמונה", + "it_IT": "Importa immagine", + "ja_JP": "画像をインポート", + "ko_KR": "이미지 가져오기", + "no_NO": "Importer bilde", + "pl_PL": "Importuj obraz", + "pt_BR": "Importar Imagem", + "ru_RU": "Импорт изображения", + "sv_SE": "Importera bild", + "th_TH": "นำเข้าภาพ", + "tr_TR": "Resim İçeri Aktar", + "uk_UA": "Імпорт зображення", + "zh_CN": "导入图像", + "zh_TW": "匯入圖像" + } + }, + { + "ID": "ProfileImage_SelectAvatar", + "Translations": { + "ar_SA": "حدد صورة الأفاتار من البرنامج الثابت", + "de_DE": "Firmware-Avatar auswählen", + "el_GR": "Επιλέξτε Avatar από Firmware", + "en_US": "Select Firmware Avatar", + "es_ES": "Seleccionar Avatar del Firmware", + "fr_FR": "Choisir un Avatar du Firmware", + "he_IL": "בחרו אוואטר קושחה", + "it_IT": "Seleziona avatar dal firmware", + "ja_JP": "ファームウェア内のアバターを選択", + "ko_KR": "펌웨어 아바타 선택", + "no_NO": "Velg firmware-avatar", + "pl_PL": "Wybierz avatar z oprogramowania", + "pt_BR": "Selecionar Avatar do Firmware", + "ru_RU": "Выбрать аватар прошивки", + "sv_SE": "Välj avatar från firmware", + "th_TH": "เลือกอวาต้าจากระบบ", + "tr_TR": "Yazılım Avatarı Seç", + "uk_UA": "Виберіть аватар прошивки", + "zh_CN": "选择固件头像", + "zh_TW": "選取韌體大頭貼" + } + }, + { + "ID": "SupportedImageFormatDialogTitle", + "Translations": { + "ar_SA": "اختر إما JPG أو JPEG أو PNG أو BMP", + "de_DE": "Wählen Sie entweder ein JPG, JPEG, PNG oder BMP", + "el_GR": "Επιλέξτε είτε JPG, JPEG, PNG ή BMP", + "en_US": "Choose either a JPG, JPEG, PNG, or BMP", + "es_ES": "Elige ya sea JPG, JPEG, PNG o BMP", + "fr_FR": "Choisissez soit un JPG, JPEG, PNG ou BMP", + "he_IL": "בחר את JPG, JPEG, PNG או BMP", + "it_IT": "Scegli tra JPG, JPEG, PNG o BMP", + "ja_JP": "JPG、JPEG、PNG、またはBMPのいずれかを選択してください", + "ko_KR": "JPG, JPEG, PNG 또는 BMP 중에서 선택하세요", + "no_NO": "Velg enten et JPG, JPEG, PNG eller BMP", + "pl_PL": "Wybierz JPG, JPEG, PNG lub BMP", + "pt_BR": "Escolha JPG, JPEG, PNG ou BMP", + "ru_RU": "Выберите либо JPG, JPEG, PNG, или BMP", + "sv_SE": "Välj antingen ett JPG, JPEG, PNG eller BMP", + "th_TH": "เลือก JPG, JPEG, PNG หรือ BMP", + "tr_TR": "JPG, JPEG, PNG veya BMP seçin", + "uk_UA": "Виберіть або JPG, JPEG, PNG, або BMP", + "zh_CN": "选择 JPG、JPEG、PNG 或 BMP", + "zh_TW": "選擇 JPG、JPEG、PNG 或 BMP" + } + }, + { + "ID": "SelectAvatarTitle", + "Translations": { + "ar_SA": "تحديد أفاتار البرنامج الثابت", + "de_DE": "Firmware-Avatar auswählen", + "el_GR": "Επιλογή Avatar Firmware", + "en_US": "Select Firmware Avatar", + "es_ES": "Seleccionar Avatar del Firmware", + "fr_FR": "Sélection d’un Avatar du Firmware", + "he_IL": "בחירת אוואטר קושחה", + "it_IT": "Selezione Avatar Firmware", + "ja_JP": "ファームウェアアバター選択", + "ko_KR": "펌웨어 아바타 선택", + "no_NO": "Velg firmware-avatar", + "pl_PL": "Wybór awatara oprogramowania", + "pt_BR": "Selecionar Avatar do Firmware", + "ru_RU": "Выбор аватара прошивки", + "sv_SE": "Välj firmware-avatar", + "th_TH": "การเลือกอวตารเฟิร์มแวร์", + "tr_TR": "Firmware Avatar Seçimi", + "uk_UA": "Вибір аватара прошивки", + "zh_CN": "选择固件头像", + "zh_TW": "選取韌體頭像" + } + }, + { + "ID": "ButtonChooseAvatar", + "Translations": { + "ar_SA": "اختر الأفاتار", + "de_DE": "Wähle Avatar", + "el_GR": "Επιλέξτε Avatar", + "en_US": "Choose Avatar", + "es_ES": "Elegir Avatar", + "fr_FR": "Choisir un Avatar", + "he_IL": "בחרו אוואטר", + "it_IT": "Scegli Avatar", + "ja_JP": "アバターを選択", + "ko_KR": "아바타 선택", + "no_NO": "Velg avatar", + "pl_PL": "Wybierz awatar", + "pt_BR": "Escolher Avatar", + "ru_RU": "Выбрать аватар", + "sv_SE": "Välj avatar", + "th_TH": "เลือกอวาต้าของคุณ", + "tr_TR": "Avatar Seç", + "uk_UA": "Вибрати аватар", + "zh_CN": "选择头像", + "zh_TW": "選擇大頭貼" + } + }, + { + "ID": "DialogUserProfileUnsavedChangesMessage", + "Translations": { + "ar_SA": "لقد قمت بإجراء تغييرات غير محفوظة على هذا الملف الشخصي.", + "de_DE": "Sie haben nicht gespeicherte Änderungen an diesem Profil.", + "el_GR": "Έχετε μη αποθηκευμένες αλλαγές σε αυτό το προφίλ.", + "en_US": "You have unsaved changes to this profile.", + "es_ES": "Tienes cambios no guardados en este perfil.", + "fr_FR": "Vous avez des modifications non enregistrées sur ce profil.", + "he_IL": "ביצעת שינויים לא שמורים בפרופיל זה.", + "it_IT": "Hai modifiche non salvate su questo profilo.", + "ja_JP": "このプロファイルには保存されていない変更があります.", + "ko_KR": "이 프로필에는 저장되지 않은 변경 사항이 있습니다.", + "no_NO": "Du har usparende endringer på denne profilen.", + "pl_PL": "Masz niezapisane zmiany w tym profilu.", + "pt_BR": "Você tem alterações não salvas neste perfil.", + "ru_RU": "У вас есть несохраненные изменения в этом профиле.", + "sv_SE": "Du har osparade ändringar i den här profilen.", + "th_TH": "คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึกในโปรไฟล์นี้", + "tr_TR": "Bu profilde kaydedilmemiş değişiklikleriniz var.", + "uk_UA": "У вас є незбережені зміни в цьому профілі.", + "zh_CN": "您对该账户有未保存的更改。", + "zh_TW": "您對該使用者設定檔有未儲存的變更。" + } + }, + { + "ID": "DialogUserProfileUnsavedChangesSubMessage", + "Translations": { + "ar_SA": "هل تريد تجاهل التغييرات؟", + "de_DE": "Verwerfen Sie die Änderungen?", + "el_GR": "Θέλετε να απορρίψετε τις αλλαγές?", + "en_US": "Discard changes?", + "es_ES": "¿Descartar los cambios?", + "fr_FR": "Annuler les modifications ?", + "he_IL": "האם ברצונך להתעלם מהשינויים?", + "it_IT": "Scartare le modifiche?", + "ja_JP": "変更を破棄しますか?", + "ko_KR": "변경 사항을 취소하시겠습니까?", + "no_NO": "Vil du forkaste endringene?", + "pl_PL": "Czy chcesz odrzucić zmiany?", + "pt_BR": "Deseja descartar as alterações?", + "ru_RU": "Отменить изменения?", + "sv_SE": "Vill du förkasta ändringarna?", + "th_TH": "คุณต้องการทิ้งการเปลี่ยนแปลงหรือไม่?", + "tr_TR": "Değişiklikleri iptal et?", + "uk_UA": "Бажаєте скасувати зміни?", + "zh_CN": "确定要放弃更改吗?", + "zh_TW": "您確定要放棄變更嗎?" + } + }, + { + "ID": "DialogUserProfileUnsavedChangesTitle", + "Translations": { + "ar_SA": "تحذير - التغييرات غير محفوظة", + "de_DE": "WARNUNG - Nicht gespeicherte Änderungen", + "el_GR": "ΠΡΟΣΟΧΗ - Μην Αποθηκευμένες Αλλαγές.", + "en_US": "WARNING - Unsaved Changes", + "es_ES": "ADVERTENCIA - Cambios Sin Guardar", + "fr_FR": "AVERTISSEMENT - Modifications Non Enregistrées", + "he_IL": "אזהרה - שינויים לא שמורים", + "it_IT": "ATTENZIONE - Modifiche non salvate", + "ja_JP": "警告 - 保存されていない変更", + "ko_KR": "경고 - 저장되지 않은 변경 사항", + "no_NO": "ADVARSEL - Ulagrede endringer", + "pl_PL": "UWAGA - Niezapisane zmiany", + "pt_BR": "ALERTA - Alterações não salvas", + "ru_RU": "ВНИМАНИЕ - Несохраненные изменения", + "sv_SE": "VARNING - Ej sparade ändringar", + "th_TH": "คำเตือน - มีการเปลี่ยนแปลงที่ไม่ได้บันทึก", + "tr_TR": "UYARI - Kaydedilmemiş Değişiklikler", + "uk_UA": "УВАГА — Незбережені зміни", + "zh_CN": "警告 - 有未保存的更改", + "zh_TW": "警告 - 未儲存的變更" + } + }, + { + "ID": "ButtonDelete", + "Translations": { + "ar_SA": "حذف", + "de_DE": "Löschen", + "el_GR": "Διαγράφω", + "en_US": "Delete", + "es_ES": "Eliminar", + "fr_FR": "Supprimer", + "he_IL": "מחיקה", + "it_IT": "Elimina", + "ja_JP": "削除", + "ko_KR": "삭제", + "no_NO": "Slett", + "pl_PL": "Usuń", + "pt_BR": "Apagar", + "ru_RU": "Удалить", + "sv_SE": "Ta bort", + "th_TH": "ลบ", + "tr_TR": "Sil", + "uk_UA": "Видалити", + "zh_CN": "删除", + "zh_TW": "刪除" + } + }, + { + "ID": "ButtonSave", + "Translations": { + "ar_SA": "حفظ", + "de_DE": "Speichern", + "el_GR": "Αποθήκευση", + "en_US": "Save", + "es_ES": "Guardar", + "fr_FR": "Enregistrer", + "he_IL": "שמור", + "it_IT": "Salva", + "ja_JP": "セーブ", + "ko_KR": "저장", + "no_NO": "Lagre", + "pl_PL": "Zapisz", + "pt_BR": "Salvar", + "ru_RU": "Сохранить", + "sv_SE": "Spara", + "th_TH": "บันทึก", + "tr_TR": "Kaydet", + "uk_UA": "Зберегти", + "zh_CN": "保存", + "zh_TW": "儲存" + } + }, + { + "ID": "UserEditorTitle", + "Translations": { + "ar_SA": "جارٍ تعديل {0}", + "de_DE": "{0} wird bearbeitet", + "el_GR": "Επεξεργασία {0}", + "en_US": "Editing {0}", + "es_ES": "Editando {0}", + "fr_FR": "Modification de {0}", + "he_IL": "עריכת {0}", + "it_IT": "Modifica di {0}", + "ja_JP": "{0} を編集中", + "ko_KR": "{0} 편집 중", + "no_NO": "Redigerer {0}", + "pl_PL": "Edycja {0}", + "pt_BR": "Editando {0}", + "ru_RU": "Редактирование {0}", + "sv_SE": "Redigerar {0}", + "th_TH": "กำลังกำลังแก้ไข {0}", + "tr_TR": "{0} düzenleniyor", + "uk_UA": "Редагування {0}", + "zh_CN": "正在编辑 {0}", + "zh_TW": "正在編輯 {0}" + } + }, + { + "ID": "UserEditorTitleNewUser", + "Translations": { + "ar_SA": "مستخدم جديد", + "de_DE": "Neuer Nutzer", + "el_GR": "Νέος Χρήστης", + "en_US": "New User", + "es_ES": "Nuevo Usuario", + "fr_FR": "Nouvel Utilisateur", + "he_IL": "משתמש חדש", + "it_IT": "Nuovo utente", + "ja_JP": "新しいユーザー", + "ko_KR": "새 사용자", + "no_NO": "Ny bruker", + "pl_PL": "Nowy użytkownik", + "pt_BR": "Novo usuário", + "ru_RU": "Новый пользователь", + "sv_SE": "Ny användare", + "th_TH": "ผู้ใช้ใหม่", + "tr_TR": "Yeni kullanıcı", + "uk_UA": "Новий користувач", + "zh_CN": "新用户", + "zh_TW": "新使用者" + } + }, + { + "ID": "EmptyNameError", + "Translations": { + "ar_SA": "الاسم مطلوب", + "de_DE": "Name ist erforderlich", + "el_GR": "Απαιτείται όνομα", + "en_US": "Name is required", + "es_ES": "El nombre es obligatorio", + "fr_FR": "Le nom est requis", + "he_IL": "נדרש שם", + "it_IT": "Il nome è obbligatorio", + "ja_JP": "名称が必要です", + "ko_KR": "이름 필수 입력", + "no_NO": "Navn er påkrevd", + "pl_PL": "Nazwa jest wymagana", + "pt_BR": "Nome é obrigatório", + "ru_RU": "Необходимо ввести имя", + "sv_SE": "Namn krävs", + "th_TH": "จำเป็นต้องระบุชื่อ", + "tr_TR": "İsim gerekli", + "uk_UA": "Імʼя обовʼязкове", + "zh_CN": "必须输入名称", + "zh_TW": "名稱為必填" + } + } + ] +} diff --git a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml index 20d466031..f76ef150b 100644 --- a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml +++ b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml @@ -16,41 +16,31 @@ - - - - + - + Orientation="Horizontal"/> - - @@ -58,6 +48,7 @@ PointerEntered="Grid_PointerEntered" PointerExited="Grid_OnPointerExited"> + TextWrapping="Wrap" + MaxLines="2" /> - - - - - - - - diff --git a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs index 6fdfaab5a..ade52f087 100644 --- a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs @@ -94,7 +94,7 @@ namespace Ryujinx.Ava.UI.Applet ContentDialog contentDialog = new() { - Title = LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle], + Title = LocaleManager.Instance[LocaleKeys.UserProfiles_WindowTitle], PrimaryButtonText = LocaleManager.Instance[LocaleKeys.Continue], SecondaryButtonText = string.Empty, CloseButtonText = LocaleManager.Instance[LocaleKeys.Cancel], diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index 9f2999a4c..da63dd548 100755 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -13,7 +13,7 @@ SelectedApplication?.Favorite == false ? LocaleManager.Instance[LocaleKeys.GameListContextMenuAddToFavorites] : LocaleManager.Instance[LocaleKeys.GameListContextMenuRemoveFromFavorites]; + public static RelayCommand CreateApplicationShortcut { get; } = Commands.CreateConditional(vm => vm?.SelectedApplication != null, viewModel => ShortcutHelper.CreateAppShortcut( diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index 9b1c75b2e..f41803e68 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -28,6 +28,9 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] public partial ObservableCollection Images { get; set; } + [ObservableProperty] + public partial bool FirmwareFound { get; set; } + [ObservableProperty] public partial Color BackgroundColor { get; set; } = Colors.White; @@ -43,17 +46,15 @@ namespace Ryujinx.Ava.UI.ViewModels }; } + private int _selectedIndex = -1; + public int SelectedIndex { - get; + get => _selectedIndex; set { - field = value; - - SelectedImage = field == -1 - ? null - : Images[field].Data; - + _selectedIndex = value; + SelectedImage = value == -1 ? null : Images[value].Data; OnPropertyChanged(); OnPropertyChanged(nameof(SelectedImage)); } diff --git a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs deleted file mode 100644 index 5a6af229d..000000000 --- a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs +++ /dev/null @@ -1,10 +0,0 @@ -using CommunityToolkit.Mvvm.ComponentModel; - -namespace Ryujinx.Ava.UI.ViewModels -{ - public partial class UserProfileImageSelectorViewModel : BaseModel - { - [ObservableProperty] - public partial bool FirmwareFound { get; set; } - } -} diff --git a/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs b/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs index f3a9e432a..792f9ea0a 100644 --- a/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs @@ -1,7 +1,7 @@ using Ryujinx.Ava.UI.Models; using System; using System.Collections.ObjectModel; -using System.Linq; +using System.Collections.Specialized; namespace Ryujinx.Ava.UI.ViewModels { @@ -9,20 +9,35 @@ namespace Ryujinx.Ava.UI.ViewModels { public UserProfileViewModel() { - Profiles = []; - LostProfiles = []; - IsEmpty = !LostProfiles.Any(); + Profiles = new ObservableCollection(); + LostProfiles = new ObservableCollection(); + LostProfiles.CollectionChanged += LostProfilesChanged; } - public ObservableCollection Profiles { get; set; } + public ObservableCollection Profiles { get; } - public ObservableCollection LostProfiles { get; set; } + public ObservableCollection LostProfiles { get; } - public bool IsEmpty { get; set; } + public bool IsEmpty => LostProfiles.Count == 0; public void Dispose() { - GC.SuppressFinalize(this); + LostProfiles.CollectionChanged -= LostProfilesChanged; + } + + private void LostProfilesChanged(object sender, NotifyCollectionChangedEventArgs e) + { + OnPropertyChanged(nameof(IsEmpty)); + } + + public void UpdateLostProfiles(ObservableCollection newProfiles) + { + LostProfiles.Clear(); + + foreach (var profile in newProfiles) + LostProfiles.Add(profile); + + OnPropertyChanged(nameof(IsEmpty)); } } } diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs index 34c83372a..7dd178555 100644 --- a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Ava.UI.ViewModels private readonly AccountManager _accountManager; - public string SaveManagerHeading => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.SaveManagerHeading, _accountManager.LastOpenedUser.Name, _accountManager.LastOpenedUser.UserId); + public string SaveManagerTitle => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.UserProfiles_SaveManagerTitle, _accountManager.LastOpenedUser.Name); public UserSaveManagerViewModel(AccountManager accountManager) { diff --git a/src/Ryujinx/UI/Views/Dialog/AboutView.axaml.cs b/src/Ryujinx/UI/Views/Dialog/AboutView.axaml.cs index 8cfb18d15..5f454efd0 100644 --- a/src/Ryujinx/UI/Views/Dialog/AboutView.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/AboutView.axaml.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Ava.UI.Views.Dialog { PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, - CloseButtonText = LocaleManager.Instance[LocaleKeys.UserProfilesClose], + CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], Content = new AboutView { ViewModel = viewModel } }; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 13a5d4a40..4e19c711f 100755 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -136,7 +136,7 @@ diff --git a/src/Ryujinx/UI/Views/User/UserEditorView.axaml b/src/Ryujinx/UI/Views/User/UserEditorView.axaml index b8983489a..142a00349 100644 --- a/src/Ryujinx/UI/Views/User/UserEditorView.axaml +++ b/src/Ryujinx/UI/Views/User/UserEditorView.axaml @@ -8,107 +8,102 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" xmlns:models="clr-namespace:Ryujinx.Ava.UI.Models" - Margin="0" MinWidth="500" - Padding="0" mc:Ignorable="d" Focusable="True" x:DataType="models:TempProfile"> - - - + + + - + - + + BorderThickness="1" + VerticalAlignment="Bottom" + HorizontalAlignment="Right"> + + + - + - - - - - diff --git a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs index 62add2393..4868d3af7 100644 --- a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs @@ -1,6 +1,10 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Interactivity; +using Avalonia.Markup.Xaml.MarkupExtensions; +using Avalonia.Media; +using Avalonia.Platform.Storage; +using Avalonia.VisualTree; using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Navigation; using Ryujinx.Ava.Common.Locale; @@ -8,6 +12,10 @@ using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.HLE.HOS.Services.Account.Acc; +using Ryujinx.HLE.FileSystem; +using SkiaSharp; +using System.Collections.Generic; +using System.IO; using UserProfile = Ryujinx.Ava.UI.Models.UserProfile; namespace Ryujinx.Ava.UI.Views.User @@ -15,90 +23,75 @@ namespace Ryujinx.Ava.UI.Views.User public partial class UserEditorView : RyujinxControl { private NavigationDialogHost _parent; + private ContentManager _contentManager; private UserProfile _profile; + private TempProfile _tempProfile; private bool _isNewUser; - public static uint MaxProfileNameLength => 0x20; public bool IsDeletable => _profile.UserId != AccountManager.DefaultUserId; - + public string UserEditorTitle => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.UserProfiles_UserEditorTitle, _profile.Name); public UserEditorView() { InitializeComponent(); - AddHandler(Frame.NavigatedToEvent, (s, e) => - { - NavigatedTo(e); - }, RoutingStrategies.Direct); + AddHandler(Frame.NavigatedToEvent, (s, e) => NavigatedTo(e), RoutingStrategies.Direct); } private void NavigatedTo(NavigationEventArgs arg) { - if (Program.PreviewerDetached) + if (!Program.PreviewerDetached) + return; + + if (arg.NavigationMode == NavigationMode.New) { - switch (arg.NavigationMode) - { - case NavigationMode.New: - (NavigationDialogHost parent, UserProfile profile, bool isNewUser) = ((NavigationDialogHost parent, UserProfile profile, bool isNewUser))arg.Parameter; - _isNewUser = isNewUser; - _profile = profile; - ViewModel = new TempProfile(_profile); + (NavigationDialogHost parent, UserProfile profile, bool isNewUser) = + ((NavigationDialogHost parent, UserProfile profile, bool isNewUser))arg.Parameter; - _parent = parent; - break; - } + _parent = parent; + _profile = profile; + _isNewUser = isNewUser; - ((ContentDialog)_parent.Parent).Title = $"{LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle]} - " + - $"{(_isNewUser ? LocaleManager.Instance[LocaleKeys.UserEditorTitleCreate] : LocaleManager.Instance[LocaleKeys.UserEditorTitle])}"; + DataValidationErrors.ClearErrors(NameBox); + DataValidationErrors.ClearErrors(ImageBox); + ImageBox.Bind(Border.BorderBrushProperty, new DynamicResourceExtension("AppListHoverBackgroundColor")); - AddPictureButton.IsVisible = _isNewUser; - ChangePictureButton.IsVisible = !_isNewUser; - IdLabel.IsVisible = _profile != null; - IdText.IsVisible = _profile != null; - if (!_isNewUser && IsDeletable) - { - DeleteButton.IsVisible = true; - } - else - { - DeleteButton.IsVisible = false; - } + ViewModel = new TempProfile(_profile); + _tempProfile = ViewModel; + + _contentManager = _parent.ContentManager; + ViewModel.FirmwareFound = _contentManager.GetCurrentFirmwareVersion() != null; } + + ((ContentDialog)_parent.Parent).Title = + $"{LocaleManager.Instance[LocaleKeys.UserProfiles_WindowTitle]} - " + + $"{(_isNewUser ? LocaleManager.Instance[LocaleKeys.UserProfiles_UserEditorTitleNewUser] : UserEditorTitle)}"; + + bool hasProfile = _profile != null; + IdLabel.IsVisible = hasProfile; + IdText.IsVisible = hasProfile; + + DeleteButton.IsVisible = !_isNewUser && IsDeletable; } private async void BackButton_Click(object sender, RoutedEventArgs e) { - if (_isNewUser) + bool hasUnsavedChanges = + _isNewUser + ? (ViewModel.Name != string.Empty || ViewModel.Image != null) + : (_profile.Name != ViewModel.Name || _profile.Image != ViewModel.Image); + + if (hasUnsavedChanges) { - if (ViewModel.Name != string.Empty || ViewModel.Image != null) - { - if (await ContentDialogHelper.CreateChoiceDialog( - LocaleManager.Instance[LocaleKeys.DialogUserProfileUnsavedChangesTitle], - LocaleManager.Instance[LocaleKeys.DialogUserProfileUnsavedChangesMessage], - LocaleManager.Instance[LocaleKeys.DialogUserProfileUnsavedChangesSubMessage])) - { - _parent?.GoBack(); - } - } - else - { + bool confirm = await ContentDialogHelper.CreateChoiceDialog( + LocaleManager.Instance[LocaleKeys.UserProfiles_DialogUserProfileUnsavedChangesTitle], + LocaleManager.Instance[LocaleKeys.UserProfiles_DialogUserProfileUnsavedChangesMessage], + LocaleManager.Instance[LocaleKeys.UserProfiles_DialogUserProfileUnsavedChangesSubMessage]); + + if (confirm) _parent?.GoBack(); - } } else { - if (_profile.Name != ViewModel.Name || _profile.Image != ViewModel.Image) - { - if (await ContentDialogHelper.CreateChoiceDialog( - LocaleManager.Instance[LocaleKeys.DialogUserProfileUnsavedChangesTitle], - LocaleManager.Instance[LocaleKeys.DialogUserProfileUnsavedChangesMessage], - LocaleManager.Instance[LocaleKeys.DialogUserProfileUnsavedChangesSubMessage])) - { - _parent?.GoBack(); - } - } - else - { - _parent?.GoBack(); - } + _parent?.GoBack(); } } @@ -110,18 +103,28 @@ namespace Ryujinx.Ava.UI.Views.User private void SaveButton_Click(object sender, RoutedEventArgs e) { DataValidationErrors.ClearErrors(NameBox); + DataValidationErrors.ClearErrors(ImageBox); + ImageBox.Bind(Border.BorderBrushProperty, new DynamicResourceExtension("AppListHoverBackgroundColor")); - if (string.IsNullOrWhiteSpace(ViewModel.Name)) + bool nameEmpty = string.IsNullOrWhiteSpace(ViewModel.Name); + bool imageMissing = ViewModel.Image == null; + + if (nameEmpty && imageMissing) + { + DataValidationErrors.SetError(NameBox, new DataValidationException(LocaleManager.Instance[LocaleKeys.UserProfiles_EmptyNameError])); + DataValidationErrors.SetError(ImageBox, new DataValidationException("")); + ImageBox.BorderBrush = Brush.Parse("#ff99a4"); + return; + } + else if (nameEmpty) { - DataValidationErrors.SetError(NameBox, new DataValidationException(LocaleManager.Instance[LocaleKeys.UserProfileEmptyNameError])); - + DataValidationErrors.SetError(NameBox,new DataValidationException(LocaleManager.Instance[LocaleKeys.UserProfiles_EmptyNameError])); return; } - - if (ViewModel.Image == null) + else if (imageMissing) { - _parent.Navigate(typeof(UserProfileImageSelectorView), (_parent, ViewModel)); - + DataValidationErrors.SetError(ImageBox, new DataValidationException("")); + ImageBox.BorderBrush = Brush.Parse("#ff99a4"); return; } @@ -130,6 +133,7 @@ namespace Ryujinx.Ava.UI.Views.User _profile.Name = ViewModel.Name; _profile.Image = ViewModel.Image; _profile.UpdateState(); + _parent.AccountManager.SetUserName(_profile.UserId, _profile.Name); _parent.AccountManager.SetUserImage(_profile.UserId, _profile.Image); } @@ -145,17 +149,56 @@ namespace Ryujinx.Ava.UI.Views.User _parent?.GoBack(); } - public void SelectProfileImage() + private void SelectFirmwareImage_OnClick(object sender, RoutedEventArgs e) { - _parent.Navigate(typeof(UserProfileImageSelectorView), (_parent, ViewModel)); - } - - private void ChangePictureButton_Click(object sender, RoutedEventArgs e) - { - if (_profile != null || _isNewUser) + if (ViewModel.FirmwareFound) { - SelectProfileImage(); + _parent.Navigate(typeof(UserFirmwareAvatarSelectorView), (_parent, _tempProfile)); } } + + private async void Import_OnClick(object sender, RoutedEventArgs e) + { + var window = (Window)this.GetVisualRoot()!; + var result = await window.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + { + Title = LocaleManager.Instance[LocaleKeys.UserProfiles_SupportedImageFormatDialogTitle], + AllowMultiple = false, + FileTypeFilter = new List + { + new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) + { + Patterns = ["*.jpg", "*.jpeg", "*.png", "*.bmp"], + AppleUniformTypeIdentifiers = ["public.jpeg", "public.png", "com.microsoft.bmp"], + MimeTypes = ["image/jpeg", "image/png", "image/bmp"], + }, + }, + }); + + if (result.Count == 0 || DataContext is not TempProfile temp) + return; + + temp.Image = ProcessProfileImage(File.ReadAllBytes(result[0].Path.LocalPath)); + + if (_profile != null) + _profile.Image = temp.Image; + } + + private static byte[] ProcessProfileImage(byte[] buffer) + { + using SKBitmap bitmap = SKBitmap.Decode(buffer); + SKBitmap resizedBitmap = bitmap.Resize(new SKImageInfo(256, 256), SKFilterQuality.High); + + using MemoryStream streamJpg = new(); + + if (resizedBitmap != null) + { + using SKImage image = SKImage.FromBitmap(resizedBitmap); + using SKData dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100); + dataJpeg.SaveTo(streamJpg); + } + + return streamJpg.ToArray(); + } } -} +} \ No newline at end of file diff --git a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml index c22624fd5..e15eb6377 100644 --- a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml +++ b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml @@ -17,57 +17,65 @@ - - + - - - - - - - - - - - - - - - - - + VerticalAlignment="Stretch"> + + + + + + + + + + + + + + + + + + + + @@ -76,7 +84,7 @@ Grid.Row="3" Orientation="Horizontal" Spacing="10" - Margin="0 24 0 0" + Margin="0,30,0,0" HorizontalAlignment="Right"> diff --git a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs index f34d8f603..648d3e05a 100644 --- a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs @@ -1,12 +1,15 @@ using Avalonia.Interactivity; +using Avalonia.Threading; using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Navigation; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Models; +using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.HLE.FileSystem; using SkiaSharp; using System.IO; +using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.User { @@ -14,44 +17,53 @@ namespace Ryujinx.Ava.UI.Views.User { private NavigationDialogHost _parent; private TempProfile _profile; + public ContentManager ContentManager { get; private set; } + public UserFirmwareAvatarSelectorView() + { + InitializeComponent(); + ViewModel = new UserFirmwareAvatarSelectorViewModel(); + DataContext = ViewModel; + AddHandler(Frame.NavigatedToEvent, (s, e) => NavigatedTo(e), RoutingStrategies.Direct); + } public UserFirmwareAvatarSelectorView(ContentManager contentManager) { ContentManager = contentManager; InitializeComponent(); - } - - public UserFirmwareAvatarSelectorView() - { - InitializeComponent(); - - AddHandler(Frame.NavigatedToEvent, (s, e) => - { - NavigatedTo(e); - }, RoutingStrategies.Direct); + ViewModel = new UserFirmwareAvatarSelectorViewModel(); + DataContext = ViewModel; + AddHandler(Frame.NavigatedToEvent, (s, e) => NavigatedTo(e), RoutingStrategies.Direct); } private void NavigatedTo(NavigationEventArgs arg) { - if (Program.PreviewerDetached) + if (!Program.PreviewerDetached) + return; + + if (arg.NavigationMode != NavigationMode.New) + return; + + (_parent, _profile) = ((NavigationDialogHost, TempProfile))arg.Parameter; + ContentManager = _parent.ContentManager; + + ((ContentDialog)_parent.Parent).Title = + $"{LocaleManager.Instance[LocaleKeys.UserProfiles_WindowTitle]} - " + + $"{LocaleManager.Instance[LocaleKeys.UserProfiles_SelectAvatarTitle]}"; + + ViewModel.SelectedIndex = -1; + + _ = Task.Run(() => { - if (arg.NavigationMode == NavigationMode.New) + bool found = ContentManager.GetCurrentFirmwareVersion() != null; + + Dispatcher.UIThread.Post(() => { - (_parent, _profile) = ((NavigationDialogHost, TempProfile))arg.Parameter; - ContentManager = _parent.ContentManager; - if (Program.PreviewerDetached) - { - ViewModel = new UserFirmwareAvatarSelectorViewModel(); - } - - DataContext = ViewModel; - } - } + ViewModel.FirmwareFound = found; + }); + }); } - public ContentManager ContentManager { get; private set; } - private void GoBack(object sender, RoutedEventArgs e) { _parent.GoBack(); @@ -59,32 +71,31 @@ namespace Ryujinx.Ava.UI.Views.User private void ChooseButton_OnClick(object sender, RoutedEventArgs e) { - if (ViewModel.SelectedImage != null) + if (ViewModel.SelectedImage == null) + return; + + using MemoryStream streamJpg = new(); + using SKBitmap bitmap = SKBitmap.Decode(ViewModel.SelectedImage); + using SKBitmap newBitmap = new(bitmap.Width, bitmap.Height); + + using (SKCanvas canvas = new(newBitmap)) { - using MemoryStream streamJpg = new(); - using SKBitmap bitmap = SKBitmap.Decode(ViewModel.SelectedImage); - using SKBitmap newBitmap = new(bitmap.Width, bitmap.Height); - - using (SKCanvas canvas = new(newBitmap)) - { - canvas.Clear(new SKColor( - ViewModel.BackgroundColor.R, - ViewModel.BackgroundColor.G, - ViewModel.BackgroundColor.B, - ViewModel.BackgroundColor.A)); - canvas.DrawBitmap(bitmap, 0, 0); - } - - using (SKImage image = SKImage.FromBitmap(newBitmap)) - using (SKData dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100)) - { - dataJpeg.SaveTo(streamJpg); - } - - _profile.Image = streamJpg.ToArray(); - - _parent.GoBack(); + canvas.Clear(new SKColor( + ViewModel.BackgroundColor.R, + ViewModel.BackgroundColor.G, + ViewModel.BackgroundColor.B, + ViewModel.BackgroundColor.A)); + canvas.DrawBitmap(bitmap, 0, 0); } + + using (SKImage image = SKImage.FromBitmap(newBitmap)) + using (SKData dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100)) + { + dataJpeg.SaveTo(streamJpg); + } + + _profile.Image = streamJpg.ToArray(); + _parent.GoBack(); } } -} +} \ No newline at end of file diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml deleted file mode 100644 index 03aebec8f..000000000 --- a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs deleted file mode 100644 index 3a5b7c6b7..000000000 --- a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs +++ /dev/null @@ -1,118 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Interactivity; -using Avalonia.Platform.Storage; -using Avalonia.VisualTree; -using FluentAvalonia.UI.Controls; -using FluentAvalonia.UI.Navigation; -using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.UI.Controls; -using Ryujinx.Ava.UI.Models; -using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.HLE.FileSystem; -using SkiaSharp; -using System.Collections.Generic; -using System.IO; - -namespace Ryujinx.Ava.UI.Views.User -{ - public partial class UserProfileImageSelectorView : RyujinxControl - { - private ContentManager _contentManager; - private NavigationDialogHost _parent; - private TempProfile _profile; - - public UserProfileImageSelectorView() - { - InitializeComponent(); - AddHandler(Frame.NavigatedToEvent, (s, e) => - { - NavigatedTo(e); - }, RoutingStrategies.Direct); - } - - private void NavigatedTo(NavigationEventArgs arg) - { - if (Program.PreviewerDetached) - { - switch (arg.NavigationMode) - { - case NavigationMode.New: - (_parent, _profile) = ((NavigationDialogHost, TempProfile))arg.Parameter; - _contentManager = _parent.ContentManager; - - ((ContentDialog)_parent.Parent).Title = $"{LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle]} - {LocaleManager.Instance[LocaleKeys.ProfileImageSelectionHeader]}"; - - if (Program.PreviewerDetached) - { - DataContext = ViewModel = new UserProfileImageSelectorViewModel(); - ViewModel.FirmwareFound = _contentManager.GetCurrentFirmwareVersion() != null; - } - - break; - case NavigationMode.Back: - if (_profile.Image != null) - { - _parent.GoBack(); - } - - break; - } - } - } - - private async void Import_OnClick(object sender, RoutedEventArgs e) - { - IReadOnlyList result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions - { - AllowMultiple = false, - FileTypeFilter = new List - { - new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) - { - Patterns = ["*.jpg", "*.jpeg", "*.png", "*.bmp"], - AppleUniformTypeIdentifiers = ["public.jpeg", "public.png", "com.microsoft.bmp"], - MimeTypes = ["image/jpeg", "image/png", "image/bmp"], - }, - }, - }); - - if (result.Count > 0) - { - _profile.Image = ProcessProfileImage(File.ReadAllBytes(result[0].Path.LocalPath)); - _parent.GoBack(); - } - } - - private void GoBack(object sender, RoutedEventArgs e) - { - _parent.GoBack(); - } - - private void SelectFirmwareImage_OnClick(object sender, RoutedEventArgs e) - { - if (ViewModel.FirmwareFound) - { - _parent.Navigate(typeof(UserFirmwareAvatarSelectorView), (_parent, _profile)); - } - } - - private static byte[] ProcessProfileImage(byte[] buffer) - { - using SKBitmap bitmap = SKBitmap.Decode(buffer); - - SKBitmap resizedBitmap = bitmap.Resize(new SKImageInfo(256, 256), SKFilterQuality.High); - - using MemoryStream streamJpg = new(); - - if (resizedBitmap != null) - { - using SKImage image = SKImage.FromBitmap(resizedBitmap); - using SKData dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100); - - dataJpeg.SaveTo(streamJpg); - } - - return streamJpg.ToArray(); - } - } -} diff --git a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml b/src/Ryujinx/UI/Views/User/UserRecovererView.axaml index 43d84787d..3775d8cc8 100644 --- a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml +++ b/src/Ryujinx/UI/Views/User/UserRecovererView.axaml @@ -17,37 +17,48 @@ - + + Grid.Row="0" + Padding="2.5"> + + + + + CornerRadius="4"> @@ -56,12 +67,12 @@ + Text="{ext:Locale UserProfiles_RecoverProfile_EmptyList}"/> diff --git a/src/Ryujinx/UI/Views/User/UserSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserSelectorView.axaml.cs index 135e2c074..a0ac4d6b4 100644 --- a/src/Ryujinx/UI/Views/User/UserSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserSelectorView.axaml.cs @@ -40,7 +40,7 @@ namespace Ryujinx.Ava.UI.Views.User if (arg.NavigationMode == NavigationMode.Back) { - ((ContentDialog)_parent.Parent).Title = LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle]; + ((ContentDialog)_parent.Parent).Title = LocaleManager.Instance[LocaleKeys.UserProfiles_WindowTitle]; } DataContext = ViewModel;