如何为jquery-localize动态加载数据

时间:2015-08-31 14:20:08

标签: javascript jquery asp.net localization

我使用jquery-localize插件翻译我的页面。我想知道是否可以加载动态创建的JSON数据(从服务器发送)而不是使用预制文件。由于我的Web和桌面应用程序共享大约95%的文本(因此我使用相同的.resx文件),因此维护起来会容易得多。

所以,我使用ajax加载翻译:

$.ajax({
        type: "POST",
        url: "Helper.aspx/LocalizePage",
        data: '{"lang":"' + lang + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            if (msg.d != "error") {
                console.log(msg.d);
                translationData = msg.d;
                var translationTable = jQuery.parseJSON(msg.d);
            }
        },
        error: function (response) {
            var responseTextObject = jQuery.parseJSON(response.responseText);
            console.log(responseTextObject);
        }
    });

我已解析(translationTable)和未解析(translationData)文本。 Unparsed与jquery-localize要求相同。那么,如何使用这些数据作为它的来源?

2 个答案:

答案 0 :(得分:1)

你可以让你的ajax / jquery引用一个用php / asp或任何首选服务器端语言编写的服务器端页面。然后让该页面根据您传递给页面的条件以JSON格式返回文本。

答案 1 :(得分:0)

所以,这是解决方案。科比让我知道该做什么(通过单独的页面加载翻译文件),但它需要一些修改。首先,我们需要修改jquery-localize.js文件。在 localize 函数中,更改switch,使其如下所示:

switch (level) {
        case 1:
            intermediateLangData = {};
            if (options.loadBase) {
                //file = pkg + ("." + fileExtension);
                file = pkg;
                return jsonCall(file, pkg, lang, level);
            } else {
                return loadLanguage(pkg, lang, 2);
            }
            break;
        case 2:
            if (lang.length >= 2) {
                //file = "" + pkg + "-" + (lang.substring(0, 2)) + "." + fileExtension;
                file = pkg;
                return jsonCall(file, pkg, lang, level);
            }
            break;
        case 3:
            if (lang.length >= 5) {
                //file = "" + pkg + "-" + (lang.substring(0, 5)) + "." + fileExtension;
                file = pkg;
                return jsonCall(file, pkg, lang, level);
            }

注意评论原始行。我们不会对" filename"做任何改动。在我的情况下,如果你正在进行实施,请小心(你可能需要检查所请求的语言)。

工作的其他部分是改变本地化初始化的方式。我们将使用以下行代替标准$("[data-localize]").localize("filename");

$("[data-localize]").localize("Localization.aspx?lang=en-US");

Localize.aspx 是虚拟页面,其中包含以下PageLoad事件:

    protected void Page_Load(object sender, EventArgs e)
    {
        string json = "";
        var lang = Request.QueryString["lang"];
        if (lang.Length > 0)
        {
            json = WebHelper.GetAllTranslations(lang);
        }
        else
        {
            json = WebHelper.GetAllTranslations("en-US");
        }

        Response.Clear();
        Response.ContentType = "application/json; charset=utf-8";
        Response.Write(json);
        Response.End();
    }

WebHelper.GetAllTranslations(lang)返回带有翻译的JSON格式字符串,就像您将它们放在单个文件中以供常规使用一样。

总结 - 我们修改了jquery-localize.js而不是使用带翻译的文件,因此它直接从字符串加载翻译,从页面返回。这是简单而粗略的修改,但它确实有效。

当然,您可以使用AJAX调用或其他东西 - 重要的一部分是修改jquery-localize,它不会搜索文件,但会直接加载翻译。

我希望这能帮助有类似问题的人。