REPOSITORY / ScuroNeko/Laniakea

Wiki

KNOWLEDGE REPOSITORY
3
Localization RU
ScuroNeko edited this page 2026-04-01 17:37:48 +03:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Localization RU

English version: Localization

Это краткая русскоязычная версия страницы про L10n. Полная и наиболее актуальная страница: Localization.

Базовая модель

Localization в Laniakea строится вокруг L10n:

  • создаешь store с fallback language;
  • добавляешь переводы по ключам;
  • подключаешь store к bot через SetL10n(...);
  • внутри handler'ов используешь ctx.Translate(key).

Как создать словарь

l10n := laniakea.NewL10n("en")

Fallback language используется, когда:

  • у пользователя нет перевода для нужного key;
  • язык пользователя неизвестен;
  • для key нет конкретной локали, но есть fallback.

Как добавлять переводы

l10n.AddDictEntry("greeting", laniakea.DictEntry{
	"en": "Hello",
	"ru": "Привет",
})

Ключи лучше делать семантическими:

  • greeting
  • errors.denied
  • menu.settings

Порядок fallback

L10n.Translate(lang, key) ищет:

  1. exact match для lang;
  2. fallback language;
  3. сам key.

Поэтому отсутствие перевода не приводит к пустой строке.

Подключение к bot

bot.SetL10n(l10n)

После этого доступны:

  • bot.L10n(lang, key)
  • ctx.Translate(key)

Если вызвать SetL10n(nil), бот залогирует предупреждение и оставит текущий provider без изменений.

ctx.Translate(...)

Это основной удобный вспомогательный метод внутри обработчиков.

Он:

  • берет language code из ctx.From, если он есть;
  • при необходимости использует fallback language;
  • возвращает key, если перевода нет.

Потокобезопасность

L10n безопасен для concurrent use.

Также AddDictEntry(...) копирует входной DictEntry, поэтому внешняя мутация исходной map не переписывает store неожиданно.

Что читать дальше