Переводы¶
Весь исходный текст на английском. Русский — это каталог переводов рядом с кодом. Плагин следует за языком интерфейса 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); в русском все три формы.
Новый язык¶
- Добавьте локаль в
SUPPORTED_LOCALESвai_agent/i18n.pyи вLANGUAGE_NAMESвcore/agent/prompts.py. - Добавьте её правила множественного числа в
NUMERUS_RULESвtools/qm.py. Компилятор отказывается от незнакомых языков. - Добавьте язык в
LANGUAGESвtools/update_translations.py, запустите его и переведите новый.ts.