Locale Guide
Переключение интерфейса OpenKore на другой язык
Обычно у OpenKore английский интерфейс. Однако предусмотрена возможность локализации, то есть перевода интерфейса на любой язык. Например - русский. В файле sys.txt есть параметр locale, который отвечает за язык интерфейса OpenKore.
Список поддерживаемых языков можно посмотреть в папке с ботом: src\po\
В случае с русским языком интерфейса в файле sys.txt следует прописать
locale ru
- Пример интерфейса:
Предистория
Темой русификации интерфейса уже занимались. Например DeniZka в июле 2007 создал тему Первая РусЕфикация бота. Там же начат поиск и работа над ошибками в переводе.
В ноябре 2007 года DeniZka из-за нехватки времени прекратил переводить интерфейс. В процессе перевода возник ряд интересных вопросов. Так, например, было высказано предположение, что должно быть два перевода - от первого и от третьего лица. В наследие остался файл ru.zip [93.8 Кб], содержащий файлы ru.po и ru.mo.
В ноябре 2007 года barmagloth решил создать свой вариант перевода интерфейса OpenKore на русский язык: Русификатор OpenKore. В наследство остался файл: OpenKoreRUS-005-alpha.rar [116.37 Кб]. Как выяснилось, OpenKore не везде была подготовлена к локализации.
В коде OpenKore есть сообщения, которые нельзя просто локализовать. К сожалению, не все сообщения пропускаются через специальные функции T и TF. Поэтому иногда могут проскочить английские фразы.
Перевод с помощью Poedit
Создать локализацию интерфейса можно самостоятельно с помощью программы Poedit, которую следует скачать и установить. Также следует скачать самую свежую версию OpenKore
1. Открываем существующий файл openkore\src\po\ru.po.
2. Проверяем основные настройки (возможно, в актуальной версии POedit эти параметры называются по другому):
- Файл => Установки... => Парсеры
- Удаляем всё, кроме Perl.
- Выделяем Perl и жмём кнопку Править
- В список расширений пишем: *.pm;*.pl
- Каталог => Настройки...=> Информация о проекте
- язык Russian
- страна Russian Federation
- кодировка utf-8
- кодировка исходного кода utf-8
- Каталог => Настройки... => Пути
- путь к базе: .
- пути: .. и ../..
- Каталог => Настройки... => Ключевые слова
- Ключевые слова: T и TF.
3. Теперь, после нажатия кнопки "Обновить каталог" - мы получаем актуальный .po-файл. К старым, уже переведённым фразам добавились все новые фразы, появившиеся со времени последнего перевода интерфейса. При сохранении файла .po программа POedit автоматически генерирует двоичный файл .mo, который и будет использоваться OpenKore для локализации интерфейса.
- Сводка об обновлении
- Таким образом, добавилось 550 новых строк, и 196 строк устарели со времени последнего перевода.
- Обновлённый каталог
- Как видно из скриншота, после обновления каталога
- 1457 - общее количество строк
- 220 - строки с неточностями в переводе
- 330 - абсолютно новые строки, ни разу не переведённые
- Перевод обновлённого каталога
- Теперь у нас в руках актуальный файл ru.po, в котором 330 новых строк и 220 строк с непонятным переводом. Но их ещё надо перевести. Для этого выделяем в списке любую строку и в самом нижнем поле ввода вводим перевод фразы на русский. И так в данном случае 550 раз.
- При переводе следует соблюдать правила:
- Сколько строк в оригинале - столько строк в переводе.
- Количество и порядок переменных вида %d, %s должны совпадать в оригинале и переводе.
Скрипт update.sh
В OpenKore предусмотрен специальный скрипт openkore\src\po\update.sh, отвечающий за обновление всех файлов с локализацией. Под обновление понимается добавление новых английских фраз в po-файлы, которые переводчики должны будут перевести. Порядок его действий следующий:
- Извлечение подлежащих локализации сообщений из исходного кода. Для этого используется утилита xgettext. В конце её работы создаётся файл-шаблон - openkore.pot.
- Настройка заголовочной информации в файле openkore.pot, например - кодировка utf-8.
- Слияние .pot-файла с существующими файлами локализации - .po. Если для указанного языка ещё нет .po-файла, то он создаётся с нуля.
- Компиляция .po-файла в понятный OpenKore файл с расширением .mo. Именно .mo-файл используется при локализации интерфейса.
Таким образом обновляются файлы локализации сразу для всех поддерживаемых OpenKore языков. После этого остаётся только открыть обновлённый .po-файл, перевести пару появившихся в последних ревизиях сообщений, сохранить изменения и прислать в GitHub запрос на слияние.
Содержимое update.sh:
#!/usr/bin/env bash # This script extracts strings from the OpenKore source code, # updates openkore.pot and *.po, and compiles *.po to .mo. set -e LANGUAGES="tl id pt zh_CN zh th ko ru de vi" echo "Extracting messages from source..." xgettext --from-code=utf-8 -L Perl --force-po -o openkore.pot --keyword=T --keyword=TF \ --add-comments='Translation Comment:' \ ../../openkore.pl \ ../functions.pl \ ../*.pm \ ../Actor/*.pm \ ../Actor/Slave/*.pm \ ../AI/*.pm \ ../AI/Slave/*.pm \ ../Interface/*.pm \ ../Interface/Console/*.pm \ ../Interface/Wx/*.pm \ ../Interface/Wx/List/*.pm \ ../Interface/Wx/List/ItemList/*.pm \ ../Interface/Wx/StatView/*.pm \ ../Network/*.pm \ ../Network/Receive/*.pm \ ../Network/Receive/kRO/*.pm \ ../Network/Send/*.pm \ ../Network/Send/kRO/*.pm \ ../Poseidon/*.pm \ ../Task/*.pm \ ../Utils/*.pm sed 's/charset=CHARSET/charset=UTF-8/; s/^# SOME DESCRIPTIVE TITLE\.$/# LANGUAGE translation for OpenKore/; s/# This file is distributed under the same license as the PACKAGE package\./# This file is distributed under the same license as OpenKore./' openkore.pot > openkore.pot.2 mv openkore.pot.2 openkore.pot for LANG in $LANGUAGES; do FILE="$LANG.po" if ! -f "$FILE" ; then echo "Creating new language file $FILE..." sed 's/CHARSET/UTF-8/' openkore.pot > "$FILE" else echo "Updating $FILE..." msgmerge -Uv "$FILE" openkore.pot msgfmt "$FILE" -o "$LANG.mo" fi done
Примечание: Windows-версию утилит, используемых в файле update.sh (xgettext, msgmerge, msgfmt) можно взять из установленной программы POedit. Однако сам пакетный файл update.sh под Windows не запустится (для этого следует использовать WSL или cygwin).
Запуск update.sh в cygwin
Cygwin позволяет запускать скрипты Linux, в ОС Windows. Чтобы в Windows запустить файл update.sh, потребуются пакеты bash и gettext-devel из cygwin.
- На сайте www.cygwin.com следует скачать файл-установщик: setup-x86_64.exe.
- Запустить скаченный файл setup-x86_64.exe. В моём случае я выбирал следующие варианты настроек:
- Choose A Download Source: Install from Internet
- Root Directory: c:\cygwin
- Local Package Directory: c:\install.all\cygwin
- Select Your Internet Connection: Direct Connection
- Choose A Download Site: http://cygwin.lowprofilelinks.com
- Setup Alert: ok
- Процесс установки ещё не закончился, теперь необходимо выбрать пакеты, которые будут установлены.
- Процесс установки завершается предложением разместить ярлыки для запуска cygwin'а на Рабочем столе и меню Пуск.
- Запускаем cygwin ярлыком с Рабочего стола.
- Переходим в папку, где находится файл update.sh. Если файл update.sh находится в Windows в папке c:\openkore_ready\src\po\ , то этот в cygwin будет выглядеть так: /cygdrive/c/openkore_ready/src/po/ . Можно выполнить команду для смены каталога:
cd /cygdrive/c/openkore_ready/src/po/
- Запускаем файл update.sh командой
./update.sh
- Ждём, пока скрипт завершит работу и получаем обновлённый файл шаблона openkore.pot, а также новые *.po файлы.