Locale Guide

Материал из Руководство по OpenKore
Перейти к: навигация, поиск

Локализация

В процессе написания данного гайда была создана локализация, то есть перевод OpenKore на русский язык. Чтобы установить и включить локализацию, нужно:

  1. Скачать архив с файлами локализации - src_ro-7.zip [753.1 Кб].
  2. Достать из архива файлы ru.po и ru.mo, положить их в папку openkore\src\po\.
  3. В файле sys.txt из папки control прописать locale ru.

Как видно из следующего рисунка, переведено 97% сообщений интерфейса OpenKore. Локализации подверглись также не затронутые ранее исходные файлы, например был переведён Wx-интерфейс.

Locale Guide 15.png

Locale Guide 16.png

Как говорил 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 нужно:

  1. В файле sys.txt прописать параметр locale ru.
  2. Иметь два файла с собственно переводом интерфейса: 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.

Locale Guide 8.png

2. Проверяем основные настройки:

Файл => Установки... => Парсеры
Удаляем всё, кроме Perl.
Locale Guide 1.png
Locale Guide 2.png
Выделяем Perl и жмём кнопку Править
В список расширений пишем: *.pm;*.pl
Locale Guide 3.png
Каталог => Настройки...=> Информация о проекте
язык Russian
страна Russian Federation
кодировка utf-8
кодировка исходного кода utf-8
Locale Guide 4.png
Каталог => Настройки... => Пути
путь к базе: .
пути: .. и ../..
Locale Guide 5.png
Каталог => Настройки... => Ключевые слова
Ключевые слова: T и TF.
Locale Guide 6.png

3. Теперь, когда нажимаем кнопку "Обновить каталог" Locale Guide 7.png - мы получаем актуальный .po-файл. К старым, уже переведённым фразам добавились теперь все новые фразы, появившиеся со времени последнего перевода интерфейса. При сохранении файла .po программа POedit автоматически генерирует двоичный файл .mo, который и будет использоваться OpenKore для локализации интерфейса.

Обновление каталога
Locale Guide 9.png
Сводка об обновлении
Locale Guide 10.png
Locale Guide 11.png
Таким образом, добавилось 550 новых строк, и 196 строк устарели со времени последнего перевода.
Обновлённый каталог
Locale Guide 12.png
Как видно из скриншота, после обновления каталога
1457 - общее количество строк
220 - строки с неточностями в переводе
330 - абсолютно новые строки, ни разу не переведённые
Перевод обновлённого каталога
Теперь у нас в руках актуальный файл ru.po, в котором 330 новых строк и 220 строк с непонятным переводом. Но их ещё надо перевести. Этим и следует сейчас заняться - выделяем в списке любую строку и в самом нижнем поле ввода вводим перевод фразы на русский. И так в данном случае 550 раз. При нажатии на кнопку "Сохранить", программа Poedit автоматически скомпилирует файл ru.mo, который и нужен OpenKore для локализации интерфейса.
При переводе следует соблюдать правила:
Сколько строк в оригинале - столько строк в переводе.
Количество и порядок переменных вида %d, %s должны совпадать в оригинале и переводе.

update.sh

В OpenKore предусмотрен специальный скрипт openkore\src\po\update.sh, отвечающий за обновление файлов с локализацией. Порядок его действий следующий:

  1. Извлечение подлежащих локализации сообщений из исходного кода. Для этого используется утилита xgettext. В конце её работы создаётся файл-шаблон - openkore.pot.
  2. Настройка заголовочной информации в файле openkore.pot, например - кодировка utf-8.
  3. Слияние .pot-файла с существующими уже файлами локализации - .po. Если для указанного языка ещё нет .po-файла, то он создаётся с нуля.
  4. Компиляция .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.

  1. На сайте www.cygwin.com следует скачать файл-установщик: setup.exe.
  2. Запускаем скачанный файл setup.exe. В моём случае я выбирал следующие варианты настроек:
    1. Choose A Download Source: Install from Internet
    2. Root Directory: c:\cygwin
    3. Local Package Directory: c:\install.all\cygwin
    4. Select Your Internet Connection: Direct Connection
    5. Choose A Download Site: http://cygwin.lowprofilelinks.com
    6. Setup Alert: ok
  3. Процесс установки ещё не закончился, теперь предлагается выбрать пакеты, которые будут установленны.
    1. В поле поиска набираем bash, проверяем, чтобы первый столбик был отмечен крестом.
      cygwin-install-11.png

    2. В поле поиска набираем gettext, ставим крест напротив gettext-devel, который весит около 2 МБ.
      cygwin-install-18.png

    3. Пакеты выбраны, Далее.
  4. Процесс установки завершается предложением разместить ярлыки для запуска cygwin'а на Рабочем столе и меню Пуск.
  5. Запускаем cygwin ярлыком с Рабочего стола.
  6. Переходим в папку, где находится файл update.sh. Если файл update.sh находится в Windows в папке c:\openkore_ready\src\po\ , то этот путь из под cygwin'а будет выглядеть так: /cygdrive/c/openkore_ready/src/po/ . А сама команда для смены каталога:
    cd /cygdrive/c/openkore_ready/src/po/
  7. Запускаем файл update.sh командой
    ./update.sh
    cygwin-install-19.png

  8. Ждём, пока скрипт завершит работу и получаем обновлённый файл шаблона openkore.pot, в котором проставленны актуальнные ссылки на исходный код, а также освеженные файлы *.po, в которых, возможно, появились новые фразы для перевода.
    cygwin-install-20.png