Android
Хранитель порядка
- Регистрация
- 9 Июн 2006
- Сообщения
- 682
- Реакции
- 660
- Автор темы
- #1
Написал небольшой скрипт в помощь локализаторам (переводчикам) языковых файлов IPB.
В чем суть: когда выходят новые версии приложений то их приходится заново переводить, самый простой способ это взять перевод предыдущей версии, сравнить с языковым файлом новой версии, соответствующие строки перенести из переведенного файла, и допереводить новые. Программы построчного сравнения такие как WinMerge не всегда удобно использовать, так как строки в двух xml файлах могут быть в разных местах, и надо сравнивать "word_key" ноды. Удобно было бы взять переведенный языковой файл и по "word_key" перенести весе переводенные строки в языковой файл новой версии, разработанный скрипт именно это и делает.
Данный скрипт заменяет значение word_default из файла $eng_xml_file ищет по ключу word_key значение word_default в переведенном файле $rus_xml_txt и делает замену. Результирующий файл сохраняется в $trn_xml_file.
В чем суть: когда выходят новые версии приложений то их приходится заново переводить, самый простой способ это взять перевод предыдущей версии, сравнить с языковым файлом новой версии, соответствующие строки перенести из переведенного файла, и допереводить новые. Программы построчного сравнения такие как WinMerge не всегда удобно использовать, так как строки в двух xml файлах могут быть в разных местах, и надо сравнивать "word_key" ноды. Удобно было бы взять переведенный языковой файл и по "word_key" перенести весе переводенные строки в языковой файл новой версии, разработанный скрипт именно это и делает.
Данный скрипт заменяет значение word_default из файла $eng_xml_file ищет по ключу word_key значение word_default в переведенном файле $rus_xml_txt и делает замену. Результирующий файл сохраняется в $trn_xml_file.
Код:
<?php
/**
* Invision Power Translator
*
* @author Android
* @email dr.droid@gmail.com
* @copyright (c) 2012 Android.
* @package IP.Board
* @version 0.1
*
*/
########################################################################################
# CONFIG
########################################################################################
//Полный путь к русскому языковому файлу (берем из переведенной версии):
$rus_xml_file = '';
//Полный путь к языковому файлу требующему перевода:
$eng_xml_file = '';
//Полный путь к языковому файлу который будет создан в результате сляния:
$trn_xml_file = '';
########################################################################################
////////////////////////////////////////////////////////////////////////////////////////
//
$rus_xml_txt = file_get_contents($rus_xml_file);
$eng_xml_txt = file_get_contents($eng_xml_file);
$rus_xml = new SimpleXMLElement($rus_xml_txt, LIBXML_NOCDATA);
$eng_xml = new SimpleXMLElement($eng_xml_txt, LIBXML_NOCDATA);
////////////////////////////////////////////////////////////////////////////////////////
//Подготовка массива русских значений ($m_rus):
$rus_result = $rus_xml->xpath('languagegroup/lang');
$m_rus = array();
while(list( , $node) = each($rus_result)) {
$m_rus["{$node->word_key}"] = "{$node->word_default}";
}
//print_r($m_rus);//отладка
////////////////////////////////////////////////////////////////////////////////////////
//Подготовка массива английских значений ($m_eng):
$eng_result = $eng_xml->xpath('languagegroup/lang');
$m_eng = array();
while(list( , $node) = each($eng_result)) {
$m_eng["{$node->word_key}"] = "{$node->word_default}";
}
////////////////////////////////////////////////////////////////////////////////////////
//Собственно замена английских значений на русские ($m_rus - > $m_eng) и записываем в
//файл $trn_xml_file
$trn_xml_txt = str_replace($m_eng, $m_rus, $eng_xml_txt);
file_put_contents($trn_xml_file, $trn_xml_txt);