Dev:RU/Doc/Process/Translate Blender

提供: wiki
移動先: 案内検索

Руководство по переводу интерфейса Blender

Здесь приведено краткое описание того, как поставлен процесс перевода и как обновлять файлы для перевода. Также здесь представлено краткое описание всех инструментов, находящихся в каталоге trunk/po/bl_i18n_utils (который находится в хранилище исходного кода Blender)!

Примечание/Предупреждение
Я не уверен, что все команды, которые я здесь привожу, верны для всех ОС, я не проверял их на всех системах. Если вы пользователь Windows и у вас возникли проблемы, пожалуйста, сообщите мне о них!


Примечание
Все файлы для перевода находятся в хранилище svn bf-translations.

Перед тем, как что-либо делать, вам следует зарегистрироваться в проекте bf-translation и отправить запрос на присоединение к команде (для этого просто откройте соответствующую задачу)!

Также предполагается, что вы знаете, как использовать svn, если это не так, прочтите эту статью.


Дополнение Manage UI Translations

Большая часть работы по поддержке перевода может быть выполнена через официальное дополнение (находится в категории System). Дополнение позволяет выполнять не только задачи, связанные с переводом, так же оно может быть полезно и необходимо авторам скриптов, которые хотят перевести своё дополнение на другие языки (пожалуйста, обратите внимание, что официальные дополнения уже включены в основной проект перевода).

Различные возможности этого дополнения описаны в соответствующих разделах ниже по тексту.

Настройки дополнения.
Панель Обновить переводы.

Процесс перевода

Примечание
Для большинства операций обязательны инструменты gettext (msgfmt и msgmerge)! Если вы работаете с языками с направлением письма справа-налево (арабский, персидский, иврит…), вам также необходима библиотека C FriBidi для вашей платформы.


Exclamation mark.png

Когда вы работаете над переводом, пожалуйста, используйте только po-файлы из каталога /branches. Каталог /trunk предназначен для хранения только проверенных po-файлов, их редактировать должен только сопровождающий!

Как это работает

Каталоги /branches/<язык>/ содержат исходные файлы для системы переводов (<язык> является кодом языка ISO, например это может быть es или zh_CN). Исходные файлы имеют расширение .po и являются обычными текстовыми файлами со следующим простым синтаксисом:

#: Одна или несколько строк с комментариями, указывающими на положение сообщения в коде
#, fuzzy [необязателен] смотрите описание ниже
# Одна или несколько строк комментариев в свободном формате
msgid "идентификатор сообщения"
msgstr "перевод сообщения"

В случае, если записи msgid или msgstr слишком длинные, они разбиваются на несколько строк, вот так:

msgid ""
"Очень, очень, очень, очень, очень, очень, очень, очень, очень, очень, очень, очень, очень,"
" очень, очень, очень, очень, очень, очень длинный идентификатор сообщения!"

Это значит, что когда строка «идентификатор сообщения» используется в качестве имени оператора, текста подсказки, названия меню и так далее, она будет отображена на экране, как «перевод сообщения».

Очень просто.

Исходные файлы компилируются в файл /trunk/locale/<язык>/LC_MESSAGES/blender.mo, который является двоичным файлом и именно он используется системой переводов.

Как редактировать переводы - переводчикам

Эта задача также проста до безобразия. Если вы нашли строку, которую вы хотите перевести, в файле /branches/<язык>/<язык>.po в записи msgid, просто напишите её перевод в соответствующей записи msgstr. Если запись msgid помечена как неточная (fuzzy), вот так:

#, fuzzy
msgid "идентификатор сообщения"
msgstr "перевод сообщения"

…это значит, что перевод, используемый для сообщения, существовал, но само сообщение было изменено, так что перевод так же следует обновить (что проще, чем делать новый перевод на основе предыдущего).

Когда перевод будет обновлён, удалите строку с #, fuzzy и после этого он снова станет использоваться.

Примечание
Вы можете использовать специальные инструменты для упрощения редактирования po-файлов, например Poedit.


Как редактировать переводы из интерфейса Blender - переводчикам

Также вы можете, в какой-то степени, переводить Blender напрямую из его интерфейса с помощью дополнения Manage UI Translations.

После того, как вы включите дополнение, вам нужно будет его настроить, чтобы по крайней мере пути в параметрах Исполняемый файл gettext 'msgfmt' и Корневая папка переводов были верно установлены (последний путь должен указывать на вашу рабочую копию хранилища bf-translation).

Затем просто включите перевод пользовательского интерфейса и выберите язык, над которым вы хотите работать (обратите внимание, что когда выбран язык, интерфейс будет переводиться на него, даже когда настройка перевода интерфейса Blender отключена). Нажав правую кнопку мыши над любым элементом пользовательского интерфейса, выберите в выпадающем меню пункт Править перевод: откроется всплывающее окно со всеми сообщениями, присоединёнными к данной кнопке и/или лежащими в её основе данными RNA.

Однако запомните, с помощью этой системы невозможно перевести всё, поскольку ко многим сообщениям просто нельзя добраться указанным способом!

Пример всплывающего окна «Править перевод».

Обратите внимание на изображение справа, на котором показаны некоторые возможности всплывающего окна по редактированию данных:

  • Имя редактируемого po-файла с некоторой статистикой.
  • Путь RNA редактируемого свойства, структуры или оператора.
  • Контекст RNA, используемый для перевода меток.
  • Все собранные метки (обычно это одна метка RNA и необязательная метка-переопределение на уровне кнопки, например, здесь меткой оператора является «Render», однако кнопка используется для визуализации анимации, так что она переопределила метку на «Animation»).
  • Все собранные подсказки (в большинстве случаев это только подсказки RNA!).

Для каждого из этих сообщений вам показывается оригинал, текстовое поле для редактирования перевода и кнопка-переключатель, позволяющая пометить перевод как неточный.

Когда вы закончите вносить правки, вам всего лишь нужно нажать на кнопку ДА, чтобы проверить перевод и закрыть всплывающее окно, однако будьте осторожны: ваши изменения не сохранены в po-файле! Так что периодически отмечайте кнопку-переключатель Сохранить в файл .po, чтобы ваши правки вносились в соответствующий файл перевода.

Вы хотите видеть ваши изменения в пользовательском интерфейсе? Просто отметьте кнопку-переключатель Перестроить файл .mo. Но будьте осторожны, так вы создадите новый mo-файл в вашем пользовательском каталоге Blender, что будет означать, что все официальные переводы более не будут использоваться в Blender. Для возврата к умолчательной ситуации просто отметьте кнопку-переключатель Удалить локальные файлы .mo.

Как добавлять переводы - переводчикам

Если вашего языка ещё нет в каталоге /branches, вы должны запросить (например, в списке рассылки) его добавление у администратора.

Тем временем вы можете приступить к работе, выполнив следующие шаги:

  • Скопируйте файл trunk/po/blender.pot в новый файл branches/<язык>/<язык>.po.
  • Начинайте переводить этот файл!

Не забудьте зафиксировать ваши изменения в хранилище svn!

Если вы хотите просмотреть результат вашей работы в интерфейсе Blender, то, если ваш язык ещё не добавлен администратором в Blender, вы должны отредактировать файл datafiles/locale/languages, который лежит в каталоге с конфигурацией Blender. Туда следует добавить строку для вашего языка. Формат этого файла описан внутри него же, просто проследите, что вы используете (временный!) идентификатор, больше текущего максимального идентификатора.

Затем создайте и проверьте mo-файл, как описано здесь.

Как обновлять переводы - продвинутым переводчикам

Все po-файлы в каталоге branches/ обновляются администратором примерно раз в неделю.

Однако, при необходимости, вы можете самостоятельно обновить их для вашего языка.

Чтобы сделать это, вам понадобится как сам Blender, так и его исходный код, у вас должно быть включено дополнение Manage UI Translations и правильно настроены его параметры Путь к коду и Корневая папка переводов.

Затем, в панели Обновить переводы (на вкладке Визуализация) выберите язык или языки, которые вы хотите обновить и нажмите на кнопку Обновить ветви.

Как объединить переводы - переводчикам

Просто используйте команду msgcat (msgcat -o выходной_файл.po входной_файл1.po входной_файл2.po …, дополнительную информацию смотрите в справке по команде).

Как проверить ваш перевод - переводчикам

Для проверки ваших переводов просто запустите в каталоге /branches/<язык>/ следующую команду:

$ msgfmt --statistics <язык>.po -o blender.mo

Затем скопируйте получившийся двоичный файл blender.mo в ваш каталог .blender/locale/<язык>/LC_MESSAGES/.

Примечание
Некоторые редакторы po-файлов (например, poEdit) по умолчанию создают файл .mo при сохранении перевода. В этом случае просто скопируйте данный файл в указанный выше каталог и переименуйте его в blender.mo!


О языках, требующих некоторой обработки po-файлов для поддержки письма справа-налево

В первую очередь это касается арабского языка, персидского языка и иврита.

Данный процесс стандартизирован! Пожалуйста, следуйте следующим правилам:

  • Файл <язык>.po в каталоге branches/ должен быть необработанным.
  • Язык должен определять направление своего письма справа-налево путём добавления его уникального идентификатора (ISO-кода) в настройку IMPORT_LANGUAGES_RTL модуля bl_i18n_utils. Это задача для разработчиков, так что при необходимости попросите, например, сопровождающего i18n сделать это.

Таким образом, инструменты интернационализации из дополнения будут автоматически производить преобразование (используя библиотеку fribidi), когда оно потребуется.

Администрирование

Здесь описываются продвинутые операции и/или операции, которые затрагивают каталог /trunk; переводчики должны избегать их использования. Мы предполагаем, что у вас есть исходные коды Blender, сборка Blender (лучше, если она будет максимально похожа на официальную) и хранилище bf-translations, а также что дополнение Manage UI Translations включено и настроено.

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

Первым делом отредактируйте файл release/scripts/modules/bl_i18n_utils/settings.py: добавьте в кортёж LANGUAGES новый язык. Затем пересоберите/переустановите Blender - после этого новый язык должен появиться в меню. Просто обновите каталог branches/ с выбранным языком, чтобы создать для него новый пустой po-файл.

Обновление всех po-файлов в каталоге /branches

В панели Обновить переводы (на вкладке Визуализация) выберите все языки и нажмите на кнопку Обновить ветви (убедитесь, что галка Пропустить .pot не отмечена!).

Вы можете ограничить обновление определённым списком языков просто снимая отметки с ненужных языков.

Обновление каталога /trunk

В панели Обновить переводы (на вкладке Визуализация) выберите все языки и нажмите на кнопку Обновить trunk.

В результате выполнятся следующие действия:

  • Проверятся все файлы /branches/<язык>/<язык>.po и импортируются только те, которые не содержат ошибок и процент переведённых сообщений в которых больше 0% (по умолчанию, вы можете определить другой порог в параметрах модуля bl_i18n_utils). Импорт производится в каталог /trunk/po.
  • В каталоге /trunk/po все po-файлы почистятся (то есть, из них удалятся все комментарии), и запустятся некоторые проверки целостности.
  • Все po-файлы в каталоге /trunk/po скомпилируются в /trunk/locale/<язык>/LC_MESSAGES/blender.mo.

Перевод неофициальных дополнений

Переводы дополнения обычно содержатся в словарях Python с именем translations_dict, содержащими отображение отображений; ключами внешнего отображения служат уникальные идентификаторы языков (их ISO-коды), а значениями - отображения вида сообщения > переводы. Этот словарь должен быть зарегистрирован через вызов метода bpy.app.translations.register(), а разрегистрирован через вызов метода bpy.app.translations.unregister(), ровно также как это происходит и для самого дополнения.

Обычно этот словарь создаётся из кортежа с именем translations_tuple, который содержит кортёжи кортежей ((msgctxt, msgid), (sources, gen_comments), (lang, translation, (is_fuzzy, comments)), ...).

Я не ожидаю, что большинство авторов дополнений будут рады писать и поддерживать такой код, отслеживать изменения в сообщениях пользовательского интерфейса и т.д. Так что дополнение Manage UI Translations здесь снова может вам помочь.

В панели Обновить переводы (на вкладке Визуализация) выберите языки, с которыми вы хотите работать, а затем выберите один из операторов в блоке Дополнения – во всплывающем окне вас всегда спросят, с каким дополнением вы хотите работать:

Обновить данные переводов…
Извлечь сообщения пользовательского интерфейса для выбранного дополнения и обновить (или создать) соответствующий Python-код (кортёж translations_tuple).
Экспортировать PO…
Экспортировать текущий Python-код в po-файлы для выбранных языков (также создать pot-файл при необходимости).
Импортировать PO…
Импортировать все po-файлы в текущем каталоге и соответственно обновить Python-код выбранного дополнения.

Пожалуйста, обратите внимание, что:

  • Если сообщение уже присутствует в основном переводе Blender, оно не будет добавлено в список сообщений допонения, так что если вам обязательно нужен собственный перевод, следует использовать собственный контекст.
  • Инструмент использует некоторую «разметку» для нахождения сгенерированного кода, так что вы можете переместить этот код туда, куда вам нужно.

В качестве примера можете посмотреть, как сделана локализация дополнения render_copy_settings.

Смотрите также