Основной объект JavaScript является ассоциативным массивом, таким образом, он может легко использоваться для хранения пар ключ/значение. Так с помощью JSON, Вы могли создать объект для каждой строки, которая будет локализована как это:
var localizedStrings={
confirmMessage:{
'en/US':'Are you sure?',
'fr/FR':'Est-ce que vous êtes certain?',
...
},
...
}
Тогда Вы могли получить версию локали каждой строки как это:
var locale='en/US';
var confirm=localizedStrings['confirmMessage'][locale];
Со сборкой-сателлитом (вместо resx файла) можно перечислить все строки на сервере, где Вы знаете язык, таким образом генерируя объект JavaScript только со строками для корректного языка.
Что-то вроде этого работает на нас (код VB.NET):
Dim rm As New ResourceManager([resource name], [your assembly])
Dim rs As ResourceSet =
rm.GetResourceSet(Thread.CurrentThread.CurrentCulture, True, True)
For Each kvp As DictionaryEntry In rs
[Write out kvp.Key and kvp.Value]
Next
Однако мы не нашли способ сделать это для .resx файлов все же, печально.
Вдохновленный SproutCore можно установить свойства строк:
'Hello'.fr = 'Bonjour';
'Hello'.es = 'Hola';
и затем просто выложенный надлежащая локализация на основе Вашей локали:
var locale = 'en';
alert( message[locale] );
Я использовал бы нотацию объекта/массива:
var phrases={};
phrases['fatalError'] ='On no!';
Тогда можно просто подкачать файл JS или использовать вызов Ajax для переопределения списка фразы.
Подробно останавливаясь на ответе diodeus.myopenid.com: Имейте свой код, выписывают файл, содержащий массив JS со всеми необходимыми строками, затем загружают соответствующий файл/сценарий перед другим кодом JS.
JSGettext отлично справляется со своей задачей - динамической загрузкой файлов GNU Gettext .po с использованием практически любого языка в серверной части. Google для "Динамической локализации Javascript с Gettext и PHP", чтобы найти пошаговое руководство для JSGettext с PHP (я бы опубликовал ссылку, но этот глупый сайт мне не позволит, вздох ...)
Изменить : это должно быть ссылкой
Способ MSDN
сделать это , в основном таков:
Вы создаете отдельный файл сценария для каждого поддерживаемого языка и культура. В каждый файл сценария вы включаете объект в формате JSON, который содержит значения локализованных ресурсов для этого языка и культуры.
Я не могу сказать вам лучшего решения вашего вопроса, но ИМХО, это худший способ сделать это. По крайней мере, теперь вы знаете, как этого НЕ делать.