Skip to content

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

Lager Guru поддържа множество езици с цялостна система за интернационализация (i18n). Платформата в момента поддържа Немски (de), Английски (en) и Български (bg).

Приоритет на откриване на език

Системата използва верига за откриване на език на базата на приоритет:

  1. URL префикс - Код на език в URL пътя (/en/, /de/, /bg/)
  2. Потребителско предпочитание - Език, съхранен в user_settings.language
  3. Стандарт на наемател - Език, зададен в tenants.language
  4. Език на браузъра - Открит от настройките на браузъра
  5. Резервен вариант - По подразбиране немски (de)

Предпочитание на език на потребителя

Потребителите могат да зададат предпочитания си език, използвайки компонента за смяна на езика. Предпочитанието се съхранява в таблицата user_settings и се запазва между сесии.

Задаване на предпочитание на език

typescript
import { updateUserLanguage } from '@/lib/i18n-helpers';

// Актуализиране на предпочитание на език на потребителя
await updateUserLanguage('en'); // или 'de', 'bg'

Стандарти на език на наемател

Администраторите на наематели могат да зададат стандартен език за тяхната организация. Този език се използва, когато:

  • Потребителят няма зададено предпочитание на език
  • Потребителят не е удостоверен

Задаване на език на наемател

sql
-- Актуализиране на стандартен език на наемател
UPDATE tenants
SET language = 'en'
WHERE id = 'tenant-uuid';

Компонент за смяна на език

Компонентът <LanguageSwitcher /> е наличен в цялото приложение и позволява на потребителите да променят предпочитанието си за език.

Използване

tsx
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 - Низове на страница за вход

Използване на преводи в компоненти

Основен превод

tsx
import { useTranslation } from 'react-i18next';

function MyComponent() {
  const { t } = useTranslation('common');
  
  return <h1>{t('welcome.title')}</h1>;
}

Превод с namespace

tsx
import { useTranslation } from 'react-i18next';

function LandingPage() {
  const { t } = useTranslation('landing');
  
  return <h1>{t('hero.title')}</h1>;
}

Добавяне на нови езици

За добавяне на поддръжка за нов език:

  1. Създаване на файлове за превод в src/i18n/locales/{lang}/
  2. Добавяне на език към resources в src/i18n/config.ts
  3. Актуализиране на компонента за смяна на език
  4. Добавяне на език към CHECK ограничения на базата данни
  5. Актуализиране на конфигурацията на документацията на VitePress

API справка

getUserLanguage()

Връща предпочитанието на език на текущия потребител.

typescript
import { getUserLanguage } from '@/lib/i18n-helpers';

const lang = await getUserLanguage(); // 'de' | 'en' | 'bg' | null

getTenantLanguage()

Връща стандартния език на наемателя.

typescript
import { getTenantLanguage } from '@/lib/i18n-helpers';

const lang = await getTenantLanguage(); // 'de' | 'en' | 'bg' | null

detectLanguage()

Открива език, използвайки пълната верига за приоритет.

typescript
import { detectLanguage } from '@/lib/i18n-helpers';

const lang = await detectLanguage(); // 'de' | 'en' | 'bg'

Най-добри практики

  1. Винаги използвайте ключове за превод - Никога не хардкодирайте низове в компоненти
  2. Използвайте описателни ключове - Използвайте ключове с namespace като landing.hero.title
  3. Поддържайте преводите последователни - Използвайте същата терминология във всички езици
  4. Тествайте всички езици - Проверете, че UI работи правилно във всички поддържани езици

Публикувано под търговска лицензия