[英]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.