Locale Guide: различия между версиями

Материал из Руководство по OpenKore
Перейти к навигации Перейти к поиску
м вспомним ещё и barmagloth
Нет описания правки
 
(не показаны 33 промежуточные версии 2 участников)
Строка 1: Строка 1:
Обычно у OpenKore английский интерфейс. Однако предусмотрена возможность локализации, то есть перевода интерфейса на любой язык. Например - русский. В файле [[:Category:Sys.txt|sys.txt]] есть параметр [[locale]], который как раз и отвечает за то, какой интерфейс OpenKore будет использовать.
== Переключение интерфейса OpenKore на другой язык ==
В случае с русским языком интерфейса в файле [[:Category:Sys.txt|sys.txt]] следует прописать
Обычно у OpenKore английский интерфейс. Однако предусмотрена возможность локализации, то есть перевода интерфейса на любой язык. Например - русский. В файле [[:Category:sys.txt|sys.txt]] есть параметр [[locale]], который отвечает за язык интерфейса OpenKore.
 
Список поддерживаемых языков можно посмотреть в папке с ботом: [https://github.com/OpenKore/openkore/tree/master/src/po src\po\]
 
В случае с русским языком интерфейса в файле [[:Category:sys.txt|sys.txt]] следует прописать
  locale ru
  locale ru


Темой русификации интерфеса уже занимались. Например '''DeniZka''' в июле 2007 создал тему [http://rofan.ru/viewtopic.php?t=2662 Первая РусЕфикация бота].
: Пример интерфейса:
[[Файл:Locale_Guide_16.png]]


'''DeniZka''': "OpenKore предусматривает возможность локализации бота на любой язык. Для этого в папке '''src\po\''' распологаются файлы '''*.po''' и '''*.mo''', которые являются стандартом для локализации Perl - приложений."


Таким образом, для локализации OpenKore нужно:
== Предистория ==
# В файле [[:Category:Sys.txt|sys.txt]] прописать параметр '''locale ru'''.
# Иметь два файла с собственно переводом интерфейса: '''src\po\ru.po''' и '''src\po\ru.mo'''.


В ноябре 2007 года DeniZka из-за нехватки времени прекратил переводить интерфейс. В процессе перевода возник ряд интересных вопросов. Так, например, было высказано предположение, что должно быть два перевода - от первого и от третьего лица. При создании файлов с переводом, DeniZka пользовался сайтом [http://www.poedit.net poedit.net]. В наследие остался файл [http://rofan.ru/download/file.php?id=710 ru.zip] [93.8 Кб], содержащий файлы '''ru.po''' и '''ru.mo'''.
Темой русификации интерфейса уже занимались. Например '''DeniZka''' в июле 2007 создал тему [http://ro-fan.ru/viewtopic.php?t=2662 Первая РусЕфикация бота]. [https://ro-fan.ru/viewtopic.php?f=29&t=2662&p=84352 Там же] начат поиск и работа над ошибками в переводе.


О том, как делается локализация всяческих программ, можно прочитать в следующей статье: [http://domservisa.com/2009/05/21/rusifikaciya-wordpress-pravilnyj-perevod-temy-ili-plagina-dlya-cms/ Русификация Wordpress или зачем нужны файлы .mo и po].
В ноябре 2007 года DeniZka из-за нехватки времени прекратил переводить интерфейс. В процессе перевода возник ряд интересных вопросов. Так, например, было высказано предположение, что должно быть два перевода - от первого и от третьего лица. В наследие остался файл [https://ro-fan.ru/download/file.php?id=710 ru.zip] [93.8 Кб], содержащий файлы '''ru.po''' и '''ru.mo'''.


В ноябре 2007 года '''barmagloth''' решил создать свой вариант перевода интерфейса OpenKore на русский язык: [http://rofan.ru/viewtopic.php?f=29&t=3808 Русификатор OpenKore]. В наследство остался файл: [http://rofan.ru/download/file.php?id=1027 OpenKoreRUS-005-alpha.rar] [116.37 Кб].
В ноябре 2007 года '''barmagloth''' решил создать свой вариант перевода интерфейса OpenKore на русский язык: [https://ro-fan.ru/viewtopic.php?f=29&t=3808 Русификатор OpenKore]. В наследство остался файл: [https://ro-fan.ru/download/file.php?id=1027 OpenKoreRUS-005-alpha.rar] [116.37 Кб].
Как выяснилось, OpenKore не везде была подготовлена к локализации.  
Как выяснилось, OpenKore не везде была подготовлена к локализации.  


'''barmagloth''': "Потихоньку, полегоньку, правлю недоделки разработчиков, которые заключаются в том, что им лениво написать TF("<сакраментальная фраза>") и они пишут просто "<сакраментальная фраза>"."
В коде OpenKore есть сообщения, которые нельзя просто локализовать. К сожалению, не все сообщения пропускаются через специальные функции '''T''' и '''TF'''. Поэтому иногда могут проскочить английские фразы.
 
 
== Перевод с помощью Poedit ==
 
Создать локализацию интерфейса можно самостоятельно с помощью программы [https://poedit.net Poedit], которую следует скачать и установить. Также следует скачать самую [https://github.com/OpenKore/openkore/archive/refs/heads/master.zip свежую версию OpenKore]
 
 
'''1.''' Открываем существующий файл openkore\src\po\'''ru.po'''.
 
:[[Файл:Locale_Guide_8.png]]
 
'''2.''' Проверяем основные настройки (возможно, в актуальной версии POedit эти параметры называются по другому):
;Файл => Установки... => Парсеры
:Удаляем всё, кроме 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 раз.
 
:При переводе следует соблюдать правила:
::Сколько строк в оригинале - столько строк в переводе.
::Количество и порядок переменных вида '''%d''', '''%s''' должны совпадать в оригинале и переводе.
 
== Скрипт update.sh ==
В OpenKore предусмотрен специальный скрипт openkore\src\po\'''[https://github.com/OpenKore/openkore/blob/master/src/po/update.sh 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).


Ни один из этих вариантов перевода так и не вошел в официальную SVN-версию OpenKore. Первого апреля 2010 года, то есть спустя аж три года, проект OpenKore так и остаётся без русского варианта интерфейса.
=== Запуск update.sh в cygwin ===
Cygwin позволяет запускать скрипты Linux, в ОС Windows. Чтобы в Windows запустить файл '''update.sh''', потребуются пакеты '''bash''' и '''gettext-devel''' из cygwin.
# На сайте www.cygwin.com следует скачать файл-установщик: [https://www.cygwin.com/setup-x86_64.exe 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'''
#Процесс установки ещё не закончился, теперь необходимо выбрать пакеты, которые будут установлены.
##В поле поиска набираем '''bash''', проверяем, чтобы первый столбик был отмечен крестом. <br>[[File:cygwin-install-11.png]]<br><br>
##В поле поиска набираем '''gettext''', ставим крест напротив '''gettext-devel''', который весит около 2 МБ. <br>[[File:cygwin-install-18.png]]<br><br>
##Пакеты выбраны, '''Далее'''.
#Процесс установки завершается предложением разместить ярлыки для запуска cygwin'а на ''Рабочем столе'' и меню ''Пуск''.
#Запускаем cygwin ярлыком с ''Рабочего стола''.
#Переходим в папку, где находится файл '''update.sh'''. Если файл '''update.sh''' находится в Windows в папке c:\openkore_ready\src\po\ , то этот в cygwin будет выглядеть так: /cygdrive/c/openkore_ready/src/po/ . Можно выполнить команду для смены каталога: <pre>cd /cygdrive/c/openkore_ready/src/po/</pre>
#Запускаем файл '''update.sh''' командой <pre>./update.sh</pre> [[File:cygwin-install-19.png]]<br><br>
#Ждём, пока скрипт завершит работу и получаем обновлённый файл шаблона '''openkore.pot''', а также новые '''*.po''' файлы.
<br>[[File:cygwin-install-20.png]]

Текущая версия от 00:50, 24 декабря 2024

Переключение интерфейса 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-файлы, которые переводчики должны будут перевести. Порядок его действий следующий:

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

  1. На сайте www.cygwin.com следует скачать файл-установщик: setup-x86_64.exe.
  2. Запустить скаченный файл setup-x86_64.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, проверяем, чтобы первый столбик был отмечен крестом.


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


    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


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