Локализуйте сообщения JavaScript и проверочный текст - PullRequest
2 голосов
/ 12 июня 2009

Я работаю над многоязычным веб-проектом. Например, одна часть проекта включает в себя несколько пользовательских карт Google, которые используют взаимодействие на стороне клиента с использованием jquery / .net для добавления точек на карту и сохранения их в базе данных.

Будет некоторая проверка и другие информационные сообщения (например, «Пожалуйста, добавьте хотя бы одну точку на карту»), которые должны быть локализованы.

Единственные варианты, о которых я могу думать прямо сейчас:

  1. Использование блока визуализации кода в JavaScript для извлечения локализованного сообщения из файла ресурса

  2. Используйте скрытые поля с meta: resourcekey для автоматического извлечения правильного локализованного сообщения из файла ресурсов с использованием текущей культуры и получения .val () в jquery при необходимости.

  3. Выполните вызов веб-службы для получения правильного сообщения по ключу / языку каждый раз, когда требуется сообщение.

Есть мысли, переживания?

EDIT:

Я бы предпочел использовать файлы ресурсов .net для обеспечения согласованности с остальной частью приложения.

Ответы [ 4 ]

4 голосов
/ 12 июня 2009

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

<WebMethod()> _    
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XmlSerializeString:=True)> _
    Public Function GetResources(ByVal resourceFileName As String, ByVal culture As String) As Dictionary(Of String, String)

        Dim reader As New System.Resources.ResXResourceReader(String.Format(Server.MapPath("/App_GlobalResources/{0}.{1}.resx"), resourceFileName, culture))
        If reader IsNot Nothing Then
            Dim d As New Dictionary(Of String, String)
            Dim enumerator As System.Collections.IDictionaryEnumerator = reader.GetEnumerator()
            While enumerator.MoveNext
                d.Add(enumerator.Key, enumerator.Value)
            End While
            Return d
        End If

        Return Nothing

    End Function

Затем я могу получить этот результат json и присвоить его локальной переменной:

// load resources
$.ajax({
    type: "POST",
    url: "mapping.asmx/GetResources",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: '{"resourceFileName":"common","culture":"en-CA"}',
    cache: true,
    async: false, 
    success: function(data) {
        localizations = data.d;                
    }
});

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

localizations.Key1

Единственная загвоздка в том, что если вы хотите назначить локализации глобальной переменной, вы должны запустить ее async = false, иначе у вас не будет доступных переводов, когда они вам понадобятся. Я пытаюсь использовать «получить», чтобы я мог кэшировать ответ, но это не работает для меня. Смотрите этот вопрос:

Невозможно вернуть словарь (из строки, строки) через веб-запрос GET ajax, работает с POST

3 голосов
/ 12 июня 2009

Я делал это раньше, когда есть скрытые поля, значения которых установлены в Page_Init () и Page_Load () с соответствующими значениями из глобальных и локальных файлов ресурсов. Код javascript будет работать с этими скрытыми значениями.

Код позади

this.hfInvalidCheckDateMessage.Value = this.GetLocalResourceObject("DatesRequired").ToString();

Page.aspx

$('#<%= btnSearch.ClientID %>').click(function(e) {
    if (!RequiredFieldCheck()) {
        var message = $("#<%= hfInvalidCheckDateMessage.ClientID %>").val();
        alert(message);
        e.preventDefault();
        $("#<%= txtAuthDateFrom.ClientID %>").focus();
     }
 });

Отказ от ответственности ... Не уверен, что это был лучший маршрут или нет, но, похоже, он работает хорошо.

2 голосов
/ 23 февраля 2012

Я реализовал модифицированную версию решения, описанного здесь: http://madskristensen.net/post/Localize-text-in-JavaScript-files-in-ASPNET.aspx

Я изменил его, чтобы разрешить использование нескольких имен файлов ресурсов, если это необходимо, путем изменения регулярного выражения и использования метода HttpContext.GetGlobalResourceObject для получения строки ресурса.

0 голосов
/ 12 июня 2009

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

var lang = 0 // 0 = english, 1 = french
var phrases=[]

phrases["plans"] = "Rate Plans and Features|Forfaits et options").split("|")

тогда вы выводите его как:

phrases["plans"][lang]

... добавить дополнительные столбцы по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...