Поддръжка на езици
Lager Guru поддържа множество езици с цялостна система за интернационализация (i18n). Платформата в момента поддържа Немски (de), Английски (en) и Български (bg).
Приоритет на откриване на език
Системата използва верига за откриване на език на базата на приоритет:
- URL префикс - Код на език в URL пътя (
/en/,/de/,/bg/) - Потребителско предпочитание - Език, съхранен в
user_settings.language - Стандарт на наемател - Език, зададен в
tenants.language - Език на браузъра - Открит от настройките на браузъра
- Резервен вариант - По подразбиране немски (
de)
Предпочитание на език на потребителя
Потребителите могат да зададат предпочитания си език, използвайки компонента за смяна на езика. Предпочитанието се съхранява в таблицата user_settings и се запазва между сесии.
Задаване на предпочитание на език
import { updateUserLanguage } from '@/lib/i18n-helpers';
// Актуализиране на предпочитание на език на потребителя
await updateUserLanguage('en'); // или 'de', 'bg'Стандарти на език на наемател
Администраторите на наематели могат да зададат стандартен език за тяхната организация. Този език се използва, когато:
- Потребителят няма зададено предпочитание на език
- Потребителят не е удостоверен
Задаване на език на наемател
-- Актуализиране на стандартен език на наемател
UPDATE tenants
SET language = 'en'
WHERE id = 'tenant-uuid';Компонент за смяна на език
Компонентът <LanguageSwitcher /> е наличен в цялото приложение и позволява на потребителите да променят предпочитанието си за език.
Използване
import { LanguageSwitcher } from '@/components/LanguageSwitcher';
function MyComponent() {
return (
<div>
<LanguageSwitcher />
</div>
);
}Ключове за превод
Всички UI низове се съхраняват в JSON файлове за превод, намиращи се в src/i18n/locales/{lang}/:
common.json- Общи низове, използвани в цялото приложениеlanding.json- Съдържание на начална страницаadmin.json- Низове на администраторско таблоsafety.json- Низове на модул за безопасностdashboard.json- Низове на таблоlogin.json- Низове на страница за вход
Използване на преводи в компоненти
Основен превод
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return <h1>{t('welcome.title')}</h1>;
}Превод с namespace
import { useTranslation } from 'react-i18next';
function LandingPage() {
const { t } = useTranslation('landing');
return <h1>{t('hero.title')}</h1>;
}Добавяне на нови езици
За добавяне на поддръжка за нов език:
- Създаване на файлове за превод в
src/i18n/locales/{lang}/ - Добавяне на език към
resourcesвsrc/i18n/config.ts - Актуализиране на компонента за смяна на език
- Добавяне на език към CHECK ограничения на базата данни
- Актуализиране на конфигурацията на документацията на VitePress
API справка
getUserLanguage()
Връща предпочитанието на език на текущия потребител.
import { getUserLanguage } from '@/lib/i18n-helpers';
const lang = await getUserLanguage(); // 'de' | 'en' | 'bg' | nullgetTenantLanguage()
Връща стандартния език на наемателя.
import { getTenantLanguage } from '@/lib/i18n-helpers';
const lang = await getTenantLanguage(); // 'de' | 'en' | 'bg' | nulldetectLanguage()
Открива език, използвайки пълната верига за приоритет.
import { detectLanguage } from '@/lib/i18n-helpers';
const lang = await detectLanguage(); // 'de' | 'en' | 'bg'Най-добри практики
- Винаги използвайте ключове за превод - Никога не хардкодирайте низове в компоненти
- Използвайте описателни ключове - Използвайте ключове с namespace като
landing.hero.title - Поддържайте преводите последователни - Използвайте същата терминология във всички езици
- Тествайте всички езици - Проверете, че UI работи правилно във всички поддържани езици