Какие варианты локализации существуют в WebWorks?
-
22-10-2019 - |
Вопрос
Я создаю версию приложения для Android для WebWorks, локализованную на 39 языков.
На данный момент все локализации находятся в XML-файлах с парами ключ-значение, по одному файлу на каждый язык.Каждый языковой файл содержит около 400 строк (примерно 40 тысяч на файл).
Пользователи могут изменить язык, используемый в приложении.
Какие варианты решения такой ситуации есть в WebWorks?
Я был бы более чем рад преобразовать файлы ресурсов в любой другой формат, чтобы сделать работу с ними на платформе более удобной.
Решение
Вы можете сохранить каждый набор языков в файле JavaScript, который вы включаете/загружаете по мере необходимости.(Я преобразовал данные XML в «Карту», поскольку это просто пары ключ/значение)
например(только игнорировать мои переводы...Я только что погуглил, я ни в коем случае не владею испанским)
//Spanish File "lang_spanish.js"
var translations = {
"lose_a_turn": "pierde un turno",
"do_not_pass_go": "huele como un camello",
"take_a_card": "tener una tarjeta de",
"you_win_the_game":"sin motocicletas en la biblioteca",
"you_can_not_move":"desbordamiento de la pila puede ser un lugar divertido"
};
В вашей <head>
Затем вы можете иметь общий тег сценария, источник которого вы просто меняете по мере необходимости.
например
<script id="langFile" src="js/lang_english.js"></script>
Если вам нужен другой язык, просто удалите этот скрипт из DOM и добавьте новый.например
function switchLang(langName){
var headTag = document.getElementsByTagName('head')[0];
var scriptFile = document.getElementById('langFile');
headTag.removeChild(scriptFile);
var newScript = document.createElement('script');
newScript.id = 'langFile';
newScript.src = 'js/lang_' + langName + '.js';
headTag.appendChild(newScript);
}
//call with:
switchLang('spanish');
Альтернативой может быть загрузка всех 39 языков по умолчанию...но это кажется излишним, учитывая, что большинству захочется только 1 или 2.