Никак не найду как делается объединение строк для переводов в Android.
Есть набор values и есть его перевод values-ru как добавить не достающие строки в values-ru из values ? Ведь strings.xml обычный xml, искал как объединить xml под GNU/Linux ничего не нашёл, только платный утилиты с одной функцией объединения под windows.
Если есть какая-то утилита, то нужна под GNU/Linux, так и не понял можно ли это сделать с помощью xmlutils.
или подскажите эта функция есть только у Android Studio?
В общем нужны функции утилит gettext (msgmerge), только для Android переводов, думал это легко найти и Google нормально об этом рассказывает, но нет. ничего подобного я не нашёл.
Пример, того о чём речь:
Есть values/strings.xml
И есть values-ru/strings.xml
как объединить эти 2 файла, чтобы на выходе получить
Если некто не слышал об "Официальном" выходе из ситуации, то да, придётся просто свой парсинг написать. Просто странно, что стандартный механизм для перевода в Android не имеет таких нужных и простых функций, как: объединения и удаления уже отсутствующих строк, в файлах перводов
Ответ
Короче, ответа так и не услышал. Ближе и понятнее всего, работа была через php, так что наваял объединение андроид xml ресурсов. очень грубо и прямолинейно, только для типа "String". в общем то, что нужно было конкретно мне.
function mergeAndrLangXml($from, $to){
$xml_from = new DOMDocument();
$xml_from->load($from);
$xml_to = new DOMDocument();
$xml_to->load($to);
$xml_to->formatOutput =true;
$xpath_from = new DOMXpath($xml_from);
$xpath_to = new DOMXpath($xml_to);
//Удаляем отсутствующие в from из to
foreach( $xml_to->getElementsByTagName('string') as $v ){
$find = $xpath_from->query('string[@name="'.$v->getAttribute("name").'"]');
if($find->length == 0){
$v->parentNode->removeChild($v);
}
}
// Добавляем новые из from в to
foreach( $xml_from->getElementsByTagName('string') as $v ){
if($v->getAttribute('translatable') != 'false'){
$find = $xpath_to->query('string[@name="'.$v->getAttribute("name").'"]');
if($find->length == 0){
$newElem = $xml_to->createElement('string',$v->textContent);
$newElem->setAttribute('name',$v->getAttribute('name'));
$xml_to->getElementsByTagName('resources')->item(0)->appendChild($newElem);
}
}
}
//марафет
$file = $xml_to->saveXML($xml_to, LIBXML_NOEMPTYTAG);
$file = str_replace("ng><","ng>
<", $file);
$file = str_replace("
","
", $file);
file_put_contents($to,$file);
}
Комментариев нет:
Отправить комментарий