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

Материал из ALT Linux Wiki
м (→‎Добавление языка: на примере da_DK)
 
(не показано 38 промежуточных версий 7 участников)
Строка 1: Строка 1:
'''alterator-l10n'''
[[ruwp:Локализация|Локализация]] (l10n) — процесс адаптации [[Alterator/i18n|специально подготовленного]] ранее приложения для конкретного языка.


== help ==
В alterator для каждого модуля автоматически создаётся словарь с переводом сообщений интерфейса и бэкендов. Отдельно переводится текст встроенной справки.
=== Старая схема ===
* хелпы хранятся в пакете alterator-l10n, устанавливаются в директорию {{path|/usr/share/alterator/l10n/help/}} и ''не'' используются альтератором
* модуль, использующий хелп из alterator-l10n должен иметь сборочную зависимость на alterator-l10n
* при сборке модуля хелпы берутся из {{path|/usr/share/alterator/l10n/help/}} (см.) и устанавливаются в директорию {{path|/usr/share/alterator/help/}}, где их и ищет альтератор.
*: (неочевидная хитрость: хелп устанавливается только, если он упомянут в desktop-файле модуля)


Таким образом, при изменении хелпа в alterator-l10n следует пересобирать модуль.
== Справка ==
Файл со справочной информацией сохраняется либо в alterator-l10n либо в самом модуле, устанавливается в {{path|/usr/share/alterator/help/}}


=== Новая схема ===
== Переводы ==
* Хелп пакуется либо в alterator-l10n либо в модуль и в любом случае устанавливается сразу в {{path|/usr/share/alterator/help/}}
=== Обновление ===
С точки зрения мейнтейнера модуля устроено так:


При правке хелпа пересборки модуля не требуется.
* В alterator-l10n находится общий словарь (обновляется редко, «переводчиками»).
* Там же есть отдельные словари для каждого модуля (обновляются при обновлении модулей, «мейнтейнерами модулей»).
* Находясь в alterator-l10n обновляем словарь своего модуля модуля: '''./update_module <директория с модулем>''' (директория с модулем — та, в которой живет Makefile). При этом недостающие переводы берутся из общего словаря. '''Примечание''': требуется установленный alterator >= 3.5-alt1.
* При первом запуске update_module (если словаря для этого модуля еще нет в alterator-l10n), словарь берётся из модуля.
* Правим словарь своего модуля в alterator-l10n/po/<язык>/<имя>.po
* Коммитим, пушим, просим мейнтейнера alterator-l10n втянуть…
* Из своего модуля убираем паковку mo-файлов (иначе будет конфликт!) и (если уже и хелп переведён на новую схему) вообще сборочную зависимость на alterator-l10n
* При сборке alterator-l10n для каждого модуля соберутся и установятся в систему mo-файлы. Причём недостающие переводы опять возьмутся из общего словаря.


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


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


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


=== Предложение новой схемы ===
Некоторая особенность связана с переводами полей {{term|Name}} и {{term|Comment}} в desktop-файлах. Использовать gettext при разборе desktop-файлов не хочется (при этом для построения главного меню придётся каждый перевод вытаскивать из своего словаря, что долго и странно), хочется переводы таскать внутри desktop-файлов, однако дать возможность переводчикам переводить их внутри alterator-l10n.
В alterator-l10n находится следующее:
* общий словарь (обновляется редко, «переводчиками»)
* отдельные словари для каждого модуля (обновляются при обновлении модулей, «мейнтейнерами модулей»)
* утилита update-po, для «мейнтейнеров модулей»: получает внешнюю директорию с модулем, обычным образом обновляет словарь для данного модуля (внутри altertator-l10n), берет недостающие переводы из общего словаря. После применения этой утилиты можно дополнить или исправить переводы только для данного модуля и сделать коммит, который затронет только словарь одного модуля.
* тривиальная возможность для переводчиков смерджить переводы всех модулей в общий словарь, посмотреть несоответствия, массово перевести на иностранный язык… Там, где нужен контекст, переводчики могут переводить словари отдельных модулей, а потом уже мерджить их…
* при сборке alterator-l10n собираются словари для всех модулей, причём опять недостающие переводы берутся из общего словаря.


Кажется, это решает все перечисленные проблемы.
Сейчас сделано так:
* строчки для перевода вытаскиваются в alterator-l10n точно также, как и все остальное.
* запуская в alterator-l10n скрипт {{cmd|./update_desktop <директория с модулем>}} мы обновляем desktop-файлы модуля…


[[Изображение:alterator-l10n-pr1.png]]
Оставшаяся проблема: скрипт для сливания общего словаря из всех модулей — синяя стрелка на картинке. Это несложно сделать, но пока общий словарь также используется для построения словарей модулей в старой схеме, это лучше делать хитрее и вручную.


=== Добавление языка ===
На примере [http://lists.altlinux.org/pipermail/community-en/2022-January/001391.html датского]:
$ mkdir po/<u>da</u>
$ touch compendium/<u>da</u>.po ''# заполняется по аналогии с соседями''
$ echo "Dansk" > l10n/11-<u>da_DK</u> ''# название языка на нём самом''
$ gear-edit-spec ''# на предмет добавления нужного %lang(<u>da</u>)''


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


Работает так:
=== Справка ===
* файлы справки хранятся в пакете alterator-l10n, устанавливаются в директорию {{path|/usr/share/alterator/l10n/help/}} и ''не'' используются альтератором
* модуль, использующий хелп из alterator-l10n, должен иметь сборочную зависимость на alterator-l10n
* при сборке модуля справка автоматически берется из {{path|/usr/share/alterator/l10n/help/}} и устанавливается в директорию {{path|/usr/share/alterator/help/}}, где её и ищет альтератор. Таким образом, при изменении справки в alterator-l10n следует пересобирать модуль.
* файл справки устанавливается только если он упомянут в desktop-файле модуля


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


[[Категория:Sisyphus]]
{{Category navigation|title=Alterator|category=Alterator|sortkey={{SUBPAGENAME}}}}

Текущая версия от 14:08, 3 февраля 2022

Локализация (l10n) — процесс адаптации специально подготовленного ранее приложения для конкретного языка.

В alterator для каждого модуля автоматически создаётся словарь с переводом сообщений интерфейса и бэкендов. Отдельно переводится текст встроенной справки.

Справка

Файл со справочной информацией сохраняется либо в alterator-l10n либо в самом модуле, устанавливается в /usr/share/alterator/help/

Переводы

Обновление

С точки зрения мейнтейнера модуля устроено так:

  • В alterator-l10n находится общий словарь (обновляется редко, «переводчиками»).
  • Там же есть отдельные словари для каждого модуля (обновляются при обновлении модулей, «мейнтейнерами модулей»).
  • Находясь в alterator-l10n обновляем словарь своего модуля модуля: ./update_module <директория с модулем> (директория с модулем — та, в которой живет Makefile). При этом недостающие переводы берутся из общего словаря. Примечание: требуется установленный alterator >= 3.5-alt1.
  • При первом запуске update_module (если словаря для этого модуля еще нет в alterator-l10n), словарь берётся из модуля.
  • Правим словарь своего модуля в alterator-l10n/po/<язык>/<имя>.po
  • Коммитим, пушим, просим мейнтейнера alterator-l10n втянуть…
  • Из своего модуля убираем паковку mo-файлов (иначе будет конфликт!) и (если уже и хелп переведён на новую схему) вообще сборочную зависимость на alterator-l10n
  • При сборке alterator-l10n для каждого модуля соберутся и установятся в систему mo-файлы. Причём недостающие переводы опять возьмутся из общего словаря.

С точки зрения переводчика:

  • можно добавлять переводы в общий словарь (при пересборке alterator-l10n они добавятся во все словари модулей)
  • можно править переводы в модулях
  • можно слить переводы модулей в общий словарь (msgcat), посмотреть на несоответствия переводов и разобраться с каждым несоответствующем модулем по отдельности
  • Все это происходит только внутри alterator-l10n, при изменениях модули пересобирать не нужно.

Alterator-l10n-pr1.png

Некоторая особенность связана с переводами полей Name и Comment в desktop-файлах. Использовать gettext при разборе desktop-файлов не хочется (при этом для построения главного меню придётся каждый перевод вытаскивать из своего словаря, что долго и странно), хочется переводы таскать внутри desktop-файлов, однако дать возможность переводчикам переводить их внутри alterator-l10n.

Сейчас сделано так:

  • строчки для перевода вытаскиваются в alterator-l10n точно также, как и все остальное.
  • запуская в alterator-l10n скрипт ./update_desktop <директория с модулем> мы обновляем desktop-файлы модуля…

Оставшаяся проблема: скрипт для сливания общего словаря из всех модулей — синяя стрелка на картинке. Это несложно сделать, но пока общий словарь также используется для построения словарей модулей в старой схеме, это лучше делать хитрее и вручную.

Добавление языка

На примере датского:

$ mkdir po/da
$ touch compendium/da.po # заполняется по аналогии с соседями
$ echo "Dansk" > l10n/11-da_DK # название языка на нём самом
$ gear-edit-spec # на предмет добавления нужного %lang(da)

Старая схема (бранч 4.1)

Справка

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

Переводы

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