Найти тему
Жизнь IT-ишника

Мултиязычный Python

Оглавление

Вступление

Представьте, что ваш личный или рабочий проект ориентируется не только на аудиторию одной страны, в которой вы живете и работаете, а на многие страны. Первое что приходит в голову, это сделать все на английском. Вы будете правы, но только отчасти. Согласитесь, при виде интерфейса, запускаемой программы, на своем родном языке вы будете ей пользоваться с большим удовольствием. Будет чувствоваться, что разработчик сделал не для всех, а для жителей вашей страны.

Великий и ужасный GETTEXT

-2

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

Данную библиотеку поддерживают многие популярные языки программирования такие как C++, Java, php, js и другие.

В этой статье будет рассмотрен пример работы gettext с кодом написанном на Python.

Начнем уже писать код

Перед началом работы загрузим библиотеку с помощью менеджера пакетов pip

pip install gettex

И импортируем ее и необходимые библиотеки в наш проект

import os
import gettext

Следующим шагом является создание дерева каталогов определенного типа:

my_dir/target_lang/LC_MESSAGES

Пример для английского и русского языка:

lang/en/LC_MESSAGES/
lang/ru/LC_MESSAGES/

Теперь мы должны научить программу работать с данными директориями:

_ = gettext.translation('name_domain', os.path.join(os.getcwd(), "my_dir/"), languages=[os.environ['LANGUAGE']])

my_dir - директория которую вы создали в той же папки, что и ваш проект

name_domain - может быть любым, запомним его, он нам понадобиться позже.

Теперь все строки вида:

_('Мой текст')
или
_('Вы живете в городе {}').format(state)

Будут автоматически индексироваться библиотекой.

-3

Когда ваш проект закончен, можно переходить к следующему этапу.

Перевод вашего контента

-4

Для этого нам понадобится бесплатная версия программы poedit.

После скачивания и установки вы увидите простой и лаконичный интерфейс:

Интерфейс poedit
Интерфейс poedit

Для начала работы с новыми переводом Файл->Создать. Программа нам предложит выбрать язык на который будет переводить.

Выбор языки для перевода
Выбор языки для перевода

На следующем шаге нужно загрузить наш проиндексированный текс из исходного текста программы, выбрав нужный файл на диске.

-7

Открывшееся окно покажет вам все строки, которые вы пометили ранее:

Рабочее пространство poedit. 1 - строки, которые вы пометили ранее. 2 - соответствующие им переводы. 3 - выбранная строка. 4 - перевод для выбранной строки. 5 - предлагаемый машинный перевод
Рабочее пространство poedit. 1 - строки, которые вы пометили ранее. 2 - соответствующие им переводы. 3 - выбранная строка. 4 - перевод для выбранной строки. 5 - предлагаемый машинный перевод

Алгоритм работы с poedit очень прост:

  1. Выбираем строку
  2. Пишем ей соответствие на нужном языке

После того как вы перевели всё необходимое настало время скомпилировать все в код

Компилирование файла перевода
Компилирование файла перевода

На этом шаге именем файла нужно указать имя домене (name_domain), который указан в нашей программе и сохранить в нужную папку.

Для английского языка и домена 'test' получается :

lang/en/LC_MESSAGES/ test.mo

Что получилось в итоге

Запуск программы на русском языке
Запуск программы на русском языке
Та же программа на английском
Та же программа на английском

На скриншотах выше запускалась одна и таже программа, но в разных регионах (компьютер так думал) без изменения программного кода

Итоги

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

Плюсы:

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

Минусы:

Нужно знать язык или пользоваться переводчиком

p.s.

Данная статья вышла благодаря моей работе в ИЦ "Баррикады", где я тружусь и по сей день

Огромное спасибо, что дочитал(-a) мою статью до конца. Надеюсь увидимся еще не раз на моем канале в Яндекс Дзен.