Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция поддержки мультиязычности. (https://javascript.ru/forum/misc/21838-funkciya-podderzhki-multiyazychnosti.html)

walik 27.09.2011 17:47

Условие поставить:
if (langArr[key])
   value = langArr[key];
else
   value = 'Not found';

with-love-from-siberia 27.09.2011 22:26

Для обычного сайта так делать смысла нет. А вот для самостоятельных приложений (HTA, XUL) так делать имеет смысл.

Цитата:

Сообщение от fiw
А если этого значения нету в массиве?

Лучше так сделайте:

var texts = {
    'Yes': 'Да', 
    'No': 'Нет', 
    'Cancel': 'Отмена'
};

function translate(value)
{
    return texts[value] || value;
};

alert([
    translate('Delete this file?'), 
    translate('Yes'), 
    translate('No')
]);

melky 28.09.2011 21:56

Цитата:

Сообщение от with-love-from-siberia (Сообщение 128338)
Для обычного сайта так делать смысла нет.

а что, если сайт на народе, и больше сделать ну никак не получится?

aiky 01.10.2011 21:46

var lc = function(id){
  if(!lc.base[id] || !lc.base[id][lc.is[lc.cur]]) return id;
  return lc.base[id][lc.is[lc.cur]];
};

lc.is = {
  'ru':0,
  'en':1
};

lc.cur = 'en';

lc.init = function(){
  var lc = navigator.browserLanguage;
  if(!lc) lc = navigator.language;
  lc = lc.substring(0,2).toLowerCase();
  if(typeof(lc.is[lc]) != 'undefined') this.cur = lc;
};

lc.base = {
  'ru':['Русский','Russian'],
  'en':['Английский','English'],
  ...
}

melky 01.10.2011 21:55

нет возможности запомнить язык (например, я хочу сидеть на английском).

lc.base сильно ударит по памяти, если фраз будет около девяти тысяч.

aiky 01.10.2011 22:09

Цитата:

Сообщение от melky
нет возможности запомнить язык (например, я хочу сидеть на английском).

Что мешает изменять lc.cur?

Цитата:

Сообщение от melky
lc.base сильно ударит по памяти, если фраз будет около девяти тысяч.

Цитата:

Сообщение от melky
а что, если сайт на народе, и больше сделать ну никак не получится?

Разве эти 2 фразы не противоречат друг другу?
Где-то память все равно придется выкусывать, чудес не бывает.

melky 01.10.2011 22:28

Цитата:

Сообщение от aiky (Сообщение 129101)
Что мешает изменять lc.cur?
Разве эти 2 фразы не противоречат друг другу?
Где-то память все равно придется выкусывать, чудес не бывает.

неа. я о другом говорил

для каждого слова будут храниться переводы для каждого языка?
lc.base = {
  'ru':['Русский','Russian'],
  'en':['Английский','English'],
  ...
}

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

aiky 01.10.2011 22:33

Цитата:

Сообщение от melky
можно просто хранить переводы только для текущего языка, и заменять существующий объект другим при обновлении значения языка

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

melky 01.10.2011 22:57

Цитата:

Сообщение от aiky (Сообщение 129116)
Так можно вообще не заморачиваться и подгружать асинхронно словарь при смене языка неважно из БД или файла, но речь ведь шла о полной реализации на стороне клиента.

бд в файле на языке JS - чем вам не реализация?

aiky 01.10.2011 23:02

Цитата:

Сообщение от melky
бд в файле на языке JS - чем вам не реализация?

чем это отличается от lc.base?

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

ru.js:
lc.base = {
  'ru':'Русский',
  'en':'Английский',
  ...
}



en.js:
lc.base = {
  'ru':'Russian',
  'en':'English',
  ...
}


Часовой пояс GMT +3, время: 20:47.