javascript: массив объектов для простой локализации - PullRequest
1 голос
/ 20 июня 2011

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

var weekdaysLegend=new Array(
{'it-it':'Lunedì', 'en-us':'Monday'}, 
{'it-it':'Martedì', 'en-us':'Tuesday'},
{'it-it':'Mercoledì', 'en-us':'Wednesday'},
{'it-it':'Giovedì', 'en-us':'Thursday'}, 
{'it-it':'Venerdì', 'en-us':'Friday'},
{'it-it':'Sabato', 'en-us':'Saturday'}, 
{'it-it':'Domenica', 'en-us':'Sunday'}
);

Я знаю, что мог бы реализовать что-то вроде ассоциативного массива (учитывая тот факт,что я знаю, что javascript не предоставляет ассоциативные массивы, но объекты с похожей структурой), но мне нужно перебирать массив, используя числовые индексы вместо меток.Итак, я хотел бы обработать это в цикле for с конкретными значениями (например, j-1 или такими индексами).Правильна ли моя структура?Предоставив переменную "lang" в качестве значения между "it-it" или "en-us", я попытался напечатать weekdaysLegend [j-1] [lang] (или weekdaysLegend [j-1] .lang, я думаюЯ перепробовал все!), Но в результате получается [объект объекта].Очевидно, я что-то упускаю .. Есть идеи?

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Структура выглядит хорошо.Вы должны иметь возможность доступа к значениям следующим образом:

weekdaysLegend[0]["en-us"]; // returns Monday

Конечно, это также будет работать для значений в переменных, таких как:

weekdaysLegend[i][lang];

for (var i = 0; i < weekdaysLegend.length; i++) {
    alert(weekdaysLegend[i]["en-us"]);
}

Это предупредит дни недели.

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

1 голос
/ 06 марта 2013

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

Предположение: 1000 слов x4 языка генерируют 'xx-xx' + само слово ...

То есть 1000 строк pr.language + те же 7 символов, которые используются только для языка = впустую bandwitdh ...

  • клиент / браузер должен будет ПРОСМОТРЕТЬ ИХ ВСЕ, прежде чем он сможет выполнить какой-либо поиск в массивах.

вот мой подход:

Почему бы не сгенерировать javascript для одного языка за раз, если пользователь выбирает другой язык, просто ответьте (отправьте) правильный javascript в браузервключить?

Либо хранить отдельный javascript с большим массивом для каждого языка, либо использовать язык в качестве параметра для серверного сценария, иначе:

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

Если динамический подход слишком тяжел для производительности веб-сервера, публикуйте / генерируйте файлы каждый раз, когда происходит изменение /добавлен новый языковой стандарт - все, что вам нужно, это проверка «языкового компоновщика» в верхней части страницы, чтобы проверить, какой языковой файл следует использовать на сервере браузера.

Заключение

Этот подход удалит много повторяющихся идентификаторов "языка", если список локалей станет большим.

0 голосов
/ 20 июня 2011

Вы должны получить доступ к индексу из массива, а затем к значению, указав ключ от объекта.

Это прекрасно работает для меня: http://jsfiddle.net/98Sda/.

var day = 2;
var lang = 'en-us';

var weekdaysLegend = [
{'it-it':'Lunedì', 'en-us':'Monday'}, 
{'it-it':'Martedì', 'en-us':'Tuesday'},
{'it-it':'Mercoledì', 'en-us':'Wednesday'},
{'it-it':'Giovedì', 'en-us':'Thursday'}, 
{'it-it':'Venerdì', 'en-us':'Friday'},
{'it-it':'Sabato', 'en-us':'Saturday'}, 
{'it-it':'Domenica', 'en-us':'Sunday'}
];

alert(weekdaysLegend[day][lang]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...