Как правильно делать локализацию JavaScript-приложений?

Здравствуйте!

Я делаю расширение для Google Chrome, которое, как известно, пишется на HTML и JavaScript. Расширение у меня мультиязычное: на английском и на русском. Но передо мной встала проблема: я не знаю, как правильнее всего сделать локализацию расширения, чтобы это не было колхозом, а также чтобы из-за выбранного решения не пришлось в будущем наступать на какие-нибудь грабли.

Собственно, это к вопросу не относится, но уточню, что в Google Chrome переводы записываются в JSON-файл:

"local_storage_usage": {
	"message": "Local storage"
},
"last_error_occured": {
	"message": "Extension last error occured"
},
"no_error": {
	"message": "There is no error."
},
...

А потом вызываются встроенным методом chrome.i18n.getMessage("local_storage_usage"). Я, не зная как сделать лучше, создаю страницы примерно таким образом:

$("#debug").html('<h1 class="h3">' + chrome.i18n.getMessage("debug_page") + '</h1>' +
'<h2 class="h4">' + chrome.i18n.getMessage("key_permissions") + '</h2>' +
'<div id="permissions">' + chrome.i18n.getMessage("loading") + '</div>' +
'<hr>' +
'<p>' + chrome.i18n.getMessage("reset_alarm_warn") + '</p>');

Но такой подход не кажется мне практичным. Подскажите, как бы вы поступили на моем месте?

Спасибо.
  • Вопрос задан
  • 483 просмотра
Решения вопроса 1
Murmurianez
@Murmurianez
JavaScript Developer
Чтобы не было колхозом - в первую очередь прикрутите шаблонизатор - рекомендую Handlebars. В остальном - вроде норм.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@VZVZ
Reverse-Engineer, Software Developer, Architect
1) Не приходило ли в голову хранить в том JSON-файле перевод сразу всего куска HTML, а не по кусочкам? Тогда бы не пришлось ничего конкатенировать. Тогда в JS было бы достаточно:
$("#debug").html(chrome.i18n.getMessage("debug_page_html"));

Это и по производительности, пожалуй, было бы чуток быстрее.

2) не приходило ли в голову не искать какие-то готовые библиотеки с избыточным функционалом, а просто написать СВОЮ функцию-шаблонизатор, которая бы заполняла пропуски в шаблоне HTML.
Получится как-то так:
$("#debug").html(my_own_function(
  '<h1>{{debug_page}</h1><h2>{{key_permissions}}</h2>',
  chrome.i18n.getMessage("debug_page"),
  chrome.i18n.getMessage("key_permissions")
));

Это ведь не так уж и сложно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы