Преминете към основното съдържание

Интернационализация (i18n)

Dictaro поддържа 25 езика за потребителския интерфейс чрез rust-i18n crate. Преводите са във YAML файл, а езикът се определя от конфигурацията на потребителя или автоматично от OS locale.

Поддържани езици​

КодЕзик (ендоним)
bgБългарски
hrHrvatski
csCestina
daDansk
nlNederlands
enEnglish
etEesti
fiSuomi
frFrancais
deDeutsch
elEllinika
huMagyar
itItaliano
lvLatviesu
ltLietuviu
mtMalti
plPolski
ptPortugues
roRomana
ruRusskij
skSlovencina
slSlovenscina
esEspanol
svSvenska
ukUkrainska

Технически детайли​

rust-i18n конфигурация​

В main.rs:

#[macro_use]
extern crate rust_i18n;
i18n!("locales", fallback = "en");

Това зарежда преводите от client/locales/ директорията. Fallback език е English.

YAML файл​

Преводите са в един файл client/locales/app.yml (формат v2 на rust-i18n):

_version: 2

settings.title:
en: Settings
bg: Настройки
hr: Postavke
cs: Nastaveni
# ... всички 25 езика

settings.save:
en: Save
bg: Запази
# ...

overlay.no_speech:
en: No speech detected
bg: Не е разпознат говор
# ...

Всеки ключ е в dot-notation формат (напр. settings.auth.waiting_login) и съдържа превод за всеки от 25-те езика.

Използване в кода​

use rust_i18n::t;

// Текущ locale
let label = t!("settings.title");

// Конкретен locale (за тестове)
let label = t!("settings.title", locale = "bg");

// С интерполация
let msg = t!("quota.remaining", seconds = remaining);

Инициализация на locale​

OS Locale Detection​

sys_locale::get_locale() връща OS locale стринг (напр. en-US, bg-BG).

map_locale_to_supported() извлича двубуквения код и проверява дали е в списъка с поддържани езици:

pub fn map_locale_to_supported(locale: &str) -> Option<&'static str> {
let code = locale.split(|c| c == '-' || c == '_').next()?;
SUPPORTED_UI_LANGUAGES.iter()
.find(|(c, _)| *c == code)
.map(|(c, _)| *c)
}

Ред на приоритет​

  1. config.ui_language (ако е зададен от потребителя в Settings)
  2. OS locale (автоматично детектиран)
  3. "en" (fallback)

Секции на преводите​

Ключовете са организирани в следните секции:

СекцияОписание
settings.*Settings панел (заглавия, бутони, етикети)
settings.auth.*Автентикация (login, logout, waiting messages)
settings.hotkeys.*Hotkey настройки
settings.audio.*Аудио настройки (език, устройство)
settings.preferences.*Общи предпочитания
settings.llm.*LLM настройки
overlay.*Recording overlay (no speech, errors, LLM status)
tray.*System tray контекстно меню

Разлика между UI език и език за разпознаване​

Dictaro разграничава два вида езикови настройки:

НастройкаОписаниеСтойност по подразбиране
config.ui_languageЕзик на интерфейса (преводи, менюта)Автоматично от OS
config.languageЕзик за ASR разпознаване (изпраща се към сървъра)"bg"

Потребителят може да настрои UI на английски, но да диктува на български (или обратно).

Тестове​

Модулът включва тестове за:

  • Коректност на превода за конкретни ключове (test_settings_title_en, test_settings_title_bg)
  • Превключване на locale (test_locale_switch_fr)
  • Пълнота на преводите -- проверява представителна извадка от ключове за всичките 25 езика (test_i18n_completeness)
  • Roundtrip на ui_language в конфигурацията
  • Mapping на OS locale-и (en-US -> en, bg-BG -> bg)