General improvements (#316)

* Added support for right text alignment in epub reader

* Added tabs management to PDF navigation drawer

* Implemented unified selection menu placement logic

* Added reset functionality for toolbar customization

* Improved highlight filtering in epub pagination

* Migrated hardcoded UI strings to string resources

* Extracted desktop application logic from Main.kt into modular files

* Refactored Main.kt by extracting PDF and EPUB logic into specialized files

* Added Spanish language support

* Added system default option to app language selection
This commit is contained in:
Aryan 2026-05-16 16:19:31 +05:30 committed by GitHub
parent 759d4b73a0
commit 056485a140
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
77 changed files with 9184 additions and 5947 deletions

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M120,840L120,760L840,760L840,840L120,840ZM360,680L360,600L840,600L840,680L360,680ZM120,520L120,440L840,440L840,520L120,520ZM360,360L360,280L840,280L840,360L360,360ZM120,200L120,120L840,120L840,200L120,200Z"/>
</vector>

View file

@ -642,4 +642,7 @@
<string name="label_highlight_color">مُظلِل</string>
<string name="msg_page_unavailable">الصفحة غير متوفرة</string>
<string name="sign_in_to_purchase_credits">يرجى تسجيل الدخول إلى حساب Google الخاص بك لشراء رصيد.</string>
<string name="language_system_default">لغة النظام</string>
<string name="language_english">English (الإنجليزية)</string>
<string name="language_spanish">Español (الإسبانية)</string>
</resources>

View file

@ -732,12 +732,15 @@
<string name="options_export_logs_last_lines">Protokolle exportieren (Letzte %1$d Zeilen)</string>
<string name="dialog_strict_file_filter_title">Strengen Dateifilter aktivieren</string>
<string name="dialog_strict_file_filter_desc">Wenn Sie diese Option aktivieren, werden einige unterstützte Dateiformate wie AZW3, CB7 und FB2 je nach Dateimanager möglicherweise nicht angezeigt.\n\nSind sie sicher, dass Sie diesen Filter aktivieren möchten?</string>
<string name="language_system_default">Systemstandard</string>
<string name="language_english">Englisch</string>
<string name="language_english_default">Englisch (Standard)</string>
<string name="language_arabic">العربية (Arabisch)</string>
<string name="language_german">Deutsch (Deutsch)</string>
<string name="language_turkish">Türkçe (Türkisch)</string>
<string name="language_french">Français (Französisch)</string>
<string name="language_russian">Русский (Russisch)</string>
<string name="language_spanish">Español (Spanisch)</string>
<string name="app_theme_title">App-Thema</string>
<string name="app_theme_text_brightness">Text-Helligkeit</string>
<string name="app_theme_color_scheme">Farbschema</string>

View file

@ -2,22 +2,54 @@
<resources>
<plurals name="book_count">
<item quantity="one">%1$d libro</item>
<item quantity="many">%1$d libros</item>
<item quantity="other">%1$d libros</item>
</plurals>
<plurals name="book_word">
<item quantity="one">libro</item>
<item quantity="many">libros</item>
<item quantity="other">libros</item>
</plurals>
<plurals name="shelf_count">
<item quantity="one">%1$d estantería</item>
<item quantity="many">%1$d estanterías</item>
<item quantity="other">%1$d estanterías</item>
<item quantity="one">%1$d estante</item>
<item quantity="other">%1$d estantes</item>
</plurals>
<plurals name="search_results_count">
<item quantity="one">%1$d resultado encontrado</item>
<item quantity="many">%1$d resultados encontrados</item>
<item quantity="other">%1$d resultados encontrados</item>
</plurals>
<plurals name="search_matches_count">
<item quantity="one">%1$d coincidencia encontrada</item>
<item quantity="other">%1$d coincidencias encontradas</item>
</plurals>
<plurals name="dialog_delete_permanently">
<item quantity="one">Eliminar archivo permanentemente</item>
<item quantity="other">Eliminar archivos permanentemente</item>
</plurals>
<plurals name="dialog_permanently_delete_desc">
<item quantity="one">¿Quieres eliminar permanentemente %1$d archivo seleccionado de tu dispositivo? Esta acción no se puede deshacer.</item>
<item quantity="other">¿Quieres eliminar permanentemente %1$d archivos seleccionados de tu dispositivo? Esta acción no se puede deshacer.</item>
</plurals>
<plurals name="dialog_remove_recents_desc">
<item quantity="one">¿Quieres quitar %1$d archivo seleccionado de la lista de archivos recientes? Volverá a aparecer si lo abres de nuevo desde la biblioteca.</item>
<item quantity="other">¿Quieres quitar %1$d archivos seleccionados de la lista de archivos recientes? Volverán a aparecer si los abres de nuevo desde la biblioteca.</item>
</plurals>
<plurals name="dialog_remove_from_shelf_desc">
<item quantity="one">¿Seguro que quieres quitar %1$d libro del estante \'%2$s\'? El libro seguirá en tu biblioteca y aparecerá en Sin estante.</item>
<item quantity="other">¿Seguro que quieres quitar %1$d libros del estante \'%2$s\'? Los libros seguirán en tu biblioteca y aparecerán en Sin estante.</item>
</plurals>
<plurals name="banner_books_removed_library">
<item quantity="one">%1$d libro quitado de la biblioteca.</item>
<item quantity="other">%1$d libros quitados de la biblioteca.</item>
</plurals>
<plurals name="folder_count">
<item quantity="one">%1$d carpeta</item>
<item quantity="other">%1$d carpetas</item>
</plurals>
<plurals name="tag_count">
<item quantity="one">%1$d etiqueta</item>
<item quantity="other">%1$d etiquetas</item>
</plurals>
<plurals name="tts_cache_chunk_count_parenthetical">
<item quantity="one">(%1$d fragmento)</item>
<item quantity="other">(%1$d fragmentos)</item>
</plurals>
</resources>

File diff suppressed because it is too large Load diff

View file

@ -705,12 +705,15 @@
<string name="options_language">Langue</string>
<string name="options_export_logs_last_lines">Exporter les logs (dernières %1$d lignes)</string>
<string name="dialog_strict_file_filter_desc">Si vous activez cette option, certains formats supportés comme AZW3, CB7 et FB2 pourraient ne pas apparaitre, selon votre gestionnaire de fichiers.\n\nÊtes-vous sûr de vouloir activer ce filtre?</string>
<string name="language_system_default">Langue du système</string>
<string name="language_english">English (Anglais)</string>
<string name="language_english_default">English (Anglais; par défaut)</string>
<string name="language_arabic">العربية (Arabe)</string>
<string name="language_german">Deutsch (Allemand)</string>
<string name="language_turkish">Türkçe (Turque)</string>
<string name="language_french">Français</string>
<string name="language_russian">Русский (Russe)</string>
<string name="language_spanish">Español (Espagnol)</string>
<string name="app_theme_contrast">Contraste</string>
<string name="app_theme_text_brightness">Luminosité du texte</string>
<string name="app_theme_preset_ocean">Océan</string>

View file

@ -707,12 +707,15 @@
<string name="options_export_logs_last_lines">Экспорт %1$d последних строк журнала</string>
<string name="dialog_strict_file_filter_title">Строгий фильтр файлов</string>
<string name="dialog_strict_file_filter_desc">Если вы включите эту функцию, некоторые поддерживаемые типы файлов, такие как AZW3, CB7 и FB2, могут не отображаться в зависимости от используемого вами файлового менеджера.\n\nВы уверены, что хотите включить этот фильтр?</string>
<string name="language_system_default">Системный язык</string>
<string name="language_english">Английский</string>
<string name="language_english_default">Английский (по умолчанию)</string>
<string name="language_arabic">Арабский</string>
<string name="language_german">Немецкий</string>
<string name="language_turkish">Турецкий</string>
<string name="language_french">Французский</string>
<string name="language_russian">Русский</string>
<string name="language_spanish">Испанский</string>
<string name="app_theme_title">Тема приложения</string>
<string name="app_theme_appearance">Внешний вид</string>
<string name="app_theme_contrast">Контрастность</string>

View file

@ -707,12 +707,15 @@
<string name="options_export_logs_last_lines">Günlükleri Dışarı Aktar (Son %1$d satır)</string>
<string name="dialog_strict_file_filter_title">Katı Dosya Filtresini Aç</string>
<string name="dialog_strict_file_filter_desc">Bunu etkinleştirirseniz, dosya yöneticinize bağlı olarak AZW3, CB7 ve FB2 gibi bazı desteklenen dosya türleri görünmeyebilir.\n\nBu filtreyi etkinleştirmek istediğinizden emin misiniz?</string>
<string name="language_system_default">Sistem varsayılanı</string>
<string name="language_english">İngilizce</string>
<string name="language_english_default">İngilizce (Varsayılan)</string>
<string name="language_arabic">العربية (Arapça)</string>
<string name="language_german">Deutsch (Almanca)</string>
<string name="language_turkish">Türkçe</string>
<string name="language_french">Français (Fransızca)</string>
<string name="language_russian">Русский (Rusça)</string>
<string name="language_spanish">Español (İspanyolca)</string>
<string name="app_theme_title">Uygulama Teması</string>
<string name="app_theme_appearance">Görünüm</string>
<string name="app_theme_contrast">Karşıtlık</string>

View file

@ -765,6 +765,7 @@
<!-- EpubReaderDrawer.kt -->
<string name="tab_chapters">Chapters</string>
<string name="tab_tabs">Tabs</string>
<string name="tab_bookmarks">Bookmarks</string>
<string name="tab_highlights">Highlights</string>
<string name="tab_pages">Pages</string>
@ -1108,12 +1109,15 @@
<string name="dialog_strict_file_filter_desc">If you enable this, some supported file types like AZW3, CB7, and FB2 might not show up depending on your file manager.\n\nAre you sure you want to enable this filter?</string>
<!-- App language picker. Language names are shown in their own language followed by an English hint. -->
<string name="language_system_default">System default</string>
<string name="language_english">English</string>
<string name="language_english_default">English (Default)</string>
<string name="language_arabic">العربية (Arabic)</string>
<string name="language_german">Deutsch (German)</string>
<string name="language_turkish">Türkçe (Turkish)</string>
<string name="language_french">Français (French)</string>
<string name="language_russian">Русский (Russian)</string>
<string name="language_spanish">Español (Spanish)</string>
<!-- App-wide theme controls in HomeScreen.kt. -->
<string name="app_theme_title">App Theme</string>
@ -1326,4 +1330,223 @@
<string name="options_screen_capture_protection">Screen capture protection</string>
<string name="banner_screen_capture_protection_on">Screen capture protection is on</string>
<string name="banner_screen_capture_protection_off">Screen capture protection is off</string>
<!-- Android-only hardcoded UI string cleanup. -->
<string name="settings">Settings</string>
<string name="action_edit">Edit</string>
<string name="action_restore">Restore</string>
<!-- %1$s = the selected option label. -->
<string name="option_selected_format">%1$s selected</string>
<string name="reader_defaults">Reader defaults</string>
<!-- Debug-only placeholder, not shown in normal user flows. -->
<string name="debug_actions_existing_menus" translatable="false">Debug actions remain in their existing menus.</string>
<!-- PDF and OCR are technical feature names; keep the acronyms as-is. -->
<string name="pdf_specific_settings_existing_reader">PDF-specific OCR, annotation, and tool settings remain in the PDF reader.</string>
<!-- Provider/product name. Do not translate. -->
<string name="provider_gemini" translatable="false">Gemini</string>
<!-- Provider/product name. Do not translate. -->
<string name="provider_groq" translatable="false">Groq</string>
<!-- AI = Artificial Intelligence. Keep the acronym "AI" as-is. -->
<string name="ai_definition_title">AI Definition</string>
<!-- %1$d = 1-indexed chapter number. -->
<string name="chapter_number_format">Chapter %1$d</string>
<string name="location_generic">Location</string>
<string name="custom_font_fallback">Custom Font</string>
<!-- Raw status/detail format only. %1$d = response code; %2$s = server/system detail. -->
<string name="error_response_code_with_detail" translatable="false">%1$d. %2$s</string>
<!-- %1$s = error detail from the system. -->
<string name="error_occurred_format">An error occurred: %1$s</string>
<!-- %1$s = error detail from the document loader. -->
<string name="error_loading_document_format">Error loading document: %1$s</string>
<!-- OCR = Optical Character Recognition. Keep the acronym as-is. -->
<string name="error_no_text_on_page_after_ocr">OCR found no text on this page.</string>
<string name="error_page_text_not_extractable">Page seems empty or text not extractable.</string>
<!-- PDF = Portable Document Format. Keep the acronym as-is. -->
<string name="pdf_error_blank_page_summary">Cannot summarize a blank page.</string>
<!-- PDF = Portable Document Format. Keep the acronym as-is. -->
<string name="pdf_error_document_not_loaded">Document not loaded.</string>
<!-- AI = Artificial Intelligence; OSS = Open Source Software. Keep both acronyms as-is. -->
<string name="ai_error_offline_oss">AI features are unavailable in the offline OSS build.</string>
<string name="ai_error_blocked_safety">Blocked for safety reasons.</string>
<!-- AI = Artificial Intelligence. %1$s = feature name such as "Summaries". -->
<string name="ai_error_choose_model">Choose a model for %1$s in AI key and model settings.</string>
<!-- API = Application Programming Interface. %1$s = provider name such as Gemini or Groq. -->
<string name="ai_error_add_provider_key">Add a %1$s API key in AI key and model settings.</string>
<!-- AI = Artificial Intelligence. -->
<string name="ai_error_provider_empty_response">The AI provider returned an empty response.</string>
<!-- AI = Artificial Intelligence. %1$d = HTTP/status code; %2$s = raw provider error body. -->
<string name="ai_error_provider_error">AI provider error: %1$d. %2$s</string>
<!-- Gemini and Groq are provider names. PDF = file format; keep all as-is. -->
<string name="ai_error_gemini_required_for_image_summary">This summary needs a Gemini model because the selected Groq models do not support PDF/image input.</string>
<string name="feedback_error_sign_in_required">You must be signed in to use feedback.</string>
<string name="feedback_error_sign_in_submit">You must be signed in to submit feedback.</string>
<string name="feedback_error_ticket_image_limit">Max 3 images allowed for tickets.</string>
<string name="feedback_error_message_image_limit">Max 5 images allowed per message.</string>
<!-- 5MB = five megabytes; keep the unit compact. -->
<string name="feedback_error_images_size_limit">One or more images exceed the 5MB limit.</string>
<!-- %1$s = error detail from the feedback backend. -->
<string name="feedback_error_create_ticket">Failed to create ticket: %1$s</string>
<!-- %1$s = error detail from the feedback backend. -->
<string name="feedback_error_send">Failed to send: %1$s</string>
<!-- OPDS = Open Publication Distribution System; keep the acronym as-is. %1$s = error detail. -->
<string name="opds_error_load_feed">Failed to load feed: %1$s</string>
<string name="opds_error_empty_response">Empty body</string>
<!-- OPDS = Open Publication Distribution System; keep the acronym as-is. %1$s = server message. -->
<string name="opds_error_download_failed">Download failed: %1$s</string>
<!-- OPDS = Open Publication Distribution System; keep the acronym as-is. %1$s = error detail. -->
<string name="opds_error_download_error">Download error: %1$s</string>
<!-- %1$s = billing debug message from Google Play Billing. -->
<string name="billing_error_purchase_failed">Purchase failed: %1$s</string>
<string name="billing_error_connect">Could not connect to billing service.</string>
<string name="billing_error_products_not_found">Products not found.</string>
<string name="billing_error_query_products_failed">Failed to query products</string>
<!-- OSS = Open Source Software. Keep the acronym as-is. -->
<string name="billing_error_not_available_oss">Not available in Open Source version</string>
<!-- TTS = Text-to-Speech. -->
<string name="tts_error_no_text">No text to read.</string>
<string name="tts_error_starting_playback">Error starting playback.</string>
<string name="tts_error_load_audio">Failed to load audio.</string>
<!-- TTS = Text-to-Speech. %1$s = playback error detail. -->
<string name="tts_error_playback">Playback error: %1$s</string>
<!-- TTS = Text-to-Speech. -->
<string name="tts_error_cloud_not_configured">Cloud TTS is not configured.</string>
<!-- Fallback media title when the source book title is unavailable. -->
<string name="tts_unknown_book">Unknown Book</string>
<!-- AI key/model settings. AI = Artificial Intelligence. -->
<string name="ai_settings_title">AI keys and models</string>
<string name="ai_settings_saved_keys">Saved keys</string>
<string name="ai_settings_add_or_replace_key">Add or replace key</string>
<string name="label_provider">Provider</string>
<!-- API = Application Programming Interface. Keep the acronym as-is. -->
<string name="label_api_key">API key</string>
<string name="ai_settings_save_key">Save key</string>
<string name="ai_settings_use_one_model">Use one model for all features</string>
<string name="ai_settings_use_one_model_desc">When off, each reader AI feature uses its own selected model.</string>
<!-- AI = Artificial Intelligence. -->
<string name="ai_settings_all_features">All AI features</string>
<string name="ai_settings_all_features_desc">Smart dictionary, summaries, and recaps all use this model.</string>
<string name="ai_settings_smart_dictionary">Smart dictionary</string>
<string name="ai_settings_smart_dictionary_desc">Used when defining selected words or phrases.</string>
<string name="ai_settings_summaries">Summaries</string>
<!-- EPUB and PDF are file format names. Gemini is a provider name. Keep all as-is. -->
<string name="ai_settings_summaries_desc">Used for EPUB summaries and PDF page summaries. PDF/image summaries need Gemini.</string>
<string name="ai_settings_recaps">Recaps</string>
<string name="ai_settings_recaps_desc">Used for story recap generation.</string>
<!-- TTS = Text-to-Speech. Gemini is a provider name. %1$s = exact model identifier; do not translate the inserted value. -->
<string name="ai_settings_cloud_tts_desc">Uses the saved Gemini key. Only %1$s is supported for now.</string>
<!-- %1$s = provider name, such as Gemini or Groq. -->
<string name="dialog_save_provider_key">Save %1$s key?</string>
<string name="dialog_save_key_desc">After saving, only the first 3 and last 3 characters will be visible. To change it later, replace or delete it.</string>
<!-- %1$s = provider name, such as Gemini or Groq. -->
<string name="dialog_delete_provider_key">Delete %1$s key?</string>
<string name="dialog_delete_key_desc">Features using this provider will stop working until a new key is saved.</string>
<string name="ai_settings_no_key_saved">No key saved</string>
<!-- %1$s = provider display name. -->
<string name="content_desc_delete_provider_key">Delete %1$s key</string>
<string name="label_model">Model</string>
<string name="ai_settings_no_model_selected">No model selected</string>
<string name="options_show_ai_in_reader">Show AI in reader</string>
<string name="options_hide_ai_in_reader">Hide AI in reader</string>
<!-- Theme and texture editor. -->
<string name="theme_solid_colors">Solid Colors</string>
<string name="theme_textured">Textured</string>
<string name="theme_custom_solid_default">Custom Solid</string>
<string name="theme_custom_textured_default">Custom Textured</string>
<string name="theme_select_custom_texture">Select Custom Texture</string>
<string name="app_theme_text_brightness_light">Text Brightness (Light)</string>
<string name="app_theme_text_brightness_dark">Text Brightness (Dark)</string>
<string name="label_default">Default</string>
<string name="label_left">Left</string>
<string name="label_right">Right</string>
<string name="label_justify">Justify</string>
<string name="label_always_show">Always Show</string>
<string name="label_sync_with_menus">Sync with Menus</string>
<string name="label_always_hide">Always Hide</string>
<string name="label_top">Top</string>
<string name="label_bottom">Bottom</string>
<!-- File metadata dialog. -->
<string name="dialog_restore_original_metadata">Restore original metadata?</string>
<!-- EPUB is a file format name; keep the acronym as-is. -->
<string name="dialog_restore_original_metadata_desc">This will write the original title, author, series, and summary back into the EPUB file. Reading progress, tags, and notes will not change.</string>
<!-- EPUB is a file format name; keep the acronym as-is. -->
<string name="metadata_provenance_epub_edited">EPUB metadata edited</string>
<!-- EPUB is a file format name; keep the acronym as-is. -->
<string name="metadata_provenance_from_epub">Metadata from EPUB file</string>
<string name="metadata_provenance_display_name_changed">Display name changed in app</string>
<string name="metadata_provenance_from_file">Metadata from file</string>
<string name="section_metadata">Metadata</string>
<string name="section_file">File</string>
<string name="label_title">Title</string>
<string name="label_series">Series</string>
<string name="label_reading">Reading</string>
<string name="label_file_name_simple">File name</string>
<string name="label_modified">Modified</string>
<string name="label_summary">Summary</string>
<string name="label_library_tags">Library tags</string>
<string name="label_editable_metadata">Editable metadata</string>
<string name="label_display_name">Display name</string>
<string name="label_name_shown_in_reader">Name shown in Reader</string>
<!-- %1$s = original file name. -->
<string name="original_file_format">Original file: %1$s</string>
<!-- Toolbar customization. -->
<string name="toolbar_top_bar">Top Bar</string>
<string name="toolbar_bottom_bar">Bottom Bar</string>
<string name="toolbar_hidden_tools">Hidden Tools</string>
<string name="toolbar_more_menu">More menu</string>
<string name="toolbar_hidden_tools_menu">Hidden tools</string>
<string name="toolbar_drop_tools_here">Drop tools here</string>
<string name="content_desc_drag_to_reorder">Drag to reorder</string>
<string name="tool_external_apps">External Apps</string>
<string name="tool_navigation_slider">Navigation Slider</string>
<string name="tool_sidebar">Sidebar</string>
<string name="tool_highlight_selectable_text">Highlight selectable text</string>
<string name="tool_edit_mode">Edit Mode</string>
<!-- TTS = Text-to-Speech. Keep the acronym as-is. -->
<string name="tool_tts_controls">TTS Controls</string>
<string name="tool_reading_mode">Reading Mode</string>
<string name="tool_page_management">Page Management</string>
<!-- "Text View" is the PDF reflow feature name. -->
<string name="tool_text_view_reflow">Text View (Reflow)</string>
<!-- TTS word replacement sheet. TTS = Text-to-Speech. -->
<string name="tts_replacements_current_book">Current book</string>
<string name="tts_replacements_tab_global">Global</string>
<string name="tts_replacements_tab_this_book">This book</string>
<string name="tts_replacements_enable">Enable replacements</string>
<string name="tts_replacements_enable_desc">Rules here apply to every book unless disabled for a specific title.</string>
<string name="tts_replacements_add_rule">Add rule</string>
<string name="tts_replacements_add_book_rule">Add book rule</string>
<string name="tts_replacements_empty_global">No global replacement rules yet.</string>
<string name="tts_replacements_empty_book">No book-specific rules yet.</string>
<string name="tts_replacements_use_global_here">Use global rules here</string>
<string name="tts_replacements_use_global_here_desc">Turn this off when a book needs its own pronunciation choices.</string>
<string name="tts_replacements_enable_book_rules">Enable book rules</string>
<string name="tts_replacements_enable_book_rules_desc">Local rules run after global rules.</string>
<string name="tts_replacements_inherited_global_rules">Inherited global rules</string>
<string name="tts_replacements_no_global_rules">No global rules to inherit.</string>
<string name="tts_replacements_allowed_in_book">Allowed in this book</string>
<string name="tts_replacements_disabled_for_book">Disabled for this book</string>
<string name="tts_replacements_suggestions">Suggestions</string>
<!-- English sample input for replacement previews; keep abbreviations as written so built-in examples behave consistently. -->
<string name="tts_replacements_preview_default" translatable="false">Dr. Smith met NASA at 5 p.m.</string>
<string name="tts_replacements_new_replacement">New replacement</string>
<string name="tts_replacements_edit_replacement">Edit replacement</string>
<string name="tts_replacements_label_replace">Replace</string>
<string name="tts_replacements_label_speak_as">Speak as</string>
<string name="tts_replacements_chip_enabled">Enabled</string>
<!-- Regex is a technical term for regular expression; keep as-is. -->
<string name="tts_replacements_chip_regex" translatable="false">Regex</string>
<string name="tts_replacements_chip_whole_word">Whole word</string>
<string name="tts_replacements_chip_match_case">Match case</string>
<string name="tts_replacements_label_preview_input">Preview input</string>
<string name="tts_replacements_rules">Rules</string>
<!-- Lowercase because it is inserted into summaries like "word -> silence". -->
<string name="tts_replacements_silence">silence</string>
<string name="tts_replacements_plain_text">Plain text</string>
<!-- Lowercase because it is joined into a comma-separated option summary. -->
<string name="tts_replacements_case_sensitive">case-sensitive</string>
</resources>

View file

@ -3,7 +3,8 @@
<locale android:name="en"/>
<locale android:name="ar"/>
<locale android:name="de"/>
<locale android:name="tr"/>
<locale android:name="fr"/>
<locale android:name="ru"/>
<locale android:name="tr"/>
<locale android:name="es"/>
</locale-config>