/**
* Многоязычность
*
* Основная задача класса - перевод интерфейса на различные языки.
* Большая часть переводов происходит на стороне сервера, для этого служит
* класс Language на PHP.
* Класс T работает полностью аналогичным образом, но занимается переводами
* только тех элементов интерфейса, которые динамически создаются именно
* на стороне клиента.
* С помощью этого класса также склонять слова в различных падежах.
* Переводы хранятся в каталоге language. Основной язык системы - русский,
* поэтому файл language/ru/ru.php почти пуст, а language/ru/ru.js и вовсе
* отсутствует.
*
* Файлы с переводами вызывают метод {@link setLanguage} и передают в него
* объект, ключами которого являются фразы для перевода, а значениями -
* переводы этих фраз на нужный язвк. Ключи сгруппированы в логические группы.
* Описание групп ключей полностью аналогично описанию в классе Language.
*
* Для примера см. файл language/en/en.js.
*/
var T = Object.extend({
language: null,
/**
* Сменить язык
*
* При смене языка интерфейс не перерисовывается. Этот метод используется
* ядром для выбора языка сразу после входа в систему.
*
* @param {Object} language Объект с переводами
*/
setLanguage: function(language)
{
this.language = language;
},
/**
* Выполнить перевод фразы на текущий язык
*
* @param {string} message Сообщение, которое необходимо перевести
*
* @param {string} [section=null] Код раздела
* или справочника, в котором необходмио выполнить перевод.
* Если перевод для этого раздела не найден,
* то будет выполнен поиск фразы среди общих переводов. Регистр важен.
* Примеры: 'Account', 'Contact', 'Task'
*
* @param {string} [type=null] Уточнение, где именно искать перевод.
* Регистр важен.
* Примеры: 'Card', 'Filter', 'Domain'
*
* @param {int} [section_type=1] Куда указывает section
* * 1 - искать перевод для раздела.
* * 2 - для справочника.
*
* @return {string} Переведенная строка. Если перевод не был найден, то
* возвращается исходная строка.
*
* @example <caption>Примеры выполнения перевода</caption>
* var message = T.t('Текст сообщения');
* var caption = T.t('Название') + '…';
*/
t: function (message, section, type, section_type) {
if (this.language == null) {
return message;
}
if (typeof(section) == 'undefined') {
section = null;
}
if (typeof(type) == 'undefined') {
type = null;
}
if (typeof(section_type) == 'undefined') {
section_type = 1;
}
var translate = message;
var where = section ? section : 'common';
where += type ? '&'+type : '';
// Если раздел
if (section && section_type == 1
&& typeof(this.language['sections']) != 'undefined'
&& typeof(this.language['sections'][where]) != 'undefined'
&& this.language['sections'][where][message]) {
translate = this.language['sections'][where][message];
}
// Если справочник (с типом - карточка, грид и т.д.)
else if (section && section_type == 2
&& typeof(this.language['dictionaries']) != 'undefined'
&& typeof(this.language['dictionaries'][where]) != 'undefined'
&& this.language['dictionaries'][where][message]) {
translate = this.language['dictionaries'][where][message];
}
// Если справочник (без указания типа)
else if (section && section_type == 2
&& typeof(this.language['dictionaries']) != 'undefined'
&& typeof(this.language['dictionaries'][section]) != 'undefined'
&& this.language['dictionaries'][section][message]) {
translate = this.language['dictionaries'][section][message];
}
// В общих справочниках
else if (section_type == 2
&& typeof(this.language['common&Dictionary']) != 'undefined'
&& this.language['common&Dictionary'][message]) {
translate = this.language['common&Dictionary'][message];
}
// Общее - с типом
else if (typeof(this.language[where]) != 'undefined'
&& this.language[where][message]) {
translate = this.language[where][message];
}
// Общее (кроме справочников)
else if (section_type != 2
&& typeof(this.language['common']) != 'undefined'
&& this.language['common'][message]) {
translate = this.language['common'][message];
}
return translate;
}
});