From aba39f04ff592f3939ac4cee261e6df79142b3db Mon Sep 17 00:00:00 2001 From: Yura Date: Fri, 24 Apr 2026 16:01:22 +0300 Subject: [PATCH 1/2] Add Russian and Ukrainian dictation languages --- Pindrop/Services/ModelManager.swift | 4 ++-- Pindrop/Services/SettingsStore.swift | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Pindrop/Services/ModelManager.swift b/Pindrop/Services/ModelManager.swift index ed170a1..25b36d1 100644 --- a/Pindrop/Services/ModelManager.swift +++ b/Pindrop/Services/ModelManager.swift @@ -92,7 +92,7 @@ class ModelManager { return true case .parakeetV3European: switch language { - case .automatic, .english, .spanish, .french, .german, .portugueseBrazil, .italian, .dutch, .turkish: + case .automatic, .english, .russian, .ukrainian, .spanish, .french, .german, .portugueseBrazil, .italian, .dutch, .turkish: return true case .simplifiedChinese, .japanese, .korean: return false @@ -564,7 +564,7 @@ class ModelManager { switch language { case .english: recommendedModelNames = Self.englishRecommendedModelNames - case .automatic, .simplifiedChinese, .spanish, .french, .german, .turkish, .japanese, .portugueseBrazil, .italian, .dutch, .korean: + case .automatic, .russian, .ukrainian, .simplifiedChinese, .spanish, .french, .german, .turkish, .japanese, .portugueseBrazil, .italian, .dutch, .korean: recommendedModelNames = Self.multilingualRecommendedModelNames } diff --git a/Pindrop/Services/SettingsStore.swift b/Pindrop/Services/SettingsStore.swift index f7296c4..464d3d3 100644 --- a/Pindrop/Services/SettingsStore.swift +++ b/Pindrop/Services/SettingsStore.swift @@ -67,6 +67,8 @@ public enum TranscriptionBackend: String, CaseIterable, Sendable, Identifiable { public enum AppLanguage: String, CaseIterable, Sendable, Identifiable { case automatic = "auto" case english = "en" + case russian = "ru" + case ukrainian = "uk" case simplifiedChinese = "zh-Hans" case spanish = "es" case french = "fr" @@ -91,6 +93,8 @@ public enum AppLanguage: String, CaseIterable, Sendable, Identifiable { switch self { case .automatic: return Metadata(displayKey: "Automatic (Follow System)", whisperCode: nil, localeIdentifier: nil, selectable: true) case .english: return Metadata(displayKey: "English", whisperCode: "en", localeIdentifier: "en", selectable: true) + case .russian: return Metadata(displayKey: "Russian", whisperCode: "ru", localeIdentifier: "ru", selectable: true) + case .ukrainian: return Metadata(displayKey: "Ukrainian", whisperCode: "uk", localeIdentifier: "uk", selectable: true) case .simplifiedChinese: return Metadata(displayKey: "Simplified Chinese", whisperCode: "zh", localeIdentifier: "zh-Hans", selectable: true) case .spanish: return Metadata(displayKey: "Spanish", whisperCode: "es", localeIdentifier: "es", selectable: true) case .french: return Metadata(displayKey: "French", whisperCode: "fr", localeIdentifier: "fr", selectable: true) From d51981dba5288e0834a5d1577c88c5d6b37ac87c Mon Sep 17 00:00:00 2001 From: Yura Date: Fri, 24 Apr 2026 17:03:20 +0300 Subject: [PATCH 2/2] Add localization keys for Russian and Ukrainian labels --- Localization/app/ar.yml | 5 ++ Localization/app/bn.yml | 5 ++ Localization/app/cs.yml | 5 ++ Localization/app/da.yml | 5 ++ Localization/app/de.yml | 5 ++ Localization/app/el.yml | 5 ++ Localization/app/en.yml | 5 ++ Localization/app/es.yml | 5 ++ Localization/app/fi.yml | 5 ++ Localization/app/fr.yml | 5 ++ Localization/app/he.yml | 5 ++ Localization/app/hi.yml | 5 ++ Localization/app/hu.yml | 5 ++ Localization/app/id.yml | 5 ++ Localization/app/it.yml | 5 ++ Localization/app/ja.yml | 5 ++ Localization/app/ko.yml | 5 ++ Localization/app/ms.yml | 5 ++ Localization/app/nb.yml | 5 ++ Localization/app/nl.yml | 5 ++ Localization/app/pl.yml | 5 ++ Localization/app/pt-BR.yml | 5 ++ Localization/app/ro.yml | 5 ++ Localization/app/ru.yml | 5 ++ Localization/app/sv.yml | 5 ++ Localization/app/th.yml | 5 ++ Localization/app/tr.yml | 5 ++ Localization/app/uk.yml | 5 ++ Localization/app/vi.yml | 5 ++ Localization/app/zh-Hans.yml | 5 ++ Localization/app/zh-Hant.yml | 5 ++ Localization/keymap.yml | 3 ++ Pindrop/Generated/L10nKeys.swift | 2 + Pindrop/Generated/LocalizationMetadata.swift | 4 ++ Pindrop/Localization/Localizable.xcstrings | 48 ++++++++++++++++++++ 35 files changed, 212 insertions(+) diff --git a/Localization/app/ar.yml b/Localization/app/ar.yml index bcd66d1..90c0e13 100644 --- a/Localization/app/ar.yml +++ b/Localization/app/ar.yml @@ -1010,3 +1010,8 @@ your: ويمكنك تخصيصها لاحقًا في الإعدادات. model_is_ready_to_use: "النموذج الخاص بك جاهز للاستخدام." stats: "احصائياتك" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/bn.yml b/Localization/app/bn.yml index bc4fba1..6ffee97 100644 --- a/Localization/app/bn.yml +++ b/Localization/app/bn.yml @@ -1018,3 +1018,8 @@ your: আপনি সেগুলিকে পরে সেটিংসে কাস্টমাইজ করতে পারেন৷ model_is_ready_to_use: "আপনার মডেল ব্যবহারের জন্য প্রস্তুত." stats: "আপনার পরিসংখ্যান" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/cs.yml b/Localization/app/cs.yml index 8675667..d1a79d8 100644 --- a/Localization/app/cs.yml +++ b/Localization/app/cs.yml @@ -1010,3 +1010,8 @@ your: Později je můžete upravit v Nastavení. model_is_ready_to_use: "Váš model je připraven k použití." stats: "Vaše statistiky" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/da.yml b/Localization/app/da.yml index 2f8737d..8fecb05 100644 --- a/Localization/app/da.yml +++ b/Localization/app/da.yml @@ -1010,3 +1010,8 @@ your: Du kan tilpasse dem senere i Indstillinger. model_is_ready_to_use: "Din model er klar til brug." stats: "Dine statistikker" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/de.yml b/Localization/app/de.yml index d376538..574e363 100644 --- a/Localization/app/de.yml +++ b/Localization/app/de.yml @@ -1010,3 +1010,8 @@ your: Sie können sie später in den Einstellungen anpassen. model_is_ready_to_use: "Ihr Modell ist bereit zur Verwendung." stats: "Ihre Statistiken" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/el.yml b/Localization/app/el.yml index 279c45d..343d49e 100644 --- a/Localization/app/el.yml +++ b/Localization/app/el.yml @@ -1010,3 +1010,8 @@ your: Μπορείτε να τα προσαρμόσετε αργότερα στις Ρυθμίσεις. model_is_ready_to_use: "Το μοντέλο σας είναι έτοιμο για χρήση." stats: "Τα στατιστικά σας" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/en.yml b/Localization/app/en.yml index 4461127..171f2e8 100644 --- a/Localization/app/en.yml +++ b/Localization/app/en.yml @@ -1010,3 +1010,8 @@ your: You can customize them later in Settings. model_is_ready_to_use: "Your model is ready to use." stats: "Your Stats" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/es.yml b/Localization/app/es.yml index 8b91629..5b53576 100644 --- a/Localization/app/es.yml +++ b/Localization/app/es.yml @@ -1010,3 +1010,8 @@ your: Puedes personalizarlos más tarde en Ajustes. model_is_ready_to_use: "Tu modelo está listo para usar." stats: "Tus estadísticas" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/fi.yml b/Localization/app/fi.yml index 05e6b20..92d1e03 100644 --- a/Localization/app/fi.yml +++ b/Localization/app/fi.yml @@ -1010,3 +1010,8 @@ your: Voit muokata niitä myöhemmin asetuksissa. model_is_ready_to_use: "Mallisi on käyttövalmis." stats: "Omat tilastot" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/fr.yml b/Localization/app/fr.yml index deca906..2811234 100644 --- a/Localization/app/fr.yml +++ b/Localization/app/fr.yml @@ -1010,3 +1010,8 @@ your: Vous pouvez les personnaliser plus tard dans les Paramètres. model_is_ready_to_use: "Votre modèle est prêt à être utilisé." stats: "Vos statistiques" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/he.yml b/Localization/app/he.yml index a1df347..0ea4db4 100644 --- a/Localization/app/he.yml +++ b/Localization/app/he.yml @@ -1010,3 +1010,8 @@ your: תוכל להתאים אותם מאוחר יותר בהגדרות. model_is_ready_to_use: "הדגם שלך מוכן לשימוש." stats: "הסטטיסטיקה שלך" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/hi.yml b/Localization/app/hi.yml index bfa812d..592affa 100644 --- a/Localization/app/hi.yml +++ b/Localization/app/hi.yml @@ -1010,3 +1010,8 @@ your: आप उन्हें बाद में सेटिंग्स में कस्टमाइज़ कर सकते हैं। model_is_ready_to_use: "आपका मॉडल उपयोग के लिए तैयार है." stats: "आपके आँकड़े" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/hu.yml b/Localization/app/hu.yml index 8941108..ff4209a 100644 --- a/Localization/app/hu.yml +++ b/Localization/app/hu.yml @@ -1010,3 +1010,8 @@ your: Később személyre szabhatja őket a Beállításokban. model_is_ready_to_use: "A modell használatra kész." stats: "Az Ön statisztikái" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/id.yml b/Localization/app/id.yml index 428f9a7..fa385a4 100644 --- a/Localization/app/id.yml +++ b/Localization/app/id.yml @@ -1010,3 +1010,8 @@ your: Anda dapat menyesuaikannya nanti di Pengaturan. model_is_ready_to_use: "Model Anda siap digunakan." stats: "Statistik Anda" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/it.yml b/Localization/app/it.yml index e3610d1..c84bb56 100644 --- a/Localization/app/it.yml +++ b/Localization/app/it.yml @@ -1010,3 +1010,8 @@ your: Puoi personalizzarli in seguito in Impostazioni. model_is_ready_to_use: "Il tuo modello è pronto per l'uso." stats: "Le tue statistiche" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/ja.yml b/Localization/app/ja.yml index 600b794..53937da 100644 --- a/Localization/app/ja.yml +++ b/Localization/app/ja.yml @@ -1010,3 +1010,8 @@ your: 後で [設定] でカスタマイズできます。 model_is_ready_to_use: "モデルを使用する準備ができました。" stats: "あなたの統計" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/ko.yml b/Localization/app/ko.yml index b04b4ce..a3f467a 100644 --- a/Localization/app/ko.yml +++ b/Localization/app/ko.yml @@ -1010,3 +1010,8 @@ your: 나중에 설정에서 맞춤설정할 수 있습니다. model_is_ready_to_use: "모델을 사용할 준비가 되었습니다." stats: "귀하의 통계" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/ms.yml b/Localization/app/ms.yml index 3d96c4d..5ab25f1 100644 --- a/Localization/app/ms.yml +++ b/Localization/app/ms.yml @@ -1010,3 +1010,8 @@ your: Anda boleh menyesuaikannya kemudian dalam Tetapan. model_is_ready_to_use: "Model anda sedia untuk digunakan." stats: "Statistik anda" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/nb.yml b/Localization/app/nb.yml index fb1ed40..b3c90b1 100644 --- a/Localization/app/nb.yml +++ b/Localization/app/nb.yml @@ -1010,3 +1010,8 @@ your: Du kan tilpasse dem senere i Innstillinger. model_is_ready_to_use: "Modellen din er klar til bruk." stats: "Din statistikk" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/nl.yml b/Localization/app/nl.yml index 360e22c..5097b27 100644 --- a/Localization/app/nl.yml +++ b/Localization/app/nl.yml @@ -1010,3 +1010,8 @@ your: Je kunt ze later aanpassen in Instellingen. model_is_ready_to_use: "Uw model is klaar voor gebruik." stats: "Jouw statistieken" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/pl.yml b/Localization/app/pl.yml index 118cce3..8623d84 100644 --- a/Localization/app/pl.yml +++ b/Localization/app/pl.yml @@ -1010,3 +1010,8 @@ your: Możesz je później dostosować w Ustawieniach. model_is_ready_to_use: "Twój model jest gotowy do użycia." stats: "Twoje statystyki" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/pt-BR.yml b/Localization/app/pt-BR.yml index 206504d..673fa15 100644 --- a/Localization/app/pt-BR.yml +++ b/Localization/app/pt-BR.yml @@ -1010,3 +1010,8 @@ your: Você pode personalizá-los posteriormente em Configurações. model_is_ready_to_use: "Seu modelo está pronto para uso." stats: "Suas estatísticas" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/ro.yml b/Localization/app/ro.yml index f4080eb..7a83fd4 100644 --- a/Localization/app/ro.yml +++ b/Localization/app/ro.yml @@ -1010,3 +1010,8 @@ your: Le puteți personaliza mai târziu în Setări. model_is_ready_to_use: "Modelul dvs. este gata de utilizare." stats: "Statisticile tale" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/ru.yml b/Localization/app/ru.yml index 9295831..ce03bb6 100644 --- a/Localization/app/ru.yml +++ b/Localization/app/ru.yml @@ -1010,3 +1010,8 @@ your: Вы можете настроить их позже в настройках. model_is_ready_to_use: "Ваша модель готова к использованию." stats: "Ваша статистика" + +russian: + _self: "Русский" +ukrainian: + _self: "Украинский" diff --git a/Localization/app/sv.yml b/Localization/app/sv.yml index 1c8207b..3a9fef4 100644 --- a/Localization/app/sv.yml +++ b/Localization/app/sv.yml @@ -1010,3 +1010,8 @@ your: Du kan anpassa dem senare i Inställningar. model_is_ready_to_use: "Din modell är redo att användas." stats: "Din statistik" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/th.yml b/Localization/app/th.yml index f6d0ba1..b560146 100644 --- a/Localization/app/th.yml +++ b/Localization/app/th.yml @@ -1010,3 +1010,8 @@ your: คุณสามารถปรับแต่งได้ในภายหลังในการตั้งค่า model_is_ready_to_use: "โมเดลของคุณพร้อมใช้งานแล้ว" stats: "สถิติของคุณ" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/tr.yml b/Localization/app/tr.yml index a50031d..786c892 100644 --- a/Localization/app/tr.yml +++ b/Localization/app/tr.yml @@ -1010,3 +1010,8 @@ your: Bunları daha sonra Ayarlar'da özelleştirebilirsiniz. model_is_ready_to_use: "Modeliniz kullanıma hazır." stats: "İstatistikleriniz" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/uk.yml b/Localization/app/uk.yml index 7a031cd..df6c532 100644 --- a/Localization/app/uk.yml +++ b/Localization/app/uk.yml @@ -1010,3 +1010,8 @@ your: Ви можете налаштувати їх пізніше в налаштуваннях. model_is_ready_to_use: "Ваша модель готова до використання." stats: "Ваша статистика" + +russian: + _self: "Російська" +ukrainian: + _self: "Українська" diff --git a/Localization/app/vi.yml b/Localization/app/vi.yml index 28ec86d..7356dbb 100644 --- a/Localization/app/vi.yml +++ b/Localization/app/vi.yml @@ -1010,3 +1010,8 @@ your: Bạn có thể tùy chỉnh chúng sau trong Cài đặt. model_is_ready_to_use: "Mô hình của bạn đã sẵn sàng để sử dụng." stats: "Số liệu thống kê của bạn" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/zh-Hans.yml b/Localization/app/zh-Hans.yml index 8be9b89..c62c8f3 100644 --- a/Localization/app/zh-Hans.yml +++ b/Localization/app/zh-Hans.yml @@ -1010,3 +1010,8 @@ your: 您可以稍后在设置中自定义它们。 model_is_ready_to_use: "您的模型已准备好使用。" stats: "您的统计" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/app/zh-Hant.yml b/Localization/app/zh-Hant.yml index c473858..c4f68e2 100644 --- a/Localization/app/zh-Hant.yml +++ b/Localization/app/zh-Hant.yml @@ -1010,3 +1010,8 @@ your: 您可以稍後在設定中自定義它們。 model_is_ready_to_use: "您的模型已準備好使用。" stats: "您的統計" + +russian: + _self: "Russian" +ukrainian: + _self: "Ukrainian" diff --git a/Localization/keymap.yml b/Localization/keymap.yml index b58ef8a..f5c1439 100644 --- a/Localization/keymap.yml +++ b/Localization/keymap.yml @@ -688,3 +688,6 @@ nsaudiocaptureusagedescription: "nsaudiocaptureusagedescription" nshumanreadablecopyright: "nshumanreadablecopyright" nsmicrophoneusagedescription: "nsmicrophoneusagedescription" nsspeechrecognitionusagedescription: "nsspeechrecognitionusagedescription" + +russian: "russian" +ukrainian: "ukrainian" diff --git a/Pindrop/Generated/L10nKeys.swift b/Pindrop/Generated/L10nKeys.swift index 888038e..9896f0e 100644 --- a/Pindrop/Generated/L10nKeys.swift +++ b/Pindrop/Generated/L10nKeys.swift @@ -516,6 +516,7 @@ enum L10nKeys { static let right = "right" static let runLlmPolishAfterDictationStops = "run_llm_polish_after_dictation_stops" static let runtime = "runtime" + static let russian = "russian" static let save = "save" static let saveAsNote = "save_as_note" static let saveContinue = "save_continue" @@ -650,6 +651,7 @@ enum L10nKeys { static let unableToUpdateMediaLibrary = "unable_to_update_media_library" static let unavailableDevice = "unavailable_device" static let undo = "undo" + static let ukrainian = "ukrainian" static let unfiled = "unfiled" static let unpinFromScreen = "unpin_from_screen" static let update = "update" diff --git a/Pindrop/Generated/LocalizationMetadata.swift b/Pindrop/Generated/LocalizationMetadata.swift index 71c1f0e..62b0d28 100644 --- a/Pindrop/Generated/LocalizationMetadata.swift +++ b/Pindrop/Generated/LocalizationMetadata.swift @@ -554,6 +554,7 @@ enum LocalizationMetadata { "right": "right", "run_llm_polish_after_dictation_stops": "run_llm_polish_after_dictation_stops", "runtime": "runtime", + "russian": "russian", "save": "save", "save_as_note": "save_as_note", "save_continue": "save_continue", @@ -688,6 +689,7 @@ enum LocalizationMetadata { "unable_to_update_media_library": "unable_to_update_media_library", "unavailable_device": "unavailable_device", "undo": "undo", + "ukrainian": "ukrainian", "unfiled": "unfiled", "unpin_from_screen": "unpin_from_screen", "update": "update", @@ -1243,6 +1245,7 @@ enum LocalizationMetadata { "Right": "right", "Run LLM polish after dictation stops": "run_llm_polish_after_dictation_stops", "Runtime: %@": "runtime", + "Russian": "russian", "Save": "save", "Save & Continue": "save_continue", "Save Credentials": "save_credentials", @@ -1369,6 +1372,7 @@ enum LocalizationMetadata { "Unable to update media library": "unable_to_update_media_library", "Unavailable device": "unavailable_device", "Undo": "undo", + "Ukrainian": "ukrainian", "Unfiled": "unfiled", "Unpin from screen": "unpin_from_screen", "Update": "update", diff --git a/Pindrop/Localization/Localizable.xcstrings b/Pindrop/Localization/Localizable.xcstrings index 335b4b7..09ca786 100644 --- a/Pindrop/Localization/Localizable.xcstrings +++ b/Pindrop/Localization/Localizable.xcstrings @@ -96770,6 +96770,30 @@ } } }, + "russian": { + "comment": "russian", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Russian" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Русский" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Російська" + } + } + } + }, "save": { "comment": "save", "extractionState": "manual", @@ -122306,6 +122330,30 @@ } } }, + "ukrainian": { + "comment": "ukrainian", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ukrainian" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Украинский" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Українська" + } + } + } + }, "undo": { "comment": "undo", "extractionState": "manual",