Перейти к содержанию

Переводы

Весь исходный текст на английском. Русский — это каталог переводов рядом с кодом. Плагин следует за языком интерфейса QGIS и откатывается на английский.

Файлы

  • Код Python с tr("Apply"): английский оригинал, он же ключ.
  • ai_agent/translations/ai_agent_ru.ts: каталог. Правьте только переводы.
  • ai_agent/translations/ai_agent_ru.qm: скомпилированный файл, который грузит QGIS. Руками его не правят.

Отсутствующий перевод безвреден: tr() вернёт английский текст.

Обновление

После добавления или правки строки в tr():

python3 tools/update_translations.py

Команде не нужны зависимости. Она вытаскивает литералы tr() и tr_n() разбором AST, дописывает новые записи в .ts (сделанные переводы сохраняются) и компилирует .qm через tools/qm.py. Заполните пустые записи <translation> и запустите её снова.

Стандартные инструменты QGIS не используются:

  • pylupdate5 читает не-ASCII исходники как latin-1, не видит tr_n и пишет неверный контекст.
  • lrelease поставляется только с инструментами Qt, которых нет ни в QGIS, ни в обычной системе. tools/qm.py даёт побайтно такой же результат, что закреплено файлом tests/data/golden_ru.qm, однажды собранным lrelease.

tests/test_i18n.py падает, если запись не переведена, потерян заполнитель ({0}, %n) или каталог разошёлся с кодом.

Правила

  • tr() принимает литерал: tr("Layer '{0}'").format(name), никогда f-строку.
  • Текст для человека (summarize_call, всё в ui/) идёт через tr(). Текст для модели (описания инструментов, схемы, ошибки) остаётся простым английским, чтобы русский QGIS не слал модели русские схемы.
  • Множественное число — через tr_n("%n step(s)", count); в русском все три формы.

Новый язык

  1. Добавьте локаль в SUPPORTED_LOCALES в ai_agent/i18n.py и в LANGUAGE_NAMES в core/agent/prompts.py.
  2. Добавьте её правила множественного числа в NUMERUS_RULES в tools/qm.py. Компилятор отказывается от незнакомых языков.
  3. Добавьте язык в LANGUAGES в tools/update_translations.py, запустите его и переведите новый .ts.