From 7107fa2aea99e632735ffd52c189d1c3a05ce447 Mon Sep 17 00:00:00 2001 From: Purnama S Rahayu Date: Thu, 18 Dec 2025 16:23:21 +0700 Subject: [PATCH 1/5] add ConfirmDialogView for confirming download translation source --- Scribe.xcodeproj/project.pbxproj | 10 +- Scribe/ConfirmDialog/ConfirmDialogView.swift | 84 ++++ Scribe/i18n/Scribe-i18n/Localizable.xcstrings | 456 +++++++++++------- 3 files changed, 367 insertions(+), 183 deletions(-) create mode 100644 Scribe/ConfirmDialog/ConfirmDialogView.swift diff --git a/Scribe.xcodeproj/project.pbxproj b/Scribe.xcodeproj/project.pbxproj index 278d70b1..f4f452d4 100644 --- a/Scribe.xcodeproj/project.pbxproj +++ b/Scribe.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -1253,6 +1253,10 @@ EDEE62242B2DE65A00A0B9C1 /* UIEdgeInsetsExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEdgeInsetsExtensions.swift; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + E9DADB332EF3CF9B00702783 /* ConfirmDialog */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = ConfirmDialog; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 38BD212D22D5907E00C6795D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -1492,6 +1496,7 @@ 38BD213222D5907F00C6795D /* Scribe */ = { isa = PBXGroup; children = ( + E9DADB332EF3CF9B00702783 /* ConfirmDialog */, 147797A92A2CD2B50044A53E /* AboutTab */, D1A2DCAF27AD378F0057A10D /* AppTexts */, CE1378C128F5D7AC00E1CBC2 /* Colors */, @@ -1914,6 +1919,9 @@ 5A8FFB6D2C5A9D9C00F4B571 /* PBXTargetDependency */, E9FAC3992E989712008E00AC /* PBXTargetDependency */, ); + fileSystemSynchronizedGroups = ( + E9DADB332EF3CF9B00702783 /* ConfirmDialog */, + ); name = Scribe; packageProductDependencies = ( D16DD36F29E7850600FB9022 /* SwiftyJSON */, diff --git a/Scribe/ConfirmDialog/ConfirmDialogView.swift b/Scribe/ConfirmDialog/ConfirmDialogView.swift new file mode 100644 index 00000000..158cd0f6 --- /dev/null +++ b/Scribe/ConfirmDialog/ConfirmDialogView.swift @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +/** + * Confirmation Dialog tooltip. + */ + +import SwiftUI + +struct ConfirmDialogView: View { + private let cardCornerRadius: CGFloat = 10 + private let iconSize: CGFloat = 30.0 + private let cardPadding: CGFloat = 16 + private let externalPadding: CGFloat = 5 + private let shadowColor = Color(red: 63/255, green: 63/255, blue: 70/255).opacity(0.25) + + var infoText: String + var changeButtonText: String + var confirmButtonText: String + + var body: some View { + VStack(spacing: 10) { + HStack(alignment: .center) { + Image(systemName: "info.circle") + .resizable() + .frame(width: iconSize, height: iconSize) + .foregroundColor(Color.scribeCTA) + + Text(infoText) + .font(.system(size: DeviceType.isPad ? 22 : 0)) + .fixedSize(horizontal: false, vertical: true) + } + + HStack { + Spacer() + Button( + action: {}, + label: { + Text(changeButtonText) + .foregroundColor(Color.keyChar) + }) + .buttonStyle(.borderedProminent) + .tint(Color.keySpecial) + .shadow( + color: shadowColor, + radius: 1, + x: 0, + y: 3 + ) + Button( + action: {}, + label: { + Text(confirmButtonText) + .foregroundColor(Color.keyChar) + }) + .buttonStyle(.borderedProminent) + .tint(Color.scribeBlue) + .shadow( + color: shadowColor, + radius: 3, + x: 0, + y: 3 + ) + } + } + .padding(cardPadding) + .background( + RoundedRectangle(cornerRadius: cardCornerRadius) + .fill(Color.lightWhiteDarkBlack) + .shadow( + color: shadowColor, + radius: 3, + x: 0, + y: 4 + ) + ) + .padding(externalPadding) + } +} + +struct ConfirmTranslationSource: View { + var body: some View { + ConfirmDialogView(infoText: "The data you will download will allow you to translate from English to German. Do you want to change the language you'll translate from?", changeButtonText: "Change language", confirmButtonText: "Use English") + } +} diff --git a/Scribe/i18n/Scribe-i18n/Localizable.xcstrings b/Scribe/i18n/Scribe-i18n/Localizable.xcstrings index 732e7011..ca60b6ad 100644 --- a/Scribe/i18n/Scribe-i18n/Localizable.xcstrings +++ b/Scribe/i18n/Scribe-i18n/Localizable.xcstrings @@ -250,6 +250,17 @@ } } }, + "app._global.indonesian" : { + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Indonesian" + } + } + } + }, "app._global.italian" : { "comment" : "", "localizations" : { @@ -333,6 +344,17 @@ } } }, + "app._global.norwegian" : { + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Norwegian" + } + } + } + }, "app._global.portuguese" : { "comment" : "", "localizations" : { @@ -999,6 +1021,7 @@ }, "app.about.community.share_conjugate" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -1995,6 +2018,7 @@ }, "app.about.feedback.rate_conjugate" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -2574,6 +2598,17 @@ } } }, + "app.about.legal.third_legal.entry_simple_keyboard" : { + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Simple Keyboard\n• Author: Simple Mobile Tools\n• License: GPL-3.0\n• Link: https://github.com/SimpleMobileTools/Simple-Keyboard/blob/main/LICENSE" + } + } + } + }, "app.about.legal.third_party" : { "comment" : "", "localizations" : { @@ -2825,6 +2860,7 @@ }, "app.about.legal.third_party.entry_simple_keyboard" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3157,6 +3193,7 @@ }, "app.conjugate.choose_conjugation.select_tense" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3240,6 +3277,7 @@ }, "app.conjugate.choose_conjugation.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3323,6 +3361,7 @@ }, "app.conjugate.recently_conjugated.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3406,6 +3445,7 @@ }, "app.conjugate.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3489,6 +3529,7 @@ }, "app.conjugate.verbs_search.placeholder" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3572,6 +3613,7 @@ }, "app.conjugate.verbs_search.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3655,6 +3697,7 @@ }, "app.download.menu_option.conjugate_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3738,6 +3781,7 @@ }, "app.download.menu_option.conjugate_download_data" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3821,6 +3865,7 @@ }, "app.download.menu_option.conjugate_download_data_start" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3904,6 +3949,7 @@ }, "app.download.menu_option.conjugate_title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3987,6 +4033,7 @@ }, "app.download.menu_option.scribe_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4070,6 +4117,7 @@ }, "app.download.menu_option.scribe_download_data" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4153,6 +4201,7 @@ }, "app.download.menu_option.scribe_title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4236,6 +4285,7 @@ }, "app.download.menu_ui.select.all_languages" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4319,6 +4369,7 @@ }, "app.download.menu_ui.select.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4402,6 +4453,7 @@ }, "app.download.menu_ui.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4485,6 +4537,7 @@ }, "app.download.menu_ui.update_data.check_new" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4568,6 +4621,7 @@ }, "app.download.menu_ui.update_data.regular_update" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4651,6 +4705,7 @@ }, "app.download.menu_ui.update_data.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4817,6 +4872,7 @@ }, "app.installation.button_quick_tutorial" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4900,6 +4956,7 @@ }, "app.installation.keyboard.keyboard_settings" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5730,6 +5787,7 @@ }, "app.settings.button_install_keyboards" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5813,6 +5871,7 @@ }, "app.settings.keyboard.functionality.annotate_suggestions" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5896,6 +5955,7 @@ }, "app.settings.keyboard.functionality.annotate_suggestions_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6145,6 +6205,7 @@ }, "app.settings.keyboard.functionality.default_emoji_tone" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6226,174 +6287,177 @@ } } }, - "app.settings.keyboard.functionality.default_emoji_tone.caption" : { + "app.settings.keyboard.functionality.default_emoji_tone_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لون البشرة المستخدم" + "value" : "حدد لون البشرة الافتراضي لاقتراحات واكتملات الرموز التعبيرية." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "ব্যবহার করা স্কিন টোন" + "value" : "ইমোজি প্রস্তাবনা এবং পূর্ণকরণের জন্য একটি ডিফল্ট স্কিন টোন সেট করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Die zu benutzende Hautfarbe" + "value" : "Stelle einen Standardhautton für automatische Emoji-Vorschläge ein." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Skin tone to be used" + "value" : "Set a default skin tone for emoji autosuggestions and completions." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Color de piel a utilizar" + "value" : "Establece un tono de piel predeterminado para las autosugerencias y los complementos emoji." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Couleur de peau à utiliser" + "value" : "Définir la couleur de peau par défaut pour les suggestions automatiques et les complétions des émojis." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "उपयोग होने वाला त्वचा का रंग" + "value" : "इमोजी सुझाव और समाप्ति के लिए एक डिफ़ॉल्ट त्वचा रंग सेट करें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Warna kulit yang digunakan" + "value" : "Atur warna kulit default untuk saran otomatis dan pelengkapan emoji." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "사용할 피부 톤" + "value" : "이모지 자동 추천 및 완성을 위한 피부 톤의 기본값을 설정합니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "वापरल्या जाणाऱ्या त्वचेचा रंग" + "value" : "इमोजीच्या सुचवण्या आणि समाप्ति साठी डिफॉल्ट त्वचा रंग सेट करा." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Tom de pele a ser usado" + "value" : "Defina um tom de pele padrão para as sugestões de emoji." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Hudton som ska användas" + "value" : "Välj en standard-hudton för automatiska förslag och komplettering gällande emojis." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Kullanılacak cilt tonu" + "value" : "Emoji önerileri ve otomatik tamamlama için varsayılan cilt tonunu ayarlayın." } } } }, - "app.settings.keyboard.functionality.default_emoji_tone_description" : { + "app.settings.keyboard.functionality.default_emoji_tone.caption" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "حدد لون البشرة الافتراضي لاقتراحات واكتملات الرموز التعبيرية." + "value" : "لون البشرة المستخدم" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "ইমোজি প্রস্তাবনা এবং পূর্ণকরণের জন্য একটি ডিফল্ট স্কিন টোন সেট করুন।" + "value" : "ব্যবহার করা স্কিন টোন" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Stelle einen Standardhautton für automatische Emoji-Vorschläge ein." + "value" : "Die zu benutzende Hautfarbe" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Set a default skin tone for emoji autosuggestions and completions." + "value" : "Skin tone to be used" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Establece un tono de piel predeterminado para las autosugerencias y los complementos emoji." + "value" : "Color de piel a utilizar" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Définir la couleur de peau par défaut pour les suggestions automatiques et les complétions des émojis." + "value" : "Couleur de peau à utiliser" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "इमोजी सुझाव और समाप्ति के लिए एक डिफ़ॉल्ट त्वचा रंग सेट करें।" + "value" : "उपयोग होने वाला त्वचा का रंग" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Atur warna kulit default untuk saran otomatis dan pelengkapan emoji." + "value" : "Warna kulit yang digunakan" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "이모지 자동 추천 및 완성을 위한 피부 톤의 기본값을 설정합니다." + "value" : "사용할 피부 톤" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "इमोजीच्या सुचवण्या आणि समाप्ति साठी डिफॉल्ट त्वचा रंग सेट करा." + "value" : "वापरल्या जाणाऱ्या त्वचेचा रंग" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Defina um tom de pele padrão para as sugestões de emoji." + "value" : "Tom de pele a ser usado" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj en standard-hudton för automatiska förslag och komplettering gällande emojis." + "value" : "Hudton som ska användas" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Emoji önerileri ve otomatik tamamlama için varsayılan cilt tonunu ayarlayın." + "value" : "Kullanılacak cilt tonu" } } } }, "app.settings.keyboard.functionality.delete_word_by_word" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6477,6 +6541,7 @@ }, "app.settings.keyboard.functionality.delete_word_by_word_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6726,6 +6791,7 @@ }, "app.settings.keyboard.functionality.hold_for_alt_chars" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6809,6 +6875,7 @@ }, "app.settings.keyboard.functionality.hold_for_alt_chars_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6892,6 +6959,7 @@ }, "app.settings.keyboard.functionality.popup_on_keypress" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6975,6 +7043,7 @@ }, "app.settings.keyboard.functionality.popup_on_keypress_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7058,6 +7127,7 @@ }, "app.settings.keyboard.functionality.punctuation_spacing" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7141,6 +7211,7 @@ }, "app.settings.keyboard.functionality.punctuation_spacing_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7307,6 +7378,7 @@ }, "app.settings.keyboard.keypress_sound" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -7318,6 +7390,7 @@ }, "app.settings.keyboard.keypress_sound_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -7329,6 +7402,7 @@ }, "app.settings.keyboard.keypress_vibration" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7412,6 +7486,7 @@ }, "app.settings.keyboard.keypress_vibration_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7495,6 +7570,7 @@ }, "app.settings.keyboard.layout.default_currency" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7576,174 +7652,177 @@ } } }, - "app.settings.keyboard.layout.default_currency.caption" : { + "app.settings.keyboard.layout.default_currency_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "رمز لمفاتيح 123" + "value" : "اختر أي رمز للعملة يظهر على مفاتيح الأرقام." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "১২৩ কীগুলির জন্য প্রতীক" + "value" : "সংখ্যার কীগুলিতে কোন মুদ্রা প্রতীক প্রদর্শিত হবে তা নির্বাচন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Symbol für Nummerntasten" + "value" : "Auswählen, welches Währungssymbol bei den Nummerntasten auftaucht." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Symbol for the 123 keys" + "value" : "Select which currency symbol appears on the number keys." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Símbolo para las teclas 123" + "value" : "Seleccione el símbolo de moneda que aparecerá en las teclas numéricas." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Symbole pour les touches 123" + "value" : "Sélectionner le symbole de la devise qui apparaît sur les touches numériques." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "123 कुंजियों के लिए प्रतीक" + "value" : "संख्या कुंजियों पर कौन सा मुद्रा प्रतीक दिखाई देगा, उसका चयन करें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Simbol untuk tombol 123" + "value" : "Pilih simbol mata uang yang ingin ditampilkan di tombol angka." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "숫자 키 기호" + "value" : "숫자 키에 어떤 통화 기호가 표시될지를 선택하세요." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "123 किजसाठी चिन्ह" + "value" : "संक्येत कुञ्जींवर कोणते चलन चिन्ह दिसेल ते निवडा." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Símbolo para as teclas 123" + "value" : "Selecione qual símbolo de moeda aparecerá nas teclas de número." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Symbol för 123-tangenter" + "value" : "Välj vilken valutasymbol som ska visas på sifferknapparna." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "123 tuşları için sembol" + "value" : "Sayı tuşlarında hangi para biriminin görüneceğini seçin." } } } }, - "app.settings.keyboard.layout.default_currency_description" : { + "app.settings.keyboard.layout.default_currency.caption" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "اختر أي رمز للعملة يظهر على مفاتيح الأرقام." + "value" : "رمز لمفاتيح 123" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "সংখ্যার কীগুলিতে কোন মুদ্রা প্রতীক প্রদর্শিত হবে তা নির্বাচন করুন।" + "value" : "১২৩ কীগুলির জন্য প্রতীক" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Auswählen, welches Währungssymbol bei den Nummerntasten auftaucht." + "value" : "Symbol für Nummerntasten" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Select which currency symbol appears on the number keys." + "value" : "Symbol for the 123 keys" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Seleccione el símbolo de moneda que aparecerá en las teclas numéricas." + "value" : "Símbolo para las teclas 123" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Sélectionner le symbole de la devise qui apparaît sur les touches numériques." + "value" : "Symbole pour les touches 123" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "संख्या कुंजियों पर कौन सा मुद्रा प्रतीक दिखाई देगा, उसका चयन करें।" + "value" : "123 कुंजियों के लिए प्रतीक" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Pilih simbol mata uang yang ingin ditampilkan di tombol angka." + "value" : "Simbol untuk tombol 123" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "숫자 키에 어떤 통화 기호가 표시될지를 선택하세요." + "value" : "숫자 키 기호" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "संक्येत कुञ्जींवर कोणते चलन चिन्ह दिसेल ते निवडा." + "value" : "123 किजसाठी चिन्ह" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Selecione qual símbolo de moeda aparecerá nas teclas de número." + "value" : "Símbolo para as teclas 123" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj vilken valutasymbol som ska visas på sifferknapparna." + "value" : "Symbol för 123-tangenter" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Sayı tuşlarında hangi para biriminin görüneceğini seçin." + "value" : "123 tuşları için sembol" } } } }, "app.settings.keyboard.layout.default_layout" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7825,168 +7904,170 @@ } } }, - "app.settings.keyboard.layout.default_layout.caption" : { + "app.settings.keyboard.layout.default_layout_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "التخطيط المستخدم" + "value" : "اختر تخطيط لوحة مفاتيح يناسب تفضيلات الكتابة واحتياجات اللغة الخاصة بك." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "ব্যবহার করার জন্য লেআউট" + "value" : "আপনার টাইপিং পছন্দ এবং ভাষার প্রয়োজন অনুযায়ী কীবোর্ড বিন্যাস নির্বাচন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Zu benutzendes Layout" + "value" : "Ein Tastaturlayout auswählen, das den eigenen Vorlieben und der Sprache entspricht." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Layout to use" + "value" : "Select a keyboard layout that suits your typing preference and language needs." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Disposición de uso" + "value" : "Selecciona una distribución para el teclado que se adapta a tus preferencias de escritura y a tus necesidades lingüísticas." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Disposition à utiliser" + "value" : "Sélectionnez une disposition de clavier adaptée à vos préférences de frappe et à vos besoins linguistiques." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "उपयोग होने वाला लेआउट" + "value" : "एक कीबोर्ड लेआउट चुनें जो आपके टाइपिंग प्राथमिकता और भाषा आवश्यकताओं के अनुसार हो।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Layout yang digunakan" + "value" : "Pilih layout keyboard sesuai preferensi mengetik dan kebutuhan bahasamu." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "적용할 레이아웃" + "value" : "선호도와 언어 필요에 맞는 키보드 레이아웃을 선택하세요." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "वापरले जाणारे लेआउट" + "value" : "तुमच्या टाइपिंग आवडीनुसार आणि भाषा गरजेनुसार कीबोर्ड लेआउट निवडा." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Layout a ser usado" + "value" : "Selecione um layout de teclado conforme suas preferências de digitação e idioma." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Layout som ska användas" + "value" : "Välj en tangentbordslayout som passar dina skrivpreferenser och språkbehov." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Kullanılacak klavye düzeni" + "value" : "Yazma tercihlerinize ve dil ihtiyaçlarınıza uygun bir klavye düzeni seçin." } } } }, - "app.settings.keyboard.layout.default_layout_description" : { + "app.settings.keyboard.layout.default_layout.caption" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "اختر تخطيط لوحة مفاتيح يناسب تفضيلات الكتابة واحتياجات اللغة الخاصة بك." + "value" : "التخطيط المستخدم" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "আপনার টাইপিং পছন্দ এবং ভাষার প্রয়োজন অনুযায়ী কীবোর্ড বিন্যাস নির্বাচন করুন।" + "value" : "ব্যবহার করার জন্য লেআউট" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Ein Tastaturlayout auswählen, das den eigenen Vorlieben und der Sprache entspricht." + "value" : "Zu benutzendes Layout" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Select a keyboard layout that suits your typing preference and language needs." + "value" : "Layout to use" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Selecciona una distribución para el teclado que se adapta a tus preferencias de escritura y a tus necesidades lingüísticas." + "value" : "Disposición de uso" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Sélectionnez une disposition de clavier adaptée à vos préférences de frappe et à vos besoins linguistiques." + "value" : "Disposition à utiliser" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "एक कीबोर्ड लेआउट चुनें जो आपके टाइपिंग प्राथमिकता और भाषा आवश्यकताओं के अनुसार हो।" + "value" : "उपयोग होने वाला लेआउट" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Pilih layout keyboard sesuai preferensi mengetik dan kebutuhan bahasamu." + "value" : "Layout yang digunakan" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "선호도와 언어 필요에 맞는 키보드 레이아웃을 선택하세요." + "value" : "적용할 레이아웃" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "तुमच्या टाइपिंग आवडीनुसार आणि भाषा गरजेनुसार कीबोर्ड लेआउट निवडा." + "value" : "वापरले जाणारे लेआउट" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Selecione um layout de teclado conforme suas preferências de digitação e idioma." + "value" : "Layout a ser usado" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj en tangentbordslayout som passar dina skrivpreferenser och språkbehov." + "value" : "Layout som ska användas" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Yazma tercihlerinize ve dil ihtiyaçlarınıza uygun bir klavye düzeni seçin." + "value" : "Kullanılacak klavye düzeni" } } } @@ -8491,6 +8572,7 @@ }, "app.settings.keyboard.translation.select_source" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8572,257 +8654,258 @@ } } }, - "app.settings.keyboard.translation.select_source.caption" : { + "app.settings.keyboard.translation.select_source_description" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "ما هي اللغة المصدر" + "value" : "تغيير اللغة للترجمة منها." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "উৎস ভাষা কী" + "value" : "যে ভাষা থেকে অনুবাদ করা হবে তা পরিবর্তন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Die verwendete Ausgangssprache" + "value" : "Wähle die Sprache, von der übersetzt wird." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "What the source language is" + "value" : "Change the language to translate from." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "¿Cuál es idioma de origen?" + "value" : "Elige un idioma para traducir" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Langue source" + "value" : "Modifier la langue à partir de laquelle la traduction doit être effectuée." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "स्रोत भाषा क्या है" + "value" : "जिस भाषा से अनुवाद करना है, उसे बदलें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Apa bahasa asalnya" + "value" : "Ubah bahasa untuk diterjemahkan dari." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "원본 언어는 무엇인가요" + "value" : "번역할 언어를 변경하세요." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "स्रोत भाषा काय आहे" + "value" : "अनुवाद करायची भाषा बदला." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "O idioma de origem" + "value" : "Altere o idioma a ser traduzido." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Vilket är källspråket" + "value" : "Välj ett språk att översätta ifrån" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Kaynak dil nedir" + "value" : "Çevrilecek dili değiştirin." } } } }, - "app.settings.keyboard.translation.select_source.title" : { + "app.settings.keyboard.translation.select_source.caption" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لغة الترجمة" + "value" : "ما هي اللغة المصدر" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "অনুবাদ ভাষা" + "value" : "উৎস ভাষা কী" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Übersetzungssprache" + "value" : "Die verwendete Ausgangssprache" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Translation language" + "value" : "What the source language is" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Idioma de la traducción" + "value" : "¿Cuál es idioma de origen?" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Langue de traduction" + "value" : "Langue source" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "अनुवाद भाषा" + "value" : "स्रोत भाषा क्या है" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Bahasa terjemahan" + "value" : "Apa bahasa asalnya" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "번역 언어" + "value" : "원본 언어는 무엇인가요" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "अनुवाद भाषा" + "value" : "स्रोत भाषा काय आहे" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Idioma da tradução" + "value" : "O idioma de origem" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Språk för översättning" + "value" : "Vilket är källspråket" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Çeviri dili" + "value" : "Kaynak dil nedir" } } } }, - "app.settings.keyboard.translation.select_source_description" : { + "app.settings.keyboard.translation.select_source.title" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "تغيير اللغة للترجمة منها." + "value" : "لغة الترجمة" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "যে ভাষা থেকে অনুবাদ করা হবে তা পরিবর্তন করুন।" + "value" : "অনুবাদ ভাষা" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Wähle die Sprache, von der übersetzt wird." + "value" : "Übersetzungssprache" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Change the language to translate from." + "value" : "Translation language" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Elige un idioma para traducir" + "value" : "Idioma de la traducción" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Modifier la langue à partir de laquelle la traduction doit être effectuée." + "value" : "Langue de traduction" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "जिस भाषा से अनुवाद करना है, उसे बदलें।" + "value" : "अनुवाद भाषा" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Ubah bahasa untuk diterjemahkan dari." + "value" : "Bahasa terjemahan" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "번역할 언어를 변경하세요." + "value" : "번역 언어" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "अनुवाद करायची भाषा बदला." + "value" : "अनुवाद भाषा" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Altere o idioma a ser traduzido." + "value" : "Idioma da tradução" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj ett språk att översätta ifrån" + "value" : "Språk för översättning" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Çevrilecek dili değiştirin." + "value" : "Çeviri dili" } } } }, "app.settings.keyboard.translation.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8906,6 +8989,7 @@ }, "app.settings.menu.app_color_mode" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8989,6 +9073,7 @@ }, "app.settings.menu.app_color_mode_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9153,340 +9238,344 @@ } } }, - "app.settings.menu.app_language.caption" : { + "app.settings.menu.app_language_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "اختر لغة لنصوص التطبيق" + "value" : "تغيير اللغة التي يتم بها عرض تطبيق Scribe." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "অ্যাপের টেক্সটগুলির জন্য ভাষা নির্বাচন করুন" + "value" : "Scribe অ্যাপ কোন ভাষায় থাকবে তা পরিবর্তন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "App-Sprache auswählen" + "value" : "Ändern, welche Sprache für die Scribe-App benutzt wird." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Select language for app texts" + "value" : "Change which language the Scribe app is in." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Selecciona el idioma de los textos de la aplicación" + "value" : "Cambiar el idioma de la aplicación Scribe." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Sélectionner la langue des textes de l'application" + "value" : "Modifier la langue de l'application Scribe." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "ऐप टेक्स्ट के लिए भाषा चुनें" + "value" : "स्क्राइब ऐप किस भाषा में होगा, उसे बदलें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Pilih bahasa untuk tampilan teks aplikasi. " + "value" : "Ubah bahasa yang digunakan pada aplikasi Scribe" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "앱에서 사용할 언어 선택" + "value" : "Scribe 앱에서 사용할 언어를 변경합니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "अ‍ॅप टेक्स्टसाठी भाषा निवडा" + "value" : "स्क्राइब अ‍ॅप कोणत्या भाषेत असेल ते बदला." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Selecione o idioma para os textos do aplicativo" + "value" : "Altere o idioma do aplicativo Scribe." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj språk för apptexter" + "value" : "Ändra vilket språk Scribe-appen är på." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Uygulama metinleri için dil seçin" + "value" : "Scribe uygulamasının hangi dilde olduğunu değiştirin." } } } }, - "app.settings.menu.app_language.one_device_language_warning.message" : { + "app.settings.menu.app_language.caption" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لديك لغة واحدة فقط مثبتة على جهازك. يرجى تثبيت المزيد من اللغات في الإعدادات ثم يمكنك تحديد الترجمات المختلفة لتطبيق Scribe." + "value" : "اختر لغة لنصوص التطبيق" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "আপনার ডিভাইসে শুধুমাত্র একটি ভাষা ইনস্টল করা আছে। দয়া করে সেটিংসে আরও ভাষা ইনস্টল করুন, তারপর আপনি Scribe-এর বিভিন্ন localizations নির্বাচন করতে পারবেন।" + "value" : "অ্যাপের টেক্সটগুলির জন্য ভাষা নির্বাচন করুন" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Auf Ihrem Gerät ist nur eine Sprache installiert. Bitte installieren Sie weitere Sprachen in den Einstellungen. Anschließend können Sie verschiedene Lokalisierungen von Scribe auswählen." + "value" : "App-Sprache auswählen" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "You only have one language installed on your device. Please install more languages in Settings and then you can select different localizations of Scribe." + "value" : "Select language for app texts" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Solo tienes un idioma instalado en tu dispositivo. Instala más idiomas en Configuración y luego podrás seleccionar diferentes localizaciones de Scribe." + "value" : "Selecciona el idioma de los textos de la aplicación" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Une seule langue est installée sur votre appareil. Veuillez installer d'autres langues dans les Paramètres et vous pourrez alors sélectionner différentes langues de Scribe." + "value" : "Sélectionner la langue des textes de l'application" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "आपके डिवाइस पर केवल एक भाषा स्थापित है। कृपया सेटिंग्स में अधिक भाषाएँ स्थापित करें और फिर आप स्क्राइब के विभिन्न स्थानीयकरण का चयन कर सकते हैं।" + "value" : "ऐप टेक्स्ट के लिए भाषा चुनें" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Kamu hanya memiliki satu bahasa yang terpasang di perangkatmu. Silakan pasang lebih banyak bahasa di Pengaturan dan kamu akan bisa memilih lokalisasi Scribe yang berbeda." + "value" : "Pilih bahasa untuk tampilan teks aplikasi. " } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "현재 기기에 설치된 언어는 하나뿐입니다. 설정에서 추가 언어를 설치한 후 Scribe의 다양한 지역화를 선택할 수 있습니다." + "value" : "앱에서 사용할 언어 선택" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "तुमच्या डिव्हाइसवर फक्त एक भाषा स्थापित आहे. कृपया सेटिंग्जमध्ये अधिक भाषांचे संयोजन स्थापित करा आणि नंतर तुम्ही स्क्राइबच्या वेगवेगळ्या स्थानिकीकरण निवडू शकता." + "value" : "अ‍ॅप टेक्स्टसाठी भाषा निवडा" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Você tem apenas um idioma instalado no seu dispositivo. Por favor, instale mais idiomas nas Configurações para então selecionar diferentes versões de idioma do Scribe." + "value" : "Selecione o idioma para os textos do aplicativo" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Du har bara ett språk installerat på din enhet. Installera fler språk i Inställningar och efter det kan du välja olika lokaliseringar av Scribe." + "value" : "Välj språk för apptexter" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Cihazınızda yalnızca bir dil yüklü. Ayarlardan daha fazla dil yükleyin ve ardından Scribe'ın farklı yerelleştirmelerini seçin." + "value" : "Uygulama metinleri için dil seçin" } } } }, - "app.settings.menu.app_language.one_device_language_warning.title" : { + "app.settings.menu.app_language.one_device_language_warning.message" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لغة جهاز واحدة فقط" + "value" : "لديك لغة واحدة فقط مثبتة على جهازك. يرجى تثبيت المزيد من اللغات في الإعدادات ثم يمكنك تحديد الترجمات المختلفة لتطبيق Scribe." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "শুধুমাত্র একটি ডিভাইসের ভাষা" + "value" : "আপনার ডিভাইসে শুধুমাত্র একটি ভাষা ইনস্টল করা আছে। দয়া করে সেটিংসে আরও ভাষা ইনস্টল করুন, তারপর আপনি Scribe-এর বিভিন্ন localizations নির্বাচন করতে পারবেন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Nur eine Gerätesprache" + "value" : "Auf Ihrem Gerät ist nur eine Sprache installiert. Bitte installieren Sie weitere Sprachen in den Einstellungen. Anschließend können Sie verschiedene Lokalisierungen von Scribe auswählen." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Only one device language" + "value" : "You only have one language installed on your device. Please install more languages in Settings and then you can select different localizations of Scribe." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Solo un idioma para el dispositivo" + "value" : "Solo tienes un idioma instalado en tu dispositivo. Instala más idiomas en Configuración y luego podrás seleccionar diferentes localizaciones de Scribe." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Une seule langue pour l'appareil" + "value" : "Une seule langue est installée sur votre appareil. Veuillez installer d'autres langues dans les Paramètres et vous pourrez alors sélectionner différentes langues de Scribe." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "केवल एक डिवाइस भाषा" + "value" : "आपके डिवाइस पर केवल एक भाषा स्थापित है। कृपया सेटिंग्स में अधिक भाषाएँ स्थापित करें और फिर आप स्क्राइब के विभिन्न स्थानीयकरण का चयन कर सकते हैं।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Hanya satu bahasa perangkat" + "value" : "Kamu hanya memiliki satu bahasa yang terpasang di perangkatmu. Silakan pasang lebih banyak bahasa di Pengaturan dan kamu akan bisa memilih lokalisasi Scribe yang berbeda." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "기기 언어가 하나뿐입니다." + "value" : "현재 기기에 설치된 언어는 하나뿐입니다. 설정에서 추가 언어를 설치한 후 Scribe의 다양한 지역화를 선택할 수 있습니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "फक्त एक डिव्हाइस भाषा" + "value" : "तुमच्या डिव्हाइसवर फक्त एक भाषा स्थापित आहे. कृपया सेटिंग्जमध्ये अधिक भाषांचे संयोजन स्थापित करा आणि नंतर तुम्ही स्क्राइबच्या वेगवेगळ्या स्थानिकीकरण निवडू शकता." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Apenas um idioma no dispositivo" + "value" : "Você tem apenas um idioma instalado no seu dispositivo. Por favor, instale mais idiomas nas Configurações para então selecionar diferentes versões de idioma do Scribe." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Endast ett enhetsspråk" + "value" : "Du har bara ett språk installerat på din enhet. Installera fler språk i Inställningar och efter det kan du välja olika lokaliseringar av Scribe." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Yalnızca bir cihaz dili" + "value" : "Cihazınızda yalnızca bir dil yüklü. Ayarlardan daha fazla dil yükleyin ve ardından Scribe'ın farklı yerelleştirmelerini seçin." } } } }, - "app.settings.menu.app_language_description" : { + "app.settings.menu.app_language.one_device_language_warning.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "تغيير اللغة التي يتم بها عرض تطبيق Scribe." + "value" : "لغة جهاز واحدة فقط" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "Scribe অ্যাপ কোন ভাষায় থাকবে তা পরিবর্তন করুন।" + "value" : "শুধুমাত্র একটি ডিভাইসের ভাষা" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Ändern, welche Sprache für die Scribe-App benutzt wird." + "value" : "Nur eine Gerätesprache" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Change which language the Scribe app is in." + "value" : "Only one device language" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Cambiar el idioma de la aplicación Scribe." + "value" : "Solo un idioma para el dispositivo" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Modifier la langue de l'application Scribe." + "value" : "Une seule langue pour l'appareil" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "स्क्राइब ऐप किस भाषा में होगा, उसे बदलें।" + "value" : "केवल एक डिवाइस भाषा" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Ubah bahasa yang digunakan pada aplikasi Scribe" + "value" : "Hanya satu bahasa perangkat" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "Scribe 앱에서 사용할 언어를 변경합니다." + "value" : "기기 언어가 하나뿐입니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "स्क्राइब अ‍ॅप कोणत्या भाषेत असेल ते बदला." + "value" : "फक्त एक डिव्हाइस भाषा" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Altere o idioma do aplicativo Scribe." + "value" : "Apenas um idioma no dispositivo" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Ändra vilket språk Scribe-appen är på." + "value" : "Endast ett enhetsspråk" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Scribe uygulamasının hangi dilde olduğunu değiştirin." + "value" : "Yalnızca bir cihaz dili" } } } }, "app.settings.menu.high_color_contrast" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9570,6 +9659,7 @@ }, "app.settings.menu.high_color_contrast_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9653,6 +9743,7 @@ }, "app.settings.menu.increase_text_size" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9736,6 +9827,7 @@ }, "app.settings.menu.increase_text_size_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { From d77b3132aebc9650c9e812837940776ce2d75422 Mon Sep 17 00:00:00 2001 From: Purnama S Rahayu Date: Thu, 18 Dec 2025 19:03:59 +0700 Subject: [PATCH 2/5] add paramaters for ConfirmDialogView --- Scribe/ConfirmDialog/ConfirmDialogView.swift | 128 +++++++++++-------- Scribe/InstallationTab/InstallationVC.swift | 50 ++++++++ 2 files changed, 127 insertions(+), 51 deletions(-) diff --git a/Scribe/ConfirmDialog/ConfirmDialogView.swift b/Scribe/ConfirmDialog/ConfirmDialogView.swift index 158cd0f6..e67a3f30 100644 --- a/Scribe/ConfirmDialog/ConfirmDialogView.swift +++ b/Scribe/ConfirmDialog/ConfirmDialogView.swift @@ -16,69 +16,95 @@ struct ConfirmDialogView: View { var infoText: String var changeButtonText: String var confirmButtonText: String + var onDismiss: () -> Void + var onChange: () -> Void + var onConfirm: () -> Void var body: some View { - VStack(spacing: 10) { - HStack(alignment: .center) { - Image(systemName: "info.circle") - .resizable() - .frame(width: iconSize, height: iconSize) - .foregroundColor(Color.scribeCTA) + ZStack { + Color.clear + .contentShape(Rectangle()) + .onTapGesture { + onDismiss() + } + VStack(spacing: 10) { + HStack(alignment: .center) { + Image(systemName: "info.circle") + .resizable() + .frame(width: iconSize, height: iconSize) + .foregroundColor(Color.scribeCTA) - Text(infoText) - .font(.system(size: DeviceType.isPad ? 22 : 0)) - .fixedSize(horizontal: false, vertical: true) - } + Text(infoText) + .font(.system(size: DeviceType.isPad ? 22 : 0)) + .fixedSize(horizontal: false, vertical: true) + } - HStack { - Spacer() - Button( - action: {}, - label: { - Text(changeButtonText) - .foregroundColor(Color.keyChar) - }) - .buttonStyle(.borderedProminent) - .tint(Color.keySpecial) - .shadow( - color: shadowColor, - radius: 1, - x: 0, - y: 3 - ) - Button( - action: {}, - label: { - Text(confirmButtonText) - .foregroundColor(Color.keyChar) - }) - .buttonStyle(.borderedProminent) - .tint(Color.scribeBlue) - .shadow( - color: shadowColor, - radius: 3, - x: 0, - y: 3 - ) - } - } - .padding(cardPadding) - .background( - RoundedRectangle(cornerRadius: cardCornerRadius) - .fill(Color.lightWhiteDarkBlack) + HStack { + Spacer() + Button( + action: {}, + label: { + Text(changeButtonText) + .font(.system(size: DeviceType.isPad ? 22 : 0)) + .foregroundColor(Color.keyChar) + }) + .buttonStyle(.borderedProminent) + .tint(Color.keySpecial) + .shadow( + color: shadowColor, + radius: 1, + x: 0, + y: 3 + ) + Button( + action: onConfirm, + label: { + Text(confirmButtonText) + .font(.system(size: DeviceType.isPad ? 22 : 0)) + .foregroundColor(Color.keyChar) + }) + .buttonStyle(.borderedProminent) + .tint(Color.scribeBlue) .shadow( color: shadowColor, radius: 3, x: 0, - y: 4 + y: 3 ) - ) - .padding(externalPadding) - } + } + } + .padding(cardPadding) + .background( + RoundedRectangle(cornerRadius: cardCornerRadius) + .fill(Color.lightWhiteDarkBlack) + .shadow( + color: shadowColor, + radius: 3, + x: 0, + y: 4 + ) + ) + .padding(externalPadding) + + } + } } struct ConfirmTranslationSource: View { + var infoText: String + var changeButtonText: String + var confirmButtonText: String + var onDismiss: () -> Void + var onChange: () -> Void + var onConfirm: () -> Void var body: some View { - ConfirmDialogView(infoText: "The data you will download will allow you to translate from English to German. Do you want to change the language you'll translate from?", changeButtonText: "Change language", confirmButtonText: "Use English") + ConfirmDialogView( + infoText: infoText, + changeButtonText: changeButtonText, + confirmButtonText: confirmButtonText, + onDismiss: onDismiss, + onChange: onChange, + onConfirm: onConfirm + ) } } diff --git a/Scribe/InstallationTab/InstallationVC.swift b/Scribe/InstallationTab/InstallationVC.swift index d0f1fe12..39cbf885 100644 --- a/Scribe/InstallationTab/InstallationVC.swift +++ b/Scribe/InstallationTab/InstallationVC.swift @@ -92,6 +92,7 @@ class InstallationVC: UIViewController { setCurrentUI() showTipCardView() + addPopupButton() } /// Includes a call to checkDarkModeSetColors to set brand colors and a call to set the UI for the app screen. @@ -322,4 +323,53 @@ extension InstallationVC { }, completion: nil ) } + + private func addPopupButton() { + // Create a button + let popupButton = UIButton(type: .system) + popupButton.setTitle("Open Popup", for: .normal) + popupButton.titleLabel?.font = UIFont.systemFont(ofSize: fontSize) + popupButton.backgroundColor = .systemBlue + popupButton.setTitleColor(.white, for: .normal) + popupButton.layer.cornerRadius = 10 + popupButton.translatesAutoresizingMaskIntoConstraints = false + + // Add action + popupButton.addTarget(self, action: #selector(showPopup), for: .touchUpInside) + + // Add to view + view.addSubview(popupButton) + + // Position it at the bottom + NSLayoutConstraint.activate([ + popupButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20), + popupButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), + popupButton.widthAnchor.constraint(equalToConstant: 150), + popupButton.heightAnchor.constraint(equalToConstant: 44) + ]) + } + + @objc private func showPopup() { + var sourceLanguage = "English" + var destLanguage = "German" + var infoText = "The data you will download will allow you to translate from \(sourceLanguage) to \(destLanguage). Do you want to change the language you'll translate from?" + var changeText = "Change language" + var confirmText = "Use \(sourceLanguage)" + + let popupView = ConfirmTranslationSource( + infoText: infoText, + changeButtonText: changeText, + confirmButtonText: confirmText, + onDismiss: {self.dismiss(animated: true)}, + onChange: {}, + onConfirm: {self.dismiss(animated: true)}, + + ) + let hostingController = UIHostingController(rootView: popupView) + hostingController.modalPresentationStyle = .overFullScreen + hostingController.modalTransitionStyle = .crossDissolve + hostingController.view.backgroundColor = .clear + + present(hostingController, animated: true) + } } From a1ccb98caa6ecb68088ca0a91e97e2971bb46d5e Mon Sep 17 00:00:00 2001 From: Purnama S Rahayu Date: Mon, 22 Dec 2025 13:54:12 +0700 Subject: [PATCH 3/5] navigate to Translation language source on clicking "Change language" --- .../KeyboardsBase/InterfaceVariables.swift | 10 +-- Scribe/Base.lproj/AppScreen.storyboard | 90 +++++++++++++------ Scribe/ConfirmDialog/ConfirmDialogView.swift | 2 +- Scribe/InstallationTab/InstallationVC.swift | 57 +++++++++++- .../SelectionViewTemplateViewController.swift | 2 + 5 files changed, 128 insertions(+), 33 deletions(-) diff --git a/Keyboards/KeyboardsBase/InterfaceVariables.swift b/Keyboards/KeyboardsBase/InterfaceVariables.swift index 967bacee..b4a0b7da 100644 --- a/Keyboards/KeyboardsBase/InterfaceVariables.swift +++ b/Keyboards/KeyboardsBase/InterfaceVariables.swift @@ -141,13 +141,13 @@ var controllerLanguage = String() // Dictionary for accessing language abbreviations. let languagesAbbrDict = [ - "Danish": "da", +// "Danish": "da", "English": "en", "French": "fr", "German": "de", - "Indonesian": "id", +// "Indonesian": "id", "Italian": "it", - "Norwegian": "nb", +// "Norwegian": "nb", "Portuguese": "pt", "Russian": "ru", "Spanish": "es", @@ -158,9 +158,9 @@ let languagesStringDict = [ "English": NSLocalizedString("app._global.english", value: "English", comment: ""), "French": NSLocalizedString("app._global.french", value: "French", comment: ""), "German": NSLocalizedString("app._global.german", value: "German", comment: ""), - "Indonesian": NSLocalizedString("app._global.indonesian", value: "Indonesian", comment: ""), +// "Indonesian": NSLocalizedString("app._global.indonesian", value: "Indonesian", comment: ""), "Italian": NSLocalizedString("app._global.italian", value: "Italian", comment: ""), - "Norwegian": NSLocalizedString("app._global.norwegian", value: "Norwegian", comment: ""), +// "Norwegian": NSLocalizedString("app._global.norwegian", value: "Norwegian", comment: ""), "Portuguese": NSLocalizedString("app._global.portuguese", value: "Portuguese", comment: ""), "Russian": NSLocalizedString("app._global.russian", value: "Russian", comment: ""), "Spanish": NSLocalizedString("app._global.spanish", value: "Spanish", comment: ""), diff --git a/Scribe/Base.lproj/AppScreen.storyboard b/Scribe/Base.lproj/AppScreen.storyboard index b72f2f9d..05b12b6a 100644 --- a/Scribe/Base.lproj/AppScreen.storyboard +++ b/Scribe/Base.lproj/AppScreen.storyboard @@ -1,9 +1,9 @@ - + - + @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ - + @@ -128,7 +128,7 @@ - + @@ -236,13 +236,13 @@ - + - + - + @@ -275,10 +275,10 @@ - + - + @@ -317,7 +317,7 @@ - + @@ -326,36 +326,36 @@ - + - + - + - + - + - +