Локализация JavaScript приложений

11 комментариев

При написании скриптов, почти всегда необходимо выводить сообщения пользователю — уведомления об ошибках, предупреждения и другую информацию. Когда нужно изменить текст одного из таких сообщений, приходится копаться в громоздких скриптах и исправлять отдельные строки кода.

Чтобы облегчить себе работу, я написал небольшую функцию для удобной манипуляции пользовательскими сообщениями. Функция поддерживает произвольную вложенность объектов. Например, мы можем определить сообщения, которые будут выводиться при отправке комментария.

var messages = { ru_RU: {} };

messages.ru_RU.error = {
    comment: {
        add: 'Невозможно добавить комментарий',
        remove: 'Невозможно удалить комментарий',
        edit: 'Невозможно обновить комментарий'
    }
};

И получать к ним доступ через функцию tr(), разделяя вложенные свойства знаком двоеточия:

var msg1 = tr('error:comment:add');
var msg2 = tr('error:comment:remove');
var msg3 = tr('error:comment:edit');

Можно определить сообщения для других языков.

messages.en_US = {};
messages.en_US.error = {
    comment = {
        add: 'Cannot create comment',
        remove: 'Cannot remove comment',
        edit: 'Cannot update comment'
    }
};

Задать язык по умолчанию можно, изменив значение settings.lang:

settings: { lang: 'en_US' };

Или указав алиас языка во втором аргументе функции tr():

var msg1 = tr('error:comment:add', 'en_US');

Для того, чтобы начать использовать функцию — подключите ее прямо с репозитория на github:

<script src="https://raw.github.com/selevit/translate-js/master/translate.js"></script>

Теперь, для работы с сообщениями можно использовать следующий синтаксис:

/*
 * В переменную message1 попадет строка
 * из объекта messages[lang].error.comment.add
*/
var message1 = tr('error:comment:add');

/* 
 * А в переменную message2 — строка
 * из messages[lang].error.comment.edit
*/
var message2 = tr('error:comment:edit');

Комментарии к статье: 11

Подождите, загружаются комментарии...

Возможность комментировать эту статью отключена автором. Возможно, во всем виновата её провокационная тематика или большое обилие флейма от предыдущих комментаторов.

Если у вас есть вопросы по содержанию статьи, рекомендуем вам обратиться за помощью на наш форум.