Translations update from Hosted Weblate#123
Translations update from Hosted Weblate#123weblate wants to merge 6 commits intoOlaProeis:masterfrom
Conversation
Currently translated at 22.4% (166 of 739 strings) Translation: Ferrite/Ferrite UI Translate-URL: https://hosted.weblate.org/projects/ferrite/ferrite-ui/es/
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds extensive Spanish translations and many new i18n keys to ChangesSpanish localization update
Czech localization scaffold (new file)
Russian localization scaffold (new file)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Review rate limit: 7/8 reviews remaining, refill in 7 minutes and 30 seconds.Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@locales/es.yaml`:
- Around line 227-258: Fix visible typos and incorrect editor terminology in the
Spanish locale keys: correct "scritpt" to "script" in complex_scripts_hint,
change "predetermnado" to "predeterminado" in default_language, replace "cursos"
with "cursor" in brackets_tooltip, and update word_wrap and word_wrap_tooltip
from "Cobertura de palabra"/"Cobertura..." to a standard editor term such as
"Ajuste de línea" and "Ajusta las líneas largas en lugar de desplazar
horizontalmente" (or equivalent consistent phrasing); also review and correct
the analogous typos on the referenced lines (263-264). Ensure all changes
preserve YAML formatting and existing keys (complex_scripts,
complex_scripts_hint, complex_script_default, tab_size, spaces, word_wrap,
word_wrap_tooltip, show_line_numbers, line_numbers_tooltip, show_minimap,
minimap_tooltip, minimap_mode, minimap_mode_* , highlight_brackets,
brackets_tooltip, auto_close_brackets, auto_close_tooltip, syntax_highlighting,
syntax_tooltip, default_language).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| complex_scripts: Script adicionales | ||
| complex_scripts_hint: Preseleccionar tipografías para árabe, bengalí, | ||
| devanagari, tailandés, hebreo, tamil, georgiano, armenio, etíope, y otros | ||
| script. Las tipografías se cargan bajo demanda cuando los archivo con esos | ||
| scritpt son abiertos. | ||
| complex_script_default: Predeterminado (Sistema) | ||
| tab_size: Tamaño de tabulación | ||
| spaces: espacios | ||
| word_wrap: Cobertura de palabra | ||
| word_wrap_tooltip: Cubre líneas largas en vez de arrastre horizontal | ||
| show_line_numbers: Mostrar números de línea | ||
| line_numbers_tooltip: Exhibir números de línea en el editor del catalizador | ||
| show_minimap: Mostrar mini‐mapa | ||
| minimap_tooltip: Exhibe un mini‐mapa panel de navegación sobre el lado | ||
| derecho del editor | ||
| minimap_mode: Modo minimapa | ||
| minimap_mode_auto: Auto | ||
| minimap_mode_auto_desc: Semántica para Markdown, píxel para código | ||
| minimap_mode_semantic: Semántica | ||
| minimap_mode_semantic_desc: Resumen de estructura con encabezados | ||
| minimap_mode_pixel: Píxel | ||
| minimap_mode_pixel_desc: Resumen de código con caracteres | ||
| highlight_brackets: Resaltar corchetes coincidentes | ||
| brackets_tooltip: Resaltar corchetas coincidentes (), [], {}, <> y parejas | ||
| de énfasis ** y __ cuando el cursos está adjunto | ||
| auto_close_brackets: Auto-cerrar corchetes y entrecomillados | ||
| auto_close_tooltip: Insertar automáticamente los corchetes y entrecomillas | ||
| de cierre. Cubra texto seleccionado cuando teclee una apertura. | ||
| syntax_highlighting: Resaltado sintáctico | ||
| syntax_tooltip: Habilita resaltado sintáctico para archivos de código fuente | ||
| (Rust, Python, JavaScript, etc.) | ||
| default_language: Idioma predetermnado |
There was a problem hiding this comment.
Fix visible typos and mistranslated editor terms.
Several new settings strings have user-facing typos or misleading terms: scritpt, predetermnado, cursos, “Cobertura de palabra”, and “posición de arrastre”.
📝 Proposed cleanup
- complex_scripts: Script adicionales
+ complex_scripts: Sistemas de escritura adicionales
complex_scripts_hint: Preseleccionar tipografías para árabe, bengalí,
devanagari, tailandés, hebreo, tamil, georgiano, armenio, etíope, y otros
- script. Las tipografías se cargan bajo demanda cuando los archivo con esos
- scritpt son abiertos.
+ sistemas de escritura. Las tipografías se cargan bajo demanda cuando se
+ abren archivos con esos sistemas de escritura.
@@
- word_wrap: Cobertura de palabra
- word_wrap_tooltip: Cubre líneas largas en vez de arrastre horizontal
+ word_wrap: Ajuste de línea
+ word_wrap_tooltip: Ajusta las líneas largas en lugar de usar desplazamiento horizontal
@@
- brackets_tooltip: Resaltar corchetas coincidentes (), [], {}, <> y parejas
- de énfasis ** y __ cuando el cursos está adjunto
+ brackets_tooltip: Resaltar corchetes coincidentes (), [], {}, <> y parejas
+ de énfasis ** y __ cuando el cursor está junto a ellos
@@
- default_language: Idioma predetermnado
+ default_language: Idioma predeterminado
@@
- sync_scroll_tooltip: Sincronizar posición de arrastre cuando intercambia
- entre vistas Cruda y Renderizada
+ sync_scroll_tooltip: Sincronizar la posición de desplazamiento al alternar
+ entre las vistas sin formato y renderizadaAlso applies to: 263-264
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 227 - 258, Fix visible typos and incorrect
editor terminology in the Spanish locale keys: correct "scritpt" to "script" in
complex_scripts_hint, change "predetermnado" to "predeterminado" in
default_language, replace "cursos" with "cursor" in brackets_tooltip, and update
word_wrap and word_wrap_tooltip from "Cobertura de palabra"/"Cobertura..." to a
standard editor term such as "Ajuste de línea" and "Ajusta las líneas largas en
lugar de desplazar horizontalmente" (or equivalent consistent phrasing); also
review and correct the analogous typos on the referenced lines (263-264). Ensure
all changes preserve YAML formatting and existing keys (complex_scripts,
complex_scripts_hint, complex_script_default, tab_size, spaces, word_wrap,
word_wrap_tooltip, show_line_numbers, line_numbers_tooltip, show_minimap,
minimap_tooltip, minimap_mode, minimap_mode_* , highlight_brackets,
brackets_tooltip, auto_close_brackets, auto_close_tooltip, syntax_highlighting,
syntax_tooltip, default_language).
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
locales/cs.yaml (1)
1-3: Fix the locale header.This file is
cs.yaml, but the header still labels it as the English base language. That can confuse translators working from this scaffold.Suggested wording
-# Ferrite - English (Base Language) +# Ferrite - Czech # This file contains all user-facing strings for internationalization. # Naming convention: category.subcategory.key (e.g., menu.file.open)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@locales/cs.yaml` around lines 1 - 3, The locale header currently says "Ferrite - English (Base Language)"; update the top comment lines to correctly identify this file's language and purpose (e.g., "Ferrite - Czech (cs) — Čeština" and "This file contains all user-facing strings for Czech translation.") so translators aren't misled; edit the existing header comment block (the three comment lines at the top) to reflect the Czech locale and optional notes about naming convention.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@locales/cs.yaml`:
- Around line 6-934: The cs.yaml file is a scaffold of empty translations which
will render blank UI; either remove cs.yaml from the set of loaded locale files
or fully implement Czech translations and wire the Language enum to support
"cs". If choosing removal: remove cs.yaml from the app's locale loading list. If
choosing to add Czech support: populate locales/cs.yaml with real translated
strings and update the Language enum (add the Cs variant) and its helper methods
locale_code(), native_name(), selector_display_name(), all(), and
from_locale_code() (include serde(rename = "cs") where applicable) so "cs" is
recognized and returned consistently by these functions.
---
Nitpick comments:
In `@locales/cs.yaml`:
- Around line 1-3: The locale header currently says "Ferrite - English (Base
Language)"; update the top comment lines to correctly identify this file's
language and purpose (e.g., "Ferrite - Czech (cs) — Čeština" and "This file
contains all user-facing strings for Czech translation.") so translators aren't
misled; edit the existing header comment block (the three comment lines at the
top) to reflect the Czech locale and optional notes about naming convention.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| app: | ||
| name: "" | ||
|
|
||
| # Menu bar items | ||
| menu: | ||
| file: | ||
| label: "" | ||
| open: "" | ||
| save: "" | ||
| save_as: "" | ||
| recent: "" | ||
| export: "" | ||
| export_html: "" | ||
| export_clipboard: "" | ||
| edit: | ||
| label: "" | ||
| format: | ||
| label: "" | ||
| tools: | ||
| label: "" | ||
|
|
||
| # Toolbar buttons | ||
|
|
||
| # View mode labels | ||
| view_mode: | ||
| raw_desc: "" | ||
| rendered_desc: "" | ||
| split_desc: "" | ||
|
|
||
| # Status bar | ||
| status: | ||
| untitled: "" | ||
| no_file: "" | ||
| vim_mode: "" | ||
| cursor_position: "" | ||
| delimiter_tooltip: "" | ||
| header_tooltip: "" | ||
| rainbow_tooltip: "" | ||
| encoding_tooltip: "" | ||
| encoding_heading: "" | ||
| recent_files_heading: "" | ||
| recent_folders_heading: "" | ||
| file_tooltip: "" | ||
| folder_tooltip: "" | ||
|
|
||
| # File dialogs | ||
| dialog: | ||
| unsaved_changes: | ||
| title: "" | ||
| save: "" | ||
| dont_save: "" | ||
| confirm: | ||
| cancel: "" | ||
| close: "" | ||
| # File operation dialogs | ||
| file: | ||
| new_file: "" | ||
| new_folder: "" | ||
| enter_file_name: "" | ||
| enter_folder_name: "" | ||
| hint_file: "" | ||
| hint_folder: "" | ||
| create: "" | ||
| rename: "" | ||
| enter_new_name: "" | ||
| exists_error: "" | ||
| confirm_delete: "" | ||
| delete_folder_warning: "" | ||
| delete: "" | ||
| file: "" | ||
| folder: "" | ||
| location: "" | ||
| delete_confirm: "" | ||
| # Go to Line dialog | ||
| go_to_line: | ||
| title: "" | ||
| enter_line: "" | ||
| go: "" | ||
| range: "" | ||
|
|
||
| # Settings panel | ||
| settings: | ||
| title: "" | ||
| reset_all: "" | ||
| reset_tooltip: "" | ||
| auto_save_hint: "" | ||
| default_view_hint: "" | ||
| font_size: | ||
| small: "" | ||
| medium: "" | ||
| large: "" | ||
| general: | ||
| theme: "" | ||
| theme_dark: "" | ||
| theme_light: "" | ||
| theme_system: "" | ||
| restore_session: "" | ||
| editor: | ||
| title: "" | ||
| font_family: "" | ||
| font_size: "" | ||
| font_inter_desc: "" | ||
| font_jetbrains_desc: "" | ||
| custom_font: "" | ||
| custom_font_desc: "" | ||
| select_system_font: "" | ||
| font_preview: "" | ||
| font_not_found: "" | ||
| cjk_preference: "" | ||
| cjk_preference_hint: "" | ||
| cjk_auto: "" | ||
| cjk_auto_desc: "" | ||
| cjk_korean: "" | ||
| cjk_korean_desc: "" | ||
| cjk_simplified_chinese: "" | ||
| cjk_simplified_chinese_desc: "" | ||
| cjk_traditional_chinese: "" | ||
| cjk_traditional_chinese_desc: "" | ||
| cjk_japanese: "" | ||
| cjk_japanese_desc: "" | ||
| complex_scripts: "" | ||
| complex_scripts_hint: "" | ||
| complex_script_default: "" | ||
| tab_size: "" | ||
| spaces: "" | ||
| word_wrap: "" | ||
| word_wrap_tooltip: "" | ||
| show_line_numbers: "" | ||
| line_numbers_tooltip: "" | ||
| show_minimap: "" | ||
| minimap_tooltip: "" | ||
| minimap_mode: "" | ||
| minimap_mode_auto: "" | ||
| minimap_mode_auto_desc: "" | ||
| minimap_mode_semantic: "" | ||
| minimap_mode_semantic_desc: "" | ||
| minimap_mode_pixel: "" | ||
| minimap_mode_pixel_desc: "" | ||
| highlight_brackets: "" | ||
| brackets_tooltip: "" | ||
| auto_close_brackets: "" | ||
| auto_close_tooltip: "" | ||
| syntax_highlighting: "" | ||
| syntax_tooltip: "" | ||
| default_language: "" | ||
| default_language_hint: "" | ||
| default_language_auto: "" | ||
| sync_scroll_tooltip: "" | ||
| use_spaces: "" | ||
| use_spaces_tooltip: "" | ||
| vim_mode: "" | ||
| vim_mode_tooltip: "" | ||
| max_line_width: "" | ||
| custom_width: "" | ||
| code_folding: "" | ||
| enable_folding: "" | ||
| folding_tooltip: "" | ||
| show_fold_indicators: "" | ||
| fold_indicators_tooltip: "" | ||
| fold_headings: "" | ||
| fold_headings_tooltip: "" | ||
| fold_code_blocks: "" | ||
| fold_code_blocks_tooltip: "" | ||
| fold_lists: "" | ||
| fold_lists_tooltip: "" | ||
| fold_indentation: "" | ||
| fold_indentation_tooltip: "" | ||
| snippets: "" | ||
| enable_snippets: "" | ||
| snippets_tooltip: "" | ||
| builtin_snippets: "" | ||
| snippet_date: "" | ||
| snippet_time: "" | ||
| snippet_datetime: "" | ||
| snippet_now: "" | ||
| # CJK Paragraph Indentation | ||
| paragraph_indent: "" | ||
| paragraph_indent_hint: "" | ||
| paragraph_indent_custom: "" | ||
| paragraph_indent_custom_desc: "" | ||
| # Header Spacing (Markdown Rendering) | ||
| header_spacing: "" | ||
| header_spacing_hint: "" | ||
| preview: | ||
| sync_scroll: "" | ||
| default_view: "" | ||
| files: | ||
| title: "" | ||
| restore_session_tooltip: "" | ||
| enable_auto_save: "" | ||
| auto_save_tooltip: "" | ||
| auto_save_delay: "" | ||
| recent_files: "" | ||
| clear_recent: "" | ||
| clear_recent_tooltip: "" | ||
| seconds: "" | ||
| remember_files: "" | ||
| files_count: "" | ||
| appearance: | ||
| title: "" | ||
| language: "" | ||
| language_hint: "" | ||
| syntax_theme: "" | ||
| syntax_theme_hint: "" | ||
| syntax_theme_auto: "" | ||
| keyboard: | ||
| title: "" | ||
| search_hint: "" | ||
| reset_all: "" | ||
| reset_all_tooltip: "" | ||
| reset_default: "" | ||
| press_key: "" | ||
| waiting: "" | ||
| cancel: "" | ||
| apply: "" | ||
| conflict_with: "" | ||
| click_to_change: "" | ||
| about: | ||
| title: "" | ||
| description: "" | ||
| updates: "" | ||
| check_for_updates: "" | ||
| checking: "" | ||
| up_to_date: "" | ||
| check_again: "" | ||
| update_available: "" | ||
| new_version: "" | ||
| view_release: "" | ||
| check_failed: "" | ||
| try_again: "" | ||
| links: "" | ||
| all_releases: "" | ||
| report_issue: "" | ||
| source_code: "" | ||
| license: "" | ||
| terminal: | ||
| title: "" | ||
| enable: "" | ||
| font_size: "" | ||
| scrollback: "" | ||
| copy_selection: "" | ||
| copy_selection_tooltip: "" | ||
| theme: "" | ||
| opacity: "" | ||
| startup_command: "" | ||
| startup_command_desc: "" | ||
| startup_command_hint: "" | ||
| monitors: "" | ||
| monitors_desc: "" | ||
| monitor_label: "" | ||
| monitor_geometry: "" | ||
| breathing_color: "" | ||
| prompt_patterns: "" | ||
| prompt_patterns_desc: "" | ||
| prompt_patterns_hint: "" | ||
| auto_load_layout: "" | ||
| auto_load_layout_tooltip: "" | ||
| sound_notification: "" | ||
| sound_notification_desc: "" | ||
| enable_sound: "" | ||
| enable_sound_tooltip: "" | ||
| custom_sound: "" | ||
| custom_sound_hint: "" | ||
| auto_focus: "" | ||
| auto_focus_desc: "" | ||
| focus_on_prompt: "" | ||
| focus_on_prompt_tooltip: "" | ||
| font_size_format: "" | ||
| opacity_format: "" | ||
|
|
||
| # Find and Replace panel | ||
| find: | ||
| placeholder: "" | ||
| replace_placeholder: "" | ||
| match_case: "" | ||
| match_case_short: "" | ||
| whole_word: "" | ||
| use_regex: "" | ||
| replace: "" | ||
| replace_all: "" | ||
| no_results: "" | ||
| title: "" | ||
| title_replace: "" | ||
| title_find: "" | ||
| close_tooltip: "" | ||
| hide_replace: "" | ||
| show_replace: "" | ||
| prev_tooltip: "" | ||
| next_tooltip: "" | ||
| replace_tooltip: "" | ||
| replace_all_tooltip: "" | ||
| keyboard_hints: "" | ||
|
|
||
| # Outline panel | ||
| outline: | ||
| panel_title: "" | ||
| statistics: "" | ||
| tab_outline: "" | ||
| tab_statistics: "" | ||
| summary: "" | ||
| no_headings: "" | ||
| add_headings_hint: "" | ||
| close_tooltip: "" | ||
| parse_error: "" | ||
| detach_tooltip: "" | ||
| backlinks_unavailable: "" | ||
| productivity_unavailable: "" | ||
| tab_links: "" | ||
| tab_hub: "" | ||
| json_structure: "" | ||
| json_values: "" | ||
| json_objects: "" | ||
| json_arrays: "" | ||
| json_total_keys: "" | ||
| json_max_depth: "" | ||
| json_total_values: "" | ||
| json_strings: "" | ||
| json_numbers: "" | ||
| json_booleans: "" | ||
| json_nulls: "" | ||
| json_array_items: "" | ||
|
|
||
| # Document statistics | ||
| stats: | ||
| no_data: "" | ||
| text_stats: "" | ||
| words: "" | ||
| characters: "" | ||
| characters_no_spaces: "" | ||
| lines: "" | ||
| paragraphs: "" | ||
| structure: "" | ||
| headings_total: "" | ||
| list_items: "" | ||
| horizontal_rules: "" | ||
| media_links: "" | ||
| links: "" | ||
| images: "" | ||
| code_diagrams: "" | ||
| code_blocks: "" | ||
| mermaid_diagrams: "" | ||
| tables: "" | ||
| blockquotes: "" | ||
|
|
||
| # File tree / Sidebar | ||
|
|
||
| # Quick switcher | ||
| quick_switcher: | ||
| placeholder: "" | ||
| no_results: "" | ||
| recent_tooltip: "" | ||
| keyboard_hints: "" | ||
|
|
||
| # Search in files | ||
| search: | ||
| title: "" | ||
| label: "" | ||
| placeholder: "" | ||
| more_matches: "" | ||
| keyboard_hints: "" | ||
|
|
||
| # About dialog | ||
| about: | ||
| title: "" | ||
| tab: | ||
| about: "" | ||
| shortcuts: "" | ||
| description: "" | ||
| close_hint: "" | ||
| # Links section | ||
| links: "" | ||
| github_label: "" | ||
| view_on_github: "" | ||
| github_tooltip: "" | ||
| report_issue_label: "" | ||
| submit_bug: "" | ||
| issue_tooltip: "" | ||
| # Built with section | ||
| built_with: "" | ||
| lib: | ||
| egui: "" | ||
| comrak: "" | ||
| syntect: "" | ||
| serde: "" | ||
| notify: "" | ||
| # License section | ||
| license: "" | ||
| license_type: "" | ||
| copyright: "" | ||
| version: "" | ||
|
|
||
| # Keyboard shortcuts | ||
| shortcuts: | ||
| title: "" | ||
| expand_hint: "" | ||
| # Categories | ||
| category: | ||
| file: "" | ||
| edit: "" | ||
| view: "" | ||
| formatting: "" | ||
| workspace: "" | ||
| navigation: "" | ||
| # Command names (used in keyboard settings panel) | ||
| commands: | ||
| # File operations | ||
| save: "" | ||
| save_as: "" | ||
| open: "" | ||
| new: "" | ||
| new_tab: "" | ||
| close_tab: "" | ||
| # Navigation | ||
| next_tab: "" | ||
| prev_tab: "" | ||
| go_to_line: "" | ||
| quick_open: "" | ||
| # View | ||
| toggle_view_mode: "" | ||
| cycle_theme: "" | ||
| toggle_zen_mode: "" | ||
| toggle_fullscreen: "" | ||
| toggle_outline: "" | ||
| toggle_file_tree: "" | ||
| toggle_pipeline: "" | ||
| # Edit | ||
| undo: "" | ||
| redo: "" | ||
| delete_line: "" | ||
| duplicate_line: "" | ||
| move_line_up: "" | ||
| move_line_down: "" | ||
| select_next_occurrence: "" | ||
| # Search | ||
| find: "" | ||
| find_replace: "" | ||
| find_next: "" | ||
| find_prev: "" | ||
| search_in_files: "" | ||
| # Formatting | ||
| bold: "" | ||
| italic: "" | ||
| inline_code: "" | ||
| code_block: "" | ||
| link: "" | ||
| image: "" | ||
| blockquote: "" | ||
| bullet_list: "" | ||
| numbered_list: "" | ||
| heading_1: "" | ||
| heading_2: "" | ||
| heading_3: "" | ||
| heading_4: "" | ||
| heading_5: "" | ||
| heading_6: "" | ||
| # Folding | ||
| fold_all: "" | ||
| unfold_all: "" | ||
| toggle_fold: "" | ||
| # Other | ||
| open_settings: "" | ||
| open_about: "" | ||
| export_html: "" | ||
| insert_toc: "" | ||
| # File shortcuts (for help panel) | ||
| file: | ||
| new: "" | ||
| open: "" | ||
| save: "" | ||
| save_as: "" | ||
| close_tab: "" | ||
| # Edit shortcuts (for help panel) | ||
| edit: | ||
| undo: "" | ||
| redo: "" | ||
| find: "" | ||
| find_replace: "" | ||
| select_all: "" | ||
| copy: "" | ||
| cut: "" | ||
| paste: "" | ||
| delete_line: "" | ||
| duplicate_line: "" | ||
| move_line_up: "" | ||
| move_line_down: "" | ||
| select_next_occurrence: "" | ||
| # View shortcuts (for help panel) | ||
| view: | ||
| toggle_view: "" | ||
| toggle_outline: "" | ||
| zoom_in: "" | ||
| zoom_out: "" | ||
| reset_zoom: "" | ||
| settings: "" | ||
| about: "" | ||
| # Formatting shortcuts (for help panel) | ||
| format: | ||
| bold: "" | ||
| italic: "" | ||
| underline: "" | ||
| link: "" | ||
| code: "" | ||
| # Workspace shortcuts (for help panel) | ||
| workspace: | ||
| quick_switcher: "" | ||
| search_files: "" | ||
| toggle_tree: "" | ||
| # Navigation shortcuts (for help panel) | ||
| nav: | ||
| next_tab: "" | ||
| prev_tab: "" | ||
| go_to_line: "" | ||
| find_next: "" | ||
| find_prev: "" | ||
|
|
||
| # Error messages | ||
|
|
||
| # Notifications / Toasts | ||
| notification: | ||
| restored_auto_save: "" | ||
| auto_save_discarded: "" | ||
| session_restored: "" | ||
| large_file_performance: "" | ||
| large_file_loading: "" | ||
| file_loaded: "" | ||
| file_load_failed: "" | ||
| undo: "" | ||
| nothing_to_undo: "" | ||
| redo: "" | ||
| nothing_to_redo: "" | ||
| outline_shown: "" | ||
| outline_hidden: "" | ||
| loaded_terminal_layout: "" | ||
| terminal_shown: "" | ||
| terminal_hidden: "" | ||
| zen_enabled: "" | ||
| zen_disabled: "" | ||
| fullscreen_enter: "" | ||
| fullscreen_exit: "" | ||
| pipeline_disabled: "" | ||
| pipeline_zen: "" | ||
| pipeline_unsupported: "" | ||
| pipeline_opened: "" | ||
| pipeline_closed: "" | ||
| file_tree_shown: "" | ||
| file_tree_hidden: "" | ||
| open_folder_first: "" | ||
| open_folder_quick_open: "" | ||
| open_folder_search: "" | ||
| toc_markdown_only: "" | ||
| toc_updated: "" | ||
| toc_inserted: "" | ||
| toc_inserted_empty: "" | ||
| no_document_format: "" | ||
| not_structured: "" | ||
| document_formatted: "" | ||
| format_failed: "" | ||
| parse_error: "" | ||
| no_document_validate: "" | ||
| valid_syntax: "" | ||
| invalid_syntax: "" | ||
| replaced: "" | ||
| replaced_count: "" | ||
| no_document_export: "" | ||
| exported_to: "" | ||
| export_failed: "" | ||
| no_document_copy: "" | ||
| html_copied: "" | ||
| copy_failed: "" | ||
| opened_files: "" | ||
| saved: "" | ||
| opened_workspace: "" | ||
| workspace_closed: "" | ||
| file_tree_refreshed: "" | ||
| created: "" | ||
| renamed_to: "" | ||
| deleted: "" | ||
| opened_background: "" | ||
| settings_reset: "" | ||
| encoding_changed: "" | ||
| reloaded_single: "" | ||
| reloaded_multiple: "" | ||
| external_change_single: "" | ||
| external_change_multiple: "" | ||
| image_added: "" | ||
| images_added: "" | ||
| opened_external_single: "" | ||
| opened_external_multiple: "" | ||
| wikilink_not_found: "" | ||
| wikilink_open_failed: "" | ||
|
|
||
| # Tree viewer (JSON/YAML/TOML) | ||
| tree_viewer: | ||
| collapse_all: "" | ||
| expand_all: "" | ||
| copy_path: "" | ||
| show_raw: "" | ||
| parse_error: "" | ||
| large_file_warning: "" | ||
|
|
||
| # Git integration | ||
| git: | ||
| modified: "" | ||
| deleted: "" | ||
| renamed: "" | ||
| untracked: "" | ||
| staged: "" | ||
| tracked: "" | ||
| staged_modified: "" | ||
| ignored: "" | ||
| conflict: "" | ||
|
|
||
| # Accessibility | ||
| a11y: | ||
| close_button: "" | ||
| minimize_button: "" | ||
|
|
||
| # Recovery and session dialogs | ||
| recovery: | ||
| auto_save: | ||
| title: "" | ||
| backup_found: "" | ||
| restore_question: "" | ||
| restore: "" | ||
| discard: "" | ||
| time_label: "" | ||
| session: | ||
| title: "" | ||
| crash_detected: "" | ||
| restore_question: "" | ||
| restore: "" | ||
| start_fresh: "" | ||
| restore_tooltip: "" | ||
| start_fresh_tooltip: "" | ||
| untitled: "" | ||
|
|
||
| # Common buttons and actions | ||
| common: | ||
| ok: "" | ||
| copy: "" | ||
| error: "" | ||
| dismiss: "" | ||
|
|
||
| # Code blocks and widgets | ||
| widgets: | ||
| code_block: | ||
| copy_tooltip: "" | ||
| finish_tooltip: "" | ||
| edit_tooltip: "" | ||
| table: | ||
| add_row: "" | ||
| add_column: "" | ||
| align_left: "" | ||
| align_center: "" | ||
| align_right: "" | ||
| delete_column_label: "" | ||
| delete_column: "" | ||
| align_label: "" | ||
| align_none: "" | ||
| delete_row: "" | ||
| add_row_tooltip: "" | ||
| add_column_tooltip: "" | ||
| alignment_tooltip: "" | ||
| list: | ||
| decrease_level: "" | ||
| increase_level: "" | ||
| remove_item: "" | ||
| add_item: "" | ||
| link: | ||
| edit: "" | ||
| open: "" | ||
| copy: "" | ||
| text_label: "" | ||
| url_label: "" | ||
| copy_tooltip: "" | ||
|
|
||
| # CSV Viewer | ||
| csv: | ||
| delimiter_auto: "" | ||
| error: "" | ||
| select_delimiter: "" | ||
| header_row: "" | ||
| has_headers_yes: "" | ||
| has_headers_no: "" | ||
| show_raw: "" | ||
| large_file_warning: "" | ||
|
|
||
| # Pipeline panel | ||
| pipeline: | ||
| title: "" | ||
| command_placeholder: "" | ||
| run: "" | ||
| recent: "" | ||
| no_output: "" | ||
| running: "" | ||
| truncated: "" | ||
| close_tooltip: "" | ||
| cancel_tooltip: "" | ||
| run_tooltip: "" | ||
| stdout: "" | ||
| stderr: "" | ||
| hint: "" | ||
| no_output_success: "" | ||
|
|
||
| # Encoding | ||
|
|
||
| # Tab context menu | ||
| tab: | ||
| reveal_in_explorer: "" | ||
|
|
||
| # Mermaid diagrams | ||
| mermaid: | ||
| badge: "" | ||
| empty: "" | ||
| rendering_error: "" | ||
|
|
||
| # Table of Contents | ||
|
|
||
| # Formatting toolbar tooltips | ||
|
|
||
| # Workspace | ||
| workspace: | ||
| close_folder: "" | ||
| new_file: "" | ||
| new_folder: "" | ||
| rename: "" | ||
| delete: "" | ||
| refresh: "" | ||
| recent_folders: "" | ||
|
|
||
| # Zen mode | ||
| zen: | ||
| enter: "" | ||
| exit: "" | ||
|
|
||
| # Log levels (for settings) | ||
|
|
||
| # Drag and drop | ||
|
|
||
| # Time relative strings | ||
| time: | ||
| seconds_ago: "" | ||
| minutes_ago: "" | ||
| hours_ago: "" | ||
| days_ago: "" | ||
|
|
||
| # Tooltips | ||
| tooltip: | ||
| fullscreen_exit: "" | ||
| fullscreen_enter: "" | ||
| settings: "" | ||
| recent_items: "" | ||
| about_help: "" | ||
| git_branch: "" | ||
| new_tab: "" | ||
|
|
||
| # Ribbon toolbar additions | ||
| ribbon: | ||
| format_document: "" | ||
| validate_syntax: "" | ||
| pipeline: "" | ||
| hide_info_panel: "" | ||
| show_info_panel: "" | ||
| toggle_outline: "" | ||
| copy_html_tooltip: "" | ||
| export_pdf: "" | ||
| coming_soon: "" | ||
| heading_level: "" | ||
|
|
||
| # Welcome page (first launch) | ||
| welcome: | ||
| subtitle: "" | ||
| section: | ||
| appearance: "" | ||
| editor: "" | ||
| cjk: "" | ||
| files: "" | ||
| label: | ||
| theme: "" | ||
| language: "" | ||
| line_width_hint: "" | ||
|
|
||
| # Terminal panel | ||
| terminal: | ||
| not_found: "" | ||
| fallback_title: "" | ||
| new_terminal_here: "" | ||
| maximize_active_pane: "" | ||
| pop_out: "" | ||
| split_horizontal: "" | ||
| split_vertical: "" | ||
| rename: "" | ||
| close: "" | ||
| close_pane: "" | ||
| close_others: "" | ||
| scatter_to_windows: "" | ||
| watching: "" | ||
| stop_watching: "" | ||
| watch_workspace_root: "" | ||
| export_html: "" | ||
| no_workspace_root: "" | ||
| no_macros: "" | ||
| close_panel_tooltip: "" | ||
| running_process_warning: "" | ||
| terminate_warning: "" | ||
| close_terminal: "" | ||
| close_terminal_title: "" | ||
| cancel: "" | ||
| no_terminal: "" | ||
| restore: "" | ||
| process_exited: "" | ||
| tab_name: "" | ||
| floating_title: "" | ||
| shell: | ||
| powershell: "" | ||
| cmd: "" | ||
| wsl: "" | ||
| layout: | ||
| columns_2: "" | ||
| rows_2: "" | ||
| grid_2x2: "" | ||
| save_layout: "" | ||
| load_layout: "" | ||
| save_workspace_layout: "" | ||
| custom_layout: "" | ||
| workspace: | ||
| scatter_all: "" | ||
| save: "" | ||
| load: "" | ||
| default_name: "" | ||
| menu: | ||
| layouts: "" | ||
| workspaces: "" | ||
| watch_mode: "" | ||
| macros: "" | ||
| filter: | ||
| terminal_layout: "" | ||
| ferrite_workspace: "" | ||
| error: | ||
| shell_not_found: "" | ||
| pty_failed: "" | ||
| permission_denied: "" | ||
| io_failed: "" | ||
| layout_failed: "" | ||
| unexpected: "" | ||
| format: "" | ||
|
|
||
| # Productivity panel | ||
| productivity: | ||
| title: "" | ||
| workspace_hint: "" | ||
| tasks: | ||
| title: "" | ||
| progress: "" | ||
| input_hint: "" | ||
| add: "" | ||
| tip: "" | ||
| move_up: "" | ||
| move_down: "" | ||
| empty: "" | ||
| pomodoro: | ||
| title: "" | ||
| work: "" | ||
| break_label: "" | ||
| ready: "" | ||
| cycles: "" | ||
| stop: "" | ||
| start_work: "" | ||
| start_break: "" | ||
| notes: | ||
| title: "" | ||
| name_label: "" | ||
| note_label: "" | ||
| confirm_rename: "" | ||
| cancel_rename: "" | ||
| new_note: "" | ||
| rename_note: "" | ||
| confirm_delete: "" | ||
| delete_note: "" | ||
| input_hint: "" | ||
| dock: "" | ||
| dock_tooltip: "" | ||
| ok: "" | ||
| confirm: "" | ||
| empty_name: "" | ||
| duplicate_name: "" | ||
|
|
||
| # Echo/AI placeholder (development) | ||
| echo: | ||
| title: "" | ||
| prompt: "" | ||
| responses: "" | ||
| replacement_note: "" | ||
| demo_note: "" | ||
|
|
||
| # Title bar | ||
| title_bar: | ||
| restore: "" | ||
| maximize: "" | ||
|
|
||
| # Error dialogs | ||
| error: | ||
| save_failed: "" | ||
| open_workspace_failed: "" | ||
| open_file_failed: "" | ||
| create_file_failed: "" | ||
| create_folder_failed: "" | ||
| rename_failed: "" | ||
| delete_failed: "" | ||
| image_failed: "" | ||
| explorer_failed: "" | ||
| write_failed: "" | ||
| encoding_failed: "" | ||
|
|
||
| # File dialog titles and filters | ||
| file_dialog: | ||
| open_workspace: "" | ||
| open_files: "" | ||
| save_file: "" | ||
| filter: | ||
| supported: "" | ||
| markdown: "" | ||
| text: "" | ||
| json: "" | ||
| yaml: "" | ||
| toml: "" | ||
| csv_tsv: "" | ||
| all: "" | ||
| html: "" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description:
# 1. Count empty/non-empty Czech locale entries.
# 2. Check whether Czech is registered in the Language enum/settings methods.
python - <<'PY'
from pathlib import Path
p = Path("locales/cs.yaml")
text = p.read_text(encoding="utf-8").splitlines()
empty_entries = [
(line_no, line.strip())
for line_no, line in enumerate(text, start=1)
if line.rstrip().endswith(': ""')
]
non_empty_quoted_entries = [
(line_no, line.strip())
for line_no, line in enumerate(text, start=1)
if ': "' in line and not line.rstrip().endswith(': ""')
]
print(f"empty string entries: {len(empty_entries)}")
print(f"non-empty quoted entries: {len(non_empty_quoted_entries)}")
print("first empty entries:")
for line_no, line in empty_entries[:10]:
print(f" {line_no}: {line}")
PY
echo
echo "Language registration evidence:"
rg -n -C3 'enum Language|fn all|fn from_locale_code|fn locale_code|fn native_name|fn selector_display_name|serde\(rename = "cs"\)|Language::Czech|=>\s*Some\(Language::Czech\)' src/config/settings.rsRepository: OlaProeis/Ferrite
Length of output: 3566
Remove the empty Czech locale scaffold or provide real translations and full Language enum wiring.
The Czech locale (locales/cs.yaml) contains 739 empty string entries with zero translated values. Czech is not registered in the Language enum or its helper methods (locale_code(), native_name(), selector_display_name(), all(), from_locale_code()), so users selecting Czech would see blank labels throughout the app. Either remove locales/cs.yaml from app-loaded locales until translations exist, or add real Czech strings and wire cs through the Language enum with proper serde(rename) annotations and method implementations.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/cs.yaml` around lines 6 - 934, The cs.yaml file is a scaffold of
empty translations which will render blank UI; either remove cs.yaml from the
set of loaded locale files or fully implement Czech translations and wire the
Language enum to support "cs". If choosing removal: remove cs.yaml from the
app's locale loading list. If choosing to add Czech support: populate
locales/cs.yaml with real translated strings and update the Language enum (add
the Cs variant) and its helper methods locale_code(), native_name(),
selector_display_name(), all(), and from_locale_code() (include serde(rename =
"cs") where applicable) so "cs" is recognized and returned consistently by these
functions.
Currently translated at 67.1% (496 of 739 strings) Translation: Ferrite/Ferrite UI Translate-URL: https://hosted.weblate.org/projects/ferrite/ferrite-ui/es/
There was a problem hiding this comment.
Actionable comments posted: 6
♻️ Duplicate comments (1)
locales/es.yaml (1)
227-264:⚠️ Potential issue | 🟡 MinorResolve the existing editor terminology typos.
The previously flagged typos/mistranslations are still present:
scritpt,predetermnado,cursos, “Cobertura de palabra”, and “posición de arrastre”.📝 Proposed cleanup
- complex_scripts: Script adicionales + complex_scripts: Sistemas de escritura adicionales @@ - script. Las tipografías se cargan bajo demanda cuando los archivo con esos - scritpt son abiertos. + sistemas de escritura. Las tipografías se cargan bajo demanda cuando se + abren archivos con esos sistemas de escritura. @@ - word_wrap: Cobertura de palabra - word_wrap_tooltip: Cubre líneas largas en vez de arrastre horizontal + word_wrap: Ajuste de línea + word_wrap_tooltip: Ajusta las líneas largas en lugar de desplazarlas horizontalmente @@ - brackets_tooltip: Resaltar corchetas coincidentes (), [], {}, <> y parejas - de énfasis ** y __ cuando el cursos está adjunto + brackets_tooltip: Resaltar corchetes coincidentes (), [], {}, <> y parejas + de énfasis ** y __ cuando el cursor está junto a ellos @@ - default_language: Idioma predetermnado + default_language: Idioma predeterminado @@ - sync_scroll_tooltip: Sincronizar posición de arrastre cuando intercambia - entre vistas Cruda y Renderizada + sync_scroll_tooltip: Sincronizar la posición de desplazamiento al alternar + entre las vistas sin formato y renderizada🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@locales/es.yaml` around lines 227 - 264, Fix the Spanish typos in the listed locale keys: in complex_scripts_hint replace "scritpt" with "script"; in default_language fix "predetermnado" to "predeterminado"; in brackets_tooltip change "cursos" to "cursor"; in word_wrap replace "Cobertura de palabra" with "Ajuste de línea" (or "Ajuste de palabras" if preferred); and in sync_scroll_tooltip change "posición de arrastre" to "posición de desplazamiento". Update the corresponding values for keys complex_scripts_hint, default_language, brackets_tooltip, word_wrap, and sync_scroll_tooltip accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@locales/es.yaml`:
- Around line 312-314: The restore_session_tooltip string contains
grammatical/agreement errors; update the value for the restore_session_tooltip
key to a corrected Spanish sentence such as: "Cuando esté habilitado, restaura
las pestañas abiertas anteriormente al iniciar. Cuando esté deshabilitado,
inicia con una sola pestaña vacía. Los datos de la sesión siempre se guardan."
Replace the existing text for restore_session_tooltip with this corrected copy
to fix agreement and flow.
- Around line 409-428: Update the Spanish labels to correctly reflect
case-sensitivity and whole-word options: change the value for match_case to a
phrase meaning "match case" (e.g., "Coincidir mayúsculas y minúsculas" or
"Coincidir mayúsculas") and change whole_word from "Todo el mundo" to a proper
whole-word translation such as "Palabra completa" or "Coincidir palabra
completa"; leave match_case_short ("Aa") as-is.
- Around line 570-617: Summary: The Spanish translations for the shortcut labels
are misleading; specifically the keys inline_code and bullet_list use incorrect
phrases. Fix: open locales/es.yaml and update the inline_code value from "Código
alineado" to "Código en línea" (key: inline_code) and update bullet_list from
"Listado de botones" to "Lista con viñetas" or "Lista con viñetas (bullet list)"
(key: bullet_list); confirm similar shortcut keys (e.g., numbered_list) use
consistent phrasing like "Listado numerado" and run a quick review of nearby
keys (inline_code, bullet_list, numbered_list) to ensure all shortcut labels
accurately describe the action.
- Around line 41-66: Update the Spanish strings: fix the typo in
recent_folders_heading by changing "📁 Carpetas recentes" to "📁 Carpetas
recientes", and change the literal desk wording in folder_tooltip by replacing
the final line "Pulsación: Abre como pupitre" with a phrase that conveys opening
the folder as a workspace, e.g. "Pulsación: Abrir como espacio de trabajo";
modify the values for the keys recent_folders_heading and folder_tooltip
accordingly.
- Around line 430-455: Replace several incorrect Spanish labels with proper
terminology: change tab_outline from "Externo a línea" to "Esquema" (or
"Índice"), change backlinks_unavailable from "Retroceso no disponible" to
"Enlaces entrantes no disponibles" (or "Vínculos inversos no disponibles"),
change json_strings from "Segmentos" to "Cadenas", change json_arrays from
"Formaciones" to "Arreglos" (or "Matrices"/"Listas"), change json_total_keys
from "Pulsaciones totales" to "Claves totales" (or "Total de claves"), fix
json_array_items from "Ítemes de formación" to "Elementos del arreglo" (or
"Elementos del array"), and correct tab_statistics "Estad" to "Estadísticas" and
summary/other headers use "Encabezados" instead of "Cabeceras" for consistency;
update the values for keys tab_outline, backlinks_unavailable, json_strings,
json_arrays, json_total_keys, json_array_items, tab_statistics, and
summary/add_headings_hint accordingly.
- Around line 273-289: Replace the folder/filing terminology ("encarpetado",
"carpeta", "carpetado", etc.) with the standard Spanish term "plegado" and
related forms in the following keys: code_folding, enable_folding,
folding_tooltip, show_fold_indicators, fold_indicators_tooltip, fold_headings,
fold_headings_tooltip, fold_code_blocks, fold_code_blocks_tooltip, fold_lists,
fold_lists_tooltip, fold_indentation, and fold_indentation_tooltip; keep the
original meaning and punctuation of tooltips but update wording to e.g. "Plegado
de código", "Habilitar plegado de código", "Permite plegar secciones del
documento..." and "Mostrar indicadores de plegado" so all occurrences are
consistent.
---
Duplicate comments:
In `@locales/es.yaml`:
- Around line 227-264: Fix the Spanish typos in the listed locale keys: in
complex_scripts_hint replace "scritpt" with "script"; in default_language fix
"predetermnado" to "predeterminado"; in brackets_tooltip change "cursos" to
"cursor"; in word_wrap replace "Cobertura de palabra" with "Ajuste de línea" (or
"Ajuste de palabras" if preferred); and in sync_scroll_tooltip change "posición
de arrastre" to "posición de desplazamiento". Update the corresponding values
for keys complex_scripts_hint, default_language, brackets_tooltip, word_wrap,
and sync_scroll_tooltip accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| encoding_heading: Codificación del archivo | ||
| recent_files_heading: 📄 Archivos recientes | ||
| vim_mode: Modo de edición Vim (Esc = Normal, i = Insertar) | ||
| cursor_position: Ln %{line}, Col %{col} | ||
| delimiter_tooltip: |- | ||
| Delimitador: %{delimiter} | ||
| %{info}Pulse para cambiar | ||
| header_tooltip: |- | ||
| Primera fila como cabeceras: %{status} | ||
| %{info}Pulse para cambiar | ||
| rainbow_tooltip: |- | ||
| Coloración de columnas con arcoíris: %{status} | ||
| Pulse para alternar | ||
| encoding_tooltip: |- | ||
| Codificación de archivo: %{encoding} | ||
| %{info}Pulse para cambiar | ||
| recent_folders_heading: 📁 Carpetas recentes | ||
| file_tooltip: |- | ||
| %{path} | ||
|
|
||
| Pulse: Abrir | ||
| Mayús+Pulsar: Abrir en segundo plano | ||
| folder_tooltip: |- | ||
| %{path} | ||
|
|
||
| Pulsación: Abre como pupitre |
There was a problem hiding this comment.
Fix the file dialog typo and literal workspace wording.
Line 57 has a visible typo, and Line 66’s “pupitre” reads like a literal desk rather than a workspace/folder action.
📝 Proposed cleanup
- recent_folders_heading: 📁 Carpetas recentes
+ recent_folders_heading: 📁 Carpetas recientes
@@
- Pulse: Abrir
- Mayús+Pulsar: Abrir en segundo plano
+ Clic: Abrir
+ Mayús+clic: Abrir en segundo plano
@@
- Pulsación: Abre como pupitre
+ Clic: Abrir como espacio de trabajo📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| encoding_heading: Codificación del archivo | |
| recent_files_heading: 📄 Archivos recientes | |
| vim_mode: Modo de edición Vim (Esc = Normal, i = Insertar) | |
| cursor_position: Ln %{line}, Col %{col} | |
| delimiter_tooltip: |- | |
| Delimitador: %{delimiter} | |
| %{info}Pulse para cambiar | |
| header_tooltip: |- | |
| Primera fila como cabeceras: %{status} | |
| %{info}Pulse para cambiar | |
| rainbow_tooltip: |- | |
| Coloración de columnas con arcoíris: %{status} | |
| Pulse para alternar | |
| encoding_tooltip: |- | |
| Codificación de archivo: %{encoding} | |
| %{info}Pulse para cambiar | |
| recent_folders_heading: 📁 Carpetas recentes | |
| file_tooltip: |- | |
| %{path} | |
| Pulse: Abrir | |
| Mayús+Pulsar: Abrir en segundo plano | |
| folder_tooltip: |- | |
| %{path} | |
| Pulsación: Abre como pupitre | |
| encoding_heading: Codificación del archivo | |
| recent_files_heading: 📄 Archivos recientes | |
| vim_mode: Modo de edición Vim (Esc = Normal, i = Insertar) | |
| cursor_position: Ln %{line}, Col %{col} | |
| delimiter_tooltip: |- | |
| Delimitador: %{delimiter} | |
| %{info}Pulse para cambiar | |
| header_tooltip: |- | |
| Primera fila como cabeceras: %{status} | |
| %{info}Pulse para cambiar | |
| rainbow_tooltip: |- | |
| Coloración de columnas con arcoíris: %{status} | |
| Pulse para alternar | |
| encoding_tooltip: |- | |
| Codificación de archivo: %{encoding} | |
| %{info}Pulse para cambiar | |
| recent_folders_heading: 📁 Carpetas recientes | |
| file_tooltip: |- | |
| %{path} | |
| Clic: Abrir | |
| Mayús+clic: Abrir en segundo plano | |
| folder_tooltip: |- | |
| %{path} | |
| Clic: Abrir como espacio de trabajo |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 41 - 66, Update the Spanish strings: fix the
typo in recent_folders_heading by changing "📁 Carpetas recentes" to "📁
Carpetas recientes", and change the literal desk wording in folder_tooltip by
replacing the final line "Pulsación: Abre como pupitre" with a phrase that
conveys opening the folder as a workspace, e.g. "Pulsación: Abrir como espacio
de trabajo"; modify the values for the keys recent_folders_heading and
folder_tooltip accordingly.
| code_folding: Encarpetado de código | ||
| enable_folding: Habilitar encarpetado de código | ||
| folding_tooltip: Concede colapso de secciones del documento (Ctrl+Mayús+[ | ||
| para encarpetar todo, Ctrl+Mayús+] para desencarpetar) | ||
| show_fold_indicators: Mostrar indicadores de carpeta | ||
| fold_indicators_tooltip: Exhibe indicadores de carpeta en el canal (solo | ||
| visual - colapso aún no implementado) | ||
| fold_headings: Cabeceras | ||
| fold_headings_tooltip: Carpeta de cabeceras de Markdown y su contenido | ||
| fold_code_blocks: Bloques de código | ||
| fold_code_blocks_tooltip: Bloques de código delimitados por pliegues | ||
| (```...```) | ||
| fold_lists: Listados | ||
| fold_lists_tooltip: Plegar jerarquías de listas anidadas | ||
| fold_indentation: Sangrado (JSON/YAML) | ||
| fold_indentation_tooltip: Estructuras basadas en sangrado de pliegues en | ||
| archivos JSON/YAML |
There was a problem hiding this comment.
Use “plegado” terminology for code folding settings.
The current strings translate folding as folders/filing, which makes these settings misleading.
📝 Proposed cleanup
- code_folding: Encarpetado de código
- enable_folding: Habilitar encarpetado de código
- folding_tooltip: Concede colapso de secciones del documento (Ctrl+Mayús+[
- para encarpetar todo, Ctrl+Mayús+] para desencarpetar)
- show_fold_indicators: Mostrar indicadores de carpeta
- fold_indicators_tooltip: Exhibe indicadores de carpeta en el canal (solo
- visual - colapso aún no implementado)
+ code_folding: Plegado de código
+ enable_folding: Habilitar plegado de código
+ folding_tooltip: Permite contraer secciones del documento (Ctrl+Mayús+[
+ para plegar todo, Ctrl+Mayús+] para desplegar)
+ show_fold_indicators: Mostrar indicadores de plegado
+ fold_indicators_tooltip: Muestra indicadores de plegado en el margen (solo
+ visual; el colapso aún no está implementado)
@@
- fold_headings_tooltip: Carpeta de cabeceras de Markdown y su contenido
+ fold_headings_tooltip: Plegar encabezados de Markdown y su contenido
@@
- fold_code_blocks_tooltip: Bloques de código delimitados por pliegues
+ fold_code_blocks_tooltip: Plegar bloques de código delimitados
@@
- fold_indentation_tooltip: Estructuras basadas en sangrado de pliegues en
+ fold_indentation_tooltip: Plegar estructuras basadas en sangrado en 🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 273 - 289, Replace the folder/filing
terminology ("encarpetado", "carpeta", "carpetado", etc.) with the standard
Spanish term "plegado" and related forms in the following keys: code_folding,
enable_folding, folding_tooltip, show_fold_indicators, fold_indicators_tooltip,
fold_headings, fold_headings_tooltip, fold_code_blocks,
fold_code_blocks_tooltip, fold_lists, fold_lists_tooltip, fold_indentation, and
fold_indentation_tooltip; keep the original meaning and punctuation of tooltips
but update wording to e.g. "Plegado de código", "Habilitar plegado de código",
"Permite plegar secciones del documento..." and "Mostrar indicadores de plegado"
so all occurrences are consistent.
| restore_session_tooltip: Cuando esté habilitado, restablezca anteriormente | ||
| los lengüetas abiertas al inicio. Cuando inhabilitados, inicie con una | ||
| única lengüeta vacía. Los datos de la sesión siempre está guardada. |
There was a problem hiding this comment.
Clean up the restore-session tooltip grammar.
This tooltip has several visible agreement errors and reads awkwardly in the settings UI.
📝 Proposed cleanup
- restore_session_tooltip: Cuando esté habilitado, restablezca anteriormente
- los lengüetas abiertas al inicio. Cuando inhabilitados, inicie con una
- única lengüeta vacía. Los datos de la sesión siempre está guardada.
+ restore_session_tooltip: Cuando esté habilitado, restaura las pestañas
+ abiertas anteriormente al iniciar. Cuando esté deshabilitado, inicia con
+ una única pestaña vacía. Los datos de la sesión siempre se guardan.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| restore_session_tooltip: Cuando esté habilitado, restablezca anteriormente | |
| los lengüetas abiertas al inicio. Cuando inhabilitados, inicie con una | |
| única lengüeta vacía. Los datos de la sesión siempre está guardada. | |
| restore_session_tooltip: Cuando esté habilitado, restaura las pestañas | |
| abiertas anteriormente al iniciar. Cuando esté deshabilitado, inicia con | |
| una única pestaña vacía. Los datos de la sesión siempre se guardan. |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 312 - 314, The restore_session_tooltip string
contains grammatical/agreement errors; update the value for the
restore_session_tooltip key to a corrected Spanish sentence such as: "Cuando
esté habilitado, restaura las pestañas abiertas anteriormente al iniciar. Cuando
esté deshabilitado, inicia con una sola pestaña vacía. Los datos de la sesión
siempre se guardan." Replace the existing text for restore_session_tooltip with
this corrected copy to fix agreement and flow.
| placeholder: Búsqueda… | ||
| replace_placeholder: Remplazar por… | ||
| match_case: Coincide capitalinas | ||
| match_case_short: Aa | ||
| whole_word: Todo el mundo | ||
| use_regex: Utilizar ExpReg | ||
| replace: Remplazar | ||
| replace_all: Remplazar todo | ||
| no_results: No coincide | ||
| title: Buscar y remplazar | ||
| title_replace: Buscar y remplazar | ||
| title_find: Buscar | ||
| close_tooltip: Cerrar (Escape) | ||
| hide_replace: Ocultar remplazo (Ctrl+H) | ||
| show_replace: Mostrar remplazo (Ctrl+H) | ||
| prev_tooltip: Anterior (Mayús+F3) | ||
| next_tooltip: Siguiente (F3 o Entrar) | ||
| replace_tooltip: Remplazar coincidencia actual | ||
| replace_all_tooltip: Remplazar todas las coincidencias | ||
| keyboard_hints: 'Entrar/F3: Siguiente • Mayús+F3: Prev • Esc: Cerrar' |
There was a problem hiding this comment.
Fix the find option labels that change the feature meaning.
Line 411 should describe case sensitivity, and Line 413 currently says “everyone” instead of “whole word”.
📝 Proposed cleanup
- placeholder: Búsqueda…
- replace_placeholder: Remplazar por…
- match_case: Coincide capitalinas
+ placeholder: Buscar…
+ replace_placeholder: Reemplazar por…
+ match_case: Distinguir mayúsculas/minúsculas
@@
- whole_word: Todo el mundo
- use_regex: Utilizar ExpReg
- replace: Remplazar
- replace_all: Remplazar todo
- no_results: No coincide
- title: Buscar y remplazar
- title_replace: Buscar y remplazar
+ whole_word: Palabra completa
+ use_regex: Usar expresión regular
+ replace: Reemplazar
+ replace_all: Reemplazar todo
+ no_results: Sin resultados
+ title: Buscar y reemplazar
+ title_replace: Buscar y reemplazar
@@
- hide_replace: Ocultar remplazo (Ctrl+H)
- show_replace: Mostrar remplazo (Ctrl+H)
+ hide_replace: Ocultar reemplazo (Ctrl+H)
+ show_replace: Mostrar reemplazo (Ctrl+H)
@@
- replace_tooltip: Remplazar coincidencia actual
- replace_all_tooltip: Remplazar todas las coincidencias
+ replace_tooltip: Reemplazar coincidencia actual
+ replace_all_tooltip: Reemplazar todas las coincidencias🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 409 - 428, Update the Spanish labels to
correctly reflect case-sensitivity and whole-word options: change the value for
match_case to a phrase meaning "match case" (e.g., "Coincidir mayúsculas y
minúsculas" or "Coincidir mayúsculas") and change whole_word from "Todo el
mundo" to a proper whole-word translation such as "Palabra completa" or
"Coincidir palabra completa"; leave match_case_short ("Aa") as-is.
| panel_title: Documento | ||
| statistics: Estadísticas | ||
| tab_outline: Externo a línea | ||
| tab_statistics: Estad | ||
| summary: Cabeceras %{headings} · ~%{minutes} min leído | ||
| no_headings: Sin cabeceras encontradas | ||
| tab_links: Enlaces | ||
| json_structure: 📁 Estructura | ||
| json_values: 📊 Valores | ||
| json_objects: Objetos | ||
| json_nulls: Nulos | ||
| json_numbers: Números | ||
| json_booleans: Booleanos | ||
| parse_error: ⚠ Error de intérprete | ||
| backlinks_unavailable: Retroceso no disponible | ||
| productivity_unavailable: Productividad Hub no disponible | ||
| json_strings: Segmentos | ||
| json_arrays: Formaciones | ||
| json_total_keys: Pulsaciones totales | ||
| json_max_depth: Prof. max. | ||
| json_total_values: Valores totales | ||
| add_headings_hint: 'Agrega cabeceras utilizando sintaxis #' | ||
| close_tooltip: Cerrar línea externa (Ctrl+Mayús+O) | ||
| detach_tooltip: Soltar para ventana flotante | ||
| tab_hub: Hub | ||
| json_array_items: Ítemes de formación |
There was a problem hiding this comment.
Correct outline and JSON statistics terminology.
Several labels here are literal mistranslations, especially “Externo a línea”, “Retroceso”, “Segmentos”, “Formaciones”, and “Pulsaciones totales”.
📝 Proposed cleanup
- tab_outline: Externo a línea
- tab_statistics: Estad
- summary: Cabeceras %{headings} · ~%{minutes} min leído
- no_headings: Sin cabeceras encontradas
+ tab_outline: Esquema
+ tab_statistics: Estadísticas
+ summary: Encabezados %{headings} · ~%{minutes} min de lectura
+ no_headings: No se encontraron encabezados
@@
- parse_error: ⚠ Error de intérprete
- backlinks_unavailable: Retroceso no disponible
+ parse_error: ⚠ Error de análisis
+ backlinks_unavailable: Enlaces de retorno no disponibles
@@
- json_strings: Segmentos
- json_arrays: Formaciones
- json_total_keys: Pulsaciones totales
+ json_strings: Cadenas
+ json_arrays: Arreglos
+ json_total_keys: Claves totales
@@
- add_headings_hint: 'Agrega cabeceras utilizando sintaxis #'
- close_tooltip: Cerrar línea externa (Ctrl+Mayús+O)
+ add_headings_hint: 'Agrega encabezados usando la sintaxis #'
+ close_tooltip: Cerrar esquema (Ctrl+Mayús+O)
@@
- json_array_items: Ítemes de formación
+ json_array_items: Elementos de arreglo🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 430 - 455, Replace several incorrect Spanish
labels with proper terminology: change tab_outline from "Externo a línea" to
"Esquema" (or "Índice"), change backlinks_unavailable from "Retroceso no
disponible" to "Enlaces entrantes no disponibles" (or "Vínculos inversos no
disponibles"), change json_strings from "Segmentos" to "Cadenas", change
json_arrays from "Formaciones" to "Arreglos" (or "Matrices"/"Listas"), change
json_total_keys from "Pulsaciones totales" to "Claves totales" (or "Total de
claves"), fix json_array_items from "Ítemes de formación" to "Elementos del
arreglo" (or "Elementos del array"), and correct tab_statistics "Estad" to
"Estadísticas" and summary/other headers use "Encabezados" instead of
"Cabeceras" for consistency; update the values for keys tab_outline,
backlinks_unavailable, json_strings, json_arrays, json_total_keys,
json_array_items, tab_statistics, and summary/add_headings_hint accordingly.
| save: Guardar | ||
| save_as: Guardar como | ||
| open: Abrir archivo | ||
| new: Nuevo archivo | ||
| new_tab: Nueva lengüeta | ||
| close_tab: Cerrar lengüeta | ||
| next_tab: Siguiente lengüeta | ||
| prev_tab: Anterior lengüeta | ||
| go_to_line: Ir a línea | ||
| quick_open: Apertura rápida | ||
| heading_3: Cabecera 3 | ||
| heading_4: Cabecera 4 | ||
| heading_5: Cabecera 5 | ||
| heading_6: Cabecera 6 | ||
| heading_1: Cabecera 1 | ||
| heading_2: Cabecera 2 | ||
| code_block: Bloque de código | ||
| link: Enlace | ||
| image: Imagen | ||
| blockquote: Entrecomillado | ||
| find: Buscar | ||
| find_replace: Buscar y remplazar | ||
| find_next: Buscar siguiente | ||
| find_prev: Buscar anterior | ||
| search_in_files: Buscar dentro del archivo | ||
| bold: Negrilla | ||
| italic: Cursiva | ||
| inline_code: Código alineado | ||
| redo: Rehacer | ||
| duplicate_line: Duplicar línea | ||
| move_line_up: Subir línea | ||
| move_line_down: Bajar línea | ||
| select_next_occurrence: Seleccionar siguiente aparición | ||
| cycle_theme: Ciclar tema | ||
| toggle_zen_mode: Conmutar modo zen | ||
| toggle_fullscreen: Conmutar pantalla completa | ||
| toggle_outline: Conmutar línea externa | ||
| toggle_file_tree: Conmutar árbol de archivo | ||
| toggle_pipeline: Conmutar conducto | ||
| undo: Deshacer | ||
| numbered_list: Listado enumerado | ||
| export_html: Exportar HTML | ||
| insert_toc: Insertar tabla de contenidos | ||
| open_about: Acerca de / Ayuda | ||
| bullet_list: Listado de botones | ||
| toggle_view_mode: Conmutar modo de vista | ||
| open_settings: Abrir ajustes | ||
| edit: |
There was a problem hiding this comment.
Fix shortcut command names that describe the wrong action.
These strings are shown in shortcut/help UI, so labels like “Listado de botones” for bullet lists and “Código alineado” for inline code will mislead users.
📝 Proposed cleanup
- search_in_files: Buscar dentro del archivo
+ search_in_files: Buscar en archivos
@@
- inline_code: Código alineado
+ inline_code: Código en línea
@@
- toggle_outline: Conmutar línea externa
- toggle_file_tree: Conmutar árbol de archivo
- toggle_pipeline: Conmutar conducto
+ toggle_outline: Mostrar/ocultar esquema
+ toggle_file_tree: Mostrar/ocultar árbol de archivos
+ toggle_pipeline: Mostrar/ocultar canal de comandos
@@
- bullet_list: Listado de botones
+ bullet_list: Lista con viñetas🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/es.yaml` around lines 570 - 617, Summary: The Spanish translations
for the shortcut labels are misleading; specifically the keys inline_code and
bullet_list use incorrect phrases. Fix: open locales/es.yaml and update the
inline_code value from "Código alineado" to "Código en línea" (key: inline_code)
and update bullet_list from "Listado de botones" to "Lista con viñetas" or
"Lista con viñetas (bullet list)" (key: bullet_list); confirm similar shortcut
keys (e.g., numbered_list) use consistent phrasing like "Listado numerado" and
run a quick review of nearby keys (inline_code, bullet_list, numbered_list) to
ensure all shortcut labels accurately describe the action.
Currently translated at 100.0% (739 of 739 strings) Translation: Ferrite/Ferrite UI Translate-URL: https://hosted.weblate.org/projects/ferrite/ferrite-ui/es/
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@locales/ru.yaml`:
- Line 1: Update the top-of-file header comment that incorrectly reads "#
Ferrite - English (Base Language)" to accurately reflect this locale (e.g.
change it to "# Ferrite - Russian (ru)"), locating the existing header comment
string "# Ferrite - English (Base Language)" and replacing it with the corrected
Russian header so the file metadata matches the locale.
- Around line 7-934: The locale files for Russian and Czech contain only empty
strings, which rust-i18n treats as valid translations and thus produce a blank
UI; fix by (1) populating critical keys (menu, status, dialog, settings,
notification, error, common) with real translations in the respective YAMLs so
they are usable, and (2) add a guard in the Language handling code (the Language
enum and wherever languages are registered/listed for selection) to hide/disable
the Language::Russian and Language::Czech variants until a
translation-completeness check passes (e.g., implement
Language::is_translation_complete() or verify non-empty required keys before
exposing/ registering the locale), and ensure fallback="en" still applies when
keys are truly missing rather than present-but-empty.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| @@ -0,0 +1,934 @@ | |||
| # Ferrite - English (Base Language) | |||
There was a problem hiding this comment.
Header comment incorrectly identifies this as the English base file.
Line 1 reads # Ferrite - English (Base Language) but this is the Russian locale file — it was evidently copied from en.yaml without updating the header.
✏️ Proposed fix
-# Ferrite - English (Base Language)
+# Ferrite - Russian (Русский)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Ferrite - English (Base Language) | |
| # Ferrite - Russian (Русский) |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/ru.yaml` at line 1, Update the top-of-file header comment that
incorrectly reads "# Ferrite - English (Base Language)" to accurately reflect
this locale (e.g. change it to "# Ferrite - Russian (ru)"), locating the
existing header comment string "# Ferrite - English (Base Language)" and
replacing it with the corrected Russian header so the file metadata matches the
locale.
| name: "" | ||
|
|
||
| # Menu bar items | ||
| menu: | ||
| file: | ||
| label: "" | ||
| open: "" | ||
| save: "" | ||
| save_as: "" | ||
| recent: "" | ||
| export: "" | ||
| export_html: "" | ||
| export_clipboard: "" | ||
| edit: | ||
| label: "" | ||
| format: | ||
| label: "" | ||
| tools: | ||
| label: "" | ||
|
|
||
| # Toolbar buttons | ||
|
|
||
| # View mode labels | ||
| view_mode: | ||
| raw_desc: "" | ||
| rendered_desc: "" | ||
| split_desc: "" | ||
|
|
||
| # Status bar | ||
| status: | ||
| untitled: "" | ||
| no_file: "" | ||
| vim_mode: "" | ||
| cursor_position: "" | ||
| delimiter_tooltip: "" | ||
| header_tooltip: "" | ||
| rainbow_tooltip: "" | ||
| encoding_tooltip: "" | ||
| encoding_heading: "" | ||
| recent_files_heading: "" | ||
| recent_folders_heading: "" | ||
| file_tooltip: "" | ||
| folder_tooltip: "" | ||
|
|
||
| # File dialogs | ||
| dialog: | ||
| unsaved_changes: | ||
| title: "" | ||
| save: "" | ||
| dont_save: "" | ||
| confirm: | ||
| cancel: "" | ||
| close: "" | ||
| # File operation dialogs | ||
| file: | ||
| new_file: "" | ||
| new_folder: "" | ||
| enter_file_name: "" | ||
| enter_folder_name: "" | ||
| hint_file: "" | ||
| hint_folder: "" | ||
| create: "" | ||
| rename: "" | ||
| enter_new_name: "" | ||
| exists_error: "" | ||
| confirm_delete: "" | ||
| delete_folder_warning: "" | ||
| delete: "" | ||
| file: "" | ||
| folder: "" | ||
| location: "" | ||
| delete_confirm: "" | ||
| # Go to Line dialog | ||
| go_to_line: | ||
| title: "" | ||
| enter_line: "" | ||
| go: "" | ||
| range: "" | ||
|
|
||
| # Settings panel | ||
| settings: | ||
| title: "" | ||
| reset_all: "" | ||
| reset_tooltip: "" | ||
| auto_save_hint: "" | ||
| default_view_hint: "" | ||
| font_size: | ||
| small: "" | ||
| medium: "" | ||
| large: "" | ||
| general: | ||
| theme: "" | ||
| theme_dark: "" | ||
| theme_light: "" | ||
| theme_system: "" | ||
| restore_session: "" | ||
| editor: | ||
| title: "" | ||
| font_family: "" | ||
| font_size: "" | ||
| font_inter_desc: "" | ||
| font_jetbrains_desc: "" | ||
| custom_font: "" | ||
| custom_font_desc: "" | ||
| select_system_font: "" | ||
| font_preview: "" | ||
| font_not_found: "" | ||
| cjk_preference: "" | ||
| cjk_preference_hint: "" | ||
| cjk_auto: "" | ||
| cjk_auto_desc: "" | ||
| cjk_korean: "" | ||
| cjk_korean_desc: "" | ||
| cjk_simplified_chinese: "" | ||
| cjk_simplified_chinese_desc: "" | ||
| cjk_traditional_chinese: "" | ||
| cjk_traditional_chinese_desc: "" | ||
| cjk_japanese: "" | ||
| cjk_japanese_desc: "" | ||
| complex_scripts: "" | ||
| complex_scripts_hint: "" | ||
| complex_script_default: "" | ||
| tab_size: "" | ||
| spaces: "" | ||
| word_wrap: "" | ||
| word_wrap_tooltip: "" | ||
| show_line_numbers: "" | ||
| line_numbers_tooltip: "" | ||
| show_minimap: "" | ||
| minimap_tooltip: "" | ||
| minimap_mode: "" | ||
| minimap_mode_auto: "" | ||
| minimap_mode_auto_desc: "" | ||
| minimap_mode_semantic: "" | ||
| minimap_mode_semantic_desc: "" | ||
| minimap_mode_pixel: "" | ||
| minimap_mode_pixel_desc: "" | ||
| highlight_brackets: "" | ||
| brackets_tooltip: "" | ||
| auto_close_brackets: "" | ||
| auto_close_tooltip: "" | ||
| syntax_highlighting: "" | ||
| syntax_tooltip: "" | ||
| default_language: "" | ||
| default_language_hint: "" | ||
| default_language_auto: "" | ||
| sync_scroll_tooltip: "" | ||
| use_spaces: "" | ||
| use_spaces_tooltip: "" | ||
| vim_mode: "" | ||
| vim_mode_tooltip: "" | ||
| max_line_width: "" | ||
| custom_width: "" | ||
| code_folding: "" | ||
| enable_folding: "" | ||
| folding_tooltip: "" | ||
| show_fold_indicators: "" | ||
| fold_indicators_tooltip: "" | ||
| fold_headings: "" | ||
| fold_headings_tooltip: "" | ||
| fold_code_blocks: "" | ||
| fold_code_blocks_tooltip: "" | ||
| fold_lists: "" | ||
| fold_lists_tooltip: "" | ||
| fold_indentation: "" | ||
| fold_indentation_tooltip: "" | ||
| snippets: "" | ||
| enable_snippets: "" | ||
| snippets_tooltip: "" | ||
| builtin_snippets: "" | ||
| snippet_date: "" | ||
| snippet_time: "" | ||
| snippet_datetime: "" | ||
| snippet_now: "" | ||
| # CJK Paragraph Indentation | ||
| paragraph_indent: "" | ||
| paragraph_indent_hint: "" | ||
| paragraph_indent_custom: "" | ||
| paragraph_indent_custom_desc: "" | ||
| # Header Spacing (Markdown Rendering) | ||
| header_spacing: "" | ||
| header_spacing_hint: "" | ||
| preview: | ||
| sync_scroll: "" | ||
| default_view: "" | ||
| files: | ||
| title: "" | ||
| restore_session_tooltip: "" | ||
| enable_auto_save: "" | ||
| auto_save_tooltip: "" | ||
| auto_save_delay: "" | ||
| recent_files: "" | ||
| clear_recent: "" | ||
| clear_recent_tooltip: "" | ||
| seconds: "" | ||
| remember_files: "" | ||
| files_count: "" | ||
| appearance: | ||
| title: "" | ||
| language: "" | ||
| language_hint: "" | ||
| syntax_theme: "" | ||
| syntax_theme_hint: "" | ||
| syntax_theme_auto: "" | ||
| keyboard: | ||
| title: "" | ||
| search_hint: "" | ||
| reset_all: "" | ||
| reset_all_tooltip: "" | ||
| reset_default: "" | ||
| press_key: "" | ||
| waiting: "" | ||
| cancel: "" | ||
| apply: "" | ||
| conflict_with: "" | ||
| click_to_change: "" | ||
| about: | ||
| title: "" | ||
| description: "" | ||
| updates: "" | ||
| check_for_updates: "" | ||
| checking: "" | ||
| up_to_date: "" | ||
| check_again: "" | ||
| update_available: "" | ||
| new_version: "" | ||
| view_release: "" | ||
| check_failed: "" | ||
| try_again: "" | ||
| links: "" | ||
| all_releases: "" | ||
| report_issue: "" | ||
| source_code: "" | ||
| license: "" | ||
| terminal: | ||
| title: "" | ||
| enable: "" | ||
| font_size: "" | ||
| scrollback: "" | ||
| copy_selection: "" | ||
| copy_selection_tooltip: "" | ||
| theme: "" | ||
| opacity: "" | ||
| startup_command: "" | ||
| startup_command_desc: "" | ||
| startup_command_hint: "" | ||
| monitors: "" | ||
| monitors_desc: "" | ||
| monitor_label: "" | ||
| monitor_geometry: "" | ||
| breathing_color: "" | ||
| prompt_patterns: "" | ||
| prompt_patterns_desc: "" | ||
| prompt_patterns_hint: "" | ||
| auto_load_layout: "" | ||
| auto_load_layout_tooltip: "" | ||
| sound_notification: "" | ||
| sound_notification_desc: "" | ||
| enable_sound: "" | ||
| enable_sound_tooltip: "" | ||
| custom_sound: "" | ||
| custom_sound_hint: "" | ||
| auto_focus: "" | ||
| auto_focus_desc: "" | ||
| focus_on_prompt: "" | ||
| focus_on_prompt_tooltip: "" | ||
| font_size_format: "" | ||
| opacity_format: "" | ||
|
|
||
| # Find and Replace panel | ||
| find: | ||
| placeholder: "" | ||
| replace_placeholder: "" | ||
| match_case: "" | ||
| match_case_short: "" | ||
| whole_word: "" | ||
| use_regex: "" | ||
| replace: "" | ||
| replace_all: "" | ||
| no_results: "" | ||
| title: "" | ||
| title_replace: "" | ||
| title_find: "" | ||
| close_tooltip: "" | ||
| hide_replace: "" | ||
| show_replace: "" | ||
| prev_tooltip: "" | ||
| next_tooltip: "" | ||
| replace_tooltip: "" | ||
| replace_all_tooltip: "" | ||
| keyboard_hints: "" | ||
|
|
||
| # Outline panel | ||
| outline: | ||
| panel_title: "" | ||
| statistics: "" | ||
| tab_outline: "" | ||
| tab_statistics: "" | ||
| summary: "" | ||
| no_headings: "" | ||
| add_headings_hint: "" | ||
| close_tooltip: "" | ||
| parse_error: "" | ||
| detach_tooltip: "" | ||
| backlinks_unavailable: "" | ||
| productivity_unavailable: "" | ||
| tab_links: "" | ||
| tab_hub: "" | ||
| json_structure: "" | ||
| json_values: "" | ||
| json_objects: "" | ||
| json_arrays: "" | ||
| json_total_keys: "" | ||
| json_max_depth: "" | ||
| json_total_values: "" | ||
| json_strings: "" | ||
| json_numbers: "" | ||
| json_booleans: "" | ||
| json_nulls: "" | ||
| json_array_items: "" | ||
|
|
||
| # Document statistics | ||
| stats: | ||
| no_data: "" | ||
| text_stats: "" | ||
| words: "" | ||
| characters: "" | ||
| characters_no_spaces: "" | ||
| lines: "" | ||
| paragraphs: "" | ||
| structure: "" | ||
| headings_total: "" | ||
| list_items: "" | ||
| horizontal_rules: "" | ||
| media_links: "" | ||
| links: "" | ||
| images: "" | ||
| code_diagrams: "" | ||
| code_blocks: "" | ||
| mermaid_diagrams: "" | ||
| tables: "" | ||
| blockquotes: "" | ||
|
|
||
| # File tree / Sidebar | ||
|
|
||
| # Quick switcher | ||
| quick_switcher: | ||
| placeholder: "" | ||
| no_results: "" | ||
| recent_tooltip: "" | ||
| keyboard_hints: "" | ||
|
|
||
| # Search in files | ||
| search: | ||
| title: "" | ||
| label: "" | ||
| placeholder: "" | ||
| more_matches: "" | ||
| keyboard_hints: "" | ||
|
|
||
| # About dialog | ||
| about: | ||
| title: "" | ||
| tab: | ||
| about: "" | ||
| shortcuts: "" | ||
| description: "" | ||
| close_hint: "" | ||
| # Links section | ||
| links: "" | ||
| github_label: "" | ||
| view_on_github: "" | ||
| github_tooltip: "" | ||
| report_issue_label: "" | ||
| submit_bug: "" | ||
| issue_tooltip: "" | ||
| # Built with section | ||
| built_with: "" | ||
| lib: | ||
| egui: "" | ||
| comrak: "" | ||
| syntect: "" | ||
| serde: "" | ||
| notify: "" | ||
| # License section | ||
| license: "" | ||
| license_type: "" | ||
| copyright: "" | ||
| version: "" | ||
|
|
||
| # Keyboard shortcuts | ||
| shortcuts: | ||
| title: "" | ||
| expand_hint: "" | ||
| # Categories | ||
| category: | ||
| file: "" | ||
| edit: "" | ||
| view: "" | ||
| formatting: "" | ||
| workspace: "" | ||
| navigation: "" | ||
| # Command names (used in keyboard settings panel) | ||
| commands: | ||
| # File operations | ||
| save: "" | ||
| save_as: "" | ||
| open: "" | ||
| new: "" | ||
| new_tab: "" | ||
| close_tab: "" | ||
| # Navigation | ||
| next_tab: "" | ||
| prev_tab: "" | ||
| go_to_line: "" | ||
| quick_open: "" | ||
| # View | ||
| toggle_view_mode: "" | ||
| cycle_theme: "" | ||
| toggle_zen_mode: "" | ||
| toggle_fullscreen: "" | ||
| toggle_outline: "" | ||
| toggle_file_tree: "" | ||
| toggle_pipeline: "" | ||
| # Edit | ||
| undo: "" | ||
| redo: "" | ||
| delete_line: "" | ||
| duplicate_line: "" | ||
| move_line_up: "" | ||
| move_line_down: "" | ||
| select_next_occurrence: "" | ||
| # Search | ||
| find: "" | ||
| find_replace: "" | ||
| find_next: "" | ||
| find_prev: "" | ||
| search_in_files: "" | ||
| # Formatting | ||
| bold: "" | ||
| italic: "" | ||
| inline_code: "" | ||
| code_block: "" | ||
| link: "" | ||
| image: "" | ||
| blockquote: "" | ||
| bullet_list: "" | ||
| numbered_list: "" | ||
| heading_1: "" | ||
| heading_2: "" | ||
| heading_3: "" | ||
| heading_4: "" | ||
| heading_5: "" | ||
| heading_6: "" | ||
| # Folding | ||
| fold_all: "" | ||
| unfold_all: "" | ||
| toggle_fold: "" | ||
| # Other | ||
| open_settings: "" | ||
| open_about: "" | ||
| export_html: "" | ||
| insert_toc: "" | ||
| # File shortcuts (for help panel) | ||
| file: | ||
| new: "" | ||
| open: "" | ||
| save: "" | ||
| save_as: "" | ||
| close_tab: "" | ||
| # Edit shortcuts (for help panel) | ||
| edit: | ||
| undo: "" | ||
| redo: "" | ||
| find: "" | ||
| find_replace: "" | ||
| select_all: "" | ||
| copy: "" | ||
| cut: "" | ||
| paste: "" | ||
| delete_line: "" | ||
| duplicate_line: "" | ||
| move_line_up: "" | ||
| move_line_down: "" | ||
| select_next_occurrence: "" | ||
| # View shortcuts (for help panel) | ||
| view: | ||
| toggle_view: "" | ||
| toggle_outline: "" | ||
| zoom_in: "" | ||
| zoom_out: "" | ||
| reset_zoom: "" | ||
| settings: "" | ||
| about: "" | ||
| # Formatting shortcuts (for help panel) | ||
| format: | ||
| bold: "" | ||
| italic: "" | ||
| underline: "" | ||
| link: "" | ||
| code: "" | ||
| # Workspace shortcuts (for help panel) | ||
| workspace: | ||
| quick_switcher: "" | ||
| search_files: "" | ||
| toggle_tree: "" | ||
| # Navigation shortcuts (for help panel) | ||
| nav: | ||
| next_tab: "" | ||
| prev_tab: "" | ||
| go_to_line: "" | ||
| find_next: "" | ||
| find_prev: "" | ||
|
|
||
| # Error messages | ||
|
|
||
| # Notifications / Toasts | ||
| notification: | ||
| restored_auto_save: "" | ||
| auto_save_discarded: "" | ||
| session_restored: "" | ||
| large_file_performance: "" | ||
| large_file_loading: "" | ||
| file_loaded: "" | ||
| file_load_failed: "" | ||
| undo: "" | ||
| nothing_to_undo: "" | ||
| redo: "" | ||
| nothing_to_redo: "" | ||
| outline_shown: "" | ||
| outline_hidden: "" | ||
| loaded_terminal_layout: "" | ||
| terminal_shown: "" | ||
| terminal_hidden: "" | ||
| zen_enabled: "" | ||
| zen_disabled: "" | ||
| fullscreen_enter: "" | ||
| fullscreen_exit: "" | ||
| pipeline_disabled: "" | ||
| pipeline_zen: "" | ||
| pipeline_unsupported: "" | ||
| pipeline_opened: "" | ||
| pipeline_closed: "" | ||
| file_tree_shown: "" | ||
| file_tree_hidden: "" | ||
| open_folder_first: "" | ||
| open_folder_quick_open: "" | ||
| open_folder_search: "" | ||
| toc_markdown_only: "" | ||
| toc_updated: "" | ||
| toc_inserted: "" | ||
| toc_inserted_empty: "" | ||
| no_document_format: "" | ||
| not_structured: "" | ||
| document_formatted: "" | ||
| format_failed: "" | ||
| parse_error: "" | ||
| no_document_validate: "" | ||
| valid_syntax: "" | ||
| invalid_syntax: "" | ||
| replaced: "" | ||
| replaced_count: "" | ||
| no_document_export: "" | ||
| exported_to: "" | ||
| export_failed: "" | ||
| no_document_copy: "" | ||
| html_copied: "" | ||
| copy_failed: "" | ||
| opened_files: "" | ||
| saved: "" | ||
| opened_workspace: "" | ||
| workspace_closed: "" | ||
| file_tree_refreshed: "" | ||
| created: "" | ||
| renamed_to: "" | ||
| deleted: "" | ||
| opened_background: "" | ||
| settings_reset: "" | ||
| encoding_changed: "" | ||
| reloaded_single: "" | ||
| reloaded_multiple: "" | ||
| external_change_single: "" | ||
| external_change_multiple: "" | ||
| image_added: "" | ||
| images_added: "" | ||
| opened_external_single: "" | ||
| opened_external_multiple: "" | ||
| wikilink_not_found: "" | ||
| wikilink_open_failed: "" | ||
|
|
||
| # Tree viewer (JSON/YAML/TOML) | ||
| tree_viewer: | ||
| collapse_all: "" | ||
| expand_all: "" | ||
| copy_path: "" | ||
| show_raw: "" | ||
| parse_error: "" | ||
| large_file_warning: "" | ||
|
|
||
| # Git integration | ||
| git: | ||
| modified: "" | ||
| deleted: "" | ||
| renamed: "" | ||
| untracked: "" | ||
| staged: "" | ||
| tracked: "" | ||
| staged_modified: "" | ||
| ignored: "" | ||
| conflict: "" | ||
|
|
||
| # Accessibility | ||
| a11y: | ||
| close_button: "" | ||
| minimize_button: "" | ||
|
|
||
| # Recovery and session dialogs | ||
| recovery: | ||
| auto_save: | ||
| title: "" | ||
| backup_found: "" | ||
| restore_question: "" | ||
| restore: "" | ||
| discard: "" | ||
| time_label: "" | ||
| session: | ||
| title: "" | ||
| crash_detected: "" | ||
| restore_question: "" | ||
| restore: "" | ||
| start_fresh: "" | ||
| restore_tooltip: "" | ||
| start_fresh_tooltip: "" | ||
| untitled: "" | ||
|
|
||
| # Common buttons and actions | ||
| common: | ||
| ok: "" | ||
| copy: "" | ||
| error: "" | ||
| dismiss: "" | ||
|
|
||
| # Code blocks and widgets | ||
| widgets: | ||
| code_block: | ||
| copy_tooltip: "" | ||
| finish_tooltip: "" | ||
| edit_tooltip: "" | ||
| table: | ||
| add_row: "" | ||
| add_column: "" | ||
| align_left: "" | ||
| align_center: "" | ||
| align_right: "" | ||
| delete_column_label: "" | ||
| delete_column: "" | ||
| align_label: "" | ||
| align_none: "" | ||
| delete_row: "" | ||
| add_row_tooltip: "" | ||
| add_column_tooltip: "" | ||
| alignment_tooltip: "" | ||
| list: | ||
| decrease_level: "" | ||
| increase_level: "" | ||
| remove_item: "" | ||
| add_item: "" | ||
| link: | ||
| edit: "" | ||
| open: "" | ||
| copy: "" | ||
| text_label: "" | ||
| url_label: "" | ||
| copy_tooltip: "" | ||
|
|
||
| # CSV Viewer | ||
| csv: | ||
| delimiter_auto: "" | ||
| error: "" | ||
| select_delimiter: "" | ||
| header_row: "" | ||
| has_headers_yes: "" | ||
| has_headers_no: "" | ||
| show_raw: "" | ||
| large_file_warning: "" | ||
|
|
||
| # Pipeline panel | ||
| pipeline: | ||
| title: "" | ||
| command_placeholder: "" | ||
| run: "" | ||
| recent: "" | ||
| no_output: "" | ||
| running: "" | ||
| truncated: "" | ||
| close_tooltip: "" | ||
| cancel_tooltip: "" | ||
| run_tooltip: "" | ||
| stdout: "" | ||
| stderr: "" | ||
| hint: "" | ||
| no_output_success: "" | ||
|
|
||
| # Encoding | ||
|
|
||
| # Tab context menu | ||
| tab: | ||
| reveal_in_explorer: "" | ||
|
|
||
| # Mermaid diagrams | ||
| mermaid: | ||
| badge: "" | ||
| empty: "" | ||
| rendering_error: "" | ||
|
|
||
| # Table of Contents | ||
|
|
||
| # Formatting toolbar tooltips | ||
|
|
||
| # Workspace | ||
| workspace: | ||
| close_folder: "" | ||
| new_file: "" | ||
| new_folder: "" | ||
| rename: "" | ||
| delete: "" | ||
| refresh: "" | ||
| recent_folders: "" | ||
|
|
||
| # Zen mode | ||
| zen: | ||
| enter: "" | ||
| exit: "" | ||
|
|
||
| # Log levels (for settings) | ||
|
|
||
| # Drag and drop | ||
|
|
||
| # Time relative strings | ||
| time: | ||
| seconds_ago: "" | ||
| minutes_ago: "" | ||
| hours_ago: "" | ||
| days_ago: "" | ||
|
|
||
| # Tooltips | ||
| tooltip: | ||
| fullscreen_exit: "" | ||
| fullscreen_enter: "" | ||
| settings: "" | ||
| recent_items: "" | ||
| about_help: "" | ||
| git_branch: "" | ||
| new_tab: "" | ||
|
|
||
| # Ribbon toolbar additions | ||
| ribbon: | ||
| format_document: "" | ||
| validate_syntax: "" | ||
| pipeline: "" | ||
| hide_info_panel: "" | ||
| show_info_panel: "" | ||
| toggle_outline: "" | ||
| copy_html_tooltip: "" | ||
| export_pdf: "" | ||
| coming_soon: "" | ||
| heading_level: "" | ||
|
|
||
| # Welcome page (first launch) | ||
| welcome: | ||
| subtitle: "" | ||
| section: | ||
| appearance: "" | ||
| editor: "" | ||
| cjk: "" | ||
| files: "" | ||
| label: | ||
| theme: "" | ||
| language: "" | ||
| line_width_hint: "" | ||
|
|
||
| # Terminal panel | ||
| terminal: | ||
| not_found: "" | ||
| fallback_title: "" | ||
| new_terminal_here: "" | ||
| maximize_active_pane: "" | ||
| pop_out: "" | ||
| split_horizontal: "" | ||
| split_vertical: "" | ||
| rename: "" | ||
| close: "" | ||
| close_pane: "" | ||
| close_others: "" | ||
| scatter_to_windows: "" | ||
| watching: "" | ||
| stop_watching: "" | ||
| watch_workspace_root: "" | ||
| export_html: "" | ||
| no_workspace_root: "" | ||
| no_macros: "" | ||
| close_panel_tooltip: "" | ||
| running_process_warning: "" | ||
| terminate_warning: "" | ||
| close_terminal: "" | ||
| close_terminal_title: "" | ||
| cancel: "" | ||
| no_terminal: "" | ||
| restore: "" | ||
| process_exited: "" | ||
| tab_name: "" | ||
| floating_title: "" | ||
| shell: | ||
| powershell: "" | ||
| cmd: "" | ||
| wsl: "" | ||
| layout: | ||
| columns_2: "" | ||
| rows_2: "" | ||
| grid_2x2: "" | ||
| save_layout: "" | ||
| load_layout: "" | ||
| save_workspace_layout: "" | ||
| custom_layout: "" | ||
| workspace: | ||
| scatter_all: "" | ||
| save: "" | ||
| load: "" | ||
| default_name: "" | ||
| menu: | ||
| layouts: "" | ||
| workspaces: "" | ||
| watch_mode: "" | ||
| macros: "" | ||
| filter: | ||
| terminal_layout: "" | ||
| ferrite_workspace: "" | ||
| error: | ||
| shell_not_found: "" | ||
| pty_failed: "" | ||
| permission_denied: "" | ||
| io_failed: "" | ||
| layout_failed: "" | ||
| unexpected: "" | ||
| format: "" | ||
|
|
||
| # Productivity panel | ||
| productivity: | ||
| title: "" | ||
| workspace_hint: "" | ||
| tasks: | ||
| title: "" | ||
| progress: "" | ||
| input_hint: "" | ||
| add: "" | ||
| tip: "" | ||
| move_up: "" | ||
| move_down: "" | ||
| empty: "" | ||
| pomodoro: | ||
| title: "" | ||
| work: "" | ||
| break_label: "" | ||
| ready: "" | ||
| cycles: "" | ||
| stop: "" | ||
| start_work: "" | ||
| start_break: "" | ||
| notes: | ||
| title: "" | ||
| name_label: "" | ||
| note_label: "" | ||
| confirm_rename: "" | ||
| cancel_rename: "" | ||
| new_note: "" | ||
| rename_note: "" | ||
| confirm_delete: "" | ||
| delete_note: "" | ||
| input_hint: "" | ||
| dock: "" | ||
| dock_tooltip: "" | ||
| ok: "" | ||
| confirm: "" | ||
| empty_name: "" | ||
| duplicate_name: "" | ||
|
|
||
| # Echo/AI placeholder (development) | ||
| echo: | ||
| title: "" | ||
| prompt: "" | ||
| responses: "" | ||
| replacement_note: "" | ||
| demo_note: "" | ||
|
|
||
| # Title bar | ||
| title_bar: | ||
| restore: "" | ||
| maximize: "" | ||
|
|
||
| # Error dialogs | ||
| error: | ||
| save_failed: "" | ||
| open_workspace_failed: "" | ||
| open_file_failed: "" | ||
| create_file_failed: "" | ||
| create_folder_failed: "" | ||
| rename_failed: "" | ||
| delete_failed: "" | ||
| image_failed: "" | ||
| explorer_failed: "" | ||
| write_failed: "" | ||
| encoding_failed: "" | ||
|
|
||
| # File dialog titles and filters | ||
| file_dialog: | ||
| open_workspace: "" | ||
| open_files: "" | ||
| save_file: "" | ||
| filter: | ||
| supported: "" | ||
| markdown: "" | ||
| text: "" | ||
| json: "" | ||
| yaml: "" | ||
| toml: "" | ||
| csv_tsv: "" | ||
| all: "" | ||
| html: "" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for any application-level empty-string fallback logic in Rust source files.
# Expected: no results → confirms the risk is real.
# If results exist, inspect them to understand whether they handle empty translations.
rg -n --type rust -C 3 'is_empty\(\)|== ""' \
| grep -i 'translat\|locale\|t!\|i18n'Repository: OlaProeis/Ferrite
Length of output: 21071
🏁 Script executed:
#!/bin/bash
# Find and inspect the i18n configuration in src/main.rs
echo "=== Checking i18n configuration in main.rs ==="
grep -n "i18n\|fallback\|rust_i18n" src/main.rs | head -20
echo -e "\n=== Checking for locales directory and file listing ==="
fd -t f "\.yaml$" locales/ | head -20
echo -e "\n=== Check if cs.yaml exists and has same pattern ==="
if [ -f "locales/cs.yaml" ]; then
echo "cs.yaml found. Checking content:"
head -50 locales/cs.yaml
echo "..."
echo "Line count: $(wc -l < locales/cs.yaml)"
echo "Empty string count: $(grep -c ': ""' locales/cs.yaml)"
fiRepository: OlaProeis/Ferrite
Length of output: 1577
🏁 Script executed:
#!/bin/bash
# Check English locale - should have actual values
echo "=== Checking en.yaml for actual content ==="
head -60 locales/en.yaml | tail -30
echo -e "\n=== Count empty vs non-empty strings in en.yaml ==="
empty_count=$(grep -c ': ""' locales/en.yaml)
total_count=$(grep -c ': ' locales/en.yaml)
echo "Empty strings (: \"\"): $empty_count"
echo "Total translation keys: $total_count"
echo -e "\n=== Sample from de.yaml ==="
head -40 locales/de.yaml | tail -20
echo -e "\n=== Count empty strings in other locales ==="
for locale in locales/*.yaml; do
empty=$(grep -c ': ""' "$locale" 2>/dev/null || echo "0")
total=$(grep -c ': ' "$locale" 2>/dev/null || echo "0")
echo "$(basename $locale): $empty empty / $total total"
doneRepository: OlaProeis/Ferrite
Length of output: 2144
🏁 Script executed:
#!/bin/bash
# Check Cargo.toml for rust_i18n dependency version
echo "=== rust_i18n dependency in Cargo.toml ==="
grep -A2 "rust_i18n" Cargo.toml
echo -e "\n=== Search for any i18n tests or locale handling logic ==="
rg -n "rust_i18n|locale.*fallback|t!\(" src/ --max-count=10 -A 2 | head -50
echo -e "\n=== Check if there are tests for the i18n macro ==="
fd -t f "test.*\.rs$" | xargs grep -l "i18n\|locale\|fallback" 2>/dev/null | head -5Repository: OlaProeis/Ferrite
Length of output: 3097
🏁 Script executed:
#!/bin/bash
# Search for i18n in all Cargo.toml files
echo "=== All Cargo.toml files ==="
find . -name "Cargo.toml" -type f | head -10
echo -e "\n=== Search for i18n/i18next in any Cargo.toml ==="
find . -name "Cargo.toml" -type f -exec grep -l "i18n\|i18next" {} \;
echo -e "\n=== Search Cargo.toml contents for all dependencies ==="
grep -A 100 "\[dependencies\]" Cargo.toml | head -80
echo -e "\n=== Check if rust_i18n is maybe defined as a feature or macro ==="
rg "rust_i18n|i18n!" --type rust src/main.rs -B 2 -A 2
echo -e "\n=== Look for i18n initialization and actual macro import ==="
head -100 src/main.rs | tail -50Repository: OlaProeis/Ferrite
Length of output: 4715
🏁 Script executed:
#!/bin/bash
# Search for any documentation or comments about empty translations
echo "=== Search for documentation or tests about empty translations ==="
rg -n "empty|fallback|missing|\"\"" src/main.rs | head -20
echo -e "\n=== Check rust-i18n crate documentation or comments ==="
# Look in lock file to get exact version and check if there are docs
grep -A 5 "rust-i18n" Cargo.lock | head -20
echo -e "\n=== Check if there are any build scripts or macros that process i18n ==="
fd -t f "build.rs" -o "lib.rs" | xargs grep -l "i18n" 2>/dev/null
echo -e "\n=== Look for any comments in the codebase about locale fallback behavior ==="
rg -n "fallback|missing.*translat" src/ --type rust | head -10Repository: OlaProeis/Ferrite
Length of output: 2274
🌐 Web query:
rust-i18n crate v3 empty string fallback behavior how it works
💡 Result:
In rust-i18n crate version 3, the fallback behavior works by first looking up the translation key in the current locale. If not found, it falls back through the chain of fallback locales specified in the i18n! macro (e.g., i18n!("locales", fallback = ["en", "es"])). It also supports automatic territory fallback (e.g., zh-CN -> zh since v2.4.0). No official documentation explicitly states the behavior for empty strings or completely missing keys after all fallbacks. However, with the log-miss-tr feature enabled (since v3.1.0), missing translations are logged at warning level, implying that t! macro likely returns the key itself as a fallback when no translation is found in any locale (common i18n pattern). Empty string translations are treated as valid values and returned as-is (no further fallback), similar to i18next behavior unless configured otherwise. Sources confirm fallback chain configuration and logging but lack explicit empty string details for v3.
Citations:
- 1: https://docs.rs/rust-i18n/^3
- 2: https://crates.io/crates/rust-i18n
- 3: https://docs.rs/rust-i18n
- 4: https://docs.rs/rust-i18n/3.1.5/rust_i18n/
- 5: https://github.com/longbridgeapp/rust-i18n
- 6: https://github.com/longbridge/rust-i18n
- 7: https://docs.rs/rust-i18n/latest/rust_i18n/
- 8: https://docs.rs/rust-i18n/latest/rust_i18n/macro.t.html
Empty Russian and Czech locale files will render a completely blank UI — both locales are essentially non-functional stubs.
The rust-i18n crate treats empty string values ("") as valid translations, not as missing keys. Only truly absent keys trigger the fallback = "en" configured in src/main.rs. Because every translation key in locales/ru.yaml and locales/cs.yaml exists (with 739 and 739 empty values respectively, out of 740 total keys), the Russian and Czech locales will display completely blank labels, buttons, menus, dialogs, and error messages across the entire application.
This is functionally equivalent to shipping a broken UI for these locales—worse than omitting the files entirely, since a missing file would surface a build-time error or prevent registration, whereas an all-empty file silently renders a blank product.
The remedies are:
- Provide actual translations — fill in at least the critical UI paths (menu, status, dialog, settings, notification, error, common) before shipping these locales as selectable.
- Guard the locales at the
Languageenum level — markLanguage::RussianandLanguage::Czechas unavailable/hidden until translations reach usable completion, preventing users from accidentally selecting blank locales.
Both locales/ru.yaml and locales/cs.yaml must be addressed before release.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@locales/ru.yaml` around lines 7 - 934, The locale files for Russian and Czech
contain only empty strings, which rust-i18n treats as valid translations and
thus produce a blank UI; fix by (1) populating critical keys (menu, status,
dialog, settings, notification, error, common) with real translations in the
respective YAMLs so they are usable, and (2) add a guard in the Language
handling code (the Language enum and wherever languages are registered/listed
for selection) to hide/disable the Language::Russian and Language::Czech
variants until a translation-completeness check passes (e.g., implement
Language::is_translation_complete() or verify non-empty required keys before
exposing/ registering the locale), and ensure fallback="en" still applies when
keys are truly missing rather than present-but-empty.
Translations update from Hosted Weblate for Ferrite/Ferrite UI.
Current translation status:
Summary by CodeRabbit