Локализация аддонов 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.

Nikita

Автор: Nikita

Blender add-ons developer and articles writer.

0 0 голос
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии