[Скрипт] Перенос локализации между языковыми файлами

Android

Хранитель порядка
Регистрация
9 Июн 2006
Сообщения
678
Реакции
621
Написал небольшой скрипт в помощь локализаторам (переводчикам) языковых файлов IPB.
В чем суть: когда выходят новые версии приложений то их приходится заново переводить, самый простой способ это взять перевод предыдущей версии, сравнить с языковым файлом новой версии, соответствующие строки перенести из переведенного файла, и допереводить новые. Программы построчного сравнения такие как 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);
 

Вложения

  • xml_translate.zip
    817 байт · Просмотры: 1
Описаньеце малость сумбурное, но думаю те кому надо поймут =)
При небольшой доработке также можно переносить перевод и для файлов настроек.
 
Назад
Сверху