Alterator/l10n: различия между версиями

Материал из ALT Linux Wiki
Строка 35: Строка 35:
* общий словарь (обновляется редко, «переводчиками»)
* общий словарь (обновляется редко, «переводчиками»)
* отдельные словари для каждого модуля (обновляются при обновлении модулей, «мейнтейнерами модулей»)
* отдельные словари для каждого модуля (обновляются при обновлении модулей, «мейнтейнерами модулей»)
* утилита update-po, для «мейнтейнеров модулей»: получает внешнюю директорию с модулем, обычным образом обновляет словарь для данного модуля (внутри altertator-l10n), берет недостающие переводы из общего словаря. После применения этой утилиты можно дополнить или исправить переводы только для данного модуля и сделать коммит, который затронет только словарь одного модуля.
* утилита update-module, для «мейнтейнеров модулей»: получает внешнюю директорию с модулем, обычным образом обновляет словарь для данного модуля (внутри altertator-l10n), берет недостающие переводы из общего словаря. После применения этой утилиты можно дополнить или исправить переводы только для данного модуля и сделать коммит, который затронет только словарь одного модуля.
* тривиальная возможность для переводчиков смерджить переводы всех модулей в общий словарь, посмотреть несоответствия, массово перевести на иностранный язык… Там, где нужен контекст, переводчики могут переводить словари отдельных модулей, а потом уже мерджить их…
* тривиальная возможность для переводчиков смерджить переводы всех модулей в общий словарь, посмотреть несоответствия, массово перевести на иностранный язык… Там, где нужен контекст, переводчики могут переводить словари отдельных модулей, а потом уже мерджить их…
* при сборке alterator-l10n собираются словари для всех модулей, причём опять недостающие переводы берутся из общего словаря.
* при сборке alterator-l10n собираются словари для всех модулей, причём опять недостающие переводы берутся из общего словаря.
Строка 42: Строка 42:


[[Изображение:alterator-l10n-pr1.png]]
[[Изображение:alterator-l10n-pr1.png]]


=== Новая схема ===
=== Новая схема ===

Версия от 18:47, 23 января 2009

alterator-l10n

help

Старая схема

  • хелпы хранятся в пакете alterator-l10n, устанавливаются в директорию /usr/share/alterator/l10n/help/ и не используются альтератором
  • модуль, использующий хелп из alterator-l10n должен иметь сборочную зависимость на alterator-l10n
  • при сборке модуля хелпы берутся из /usr/share/alterator/l10n/help/ (см.) и устанавливаются в директорию /usr/share/alterator/help/, где их и ищет альтератор.
    (неочевидная хитрость: хелп устанавливается только, если он упомянут в desktop-файле модуля)

Таким образом, при изменении хелпа в alterator-l10n следует пересобирать модуль.

Новая схема

  • Хелп пакуется либо в alterator-l10n либо в модуль и в любом случае устанавливается сразу в /usr/share/alterator/help/

При правке хелпа пересборки модуля не требуется.

В 4.1 работает только старая схема, в 5.0 и Сизифе — обе схемы. Для поддержки двух схем в исходниках пакета alterator-l10n сделаны директории old_help и new_help. При переходе со старой схемы на новую надо следить, чтобы хелп не оказался запакован и в alterator-l10n и в модуль, и не возникло конфликта.

po

Старая схема

  • словарь, общий для всех модулей, лежит в alterator-l10n
  • существует процедура обновления словаря, при которой по списку обновляются git-репозитории для всех модулей, использующих alterator-l10n, в них генерятся pot-файлы, берутся po-файлы и затем мерджатся с общим словарем внутри alterator-l10n.
  • модуль, использующий переводы из alterator-l10n должен иметь сборочную зависимость на alterator-l10n
  • при сборке модуля переводы берутся из alterator-l10n, создаётся отдельный словарь для данного модуля и устанавливается в систему.

Недостатки старой схемы

  • При изменении модуля, приходится пересобирать alterator-l10n, а затем — опять модуль.
  • При пересборке alterator-l10n требуется иметь актуальные git-репозитории для всех модулей, которые используют alterator-l10n (в том числе, за которыми я вообще не слежу). Дело осложнено тем, что для модулей альтератора сложилась традиция сборки, при которой неясно, в чьём репозитории в данный момент находится актуальная версия. Существуют, впрочем «нечестные» способы обновления базы переводов alterator-l10n.
  • «Общий» файл переводов очень неудобно мерджить, в случае, если несколько человек параллельно обновляют alterator-l10n
  • «Общий» файл переводов неудобно переводить без контекста.
  • В модуле, не использующем alterator-l10n может быть нужна сборочная зависимость на модуль, использующий alterator-l10n. В этом случае локальные переводы пропадут из модуля.

Предложение новой схемы

В alterator-l10n находится следующее:

  • общий словарь (обновляется редко, «переводчиками»)
  • отдельные словари для каждого модуля (обновляются при обновлении модулей, «мейнтейнерами модулей»)
  • утилита update-module, для «мейнтейнеров модулей»: получает внешнюю директорию с модулем, обычным образом обновляет словарь для данного модуля (внутри altertator-l10n), берет недостающие переводы из общего словаря. После применения этой утилиты можно дополнить или исправить переводы только для данного модуля и сделать коммит, который затронет только словарь одного модуля.
  • тривиальная возможность для переводчиков смерджить переводы всех модулей в общий словарь, посмотреть несоответствия, массово перевести на иностранный язык… Там, где нужен контекст, переводчики могут переводить словари отдельных модулей, а потом уже мерджить их…
  • при сборке alterator-l10n собираются словари для всех модулей, причём опять недостающие переводы берутся из общего словаря.

Кажется, это решает все перечисленные проблемы.

Alterator-l10n-pr1.png

Новая схема

В данный момент новая схема почти реализована. На неё переведены модули alterator-{x11,lilo}

Работает так:

  • находясь в alterator-l10n обновляем переводы из модуля: ./update_module <директория с модулем>. при этом недостающие переводы берутся из общего словаря
  • правим переводы, относящиеся только к своему модулю в alterator-l10n/po/<язык>/<имя>.po
  • коммитим, пушим, просим мейнтейнера alterator-l10n втянуть…
  • из своего модуля убираем паковку mo-файлов и (если уже и хелп переведён на новую схему) сборочную зависимость на alterator-l10n
  • при сборке alterator-l10n для каждого модуля соберутся и установятся в систему mo-файлы. Причём недостающие переводы опять берутся из общего словаря.

Оставшиеся проблемы:

  • скрипт для сливания общего словаря из всех модулей — синяя стрелка на картинке (это, кажется совсем простым, сделаю в ближайшее время)
  • перевод desktop-файлов (у меня идей пока нет :()