Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Как смержить перевод приложения на Android

Никак не найду как делается объединение строк для переводов в 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
Hello! World
И есть values-ru/strings.xml
Привет!
как объединить эти 2 файла, чтобы на выходе получить
Привет! World
Если некто не слышал об "Официальном" выходе из ситуации, то да, придётся просто свой парсинг написать. Просто странно, что стандартный механизм для перевода в 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); }

Комментариев нет:

Отправить комментарий