我使用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要求相同。那么,如何使用这些数据作为它的来源?
答案 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,它不会搜索文件,但会直接加载翻译。
我希望这能帮助有类似问题的人。