diff --git a/Core/Localization/Resources/ar.lproj/Localizable.strings b/Core/Localization/Resources/ar.lproj/Localizable.strings index 2153d6d2..b0d62a00 100644 --- a/Core/Localization/Resources/ar.lproj/Localizable.strings +++ b/Core/Localization/Resources/ar.lproj/Localizable.strings @@ -7,16 +7,12 @@ // MARK: - Errors -"error.title" = "خطأ"; -"NetworkError_ConnectionLost" = "فقد الإتصال بشبكة الإنترنت. من فضلك تحرك إلى مكان به إشارة أفضل."; -"NetworkError_InternationalRoamingOff" = "لا يسمح باستخدام التجوال الدولي. من فضلك قم بتغيير إعدادات خدمة التجوال الدولي، أو إتصل بالإنترنت عن طريق Wi-Fi."; -"NetworkError_NotConnectedToInternet" = "لا يوجد إتصال بشبكة الإنترنت. من فضلك قم بتشغيل Wi-Fi، أو السماح باتصال البيانات الخلوية."; -"NetworkError_ServerNotReachable" = "عفوا. حدث خطأ، حاول مرة اخرى."; -"unknown_error_message" = "عفوا. حدث خطأ، حاول مرة اخرى."; -"NetworkError_Parsing" = "عفوا. حدث خطأ، حاول مرة اخرى."; - -"FileSystemError_Unknown" = "عفوا. حدث خطأ، حاول مرة اخرى."; -"FileSystemError_NoDiskSpace" = "لا توجد مساحة كافيه في ذاكرة الهاتف لحفظ التنزيلات."; +"error.dialog.title" = "خطأ"; +"error.message.connection_lost" = "فقد الإتصال بشبكة الإنترنت. من فضلك تحرك إلى مكان به إشارة أفضل."; +"error.message.international_roaming_off" = "لا يسمح باستخدام التجوال الدولي. من فضلك قم بتغيير إعدادات خدمة التجوال الدولي، أو إتصل بالإنترنت عن طريق Wi-Fi."; +"error.message.not_connected_to_internet" = "لا يوجد إتصال بشبكة الإنترنت. من فضلك قم بتشغيل Wi-Fi، أو السماح باتصال البيانات الخلوية."; +"error.message.general" = "عفوا. حدث خطأ، حاول مرة اخرى."; +"error.message.no_disk_space" = "لا توجد مساحة كافيه في ذاكرة الهاتف لحفظ التنزيلات."; // MARK: - Quran @@ -25,33 +21,28 @@ // MARK: - Translation -"translationTextType" = "الترجمة إلى الإنجليزية"; -"transliterationTextType" = "نسخ الحروف للإنجليزية"; - -"translations.selectedTranslations" = "المختار"; - -"translatorLabel: " = "المفسر: "; -"upgradeTranslationButtonTitle" = "تحديث"; - -"errorInTranslationText" = "عفوا. حدث خطأ، حاول مرة اخرى."; -"noAvailableTranslationText" = "لا توجد ترجمة متاحة لهذه الآية."; -"referenceVerseTranslationText" = "انظر آية رقم %d."; - -"ayah.text.read-more" = "اقرأ المزيد"; +"translation.text-type.translation" = "الترجمة إلى الإنجليزية"; +"translation.text-type.transliteration" = "نسخ الحروف للإنجليزية"; +"translation.selectedTranslations" = "المختار"; +"translation.translator" = "المفسر: "; +"translation.text.see-referenced-verse" = "انظر آية رقم %d."; +"translation.text.read-more" = "اقرأ المزيد"; +"error.translation.text-retrieval" = "عفوا. حدث خطأ، حاول مرة اخرى."; +"error.translation.text-not-available" = "لا توجد ترجمة متاحة لهذه الآية."; // MARK: - Search -"searchRecentsTitle" = "عمليات البحث الأخيرة"; -"searchPopularTitle" = "اختبر البحث بإستخدام"; -"searchPlaceholder" = "سور أو آيات أو تفاسير أو ترجمات أو الأرقام"; -"searchResultTitle" = "(%2$d) %1$@"; +"search.recents.title" = "عمليات البحث الأخيرة"; +"search.popular.title" = "اختبر البحث بإستخدام"; +"search.placeholder.text" = "سور أو آيات أو تفاسير أو ترجمات أو الأرقام"; +"search.result.count" = "(%2$d) %1$@"; // MARK: - Settings -"write_review" = "قيم التطبيق على المتجر الالكتروني..."; -"contact_us" = "اتصل بنا"; -"share_app" = "مشاركة التطبيق..."; -"app_version" = "نسخة التطبيق"; +"setting.write_review" = "قيم التطبيق على المتجر الالكتروني..."; +"setting.contact_us" = "اتصل بنا"; +"setting.share_app" = "مشاركة التطبيق..."; +"setting.app_version" = "نسخة التطبيق"; // MARK: - Quran Menu @@ -66,7 +57,8 @@ "menu.twoPages" = "عرض صفحتين في الوضع الأفقي"; "menu.verticalScrolling" = "تمرير رأسي"; -// Theme +// MARK: - Theme + "theme.light" = "فاتح"; "theme.dark" = "داكن"; "theme.auto" = "تلقائي"; diff --git a/Core/Localization/Resources/de.lproj/Localizable.strings b/Core/Localization/Resources/de.lproj/Localizable.strings index 2a26a4bd..6a1a005b 100644 --- a/Core/Localization/Resources/de.lproj/Localizable.strings +++ b/Core/Localization/Resources/de.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/en.lproj/Localizable.strings b/Core/Localization/Resources/en.lproj/Localizable.strings index 78535323..40a9a7f7 100644 --- a/Core/Localization/Resources/en.lproj/Localizable.strings +++ b/Core/Localization/Resources/en.lproj/Localizable.strings @@ -10,16 +10,12 @@ // MARK: - Errors -"error.title" = "Error"; -"NetworkError_ConnectionLost" = "Internet connection is lost. Move to a location where more stable connection is available, or wait until the connection returns to be stable."; -"NetworkError_InternationalRoamingOff" = "International roaming is not allowed. Change the international roaming setting, or turn on Wi-Fi."; -"NetworkError_NotConnectedToInternet" = "Not connected to the internet. Turn on Wi-Fi, or allow cellular data connection."; -"NetworkError_ServerNotReachable" = "Oops! Something went wrong. Please try again."; -"unknown_error_message" = "Oops! Something went wrong. Please try again."; -"NetworkError_Parsing" = "Oops! Something went wrong. Please try again."; - -"FileSystemError_Unknown" = "Oops! Something went wrong. Please try again."; -"FileSystemError_NoDiskSpace" = "No available disk space to save the downloads"; +"error.dialog.title" = "Error"; +"error.message.connection_lost" = "Internet connection is lost. Move to a location where more stable connection is available, or wait until the connection returns to be stable."; +"error.message.international_roaming_off" = "International roaming is not allowed. Change the international roaming setting, or turn on Wi-Fi."; +"error.message.not_connected_to_internet" = "Not connected to the internet. Turn on Wi-Fi, or allow cellular data connection."; +"error.message.general" = "Oops! Something went wrong. Please try again."; +"error.message.no_disk_space" = "No available disk space to save the downloads."; // MARK: - Quran @@ -28,33 +24,28 @@ // MARK: - Translation -"translationTextType" = "Translation"; -"transliterationTextType" = "Transliteration"; - -"translations.selectedTranslations" = "Selected"; - -"translatorLabel: " = "Translator: "; -"upgradeTranslationButtonTitle" = "UPDATE"; - -"errorInTranslationText" = "Oops! Something went wrong. We couldn't retrieve the translation."; -"noAvailableTranslationText" = "No translation available for this Ayah."; -"referenceVerseTranslationText" = "See ayah %d."; - -"ayah.text.read-more" = "Read more"; +"translation.text-type.translation" = "Translation"; +"translation.text-type.transliteration" = "Transliteration"; +"translation.selectedTranslations" = "Selected"; +"translation.translator" = "Translator: "; +"translation.text.see-referenced-verse" = "See ayah %d."; +"translation.text.read-more" = "Read more"; +"error.translation.text-retrieval" = "Oops! Something went wrong. We couldn't retrieve the translation."; +"error.translation.text-not-available" = "No translation available for this Ayah."; // MARK: - Search -"searchRecentsTitle" = "Recent searches"; -"searchPopularTitle" = "Try searching with"; -"searchPlaceholder" = "Surah, verse, translation, tafseer, and numbers"; -"searchResultTitle" = "%@ (%d)"; +"search.recents.title" = "Recent searches"; +"search.popular.title" = "Try searching with"; +"search.placeholder.text" = "Surah, verse, translation, tafseer, and numbers"; +"search.result.count" = "%@ (%d)"; // MARK: - Settings -"write_review" = "Write an app store review..."; -"contact_us" = "Contact Us"; -"share_app" = "Share the app..."; -"app_version" = "App Version"; +"setting.write_review" = "Write an app store review..."; +"setting.contact_us" = "Contact Us"; +"setting.share_app" = "Share the app..."; +"setting.app_version" = "App Version"; // MARK: - Quran Menu @@ -69,7 +60,8 @@ "menu.twoPages" = "2 pages side-by-side (in landscape)"; "menu.verticalScrolling" = "Vertical scrolling"; -// Theme +// MARK: - Theme + "theme.light" = "Light"; "theme.dark" = "Dark"; "theme.auto" = "Auto"; diff --git a/Core/Localization/Resources/es.lproj/Localizable.strings b/Core/Localization/Resources/es.lproj/Localizable.strings index c4a6d16b..981770eb 100644 --- a/Core/Localization/Resources/es.lproj/Localizable.strings +++ b/Core/Localization/Resources/es.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/fa.lproj/Localizable.strings b/Core/Localization/Resources/fa.lproj/Localizable.strings index c6349de5..e687889b 100644 --- a/Core/Localization/Resources/fa.lproj/Localizable.strings +++ b/Core/Localization/Resources/fa.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/fr.lproj/Localizable.strings b/Core/Localization/Resources/fr.lproj/Localizable.strings index db476f74..c4f97cc7 100644 --- a/Core/Localization/Resources/fr.lproj/Localizable.strings +++ b/Core/Localization/Resources/fr.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/kk.lproj/Localizable.strings b/Core/Localization/Resources/kk.lproj/Localizable.strings index f49c6b76..382fdf91 100644 --- a/Core/Localization/Resources/kk.lproj/Localizable.strings +++ b/Core/Localization/Resources/kk.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/ms.lproj/Localizable.strings b/Core/Localization/Resources/ms.lproj/Localizable.strings index 47334768..a3bd586e 100644 --- a/Core/Localization/Resources/ms.lproj/Localizable.strings +++ b/Core/Localization/Resources/ms.lproj/Localizable.strings @@ -8,42 +8,33 @@ // MARK: - Errors -"NetworkError_ConnectionLost" = "Tiada sambungan internet. Ubah ke lokasi yang mempunyai internet yang stabil atau tunggu sehingga sambungan internet menjadi lebih stabil."; -"NetworkError_InternationalRoamingOff" = "Perayauan antarabangsa tidak dibenarkan. Ubah tetapan perayauan atau hidupkan Wi-Fi anda."; -"NetworkError_NotConnectedToInternet" = "Tiada sambungan internet. Hidupkan Wi-Fi atau hidupkan sambungan data selular."; -"NetworkError_ServerNotReachable" = "Maaf! sesuatu yang tidak diingini terjadi. Sila cuba lagi."; -"unknown_error_message" = "Maaf! sesuatu yang tidak diingini terjadi. Sila cuba lagi."; -"NetworkError_Parsing" = "Maaf! sesuatu yang tidak diingini terjadi. Sila cuba lagi."; - -"FileSystemError_Unknown" = "Maaf! sesuatu yang tidak diingini terjadi. Sila cuba lagi."; -"FileSystemError_NoDiskSpace" = "Ruang storan tidak mencukupi untuk memuat turun."; +"error.message.connection_lost" = "Tiada sambungan internet. Ubah ke lokasi yang mempunyai internet yang stabil atau tunggu sehingga sambungan internet menjadi lebih stabil."; +"error.message.international_roaming_off" = "Perayauan antarabangsa tidak dibenarkan. Ubah tetapan perayauan atau hidupkan Wi-Fi anda."; +"error.message.not_connected_to_internet" = "Tiada sambungan internet. Hidupkan Wi-Fi atau hidupkan sambungan data selular."; +"error.message.general" = "Maaf! sesuatu yang tidak diingini terjadi. Sila cuba lagi."; +"error.message.no_disk_space" = "Ruang storan tidak mencukupi untuk memuat turun."; // MARK: - Quran // MARK: - Translation -"translationTextType" = "Terjemahan"; -"transliterationTextType" = "Transliterasi"; - - -"translatorLabel: " = "Penterjemah: "; -"upgradeTranslationButtonTitle" = "KEMASKINI"; - -"errorInTranslationText" = "Maaf! Sesuatu yang tidak diingini terjadi. Kami tidak dapat menjumpai terjemahannya."; -"noAvailableTranslationText" = "Tiada terjemahan untuk Ayat ini."; - +"translation.text-type.translation" = "Terjemahan"; +"translation.text-type.transliteration" = "Transliterasi"; +"translation.translator" = "Penterjemah: "; +"error.translation.text-retrieval" = "Maaf! Sesuatu yang tidak diingini terjadi. Kami tidak dapat menjumpai terjemahannya."; +"error.translation.text-not-available" = "Tiada terjemahan untuk Ayat ini."; // MARK: - Search -"searchRecentsTitle" = "Carian terbaharu"; -"searchPopularTitle" = "Cuba cari"; +"search.recents.title" = "Carian terbaharu"; +"search.popular.title" = "Cuba cari"; // MARK: - Settings -"write_review" = "Tinggalkan ulasan di App Store..."; -"contact_us" = "Hubungi Kami"; -"share_app" = "Kongi aplikasi ini..."; +"setting.write_review" = "Tinggalkan ulasan di App Store..."; +"setting.contact_us" = "Hubungi Kami"; +"setting.share_app" = "Kongi aplikasi ini..."; // MARK: - Quran Menu @@ -53,7 +44,8 @@ "menu.pointer" = "Penuding terjemahan perkataan"; "menu.fontSizeLetter" = "A"; -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/nl.lproj/Localizable.strings b/Core/Localization/Resources/nl.lproj/Localizable.strings index c779bdb1..23d44b05 100644 --- a/Core/Localization/Resources/nl.lproj/Localizable.strings +++ b/Core/Localization/Resources/nl.lproj/Localizable.strings @@ -10,15 +10,11 @@ // MARK: - Errors -"NetworkError_ConnectionLost" = "Internet verbinding is verbroken. Ga naar een locatie waar een meer stabiele verbinding beschikbaar is, of wacht tot de verbinding terug tot stand is gekomen."; -"NetworkError_InternationalRoamingOff" = "Internationale roaming is niet toegestaan. Verander de internationale roaming-instelling, of schakel Wi-Fi aan."; -"NetworkError_NotConnectedToInternet" = "Niet verbonden met het internet. Schakel Wifi aan, of mobiele dataverbinding."; -"NetworkError_ServerNotReachable" = "Oeps! Er is iets verkeerd gegaan. Probeer het opnieuw."; -"unknown_error_message" = "Oeps! Er is iets verkeerd gegaan. Probeer het opnieuw."; -"NetworkError_Parsing" = "Oeps! Er is iets verkeerd gegaan. Probeer het opnieuw."; - -"FileSystemError_Unknown" = "Er is een onbekende fout opgetreden bij het toetreden van de hardeschijf van het toestel."; -"FileSystemError_NoDiskSpace" = "Er is geen opslagruimte meer beschikbaar. Downloaden mislukt."; +"error.message.connection_lost" = "Internet verbinding is verbroken. Ga naar een locatie waar een meer stabiele verbinding beschikbaar is, of wacht tot de verbinding terug tot stand is gekomen."; +"error.message.international_roaming_off" = "Internationale roaming is niet toegestaan. Verander de internationale roaming-instelling, of schakel Wi-Fi aan."; +"error.message.not_connected_to_internet" = "Niet verbonden met het internet. Schakel Wifi aan, of mobiele dataverbinding."; +"error.message.general" = "Oeps! Er is iets verkeerd gegaan. Probeer het opnieuw."; +"error.message.no_disk_space" = "Er is geen opslagruimte meer beschikbaar. Downloaden mislukt."; // MARK: - Quran @@ -27,32 +23,27 @@ // MARK: - Translation -"translationTextType" = "Vertaling"; -"transliterationTextType" = "Transliteratie"; - - -"translatorLabel: " = "Vertaler: "; -"upgradeTranslationButtonTitle" = "BIJWERKEN"; - -"errorInTranslationText" = "Oeps! Er is iets fout gegaan. We konden de vertaling niet ophalen."; -"noAvailableTranslationText" = "Er is geen vertaling beschikbaar voor deze ayah."; -"referenceVerseTranslationText" = "Zie ayah %d."; - -"ayah.text.read-more" = "Lees Meer"; +"translation.text-type.translation" = "Vertaling"; +"translation.text-type.transliteration" = "Transliteratie"; +"translation.translator" = "Vertaler: "; +"translation.text.see-referenced-verse" = "Zie ayah %d."; +"translation.text.read-more" = "Lees Meer"; +"error.translation.text-retrieval" = "Oeps! Er is iets fout gegaan. We konden de vertaling niet ophalen."; +"error.translation.text-not-available" = "Er is geen vertaling beschikbaar voor deze ayah."; // MARK: - Search -"searchRecentsTitle" = "Recente zoekopdrachten"; -"searchPopularTitle" = "Probeer te zoeken met"; -"searchPlaceholder" = "Soera, vers, vertaling, tafseer en nummers"; -"searchResultTitle" = "%@ (%d)"; +"search.recents.title" = "Recente zoekopdrachten"; +"search.popular.title" = "Probeer te zoeken met"; +"search.placeholder.text" = "Soera, vers, vertaling, tafseer en nummers"; +"search.result.count" = "%@ (%d)"; // MARK: - Settings -"write_review" = "Schrijf een app store-recensie..."; -"contact_us" = "Contacteer ons"; -"share_app" = "Deel de app..."; -"app_version" = "App Versie"; +"setting.write_review" = "Schrijf een app store-recensie..."; +"setting.contact_us" = "Contacteer ons"; +"setting.share_app" = "Deel de app..."; +"setting.app_version" = "App Versie"; // MARK: - Quran Menu @@ -67,7 +58,8 @@ "menu.twoPages" = "2 pagina's naast elkaar (liggend)"; "menu.verticalScrolling" = "Verticaal scrollen"; -// Theme +// MARK: - Theme + "theme.light" = "Licht"; "theme.dark" = "Donker"; "theme.auto" = "Auto"; diff --git a/Core/Localization/Resources/pt.lproj/Localizable.strings b/Core/Localization/Resources/pt.lproj/Localizable.strings index 635d85a7..38f743e4 100644 --- a/Core/Localization/Resources/pt.lproj/Localizable.strings +++ b/Core/Localization/Resources/pt.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/ru.lproj/Localizable.strings b/Core/Localization/Resources/ru.lproj/Localizable.strings index 6154ddfb..182173c9 100644 --- a/Core/Localization/Resources/ru.lproj/Localizable.strings +++ b/Core/Localization/Resources/ru.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/tr.lproj/Localizable.strings b/Core/Localization/Resources/tr.lproj/Localizable.strings index 53d463b2..5ef312d4 100644 --- a/Core/Localization/Resources/tr.lproj/Localizable.strings +++ b/Core/Localization/Resources/tr.lproj/Localizable.strings @@ -10,15 +10,11 @@ // MARK: - Errors -"NetworkError_ConnectionLost" = "İnternet bağlantısı bulunamadı. İnternet bağlantısının daha stabil olduğu bir yere geçin veya düzelene kadar bekleyin."; -"NetworkError_InternationalRoamingOff" = "Uluslararası dolaşıma izin verilmedi. Uluslararası dolaşım ayarlarını değiştirin veya bir kablosuz ağa bağlanın."; -"NetworkError_NotConnectedToInternet" = "İnternet bağlantısı bulunamadı. Kablosuz bağlantıyı veya hücresel ağ bağlantısını etkinleştirin."; -"NetworkError_ServerNotReachable" = "Hay aksi! Bir sorun oluştu. Lütfen tekrar deneyin."; -"unknown_error_message" = "Hay aksi! Bir sorun oluştu. Lütfen tekrar deneyin."; -"NetworkError_Parsing" = "Hay aksi! Bir sorun oluştu. Lütfen tekrar deneyin."; - -"FileSystemError_Unknown" = "Hay aksi! Bir sorun oluştu. Lütfen tekrar deneyin."; -"FileSystemError_NoDiskSpace" = "İndirilenleri kaydetmek için disk alanı yetersiz"; +"error.message.connection_lost" = "İnternet bağlantısı bulunamadı. İnternet bağlantısının daha stabil olduğu bir yere geçin veya düzelene kadar bekleyin."; +"error.message.international_roaming_off" = "Uluslararası dolaşıma izin verilmedi. Uluslararası dolaşım ayarlarını değiştirin veya bir kablosuz ağa bağlanın."; +"error.message.not_connected_to_internet" = "İnternet bağlantısı bulunamadı. Kablosuz bağlantıyı veya hücresel ağ bağlantısını etkinleştirin."; +"error.message.general" = "Hay aksi! Bir sorun oluştu. Lütfen tekrar deneyin."; +"error.message.no_disk_space" = "İndirilenleri kaydetmek için disk alanı yetersiz."; // MARK: - Quran @@ -27,29 +23,24 @@ // MARK: - Translation -"translationTextType" = "Meal"; -"transliterationTextType" = "Okunuşu"; - - -"translatorLabel: " = "Çevirmen: "; -"upgradeTranslationButtonTitle" = "GÜNCELLE"; - -"errorInTranslationText" = "Hay aksi! Bir sorun çıktı. Meali bulamadık."; -"noAvailableTranslationText" = "Bu Ayetin meali bulunmamaktadır."; - -"ayah.text.read-more" = "Daha fazlası"; +"translation.text-type.translation" = "Meal"; +"translation.text-type.transliteration" = "Okunuşu"; +"translation.translator" = "Çevirmen: "; +"translation.text.read-more" = "Daha fazlası"; +"error.translation.text-retrieval" = "Hay aksi! Bir sorun çıktı. Meali bulamadık."; +"error.translation.text-not-available" = "Bu Ayetin meali bulunmamaktadır."; // MARK: - Search -"searchRecentsTitle" = "Son aramalar"; -"searchPopularTitle" = "Bununla aramayı deneyin"; -"searchPlaceholder" = "Sure, ayet, meal, tefsir, and numaralar"; +"search.recents.title" = "Son aramalar"; +"search.popular.title" = "Bununla aramayı deneyin"; +"search.placeholder.text" = "Sure, ayet, meal, tefsir, and numaralar"; // MARK: - Settings -"write_review" = "Uygulamamızı AppStore'de değerlendirin..."; -"contact_us" = "Bizimle iletişime geçin!"; -"share_app" = "Uygulamayı paylaşın..."; +"setting.write_review" = "Uygulamamızı AppStore'de değerlendirin..."; +"setting.contact_us" = "Bizimle iletişime geçin!"; +"setting.share_app" = "Uygulamayı paylaşın..."; // MARK: - Quran Menu @@ -62,7 +53,8 @@ "menu.translationFontSize" = "Çeviri Boyutu"; "menu.arabicFontSize" = "Kuran Boyutu"; -// Theme +// MARK: - Theme + "theme.light" = "Açık"; "theme.dark" = "Koyu"; "theme.auto" = "Otomatik"; diff --git a/Core/Localization/Resources/ug.lproj/Localizable.strings b/Core/Localization/Resources/ug.lproj/Localizable.strings index 7aecb233..984fc459 100644 --- a/Core/Localization/Resources/ug.lproj/Localizable.strings +++ b/Core/Localization/Resources/ug.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/uz.lproj/Localizable.strings b/Core/Localization/Resources/uz.lproj/Localizable.strings index ac5cee7a..ffa555fa 100644 --- a/Core/Localization/Resources/uz.lproj/Localizable.strings +++ b/Core/Localization/Resources/uz.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Core/Localization/Resources/vi.lproj/Localizable.strings b/Core/Localization/Resources/vi.lproj/Localizable.strings index 471a3903..f0404c1b 100644 --- a/Core/Localization/Resources/vi.lproj/Localizable.strings +++ b/Core/Localization/Resources/vi.lproj/Localizable.strings @@ -10,15 +10,11 @@ // MARK: - Errors -"NetworkError_ConnectionLost" = "Mất kết nối mạng. Di chuyển đến nới có kết nối ổn định hơn hoặc đợi cho đến khi kết nối ổn định trở lại."; -"NetworkError_InternationalRoamingOff" = "Chuyển vùng quốc tế không được phép. Thay đổi cài đặt chuyển vùng quốc tế hoặc bật Wi-Fi."; -"NetworkError_NotConnectedToInternet" = "Không được kết nối với internet. Bật Wi-Fi hoặc cho phép kết nối dữ liệu di động."; -"NetworkError_ServerNotReachable" = "Ối! Đã xảy ra sự cố. Vui lòng thử lại."; -"unknown_error_message" = "Ối! Đã xảy ra sự cố. Vui lòng thử lại."; -"NetworkError_Parsing" = "Ối! Đã xảy ra sự cố. Vui lòng thử lại."; - -"FileSystemError_Unknown" = "Ối! Đã xảy ra sự cố. Vui lòng thử lại."; -"FileSystemError_NoDiskSpace" = "Không đủ dung lượng trống để lưu các bản tải xuống"; +"error.message.connection_lost" = "Mất kết nối mạng. Di chuyển đến nới có kết nối ổn định hơn hoặc đợi cho đến khi kết nối ổn định trở lại."; +"error.message.international_roaming_off" = "Chuyển vùng quốc tế không được phép. Thay đổi cài đặt chuyển vùng quốc tế hoặc bật Wi-Fi."; +"error.message.not_connected_to_internet" = "Không được kết nối với internet. Bật Wi-Fi hoặc cho phép kết nối dữ liệu di động."; +"error.message.general" = "Ối! Đã xảy ra sự cố. Vui lòng thử lại."; +"error.message.no_disk_space" = "Không đủ dung lượng trống để lưu các bản tải xuống."; // MARK: - Quran @@ -27,32 +23,27 @@ // MARK: - Translation -"translationTextType" = "Bản dịch"; -"transliterationTextType" = "Phiên âm"; - - -"translatorLabel: " = "Dịch giả: "; -"upgradeTranslationButtonTitle" = "CẬP NHẬT"; - -"errorInTranslationText" = "Ối! Đã xảy ra sự cố. Chúng tôi không thể truy xuất bản dịch."; -"noAvailableTranslationText" = "Không có bản dịch nào cho Ayah này."; -"referenceVerseTranslationText" = "Xem ayah %d."; - -"ayah.text.read-more" = "Xem thêm"; +"translation.text-type.translation" = "Bản dịch"; +"translation.text-type.transliteration" = "Phiên âm"; +"translation.translator" = "Dịch giả: "; +"translation.text.see-referenced-verse" = "Xem ayah %d."; +"translation.text.read-more" = "Xem thêm"; +"error.translation.text-retrieval" = "Ối! Đã xảy ra sự cố. Chúng tôi không thể truy xuất bản dịch."; +"error.translation.text-not-available" = "Không có bản dịch nào cho Ayah này."; // MARK: - Search -"searchRecentsTitle" = "Tìm kiếm gần đây"; -"searchPopularTitle" = "Thử tìm kiếm với"; -"searchPlaceholder" = "Surah, câu kinh, bản dịch, tafseer và số"; -"searchResultTitle" = "%@ (%d)"; +"search.recents.title" = "Tìm kiếm gần đây"; +"search.popular.title" = "Thử tìm kiếm với"; +"search.placeholder.text" = "Surah, câu kinh, bản dịch, tafseer và số"; +"search.result.count" = "%@ (%d)"; // MARK: - Settings -"write_review" = "Đánh giá ứng dụng trên Appstore..."; -"contact_us" = "Liên hệ"; -"share_app" = "Chia sẻ ứng dụng..."; -"app_version" = "Phiên bản ứng dụng"; +"setting.write_review" = "Đánh giá ứng dụng trên Appstore..."; +"setting.contact_us" = "Liên hệ"; +"setting.share_app" = "Chia sẻ ứng dụng..."; +"setting.app_version" = "Phiên bản ứng dụng"; // MARK: - Quran Menu @@ -67,7 +58,8 @@ "menu.twoPages" = "2 trang cạnh nhau (xoay ngang)"; "menu.verticalScrolling" = "Cuộn dọc"; -// Theme +// MARK: - Theme + "theme.light" = "Sáng"; "theme.dark" = "Tối"; "theme.auto" = "Tự động"; diff --git a/Core/Localization/Resources/zh.lproj/Localizable.strings b/Core/Localization/Resources/zh.lproj/Localizable.strings index 425f2ae4..539d1d1c 100644 --- a/Core/Localization/Resources/zh.lproj/Localizable.strings +++ b/Core/Localization/Resources/zh.lproj/Localizable.strings @@ -6,17 +6,12 @@ // MARK: - Errors - // MARK: - Quran // MARK: - Translation - - - - // MARK: - Search @@ -26,7 +21,8 @@ // MARK: - Quran Menu -// Theme +// MARK: - Theme + // MARK: - Tabs diff --git a/Domain/QuranTextKit/Sources/ShareableText/ShareableVerseTextRetriever.swift b/Domain/QuranTextKit/Sources/ShareableText/ShareableVerseTextRetriever.swift index 06a97f64..e595b93f 100644 --- a/Domain/QuranTextKit/Sources/ShareableText/ShareableVerseTextRetriever.swift +++ b/Domain/QuranTextKit/Sources/ShareableText/ShareableVerseTextRetriever.swift @@ -106,7 +106,7 @@ public struct ShareableVerseTextRetriever { private func stringFromTranslationText(_ text: TranslationText) -> String { switch text { case .reference(let verse): - return lFormat("referenceVerseTranslationText", verse.ayah) + return lFormat("translation.text.see-referenced-verse", verse.ayah) case .string(let string): return string.text } diff --git a/Domain/QuranTextKit/Sources/TranslationText/QuranTextDataService.swift b/Domain/QuranTextKit/Sources/TranslationText/QuranTextDataService.swift index 19dce4f2..7f748c89 100644 --- a/Domain/QuranTextKit/Sources/TranslationText/QuranTextDataService.swift +++ b/Domain/QuranTextKit/Sources/TranslationText/QuranTextDataService.swift @@ -147,7 +147,7 @@ public struct QuranTextDataService { do { let versesText = try await translationPersistence.textForVerses(verses) for verse in verses { - let text = versesText[verse] ?? .string(l("noAvailableTranslationText")) + let text = versesText[verse] ?? .string(l("error.translation.text-not-available")) verseTextList.append(translationText(text)) } } catch { @@ -155,7 +155,7 @@ public struct QuranTextDataService { error, reason: "Issue getting verse \(verses), translation: \(translation.id)" ) - let errorText = l("errorInTranslationText") + let errorText = l("error.translation.text-retrieval") for _ in verses { verseTextList.append(.string(TranslationString(text: errorText, quranRanges: [], footerRanges: []))) } diff --git a/Features/FeaturesSupport/Errors+Description.swift b/Features/FeaturesSupport/Errors+Description.swift index 71738621..0887dbe7 100644 --- a/Features/FeaturesSupport/Errors+Description.swift +++ b/Features/FeaturesSupport/Errors+Description.swift @@ -19,9 +19,9 @@ extension FileSystemError: LocalizedError { let text: String switch self { case .unknown: - text = l("FileSystemError_Unknown") + text = l("error.message.general") case .noDiskSpace: - text = l("FileSystemError_NoDiskSpace") + text = l("error.message.no_disk_space") } return text } @@ -30,18 +30,20 @@ extension FileSystemError: LocalizedError { extension NetworkError: LocalizedError { public var errorDescription: String? { switch self { - case .unknown: return l("unknown_error_message") - case .serverError: return l("unknown_error_message") - case .notConnectedToInternet: return l("NetworkError_NotConnectedToInternet") - case .internationalRoamingOff: return l("NetworkError_InternationalRoamingOff") - case .serverNotReachable: return l("NetworkError_ServerNotReachable") - case .connectionLost: return l("NetworkError_ConnectionLost") + case .unknown, .serverError, .serverNotReachable: + return l("error.message.general") + case .notConnectedToInternet: + return l("error.message.not_connected_to_internet") + case .internationalRoamingOff: + return l("error.message.international_roaming_off") + case .connectionLost: + return l("error.message.connection_lost") } } } extension PersistenceError: LocalizedError { public var errorDescription: String? { - l("unknown_error_message") + l("error.message.general") } } diff --git a/Features/QuranTranslationFeature/TranslationCellProvider.swift b/Features/QuranTranslationFeature/TranslationCellProvider.swift index 142b8090..8435c5bd 100644 --- a/Features/QuranTranslationFeature/TranslationCellProvider.swift +++ b/Features/QuranTranslationFeature/TranslationCellProvider.swift @@ -132,7 +132,7 @@ public class TranslationCellProvider<Section: Hashable & Sendable> { private func translationTextToString(_ translationText: TranslationText) -> TranslationString { switch translationText { case .reference(let verse): - return TranslationString(text: lFormat("referenceVerseTranslationText", verse.ayah), quranRanges: [], footerRanges: []) + return TranslationString(text: lFormat("translation.text.see-referenced-verse", verse.ayah), quranRanges: [], footerRanges: []) case .string(let string): return string } diff --git a/Features/QuranTranslationFeature/cells/QuranTranslationTextCollectionViewCell.swift b/Features/QuranTranslationFeature/cells/QuranTranslationTextCollectionViewCell.swift index 2fa1568b..fd3ca90b 100644 --- a/Features/QuranTranslationFeature/cells/QuranTranslationTextCollectionViewCell.swift +++ b/Features/QuranTranslationFeature/cells/QuranTranslationTextCollectionViewCell.swift @@ -162,7 +162,7 @@ class QuranTranslationTextCollectionViewCell: QuranTranslationItemCollectionView .foregroundColor: UIColor.secondaryLabel.resolvedColor(with: traitCollection), ] let ellipsis = NSAttributedString(string: "\u{2026}", attributes: attributes) - let readMore = NSAttributedString(string: l("ayah.text.read-more"), attributes: attributes) + let readMore = NSAttributedString(string: l("translation.text.read-more"), attributes: attributes) let text = NSMutableAttributedString(attributedString: ellipsis) text.mutableString.append(" ") diff --git a/Features/SearchFeature/SearchView.swift b/Features/SearchFeature/SearchView.swift index be977245..713560de 100644 --- a/Features/SearchFeature/SearchView.swift +++ b/Features/SearchFeature/SearchView.swift @@ -71,7 +71,7 @@ private struct SearchViewUI: View { NoorList { ForEach(searchResults) { result in let plainTitle = title(of: result) - let title = lFormat("searchResultTitle", plainTitle, result.items.count) + let title = lFormat("search.result.count", plainTitle, result.items.count) NoorSection(title: title, result.items) { item in let localizedVerse = item.ayah.localizedName let arabicSuraName = item.ayah.sura.arabicSuraName @@ -115,7 +115,7 @@ private struct SearchViewUI: View { @ViewBuilder var entry: some View { NoorList { - NoorSection(title: l("searchRecentsTitle"), recents.map(SelfIdentifiable.init)) { item in + NoorSection(title: l("search.recents.title"), recents.map(SelfIdentifiable.init)) { item in NoorListItem( image: .init(.search), title: .text(item.value) @@ -124,7 +124,7 @@ private struct SearchViewUI: View { } } - NoorSection(title: l("searchPopularTitle"), populars.map(SelfIdentifiable.init)) { item in + NoorSection(title: l("search.popular.title"), populars.map(SelfIdentifiable.init)) { item in NoorListItem( image: .init(.search), title: .text(item.value) diff --git a/Features/SearchFeature/SearchViewController.swift b/Features/SearchFeature/SearchViewController.swift index 146d6afa..716c85be 100644 --- a/Features/SearchFeature/SearchViewController.swift +++ b/Features/SearchFeature/SearchViewController.swift @@ -40,7 +40,7 @@ final class SearchViewController: UIHostingController<SearchView>, UISearchResul searchController.obscuresBackgroundDuringPresentation = false searchController.hidesNavigationBarDuringPresentation = true - searchController.searchBar.placeholder = l("searchPlaceholder") + searchController.searchBar.placeholder = l("search.placeholder.text") searchController.searchResultsUpdater = self searchController.searchBar.delegate = self navigationItem.searchController = searchController diff --git a/Features/SettingsFeature/SettingsRootView.swift b/Features/SettingsFeature/SettingsRootView.swift index cbf6844f..f33da8e7 100644 --- a/Features/SettingsFeature/SettingsRootView.swift +++ b/Features/SettingsFeature/SettingsRootView.swift @@ -86,21 +86,21 @@ private struct SettingsRootViewUI: View { NoorBasicSection { NoorListItem( image: .init(.share), - title: .text(l("share_app")), + title: .text(l("setting.share_app")), accessory: .disclosureIndicator, action: shareApp ) NoorListItem( image: .init(.star), - title: .text(l("write_review")), + title: .text(l("setting.write_review")), accessory: .disclosureIndicator, action: writeReview ) NoorListItem( image: .init(.mail), - title: .text(l("contact_us")), + title: .text(l("setting.contact_us")), accessory: .disclosureIndicator, action: contactUs ) diff --git a/Features/TranslationsFeature/TranslationsListView.swift b/Features/TranslationsFeature/TranslationsListView.swift index 67805f88..6559e376 100644 --- a/Features/TranslationsFeature/TranslationsListView.swift +++ b/Features/TranslationsFeature/TranslationsListView.swift @@ -63,7 +63,7 @@ private struct TranslationsListViewUI: View { } TranslationsListSection( - title: l("translations.selectedTranslations"), + title: l("translation.selectedTranslations"), items: selectedTranslations, listItem: { item in listItem(item, downloaded: true, image: NoorSystemImage.checkmark_checked) { @@ -168,7 +168,7 @@ private struct TranslationsListViewUI: View { func subtitle(of translation: Translation) -> NoorListItem.Subtitle? { if let translatorDisplayName = translation.translatorDisplayName, !translatorDisplayName.isEmpty { return .init( - label: l("translatorLabel: "), + label: l("translation.translator"), text: translatorDisplayName, location: .bottom ) diff --git a/UI/NoorUI/BaseControllers/UIViewController+Error.swift b/UI/NoorUI/BaseControllers/UIViewController+Error.swift index 4fa9b95b..cf18080b 100644 --- a/UI/NoorUI/BaseControllers/UIViewController+Error.swift +++ b/UI/NoorUI/BaseControllers/UIViewController+Error.swift @@ -39,7 +39,7 @@ extension UIViewController { private func _showErrorAlert(error: Error) { crasher.recordError(error, reason: "showErrorAlert") let message = error.getErrorDescription() - let controller = UIAlertController(title: l("error.title"), message: message, preferredStyle: .alert) + let controller = UIAlertController(title: l("error.dialog.title"), message: message, preferredStyle: .alert) controller.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil)) present(controller, animated: true) } @@ -48,7 +48,7 @@ extension UIViewController { extension Error { func getErrorDescription() -> String { let description = (self as? LocalizedError)?.errorDescription - return description ?? l("unknown_error_message") + return description ?? l("error.message.general") } } diff --git a/UI/NoorUI/Components/ErrorAlertModifier.swift b/UI/NoorUI/Components/ErrorAlertModifier.swift index 20d5e93a..ddae48e0 100644 --- a/UI/NoorUI/Components/ErrorAlertModifier.swift +++ b/UI/NoorUI/Components/ErrorAlertModifier.swift @@ -45,7 +45,7 @@ struct ErrorAlertModifier: ViewModifier { crasher.recordError(error, reason: "ErrorModifier") if let retry { return Alert( - title: Text(l("error.title")), + title: Text(l("error.dialog.title")), message: Text(error.getErrorDescription()), primaryButton: .default(Text(lAndroid("download_retry"))) { Task { @@ -56,13 +56,13 @@ struct ErrorAlertModifier: ViewModifier { ) } else { return Alert( - title: Text(l("error.title")), + title: Text(l("error.dialog.title")), message: Text(error.getErrorDescription()) ) } } else { return Alert( - title: Text(l("error.title")), + title: Text(l("error.dialog.title")), message: Text("") ) } diff --git a/UI/NoorUI/Features/Content/ContentStatusView.swift b/UI/NoorUI/Features/Content/ContentStatusView.swift index dcc90da2..4f9e14c5 100644 --- a/UI/NoorUI/Features/Content/ContentStatusView.swift +++ b/UI/NoorUI/Features/Content/ContentStatusView.swift @@ -9,6 +9,11 @@ import Localization import SwiftUI public struct ContentStatusView: View { + public enum State { + case downloading(progress: Double) + case error(_ error: Error, retry: () -> Void) + } + // MARK: Lifecycle public init(state: State) { @@ -17,11 +22,6 @@ public struct ContentStatusView: View { // MARK: Public - public enum State { - case downloading(progress: Double) - case error(_ error: Error, retry: () -> Void) - } - public var body: some View { VStack { Spacer() @@ -50,7 +50,7 @@ public struct ContentStatusView: View { private func errorView(_ error: Error, retry: @escaping () -> Void) -> some View { VStack { - Text(l("unknown_error_message")) + Text(l("error.message.general")) Text(error.localizedDescription) .font(.callout) .padding(.bottom) diff --git a/UI/NoorUI/Features/MoreMenu/MoreMenuView.swift b/UI/NoorUI/Features/MoreMenu/MoreMenuView.swift index d460f2d1..72296499 100644 --- a/UI/NoorUI/Features/MoreMenu/MoreMenuView.swift +++ b/UI/NoorUI/Features/MoreMenu/MoreMenuView.swift @@ -182,11 +182,12 @@ private struct WordPointerSelection: View { } private func itemText(of item: MoreMenu.TranslationPointerType) -> String { + // TODO: This code is repeated. switch item { case .translation: - return l("translationTextType") + return l("translation.text-type.translation") case .transliteration: - return l("transliterationTextType") + return l("translation.text-type.transliteration") } } } diff --git a/UI/NoorUI/Features/MoreMenu/components/MoreMenuWordPointerType.swift b/UI/NoorUI/Features/MoreMenu/components/MoreMenuWordPointerType.swift index 93815622..3fff4b44 100644 --- a/UI/NoorUI/Features/MoreMenu/components/MoreMenuWordPointerType.swift +++ b/UI/NoorUI/Features/MoreMenu/components/MoreMenuWordPointerType.swift @@ -24,9 +24,9 @@ struct MoreMenuWordPointerType: View { var typeText: String { switch type { case .translation: - return l("translationTextType") + return l("translation.text-type.translation") case .transliteration: - return l("transliterationTextType") + return l("translation.text-type.transliteration") } } }