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

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


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


Таким образом, для локализации OpenKore нужно:
'''Примечание:''' Windows-версию утилит, используемых в файле update.sh (xgettext, msgmerge, msgfmt) можно взять из установленной программы POedit. Однако сам пакетный файл update.sh под Windows не запустится (для этого следует использовать WSL или cygwin).
# В файле [[:Category:Sys.txt|sys.txt]] прописать параметр '''locale ru'''.
# Иметь два файла с собственно переводом интерфейса: '''src\po\ru.po''' и '''src\po\ru.mo'''.


В ноябре 2007 года DeniZka из-за нехватки времени прекратил переводить интерфейс. В процессе перевода возник ряд интересных вопросов. Так, например, было высказано предположение, что должно быть два перевода - от первого и от третьего лица. При создании файлов с переводом, DeniZka пользовался сайтом [http://www.poedit.net/]. В наследие остался файл [http://rofan.ru/download/file.php?id=710 ru.zip] [93.8 Кб], содержащий файлы '''ru.po''' и '''ru.mo'''.
=== Запуск 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 файлы.