Locale Guide
Содержание
Локализация
В процессе написания данного гайда была создана локализация, то есть перевод OpenKore на русский язык. Чтобы установить и включить локализацию, нужно:
- Скачать архив с файлами локализации - src_ro-7.zip [753.1 Кб].
- Достать из архива файлы ru.po и ru.mo, положить их в папку openkore\src\po\.
- В файле sys.txt из папки control прописать locale ru.
Как видно из следующего рисунка, переведено 97% сообщений интерфейса OpenKore. Локализации подверглись также не затронутые ранее исходные файлы, например был переведён Wx-интерфейс.
Как говорил barmagloth, в коде OpenKore есть сообщения, которые нельзя вот так сразу локализовать. То есть не все сообщения пропускаются через специальные функции T и TF. Поэтому иногда могут проскочить английские фразы. Кроме того, нужно будет исправлять орфографические ошибки и неверный перевод.
На данный момент (09.04.2010) имеем следующий архив, со всеми файлами из папки openkore\src\po\: src_ro-7.zip [753.1 Кб].
Работа над ошибками
На форуме www.ro-fan.ru в теме Первая РусЕфикация бота начат поиск и работа над ошибками в переводе.
Предистория
Обычно у OpenKore английский интерфейс. Однако предусмотрена возможность локализации, то есть перевода интерфейса на любой язык. Например - русский. В файле sys.txt есть параметр locale, который как раз и отвечает за то, какой интерфейс OpenKore будет использовать. В случае с русским языком интерфейса в файле sys.txt следует прописать
locale ru
Темой русификации интерфеса уже занимались. Например DeniZka в июле 2007 создал тему Первая РусЕфикация бота.
DeniZka: "OpenKore предусматривает возможность локализации бота на любой язык. Для этого в папке src\po\ распологаются файлы *.po и *.mo, которые являются стандартом для локализации Perl - приложений."
Таким образом, для локализации OpenKore нужно:
- В файле sys.txt прописать параметр locale ru.
- Иметь два файла с собственно переводом интерфейса: src\po\ru.po и src\po\ru.mo.
В ноябре 2007 года DeniZka из-за нехватки времени прекратил переводить интерфейс. В процессе перевода возник ряд интересных вопросов. Так, например, было высказано предположение, что должно быть два перевода - от первого и от третьего лица. При создании файлов с переводом, DeniZka пользовался сайтом poedit.net. В наследие остался файл ru.zip [93.8 Кб], содержащий файлы ru.po и ru.mo.
О том, как делается локализация всяческих программ, можно прочитать в следующей статье: Русификация Wordpress или зачем нужны файлы .mo и po.
В ноябре 2007 года barmagloth решил создать свой вариант перевода интерфейса OpenKore на русский язык: Русификатор OpenKore. В наследство остался файл: OpenKoreRUS-005-alpha.rar [116.37 Кб]. Как выяснилось, OpenKore не везде была подготовлена к локализации.
barmagloth: "Потихоньку, полегоньку, правлю недоделки разработчиков, которые заключаются в том, что им лениво написать TF("<сакраментальная фраза>") и они пишут просто "<сакраментальная фраза>"."
Ни один из этих вариантов перевода так и не вошел в официальную SVN-версию OpenKore. Первого апреля 2010 года, то есть спустя аж три года, проект OpenKore так и остаётся без русского варианта интерфейса.
Poedit
Создать локализацию интерфейса можно самостоятельно с помощью программы Poedit, которую следует скачать и установить. Также следует иметь самую свежую svn-версию исходников OpenKore, которую лучше всего скачать в отдельную папку с этого адреса
https://openkore.svn.sourceforge.net/svnroot/openkore/openkore/trunk
Чтобы не начинать локализацию OpenKore с нуля, стоит скачать оставшийся от DeniZka файл ru.zip [93.8 Кб], распаковать и положить файлы ru.po и ru.mo в папку openkore\src\po\.
1. Открываем существующий файл openkore\src\po\ru.po.
2. Проверяем основные настройки:
- Файл => Установки... => Парсеры
- Удаляем всё, кроме 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 раз. При нажатии на кнопку "Сохранить", программа Poedit автоматически скомпилирует файл ru.mo, который и нужен OpenKore для локализации интерфейса.
- При переводе следует соблюдать правила:
- Сколько строк в оригинале - столько строк в переводе.
- Количество и порядок переменных вида %d, %s должны совпадать в оригинале и переводе.
update.sh
В OpenKore предусмотрен специальный скрипт openkore\src\po\update.sh, отвечающий за обновление файлов с локализацией. Порядок его действий следующий:
- Извлечение подлежащих локализации сообщений из исходного кода. Для этого используется утилита xgettext. В конце её работы создаётся файл-шаблон - openkore.pot.
- Настройка заголовочной информации в файле openkore.pot, например - кодировка utf-8.
- Слияние .pot-файла с существующими уже файлами локализации - .po. Если для указанного языка ещё нет .po-файла, то он создаётся с нуля.
- Компиляция .po-файла в понятный OpenKore файл с расширением .mo. Именно .mo-файл используется при локализации интерфейса.
Таким образом обновляются файлы локализации сразу для всех поддерживаемых OpenKore языков. После этого остаётся только открыть обновлённый .po-файл, перевести пару появившихся в последних ревизиях сообщений, и сохранить изменения - Poedit автоматически скомпилирует свежий .mo-файл.
Содержимое 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" 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), но всегда можно написать аналогичный пакетный файл для Windows.
Запуск в cygwin
Cygwin позволяет установить Linux-приложения, которые были специальным образом скомпилированны, чтобы их можно было запускать под Windows. То есть это не виртуальная машина с Linux на борту. Чтобы под Windows запустить файл update.sh, потребуются пакеты bash и gettext-devel из cygwin.
- На сайте www.cygwin.com следует скачать файл-установщик: setup.exe.
- Запускаем скачанный файл setup.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, в которых, возможно, появились новые фразы для перевода.