Internationalize UI text w/ german as first second lang
Adds rust-i18n and refactors all of the text copy in the app to use the translation function so that the UI language can be dynamically updated in the settings.
This commit is contained in:
457
locales/de.yml
Normal file
457
locales/de.yml
Normal file
@@ -0,0 +1,457 @@
|
||||
# Main menu
|
||||
menu:
|
||||
subtitle: 'Terminal-Tipptrainer'
|
||||
adaptive_drill: 'Adaptive Lektion'
|
||||
adaptive_drill_desc: 'Phonetische Woerter mit adaptiver Buchstabenfreischaltung'
|
||||
code_drill: 'Code-Lektion'
|
||||
code_drill_desc: 'Code-Syntax tippen ueben'
|
||||
passage_drill: 'Textpassagen-Lektion'
|
||||
passage_drill_desc: 'Passagen aus Buechern abtippen'
|
||||
skill_tree: 'Faehigkeitenbaum'
|
||||
skill_tree_desc: 'Fortschrittszweige ansehen und Lektionen starten'
|
||||
keyboard: 'Tastatur'
|
||||
keyboard_desc: 'Tastaturlayout und Tastenstatistiken erkunden'
|
||||
statistics: 'Statistik'
|
||||
statistics_desc: 'Tippstatistiken ansehen'
|
||||
settings: 'Einstellungen'
|
||||
settings_desc: 'keydr konfigurieren'
|
||||
day_streak: ' | %{days} Tage Serie'
|
||||
key_progress: ' Tastenfortschritt %{unlocked}/%{total} (%{mastered} gemeistert) | Ziel %{target} WPM%{streak}'
|
||||
hint_start: '[1-3] Start'
|
||||
hint_skill_tree: '[t] Faehigkeitenbaum'
|
||||
hint_keyboard: '[b] Tastatur'
|
||||
hint_stats: '[s] Statistik'
|
||||
hint_settings: '[c] Einstellungen'
|
||||
hint_quit: '[q] Beenden'
|
||||
|
||||
# Drill screen
|
||||
drill:
|
||||
title: ' Lektion '
|
||||
mode_adaptive: 'Adaptiv'
|
||||
mode_code: 'Code (ohne Wertung)'
|
||||
mode_passage: 'Textpassage (ohne Wertung)'
|
||||
focus_char: 'Fokus: ''%{ch}'''
|
||||
focus_bigram: 'Fokus: "%{bigram}"'
|
||||
focus_both: 'Fokus: ''%{ch}'' + "%{bigram}"'
|
||||
header_wpm: 'WPM'
|
||||
header_acc: 'Gen'
|
||||
header_err: 'Feh'
|
||||
code_source: ' Code-Quelle '
|
||||
passage_source: ' Textquelle '
|
||||
footer: '[ESC] Lektion beenden [Backspace] Loeschen'
|
||||
keys_reenabled: 'Tasten nach %{ms}ms wieder aktiv'
|
||||
hint_end: '[ESC] Lektion beenden'
|
||||
hint_backspace: '[Backspace] Loeschen'
|
||||
|
||||
# Dashboard / drill result
|
||||
dashboard:
|
||||
title: ' Lektion abgeschlossen '
|
||||
results: 'Ergebnisse'
|
||||
unranked_note_prefix: ' (Ohne Wertung'
|
||||
unranked_note_suffix: ' zaehlt nicht fuer den Faehigkeitenbaum)'
|
||||
speed: ' Tempo: '
|
||||
accuracy_label: ' Genauigkeit: '
|
||||
time_label: ' Zeit: '
|
||||
errors_label: ' Fehler: '
|
||||
correct_detail: ' (%{correct}/%{total} korrekt)'
|
||||
input_blocked: ' Eingabe voruebergehend blockiert '
|
||||
input_blocked_ms: '(%{ms}ms verbleibend)'
|
||||
hint_continue: '[c/Enter/Space] Weiter'
|
||||
hint_retry: '[r] Wiederholen'
|
||||
hint_menu: '[q] Menue'
|
||||
hint_stats: '[s] Statistik'
|
||||
hint_delete: '[x] Loeschen'
|
||||
|
||||
# Stats sidebar (during drill)
|
||||
sidebar:
|
||||
title: ' Statistik '
|
||||
wpm: 'WPM: '
|
||||
target: 'Ziel: '
|
||||
target_wpm: '%{wpm} WPM'
|
||||
accuracy: 'Genauigkeit: '
|
||||
progress: 'Fortschritt: '
|
||||
correct: 'Korrekt: '
|
||||
errors: 'Fehler: '
|
||||
time: 'Zeit: '
|
||||
last_drill: ' Letzte Lektion '
|
||||
vs_avg: ' vs Schnitt: '
|
||||
|
||||
# Statistics dashboard
|
||||
stats:
|
||||
title: ' Statistik '
|
||||
empty: 'Noch keine Lektionen abgeschlossen. Fang an zu tippen!'
|
||||
tab_dashboard: '[1] Dashboard'
|
||||
tab_history: '[2] Verlauf'
|
||||
tab_activity: '[3] Aktivitaet'
|
||||
tab_accuracy: '[4] Genauigkeit'
|
||||
tab_timing: '[5] Timing'
|
||||
tab_ngrams: '[6] N-Gramme'
|
||||
hint_back: '[ESC] Zurueck'
|
||||
hint_next_tab: '[Tab] Naechster Tab'
|
||||
hint_switch_tab: '[1-6] Tab wechseln'
|
||||
hint_navigate: '[j/k] Navigieren'
|
||||
hint_page: '[PgUp/PgDn] Seite'
|
||||
hint_delete: '[x] Loeschen'
|
||||
summary_title: ' Zusammenfassung '
|
||||
drills: ' Lektionen: '
|
||||
avg_wpm: ' Schnitt WPM: '
|
||||
best_wpm: ' Bestes WPM: '
|
||||
accuracy_label: ' Genauigkeit: '
|
||||
total_time: ' Gesamtzeit: '
|
||||
wpm_chart_title: ' WPM pro Lektion (Letzte 20, Ziel: %{target}) '
|
||||
accuracy_chart_title: ' Genauigkeit %% (Letzte 50 Lektionen) '
|
||||
chart_drill: 'Lektion #'
|
||||
chart_accuracy_pct: 'Genauigkeit %%'
|
||||
sessions_title: ' Letzte Sitzungen '
|
||||
session_header: ' # WPM Roh Gen%% Zeit Datum/Uhrzeit Modus Gewertet Teilw.'
|
||||
session_separator: ' ─────────────────────────────────────────────────────────────────────'
|
||||
delete_confirm: 'Sitzung #%{idx} loeschen? (y/n)'
|
||||
confirm_title: ' Bestaetigen '
|
||||
yes: 'ja'
|
||||
no: 'nein'
|
||||
keyboard_accuracy_title: ' Tastatur-Genauigkeit %% '
|
||||
keyboard_timing_title: ' Tastatur-Timing (ms) '
|
||||
slowest_keys_title: ' Langsamste Tasten (ms) '
|
||||
fastest_keys_title: ' Schnellste Tasten (ms) '
|
||||
worst_accuracy_title: ' Schlechteste Genauigkeit (%%) '
|
||||
best_accuracy_title: ' Beste Genauigkeit (%%) '
|
||||
not_enough_data: ' Nicht genug Daten'
|
||||
streaks_title: ' Serien '
|
||||
current_streak: ' Aktuell: '
|
||||
best_streak: ' Beste: '
|
||||
active_days: ' Aktive Tage: '
|
||||
top_days_none: ' Top-Tage: keine'
|
||||
top_days: ' Top-Tage: %{days}'
|
||||
wpm_label: ' WPM: %{avg}/%{target} (%{pct}%%)'
|
||||
acc_label: ' Gen: %{pct}%%'
|
||||
keys_label: ' Tasten: %{unlocked}/%{total} (%{mastered} gemeistert)'
|
||||
ngram_empty: 'Schliesse einige adaptive Lektionen ab, um N-Gramm-Daten zu sehen'
|
||||
ngram_header_speed_narrow: ' Bgrm Tempo Erw. Anom%'
|
||||
ngram_header_error_narrow: ' Bgrm Feh Stp Rate Erw Anom%'
|
||||
ngram_header_speed: ' Bigramm Tempo Erwartet Stichpr. Anom%'
|
||||
ngram_header_error: ' Bigramm Fehler Stichpr. Rate Erwartet Anom%'
|
||||
focus_title: ' Aktiver Fokus '
|
||||
focus_char_label: ' Fokus: '
|
||||
focus_bigram_value: 'Bigramm %{label}'
|
||||
focus_plus: ' + '
|
||||
anomaly_error: 'Fehler'
|
||||
anomaly_speed: 'Tempo'
|
||||
focus_detail_both: ' Zeichen ''%{ch}'': schwaechste Taste | Bigramm %{label}: %{type}-Anomalie %{pct}%%'
|
||||
focus_detail_char_only: ' Zeichen ''%{ch}'': schwaechste Taste, keine bestaetigten Bigramm-Anomalien'
|
||||
focus_detail_bigram_only: ' (%{type}-Anomalie: %{pct}%%)'
|
||||
focus_empty: ' Schliesse einige adaptive Lektionen ab, um Fokusdaten zu sehen'
|
||||
error_anomalies_title: ' Fehler-Anomalien (%{count}) '
|
||||
no_error_anomalies: ' Keine Fehler-Anomalien erkannt'
|
||||
speed_anomalies_title: ' Tempo-Anomalien (%{count}) '
|
||||
no_speed_anomalies: ' Keine Tempo-Anomalien erkannt'
|
||||
scope_label_prefix: ' '
|
||||
bi_label: ' | Bi: %{count}'
|
||||
tri_label: ' | Tri: %{count}'
|
||||
hes_label: ' | Hes: >%{ms}ms'
|
||||
gain_label: ' | Gewinn: %{value}'
|
||||
gain_interval: ' (alle 50)'
|
||||
focus_char_value: 'Zeichen ''%{ch}'''
|
||||
|
||||
# Activity heatmap
|
||||
heatmap:
|
||||
title: ' Taegliche Aktivitaet (Sitzungen pro Tag) '
|
||||
jan: 'Jan'
|
||||
feb: 'Feb'
|
||||
mar: 'Mär'
|
||||
apr: 'Apr'
|
||||
may: 'Mai'
|
||||
jun: 'Jun'
|
||||
jul: 'Jul'
|
||||
aug: 'Aug'
|
||||
sep: 'Sep'
|
||||
oct: 'Okt'
|
||||
nov: 'Nov'
|
||||
dec: 'Dez'
|
||||
|
||||
# Chart
|
||||
chart:
|
||||
wpm_over_time: ' WPM im Zeitverlauf '
|
||||
drill_number: 'Lektion #'
|
||||
|
||||
# Settings
|
||||
settings:
|
||||
title: ' Einstellungen '
|
||||
subtitle: 'Pfeiltasten zum Navigieren, Enter/Rechts zum Aendern, ESC zum Speichern'
|
||||
target_wpm: 'Ziel-WPM'
|
||||
theme: 'Farbschema'
|
||||
word_count: 'Wortanzahl'
|
||||
ui_language: 'UI-Sprache'
|
||||
dictionary_language: 'Woerterbuchsprache'
|
||||
keyboard_layout: 'Tastaturlayout'
|
||||
code_language: 'Codesprache'
|
||||
code_downloads: 'Code-Downloads'
|
||||
on: 'An'
|
||||
off: 'Aus'
|
||||
code_download_dir: 'Code-Downloadverz.'
|
||||
snippets_per_repo: 'Schnipsel pro Repo'
|
||||
unlimited: 'Unbegrenzt'
|
||||
download_code_now: 'Code jetzt laden'
|
||||
run_downloader: 'Download starten'
|
||||
passage_downloads: 'Text-Downloads'
|
||||
passage_download_dir: 'Text-Downloadverz.'
|
||||
paragraphs_per_book: 'Absaetze pro Buch'
|
||||
whole_book: 'Ganzes Buch'
|
||||
download_passages_now: 'Texte jetzt laden'
|
||||
export_path: 'Exportpfad'
|
||||
export_data: 'Daten exportieren'
|
||||
export_now: 'Jetzt exportieren'
|
||||
import_path: 'Importpfad'
|
||||
import_data: 'Daten importieren'
|
||||
import_now: 'Jetzt importieren'
|
||||
hint_save_back: '[ESC] Speichern & zurueck'
|
||||
hint_change_value: '[Enter/Pfeile] Wert aendern'
|
||||
hint_edit_path: '[Enter auf Pfad] Bearbeiten'
|
||||
hint_move: '[←→] Bewegen'
|
||||
hint_tab_complete: '[Tab] Vervollstaendigen (am Ende)'
|
||||
hint_confirm: '[Enter] Bestaetigen'
|
||||
hint_cancel: '[Esc] Abbrechen'
|
||||
success_title: ' Erfolg '
|
||||
error_title: ' Fehler '
|
||||
press_any_key: 'Beliebige Taste druecken'
|
||||
file_exists_title: ' Datei existiert '
|
||||
file_exists: 'An diesem Pfad existiert bereits eine Datei.'
|
||||
overwrite_rename: '[d] Ueberschreiben [r] Umbenennen [Esc] Abbrechen'
|
||||
erase_warning: 'Dies wird Ihre aktuellen Daten loeschen.'
|
||||
export_first: 'Exportieren Sie zuerst, wenn Sie sie behalten moechten.'
|
||||
proceed_yn: 'Fortfahren? (y/n)'
|
||||
confirm_import_title: ' Import bestaetigen '
|
||||
|
||||
# Selection screens
|
||||
select:
|
||||
dictionary_language_title: ' Woerterbuchsprache waehlen '
|
||||
keyboard_layout_title: ' Tastaturlayout waehlen '
|
||||
code_language_title: ' Codesprache waehlen '
|
||||
passage_source_title: ' Textquelle waehlen '
|
||||
ui_language_title: ' UI-Sprache waehlen '
|
||||
more_above: '... %{count} weitere oben ...'
|
||||
more_below: '... %{count} weitere unten ...'
|
||||
current: ' (aktuell)'
|
||||
disabled: ' (deaktiviert)'
|
||||
enabled_default: ' (aktiviert, Standard: %{layout})'
|
||||
enabled: ' (aktiviert)'
|
||||
disabled_blocked: ' (deaktiviert: gesperrt)'
|
||||
built_in: ' (eingebaut)'
|
||||
cached: ' (gespeichert)'
|
||||
disabled_download: ' (deaktiviert: Download erforderlich)'
|
||||
download_required: ' (Download erforderlich)'
|
||||
hint_navigate: '[Auf/Ab/BildAuf/BildAb] Navigieren'
|
||||
hint_confirm: '[Enter] Bestaetigen'
|
||||
hint_back: '[ESC] Zurueck'
|
||||
language_resets_layout: 'Die Sprachauswahl setzt das Tastaturlayout auf den Standard der Sprache zurueck.'
|
||||
layout_no_language_change: 'Layoutaenderungen aendern nicht die Woerterbuchsprache.'
|
||||
disabled_network_notice: 'Einige Sprachen sind deaktiviert: Netzwerk-Downloads in Intro/Einstellungen aktivieren.'
|
||||
disabled_sources_notice: 'Einige Quellen sind deaktiviert: Netzwerk-Downloads in Intro/Einstellungen aktivieren.'
|
||||
passage_all: 'Alle (Eingebaut + alle Buecher)'
|
||||
passage_builtin: 'Nur eingebaute Passagen'
|
||||
passage_book_prefix: 'Buch: %{title}'
|
||||
|
||||
# Progress
|
||||
progress:
|
||||
overall_key_progress: 'Gesamter Tastenfortschritt'
|
||||
unlocked_mastered: '%{unlocked}/%{total} freigeschaltet (%{mastered} gemeistert)'
|
||||
|
||||
# Skill tree
|
||||
skill_tree:
|
||||
title: ' Faehigkeitenbaum '
|
||||
locked: 'Gesperrt'
|
||||
unlocked: 'freigeschaltet'
|
||||
mastered: 'gemeistert'
|
||||
in_progress: 'in Bearbeitung'
|
||||
complete: 'abgeschlossen'
|
||||
locked_status: 'gesperrt'
|
||||
locked_notice: '%{count} Grundbuchstaben abschliessen, um Zweige freizuschalten'
|
||||
branches_separator: 'Zweige (verfuegbar nach %{count} Grundbuchstaben)'
|
||||
unlocked_letters: '%{unlocked}/%{total} Buchstaben freigeschaltet'
|
||||
level: 'Stufe %{current}/%{total}'
|
||||
level_zero: 'Stufe 0/%{total}'
|
||||
in_focus: ' im Fokus'
|
||||
hint_navigate: '[↑↓/jk] Navigieren'
|
||||
hint_scroll: '[BildAuf/BildAb oder Strg+U/Strg+D] Scrollen'
|
||||
hint_back: '[q] Zurueck'
|
||||
hint_unlock: '[Enter] Freischalten'
|
||||
hint_start_drill: '[Enter] Lektion starten'
|
||||
unlock_msg_1: 'Nach dem Freischalten werden freigeschaltete Tasten dieses Zweigs in die adaptive Lektion eingemischt.'
|
||||
unlock_msg_2: 'Um nur diesen Zweig zu ueben, starte eine Lektion direkt aus diesem Zweig im Faehigkeitenbaum.'
|
||||
confirm_unlock: '%{branch} freischalten?'
|
||||
confirm_yn: '[y] Freischalten [n/ESC] Abbrechen'
|
||||
lvl_prefix: 'Lvl'
|
||||
branch_primary_letters: 'Grundbuchstaben'
|
||||
branch_capital_letters: 'Grossbuchstaben'
|
||||
branch_numbers: 'Zahlen 0-9'
|
||||
branch_prose_punctuation: 'Interpunktion'
|
||||
branch_whitespace: 'Leerzeichen'
|
||||
branch_code_symbols: 'Code-Symbole'
|
||||
level_frequency_order: 'Haeufigkeitsfolge'
|
||||
level_common_sentence_capitals: 'Haeufige Satzanfaenge'
|
||||
level_name_capitals: 'Namensgrossbuchst.'
|
||||
level_remaining_capitals: 'Restl. Grossbuchst.'
|
||||
level_common_digits: 'Haeufige Ziffern'
|
||||
level_all_digits: 'Alle Ziffern'
|
||||
level_essential: 'Grundlegend'
|
||||
level_common: 'Haeufig'
|
||||
level_expressive: 'Ausdruck'
|
||||
level_enter_return: 'Enter/Return'
|
||||
level_tab_indent: 'Tab/Einrueckung'
|
||||
level_arithmetic_assignment: 'Arithmetik & Zuweisung'
|
||||
level_grouping: 'Gruppierung'
|
||||
level_logic_reference: 'Logik & Referenz'
|
||||
level_special: 'Spezial'
|
||||
|
||||
# Milestones
|
||||
milestones:
|
||||
unlock_title: ' Taste freigeschaltet! '
|
||||
mastery_title: ' Taste gemeistert! '
|
||||
branches_title: ' Neue Faehigkeitenzweige verfuegbar! '
|
||||
branch_complete_title: ' Zweig abgeschlossen! '
|
||||
all_unlocked_title: ' Alle Tasten freigeschaltet! '
|
||||
all_mastered_title: ' Volle Tastaturbeherrschung! '
|
||||
unlocked: 'freigeschaltet'
|
||||
mastered: 'gemeistert'
|
||||
use_finger: 'Benutze deinen %{finger}'
|
||||
hold_right_shift: 'Rechte Umschalttaste halten (rechter kleiner Finger)'
|
||||
hold_left_shift: 'Linke Umschalttaste halten (linker kleiner Finger)'
|
||||
congratulations_all_letters: 'Glueckwunsch! Du hast alle %{count} Grundbuchstaben gemeistert'
|
||||
new_branches_available: 'Neue Faehigkeitenzweige sind jetzt verfuegbar:'
|
||||
visit_skill_tree: 'Besuche den Faehigkeitenbaum, um einen neuen Zweig'
|
||||
and_start_training: 'freizuschalten und zu trainieren!'
|
||||
open_skill_tree: 'Druecke [t], um den Faehigkeitenbaum zu oeffnen'
|
||||
branch_complete_msg: 'Du hast den Zweig %{branch} abgeschlossen!'
|
||||
all_levels_mastered: 'Alle %{count} Stufen gemeistert.'
|
||||
all_keys_confident: 'Jede Taste in diesem Zweig hat volle Sicherheit.'
|
||||
all_unlocked_msg: 'Du hast jede Taste auf der Tastatur freigeschaltet!'
|
||||
all_unlocked_desc: 'Jedes Zeichen, Symbol und jeder Modifikator ist jetzt in deinen Lektionen verfuegbar.'
|
||||
keep_practicing_mastery: 'Uebe weiter, um Meisterschaft aufzubauen — wenn jede Taste volle'
|
||||
confidence_complete: 'Sicherheit erreicht hat, hast du die volle Tastaturbeherrschung!'
|
||||
all_mastered_msg: 'Glueckwunsch — du hast volle Tastaturbeherrschung erreicht!'
|
||||
all_mastered_desc: 'Jede Taste auf der Tastatur hat maximale Sicherheit.'
|
||||
mastery_takes_practice: 'Meisterschaft ist kein Ziel — sie erfordert staendiges Ueben.'
|
||||
keep_drilling: 'Uebe weiter, um dein Koennen zu erhalten.'
|
||||
hint_skill_tree_continue: '[t] Faehigkeitenbaum [Andere Taste] Weiter'
|
||||
hint_any_key: 'Beliebige Taste zum Fortfahren'
|
||||
input_blocked: 'Eingabe voruebergehend blockiert (%{ms}ms verbleibend)'
|
||||
unlock_msg_1: 'Gut gemacht! Baue deine Tippfaehigkeiten weiter aus.'
|
||||
unlock_msg_2: 'Eine weitere Taste in deinem Arsenal!'
|
||||
unlock_msg_3: 'Deine Tastatur waechst! Weiter so.'
|
||||
unlock_msg_4: 'Einen Schritt naeher an voller Tastaturbeherrschung!'
|
||||
mastery_msg_1: 'Diese Taste hat jetzt volle Sicherheit!'
|
||||
mastery_msg_2: 'Diese Taste sitzt perfekt!'
|
||||
mastery_msg_3: 'Muskelgedaechtnis verankert!'
|
||||
mastery_msg_4: 'Eine weitere Taste bezwungen!'
|
||||
|
||||
# Keyboard explorer
|
||||
keyboard:
|
||||
title: ' Tastatur '
|
||||
subtitle: 'Druecke eine Taste oder klicke darauf'
|
||||
hint_navigate: '[←→↑↓/hjkl/Tab] Navigieren'
|
||||
hint_back: '[q/ESC] Zurueck'
|
||||
key_label: 'Taste: '
|
||||
finger_label: 'Finger: '
|
||||
hand_left: 'Links'
|
||||
hand_right: 'Rechts'
|
||||
finger_index: 'Zeigefinger'
|
||||
finger_middle: 'Mittelfinger'
|
||||
finger_ring: 'Ringfinger'
|
||||
finger_pinky: 'Kleiner Finger'
|
||||
finger_thumb: 'Daumen'
|
||||
overall_accuracy: ' Gesamtgenauigkeit: %{correct}/%{total} (%{pct}%%)'
|
||||
ranked_accuracy: ' Gewertete Genauigkeit: %{correct}/%{total} (%{pct}%%)'
|
||||
confidence: 'Sicherheit: '
|
||||
no_data: 'Noch keine Daten'
|
||||
no_data_short: 'Keine Daten'
|
||||
key_details: ' Tastendetails '
|
||||
key_details_char: ' Tastendetails: ''%{ch}'' '
|
||||
key_details_name: ' Tastendetails: %{name} '
|
||||
press_key_hint: 'Druecke eine Taste fuer Details'
|
||||
shift_label: 'Umschalt: '
|
||||
shift_no: 'Nein'
|
||||
overall_avg_time: 'Gesamt Schnittzeit: '
|
||||
overall_best_time: 'Gesamt Bestzeit: '
|
||||
overall_samples: 'Gesamt Stichproben: '
|
||||
overall_accuracy_label: 'Gesamt Genauigkeit: '
|
||||
branch_label: 'Zweig: '
|
||||
level_label: 'Stufe: '
|
||||
built_in_key: 'Eingebaute Taste'
|
||||
unlocked_label: 'Freigeschaltet: '
|
||||
yes: 'Ja'
|
||||
no: 'Nein'
|
||||
in_focus_label: 'Im Fokus?: '
|
||||
mastery_label: 'Meisterschaft: '
|
||||
mastery_locked: 'Gesperrt'
|
||||
ranked_avg_time: 'Gewertete Schnittzeit: '
|
||||
ranked_best_time: 'Gewertete Bestzeit: '
|
||||
ranked_samples: 'Gewertete Stichproben: '
|
||||
ranked_accuracy_label: 'Gewertete Genauigkeit: '
|
||||
|
||||
# Intro dialogs
|
||||
intro:
|
||||
passage_title: ' Textpassagen-Download Einrichtung '
|
||||
code_title: ' Code-Download Einrichtung '
|
||||
enable_downloads: 'Netzwerk-Downloads aktivieren'
|
||||
download_dir: 'Download-Verzeichnis'
|
||||
paragraphs_per_book: 'Absaetze pro Buch (0 = ganz)'
|
||||
whole_book: 'ganzes Buch'
|
||||
snippets_per_repo: 'Schnipsel pro Repo (0 = unbegrenzt)'
|
||||
unlimited: 'unbegrenzt'
|
||||
start_passage_drill: 'Textpassagen-Lektion starten'
|
||||
start_code_drill: 'Code-Lektion starten'
|
||||
confirm: 'Bestaetigen'
|
||||
hint_navigate: '[Auf/Ab] Navigieren'
|
||||
hint_adjust: '[Links/Rechts] Anpassen'
|
||||
hint_edit: '[Tippen/Backspace] Bearbeiten'
|
||||
hint_confirm: '[Enter] Bestaetigen'
|
||||
hint_cancel: '[ESC] Abbrechen'
|
||||
preparing_download: 'Download wird vorbereitet...'
|
||||
download_passage_title: ' Textquelle wird heruntergeladen '
|
||||
download_code_title: ' Code-Quelle wird heruntergeladen '
|
||||
book_label: ' Buch: %{name}'
|
||||
repo_label: ' Repo: %{name}'
|
||||
progress_bytes: '[%{name}] %{downloaded}/%{total} Bytes'
|
||||
downloaded_bytes: 'Heruntergeladen: %{bytes} Bytes'
|
||||
downloading_book_progress: 'Aktuelles Buch wird geladen: [%{bar}] %{downloaded}/%{total} Bytes'
|
||||
downloading_book_bytes: 'Aktuelles Buch wird geladen: %{bytes} Bytes'
|
||||
downloading_code_progress: 'Wird heruntergeladen: [%{bar}] %{downloaded}/%{total} Bytes'
|
||||
downloading_code_bytes: 'Wird heruntergeladen: %{bytes} Bytes'
|
||||
current_book: 'Aktuell: %{name} (Buch %{done}/%{total})'
|
||||
current_repo: 'Aktuell: %{name} (Repo %{done}/%{total})'
|
||||
passage_instructions_1: 'keydr kann Textpassagen von Project Gutenberg zum Tippueben herunterladen.'
|
||||
passage_instructions_2: 'Buecher werden einmal heruntergeladen und lokal gespeichert.'
|
||||
passage_instructions_3: 'Konfiguriere die Download-Einstellungen unten und starte eine Textpassagen-Lektion.'
|
||||
code_instructions_1: 'keydr kann Open-Source-Code von GitHub zum Tippueben herunterladen.'
|
||||
code_instructions_2: 'Code wird einmal heruntergeladen und lokal gespeichert.'
|
||||
code_instructions_3: 'Konfiguriere die Download-Einstellungen unten und starte eine Code-Lektion.'
|
||||
|
||||
# Status messages (from app.rs)
|
||||
status:
|
||||
recovery_files: 'Wiederherstellungsdateien von unterbrochenem Import gefunden. Daten koennten inkonsistent sein — erneuter Import empfohlen.'
|
||||
dir_not_exist: 'Verzeichnis existiert nicht: %{path}'
|
||||
no_data_store: 'Kein Datenspeicher verfuegbar'
|
||||
serialization_error: 'Serialisierungsfehler: %{error}'
|
||||
exported_to: 'Exportiert nach %{path}'
|
||||
export_failed: 'Export fehlgeschlagen: %{error}'
|
||||
could_not_read: 'Datei konnte nicht gelesen werden: %{error}'
|
||||
invalid_export: 'Ungueltige Exportdatei: %{error}'
|
||||
unsupported_version: 'Nicht unterstuetzte Exportversion: %{got} (erwartet %{expected})'
|
||||
import_failed: 'Import fehlgeschlagen: %{error}'
|
||||
imported_theme_fallback: 'Erfolgreich importiert (Farbschema ''%{theme}'' nicht gefunden, Standard wird verwendet)'
|
||||
imported_success: 'Erfolgreich importiert'
|
||||
adaptive_unavailable: 'Adaptiver gewerteter Modus nicht verfuegbar: %{error}'
|
||||
switched_to: 'Gewechselt zu %{name}'
|
||||
layout_changed: 'Layout geaendert zu %{name}'
|
||||
|
||||
# Errors (for UI boundary translation)
|
||||
errors:
|
||||
unknown_language: 'Unbekannte Sprache: %{key}'
|
||||
unknown_layout: 'Unbekanntes Tastaturlayout: %{key}'
|
||||
unsupported_pair: 'Nicht unterstuetztes Sprach-/Layout-Paar: %{language} + %{layout}'
|
||||
language_blocked: 'Sprache durch Unterstuetzungsstufe gesperrt: %{key}'
|
||||
|
||||
# Common
|
||||
common:
|
||||
wpm: 'WPM'
|
||||
cpm: 'ZPM'
|
||||
back: 'Zurueck'
|
||||
457
locales/en.yml
Normal file
457
locales/en.yml
Normal file
@@ -0,0 +1,457 @@
|
||||
# Main menu
|
||||
menu:
|
||||
subtitle: 'Terminal Typing Tutor'
|
||||
adaptive_drill: 'Adaptive Drill'
|
||||
adaptive_drill_desc: 'Phonetic words with adaptive letter unlocking'
|
||||
code_drill: 'Code Drill'
|
||||
code_drill_desc: 'Practice typing code syntax'
|
||||
passage_drill: 'Passage Drill'
|
||||
passage_drill_desc: 'Type passages from books'
|
||||
skill_tree: 'Skill Tree'
|
||||
skill_tree_desc: 'View progression branches and launch drills'
|
||||
keyboard: 'Keyboard'
|
||||
keyboard_desc: 'Explore keyboard layout and key statistics'
|
||||
statistics: 'Statistics'
|
||||
statistics_desc: 'View your typing statistics'
|
||||
settings: 'Settings'
|
||||
settings_desc: 'Configure keydr'
|
||||
day_streak: ' | %{days} day streak'
|
||||
key_progress: ' Key Progress %{unlocked}/%{total} (%{mastered} mastered) | Target %{target} WPM%{streak}'
|
||||
hint_start: '[1-3] Start'
|
||||
hint_skill_tree: '[t] Skill Tree'
|
||||
hint_keyboard: '[b] Keyboard'
|
||||
hint_stats: '[s] Stats'
|
||||
hint_settings: '[c] Settings'
|
||||
hint_quit: '[q] Quit'
|
||||
|
||||
# Drill screen
|
||||
drill:
|
||||
title: ' Drill '
|
||||
mode_adaptive: 'Adaptive'
|
||||
mode_code: 'Code (Unranked)'
|
||||
mode_passage: 'Passage (Unranked)'
|
||||
focus_char: 'Focus: ''%{ch}'''
|
||||
focus_bigram: 'Focus: "%{bigram}"'
|
||||
focus_both: 'Focus: ''%{ch}'' + "%{bigram}"'
|
||||
header_wpm: 'WPM'
|
||||
header_acc: 'Acc'
|
||||
header_err: 'Err'
|
||||
code_source: ' Code source '
|
||||
passage_source: ' Passage source '
|
||||
footer: '[ESC] End drill [Backspace] Delete'
|
||||
keys_reenabled: 'Keys re-enabled in %{ms}ms'
|
||||
hint_end: '[ESC] End drill'
|
||||
hint_backspace: '[Backspace] Delete'
|
||||
|
||||
# Dashboard / drill result
|
||||
dashboard:
|
||||
title: ' Drill Complete '
|
||||
results: 'Results'
|
||||
unranked_note_prefix: ' (Unranked'
|
||||
unranked_note_suffix: ' does not count toward skill tree)'
|
||||
speed: ' Speed: '
|
||||
accuracy_label: ' Accuracy: '
|
||||
time_label: ' Time: '
|
||||
errors_label: ' Errors: '
|
||||
correct_detail: ' (%{correct}/%{total} correct)'
|
||||
input_blocked: ' Input temporarily blocked '
|
||||
input_blocked_ms: '(%{ms}ms remaining)'
|
||||
hint_continue: '[c/Enter/Space] Continue'
|
||||
hint_retry: '[r] Retry'
|
||||
hint_menu: '[q] Menu'
|
||||
hint_stats: '[s] Stats'
|
||||
hint_delete: '[x] Delete'
|
||||
|
||||
# Stats sidebar (during drill)
|
||||
sidebar:
|
||||
title: ' Stats '
|
||||
wpm: 'WPM: '
|
||||
target: 'Target: '
|
||||
target_wpm: '%{wpm} WPM'
|
||||
accuracy: 'Accuracy: '
|
||||
progress: 'Progress: '
|
||||
correct: 'Correct: '
|
||||
errors: 'Errors: '
|
||||
time: 'Time: '
|
||||
last_drill: ' Last Drill '
|
||||
vs_avg: ' vs avg: '
|
||||
|
||||
# Statistics dashboard
|
||||
stats:
|
||||
title: ' Statistics '
|
||||
empty: 'No drills completed yet. Start typing!'
|
||||
tab_dashboard: '[1] Dashboard'
|
||||
tab_history: '[2] History'
|
||||
tab_activity: '[3] Activity'
|
||||
tab_accuracy: '[4] Accuracy'
|
||||
tab_timing: '[5] Timing'
|
||||
tab_ngrams: '[6] N-grams'
|
||||
hint_back: '[ESC] Back'
|
||||
hint_next_tab: '[Tab] Next tab'
|
||||
hint_switch_tab: '[1-6] Switch tab'
|
||||
hint_navigate: '[j/k] Navigate'
|
||||
hint_page: '[PgUp/PgDn] Page'
|
||||
hint_delete: '[x] Delete'
|
||||
summary_title: ' Summary '
|
||||
drills: ' Drills: '
|
||||
avg_wpm: ' Avg WPM: '
|
||||
best_wpm: ' Best WPM: '
|
||||
accuracy_label: ' Accuracy: '
|
||||
total_time: ' Total time: '
|
||||
wpm_chart_title: ' WPM per Drill (Last 20, Target: %{target}) '
|
||||
accuracy_chart_title: ' Accuracy %% (Last 50 Drills) '
|
||||
chart_drill: 'Drill #'
|
||||
chart_accuracy_pct: 'Accuracy %%'
|
||||
sessions_title: ' Recent Sessions '
|
||||
session_header: ' # WPM Raw Acc%% Time Date/Time Mode Ranked Partial'
|
||||
session_separator: ' ─────────────────────────────────────────────────────────────────────'
|
||||
delete_confirm: 'Delete session #%{idx}? (y/n)'
|
||||
confirm_title: ' Confirm '
|
||||
yes: 'yes'
|
||||
no: 'no'
|
||||
keyboard_accuracy_title: ' Keyboard Accuracy %% '
|
||||
keyboard_timing_title: ' Keyboard Timing (ms) '
|
||||
slowest_keys_title: ' Slowest Keys (ms) '
|
||||
fastest_keys_title: ' Fastest Keys (ms) '
|
||||
worst_accuracy_title: ' Worst Accuracy (%%) '
|
||||
best_accuracy_title: ' Best Accuracy (%%) '
|
||||
not_enough_data: ' Not enough data'
|
||||
streaks_title: ' Streaks '
|
||||
current_streak: ' Current: '
|
||||
best_streak: ' Best: '
|
||||
active_days: ' Active Days: '
|
||||
top_days_none: ' Top Days: none'
|
||||
top_days: ' Top Days: %{days}'
|
||||
wpm_label: ' WPM: %{avg}/%{target} (%{pct}%%)'
|
||||
acc_label: ' Acc: %{pct}%%'
|
||||
keys_label: ' Keys: %{unlocked}/%{total} (%{mastered} mastered)'
|
||||
ngram_empty: 'Complete some adaptive drills to see n-gram data'
|
||||
ngram_header_speed_narrow: ' Bgrm Speed Expct Anom%'
|
||||
ngram_header_error_narrow: ' Bgrm Err Smp Rate Exp Anom%'
|
||||
ngram_header_speed: ' Bigram Speed Expect Samples Anom%'
|
||||
ngram_header_error: ' Bigram Errors Samples Rate Expect Anom%'
|
||||
focus_title: ' Active Focus '
|
||||
focus_char_label: ' Focus: '
|
||||
focus_bigram_value: 'Bigram %{label}'
|
||||
focus_plus: ' + '
|
||||
anomaly_error: 'error'
|
||||
anomaly_speed: 'speed'
|
||||
focus_detail_both: ' Char ''%{ch}'': weakest key | Bigram %{label}: %{type} anomaly %{pct}%%'
|
||||
focus_detail_char_only: ' Char ''%{ch}'': weakest key, no confirmed bigram anomalies'
|
||||
focus_detail_bigram_only: ' (%{type} anomaly: %{pct}%%)'
|
||||
focus_empty: ' Complete some adaptive drills to see focus data'
|
||||
error_anomalies_title: ' Error Anomalies (%{count}) '
|
||||
no_error_anomalies: ' No error anomalies detected'
|
||||
speed_anomalies_title: ' Speed Anomalies (%{count}) '
|
||||
no_speed_anomalies: ' No speed anomalies detected'
|
||||
scope_label_prefix: ' '
|
||||
bi_label: ' | Bi: %{count}'
|
||||
tri_label: ' | Tri: %{count}'
|
||||
hes_label: ' | Hes: >%{ms}ms'
|
||||
gain_label: ' | Gain: %{value}'
|
||||
gain_interval: ' (every 50)'
|
||||
focus_char_value: 'Char ''%{ch}'''
|
||||
|
||||
# Activity heatmap
|
||||
heatmap:
|
||||
title: ' Daily Activity (Sessions per Day) '
|
||||
jan: 'Jan'
|
||||
feb: 'Feb'
|
||||
mar: 'Mar'
|
||||
apr: 'Apr'
|
||||
may: 'May'
|
||||
jun: 'Jun'
|
||||
jul: 'Jul'
|
||||
aug: 'Aug'
|
||||
sep: 'Sep'
|
||||
oct: 'Oct'
|
||||
nov: 'Nov'
|
||||
dec: 'Dec'
|
||||
|
||||
# Chart
|
||||
chart:
|
||||
wpm_over_time: ' WPM Over Time '
|
||||
drill_number: 'Drill #'
|
||||
|
||||
# Settings
|
||||
settings:
|
||||
title: ' Settings '
|
||||
subtitle: 'Use arrows to navigate, Enter/Right to change, ESC to save & exit'
|
||||
target_wpm: 'Target WPM'
|
||||
theme: 'Theme'
|
||||
word_count: 'Word Count'
|
||||
ui_language: 'UI Language'
|
||||
dictionary_language: 'Dictionary Language'
|
||||
keyboard_layout: 'Keyboard Layout'
|
||||
code_language: 'Code Language'
|
||||
code_downloads: 'Code Downloads'
|
||||
on: 'On'
|
||||
off: 'Off'
|
||||
code_download_dir: 'Code Download Dir'
|
||||
snippets_per_repo: 'Snippets per Repo'
|
||||
unlimited: 'Unlimited'
|
||||
download_code_now: 'Download Code Now'
|
||||
run_downloader: 'Run downloader'
|
||||
passage_downloads: 'Passage Downloads'
|
||||
passage_download_dir: 'Passage Download Dir'
|
||||
paragraphs_per_book: 'Paragraphs per Book'
|
||||
whole_book: 'Whole book'
|
||||
download_passages_now: 'Download Passages Now'
|
||||
export_path: 'Export Path'
|
||||
export_data: 'Export Data'
|
||||
export_now: 'Export now'
|
||||
import_path: 'Import Path'
|
||||
import_data: 'Import Data'
|
||||
import_now: 'Import now'
|
||||
hint_save_back: '[ESC] Save & back'
|
||||
hint_change_value: '[Enter/arrows] Change value'
|
||||
hint_edit_path: '[Enter on path] Edit'
|
||||
hint_move: '[←→] Move'
|
||||
hint_tab_complete: '[Tab] Complete (at end)'
|
||||
hint_confirm: '[Enter] Confirm'
|
||||
hint_cancel: '[Esc] Cancel'
|
||||
success_title: ' Success '
|
||||
error_title: ' Error '
|
||||
press_any_key: 'Press any key'
|
||||
file_exists_title: ' File Exists '
|
||||
file_exists: 'A file already exists at this path.'
|
||||
overwrite_rename: '[d] Overwrite [r] Rename [Esc] Cancel'
|
||||
erase_warning: 'This will erase your current data.'
|
||||
export_first: 'Export first if you want to keep it.'
|
||||
proceed_yn: 'Proceed? (y/n)'
|
||||
confirm_import_title: ' Confirm Import '
|
||||
|
||||
# Selection screens
|
||||
select:
|
||||
dictionary_language_title: ' Select Dictionary Language '
|
||||
keyboard_layout_title: ' Select Keyboard Layout '
|
||||
code_language_title: ' Select Code Language '
|
||||
passage_source_title: ' Select Passage Source '
|
||||
ui_language_title: ' Select UI Language '
|
||||
more_above: '... %{count} more above ...'
|
||||
more_below: '... %{count} more below ...'
|
||||
current: ' (current)'
|
||||
disabled: ' (disabled)'
|
||||
enabled_default: ' (enabled, default: %{layout})'
|
||||
enabled: ' (enabled)'
|
||||
disabled_blocked: ' (disabled: blocked)'
|
||||
built_in: ' (built-in)'
|
||||
cached: ' (cached)'
|
||||
disabled_download: ' (disabled: download required)'
|
||||
download_required: ' (download required)'
|
||||
hint_navigate: '[Up/Down/PgUp/PgDn] Navigate'
|
||||
hint_confirm: '[Enter] Confirm'
|
||||
hint_back: '[ESC] Back'
|
||||
language_resets_layout: 'Selecting a language resets keyboard layout to that language''s default.'
|
||||
layout_no_language_change: 'Layout changes do not change dictionary language.'
|
||||
disabled_network_notice: 'Some languages are disabled: enable network downloads in intro/settings.'
|
||||
disabled_sources_notice: 'Some sources are disabled: enable network downloads in intro/settings.'
|
||||
passage_all: 'All (Built-in + all books)'
|
||||
passage_builtin: 'Built-in passages only'
|
||||
passage_book_prefix: 'Book: %{title}'
|
||||
|
||||
# Progress
|
||||
progress:
|
||||
overall_key_progress: 'Overall Key Progress'
|
||||
unlocked_mastered: '%{unlocked}/%{total} unlocked (%{mastered} mastered)'
|
||||
|
||||
# Skill tree
|
||||
skill_tree:
|
||||
title: ' Skill Tree '
|
||||
locked: 'Locked'
|
||||
unlocked: 'unlocked'
|
||||
mastered: 'mastered'
|
||||
in_progress: 'in progress'
|
||||
complete: 'complete'
|
||||
locked_status: 'locked'
|
||||
locked_notice: 'Complete %{count} primary letters to unlock branches'
|
||||
branches_separator: 'Branches (available after %{count} primary letters)'
|
||||
unlocked_letters: 'Unlocked %{unlocked}/%{total} letters'
|
||||
level: 'Level %{current}/%{total}'
|
||||
level_zero: 'Level 0/%{total}'
|
||||
in_focus: ' in focus'
|
||||
hint_navigate: '[↑↓/jk] Navigate'
|
||||
hint_scroll: '[PgUp/PgDn or Ctrl+U/Ctrl+D] Scroll'
|
||||
hint_back: '[q] Back'
|
||||
hint_unlock: '[Enter] Unlock'
|
||||
hint_start_drill: '[Enter] Start Drill'
|
||||
unlock_msg_1: 'Once unlocked, the default adaptive drill will mix in keys in this branch that are unlocked.'
|
||||
unlock_msg_2: 'If you want to focus only on this branch, launch a drill directly from this branch in the Skill Tree.'
|
||||
confirm_unlock: 'Unlock %{branch}?'
|
||||
confirm_yn: '[y] Unlock [n/ESC] Cancel'
|
||||
lvl_prefix: 'Lvl'
|
||||
branch_primary_letters: 'Primary Letters'
|
||||
branch_capital_letters: 'Capital Letters'
|
||||
branch_numbers: 'Numbers 0-9'
|
||||
branch_prose_punctuation: 'Prose Punctuation'
|
||||
branch_whitespace: 'Whitespace'
|
||||
branch_code_symbols: 'Code Symbols'
|
||||
level_frequency_order: 'Frequency Order'
|
||||
level_common_sentence_capitals: 'Common Sentence Capitals'
|
||||
level_name_capitals: 'Name Capitals'
|
||||
level_remaining_capitals: 'Remaining Capitals'
|
||||
level_common_digits: 'Common Digits'
|
||||
level_all_digits: 'All Digits'
|
||||
level_essential: 'Essential'
|
||||
level_common: 'Common'
|
||||
level_expressive: 'Expressive'
|
||||
level_enter_return: 'Enter/Return'
|
||||
level_tab_indent: 'Tab/Indent'
|
||||
level_arithmetic_assignment: 'Arithmetic & Assignment'
|
||||
level_grouping: 'Grouping'
|
||||
level_logic_reference: 'Logic & Reference'
|
||||
level_special: 'Special'
|
||||
|
||||
# Milestones
|
||||
milestones:
|
||||
unlock_title: ' Key Unlocked! '
|
||||
mastery_title: ' Key Mastered! '
|
||||
branches_title: ' New Skill Branches Available! '
|
||||
branch_complete_title: ' Branch Complete! '
|
||||
all_unlocked_title: ' Every Key Unlocked! '
|
||||
all_mastered_title: ' Full Keyboard Mastery! '
|
||||
unlocked: 'unlocked'
|
||||
mastered: 'mastered'
|
||||
use_finger: 'Use your %{finger}'
|
||||
hold_right_shift: 'Hold Right Shift (right pinky)'
|
||||
hold_left_shift: 'Hold Left Shift (left pinky)'
|
||||
congratulations_all_letters: 'Congratulations! You''ve mastered all %{count} primary letters'
|
||||
new_branches_available: 'New skill branches are now available:'
|
||||
visit_skill_tree: 'Visit the Skill Tree to unlock a new branch'
|
||||
and_start_training: 'and start training!'
|
||||
open_skill_tree: 'Press [t] to open the Skill Tree now'
|
||||
branch_complete_msg: 'You''ve completed the %{branch} branch!'
|
||||
all_levels_mastered: 'All %{count} levels mastered.'
|
||||
all_keys_confident: 'Every key in this branch is at full confidence.'
|
||||
all_unlocked_msg: 'You''ve unlocked every key on the keyboard!'
|
||||
all_unlocked_desc: 'Every character, symbol, and modifier is now available in your drills.'
|
||||
keep_practicing_mastery: 'Keep practicing to build mastery — once every key reaches full'
|
||||
confidence_complete: 'confidence, you''ll have achieved complete keyboard mastery!'
|
||||
all_mastered_msg: 'Congratulations — you''ve reached full keyboard mastery!'
|
||||
all_mastered_desc: 'Every key on the keyboard is at maximum confidence.'
|
||||
mastery_takes_practice: 'Mastery is not a destination — it takes ongoing practice.'
|
||||
keep_drilling: 'Keep drilling to maintain your edge.'
|
||||
hint_skill_tree_continue: '[t] Open Skill Tree [Any other key] Continue'
|
||||
hint_any_key: 'Press any key to continue'
|
||||
input_blocked: 'Input temporarily blocked (%{ms}ms remaining)'
|
||||
unlock_msg_1: 'Nice work! Keep building your typing skills.'
|
||||
unlock_msg_2: 'Another key added to your arsenal!'
|
||||
unlock_msg_3: 'Your keyboard is growing! Keep it up.'
|
||||
unlock_msg_4: 'One step closer to full keyboard mastery!'
|
||||
mastery_msg_1: 'This key is now at full confidence!'
|
||||
mastery_msg_2: 'You''ve got this key down pat!'
|
||||
mastery_msg_3: 'Muscle memory locked in!'
|
||||
mastery_msg_4: 'One more key conquered!'
|
||||
|
||||
# Keyboard explorer
|
||||
keyboard:
|
||||
title: ' Keyboard '
|
||||
subtitle: 'Press any key or click a key'
|
||||
hint_navigate: '[←→↑↓/hjkl/Tab] Navigate'
|
||||
hint_back: '[q/ESC] Back'
|
||||
key_label: 'Key: '
|
||||
finger_label: 'Finger: '
|
||||
hand_left: 'Left'
|
||||
hand_right: 'Right'
|
||||
finger_index: 'Index'
|
||||
finger_middle: 'Middle'
|
||||
finger_ring: 'Ring'
|
||||
finger_pinky: 'Pinky'
|
||||
finger_thumb: 'Thumb'
|
||||
overall_accuracy: ' Overall accuracy: %{correct}/%{total} (%{pct}%%)'
|
||||
ranked_accuracy: ' Ranked accuracy: %{correct}/%{total} (%{pct}%%)'
|
||||
confidence: 'Confidence: '
|
||||
no_data: 'No data yet'
|
||||
no_data_short: 'No data'
|
||||
key_details: ' Key Details '
|
||||
key_details_char: ' Key Details: ''%{ch}'' '
|
||||
key_details_name: ' Key Details: %{name} '
|
||||
press_key_hint: 'Press a key to see its details'
|
||||
shift_label: 'Shift: '
|
||||
shift_no: 'No'
|
||||
overall_avg_time: 'Overall Avg Time: '
|
||||
overall_best_time: 'Overall Best Time: '
|
||||
overall_samples: 'Overall Samples: '
|
||||
overall_accuracy_label: 'Overall Accuracy: '
|
||||
branch_label: 'Branch: '
|
||||
level_label: 'Level: '
|
||||
built_in_key: 'Built-in Key'
|
||||
unlocked_label: 'Unlocked: '
|
||||
yes: 'Yes'
|
||||
no: 'No'
|
||||
in_focus_label: 'In Focus?: '
|
||||
mastery_label: 'Mastery: '
|
||||
mastery_locked: 'Locked'
|
||||
ranked_avg_time: 'Ranked Avg Time: '
|
||||
ranked_best_time: 'Ranked Best Time: '
|
||||
ranked_samples: 'Ranked Samples: '
|
||||
ranked_accuracy_label: 'Ranked Accuracy: '
|
||||
|
||||
# Intro dialogs
|
||||
intro:
|
||||
passage_title: ' Passage Downloads Setup '
|
||||
code_title: ' Code Downloads Setup '
|
||||
enable_downloads: 'Enable network downloads'
|
||||
download_dir: 'Download directory'
|
||||
paragraphs_per_book: 'Paragraphs per book (0 = whole)'
|
||||
whole_book: 'whole book'
|
||||
snippets_per_repo: 'Snippets per repo (0 = unlimited)'
|
||||
unlimited: 'unlimited'
|
||||
start_passage_drill: 'Start passage drill'
|
||||
start_code_drill: 'Start code drill'
|
||||
confirm: 'Confirm'
|
||||
hint_navigate: '[Up/Down] Navigate'
|
||||
hint_adjust: '[Left/Right] Adjust'
|
||||
hint_edit: '[Type/Backspace] Edit'
|
||||
hint_confirm: '[Enter] Confirm'
|
||||
hint_cancel: '[ESC] Cancel'
|
||||
preparing_download: 'Preparing download...'
|
||||
download_passage_title: ' Downloading Passage Source '
|
||||
download_code_title: ' Downloading Code Source '
|
||||
book_label: ' Book: %{name}'
|
||||
repo_label: ' Repo: %{name}'
|
||||
progress_bytes: '[%{name}] %{downloaded}/%{total} bytes'
|
||||
downloaded_bytes: 'Downloaded: %{bytes} bytes'
|
||||
downloading_book_progress: 'Downloading current book: [%{bar}] %{downloaded}/%{total} bytes'
|
||||
downloading_book_bytes: 'Downloading current book: %{bytes} bytes'
|
||||
downloading_code_progress: 'Downloading: [%{bar}] %{downloaded}/%{total} bytes'
|
||||
downloading_code_bytes: 'Downloading: %{bytes} bytes'
|
||||
current_book: 'Current: %{name} (book %{done}/%{total})'
|
||||
current_repo: 'Current: %{name} (repo %{done}/%{total})'
|
||||
passage_instructions_1: 'keydr can download passages from Project Gutenberg for typing practice.'
|
||||
passage_instructions_2: 'Books are downloaded once and cached locally.'
|
||||
passage_instructions_3: 'Configure download settings below, then start a passage drill.'
|
||||
code_instructions_1: 'keydr can download open-source code from GitHub for typing practice.'
|
||||
code_instructions_2: 'Code is downloaded once and cached locally.'
|
||||
code_instructions_3: 'Configure download settings below, then start a code drill.'
|
||||
|
||||
# Status messages (from app.rs)
|
||||
status:
|
||||
recovery_files: 'Recovery files found from interrupted import. Data may be inconsistent — consider re-importing.'
|
||||
dir_not_exist: 'Directory does not exist: %{path}'
|
||||
no_data_store: 'No data store available'
|
||||
serialization_error: 'Serialization error: %{error}'
|
||||
exported_to: 'Exported to %{path}'
|
||||
export_failed: 'Export failed: %{error}'
|
||||
could_not_read: 'Could not read file: %{error}'
|
||||
invalid_export: 'Invalid export file: %{error}'
|
||||
unsupported_version: 'Unsupported export version: %{got} (expected %{expected})'
|
||||
import_failed: 'Import failed: %{error}'
|
||||
imported_theme_fallback: 'Imported successfully (theme ''%{theme}'' not found, using default)'
|
||||
imported_success: 'Imported successfully'
|
||||
adaptive_unavailable: 'Adaptive ranked mode unavailable: %{error}'
|
||||
switched_to: 'Switched to %{name}'
|
||||
layout_changed: 'Layout changed to %{name}'
|
||||
|
||||
# Errors (for UI boundary translation)
|
||||
errors:
|
||||
unknown_language: 'Unknown language: %{key}'
|
||||
unknown_layout: 'Unknown keyboard layout: %{key}'
|
||||
unsupported_pair: 'Unsupported language/layout pair: %{language} + %{layout}'
|
||||
language_blocked: 'Language is blocked by support level: %{key}'
|
||||
|
||||
# Common
|
||||
common:
|
||||
wpm: 'WPM'
|
||||
cpm: 'CPM'
|
||||
back: 'Back'
|
||||
Reference in New Issue
Block a user