1. Важное и срочное обновление IPB 3.4.5 - https://nulled.cc/threads/243375/

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

Тема в разделе "IPB", создана пользователем Android, 6 фев 2012.

Модераторы: Maybe
  1. Android

    Android

    Регистр.:
    10 июн 2006
    Сообщения:
    642
    Симпатии:
    538
    Написал небольшой скрипт в помощь локализаторам (переводчикам) языковых файлов 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);
     

    Вложения:

    SocMaster нравится это.
  2. Android

    Android

    Регистр.:
    10 июн 2006
    Сообщения:
    642
    Симпатии:
    538
    Описаньеце малость сумбурное, но думаю те кому надо поймут =)
    При небольшой доработке также можно переносить перевод и для файлов настроек.