簡體   English   中英

如何為jquery-localize動態加載數據

[英]How to dynamically load data for jquery-localize

我正在使用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)文本。 未解析與jquery-localize要求相同。 那么,如何使用這些數據作為源呢?

您可以讓ajax / jquery引用以php / asp或任何首選的服務器端語言編寫的服務器端頁面。 然后讓該頁面根據您傳遞給該頁面的條件以JSON格式返回文本。

所以,這是解決方案。 科比讓我知道該怎么做(通過單獨的頁面加載翻譯文件),但需要進行一些修改。 首先,我們需要修改jquery-localize.js文件。 本地化功能中,更改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);
            }

通知注釋了原始行。 在我的情況下,我們不會對“文件名”做任何更改,因此,如果要執行實現,請務必小心(可能需要檢查請求的語言)。

工作的另一部分是更改本地化的初始化方式。 而不是標准的$("[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,使其不搜索文件,但直接加載翻譯。

我希望這會幫助有類似問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM