Локализация аддонов Blender — классическая

Если вы хотите, чтобы ваш аддон был доступен для всех пользователей Blender по всему миру, вам обязательно нужно предусмотреть его локализацию — перевод интерфейса на разные языки.

Простейший способ сделать ваш аддон мультиязычным — классический, он используется во многих программах и, к тому же, требует минимального обращения к Blender Python API.

Если кратко — он заключается в создании словаря, в который заносятся все варианты перевода, и функции, которая в зависимости от текущей локали (выбранного пользователем языка) по коду возвращает текст из словаря на требуемом языке.

Рассмотрим локализацию простейшего аддона на практике.

Для начала создадим и зарегистрируем в Blender Python API классы для аддона.

Мы создали два класса:

LOCALIZATION_TEST_OT_test — оператор, который при вызове печатает в консоль строку текста

LOCALIZATION_TEST_PT_panel — для оформления интерфейса аддона, он создает в N-панели окна 3D Viewport вкладку со строкой текста и кнопкой для вызова оператора.

И зарегистрировали их в API Blender в результате чего получили работающий аддон.

Теперь мы можем заняться его локализацией.

Для начала создадим словарь с переводами текстовых строк, которые мы используем в нашем аддоне, на разные языки.

Создадим словарь с именем «langs», и для текста «Test text in Blender UI» добавим варианты переводов на английский, испанский и японский языки.

Все варианты переводов будем хранить в отдельном словаре, к которому будем обращаться по ключу «test_text_in_bl_ui». Обычно для удобства работы используют ключи в виде упрощенной и укороченной строки исходного текста. Это добавляет наглядности и читаемости в код вашего аддона.

Внутри словаря с вариантами перевода в качестве ключей указывается текстовое обозначение локали, а значения — перевод на соответствующий этой локали язык.

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

Имея словарь с переводами, мы можем определить функцию, которая по двум ключам (строки и локали) вернет нам текст на нужном языке.

Функция «loc_str» принимает в качестве параметров один обязательных аргумент и один необязательный.

Обязательный аргумент «str_key» — это ключ строки для поиска по созданному нами ранее словарю переводов. По нему выбирается нужная строка текста в словаре. Если строка с указанным ключом в словаре «langs» не найдена, функция вернет текст ошибки «ERR: no such string in localization».

Получив по ключу «str_key» словарь для нужной строки, теперь по ключу локали получим ее перевод на нужный язык.

Текущая используемая локаль в Blender может быть получена через его API:

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

Если для текущей локали мы перевод еще не сделали (не добавили в наш словарь «langs»), функция вернет перевод «по умолчанию», указанной во втором, необязательном, параметре «def_locale_key» функции. Значение для этого параметра конечно нужно указывать такое, которое точно есть в вашем словаре. Чтобы не указывать его каждый раз при вызове функции, зададим для этого параметра значение по умолчанию равное «en_US».

Теперь мы можем вызывать эту функцию для получения перевода текста в зависимости от текущей локали.

Например:

Во втором случае, при использовании итальянского языка, функция вернула текст на английском, т.к. перевода на итальянский нет, а английский вариант указан по умолчанию.

Теперь нам осталось для каждой строки текста, используемой в аддоне, добавить в словарь»langs» свой уникальный ключ и варианты перевода на нужные языки.

А все используемые в аддоне строки текста заменить на вызов функции «loc_str» с нужными ключами.

Например указание строки:

нужно заменить на вызов функции:

Теперь Blender будет отображать интерфейс вашего аддона в соответствии с языком, выбранным пользователем.

Финальный код:

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

Исходные файлы для этого урока доступны на Patreon.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные