提问人:user1776847 提问时间:10/26/2012 最后编辑:user1776847 更新时间:7/6/2015 访问量:1138
客户端本地化
client side localization
问:
我想做客户端本地化(即嵌入 javascript 和资源文件)。一切都很好,直到我们在同一个项目(“XXX.Web”)中同时拥有 js 文件和资源文件。
作为需求的一部分,我必须将所有资源文件移出到“XXX.LocalizedResources”项目,同时我仍然需要对 js 文件进行客户端本地化。
我在 Web 项目的AssemblyInfo.vb中尝试了以下操作:
以前:
程序集: System.Web.UI.WebResource(“XXX.Web.GlobalStrings.js”, “文本/JavaScript”)
程序集: System.Web.UI.ScriptResource(“XXX.Web.GlobalStrings.js”, “XXX.Web.Resources”、“资源”)
后:
程序集: System.Web.UI.WebResource(“XXX.Web.GlobalStrings.js”, “文本/JavaScript”)
程序集: System.Web.UI.ScriptResource(“XXX.Web.GlobalStrings.js”, “XXX.LocalizedResources.Resources”、“资源”)
(请忽略以上几行的语法错误 ) 我现在得到的错误如下:
找不到适合指定区域性的任何资源,或者 中立文化。确保“XXX.LocalizedResources.Resources”是 在编译时正确嵌入或链接到汇编“XXX.Web”中, 或者所需的所有卫星组件都是可装载的且完全可装载的 签署。
通过一些研究,我发现只有 Web 或 web.extension 项目可以在“Assembly: System.Web.UI.ScriptResource (...)”中使用。
我尝试在“XXX.LocalizedResources”的 AssemblyInfo 中添加“Assembly: InternalsVisibleTo(”XXX.Web“)”,但这无助于使资源文件打开为“XXX.Web”。此外,资源文件已经是公开的,并且还设置了嵌入选项。
知道如何将外部资源文件嵌入到客户端本地化的 javascript 中吗?
答:
在您的页面中包含以下内容:
<script>
//declare string variable defaults here
function UrlExists(url){
var http = new XMLHttpRequest();
try{http.open('HEAD', url, false);
http.send();
return http.status!=404;
}catch(e){return false;}
}
var lang=navigator.userLanguage || navigator.language.toLowerCase();
var langsrc = document.createElement("script");
langsrc.type = "text/javascript";
if(UrlExists(lang+".js")){
langsrc.src=lang+".js";
}else{
langsrc.src="en-us.js";
}
document.body.appendChild(langsrc);
//rest of code here:
</script>
然后,对于每种受支持的语言,设置一个文件,例如 en-us.js
//en-us.js localization for....
//set language specific variables here
//define language specific functions
此文件与您的页面位于同一目录中,并且可以由该目录中的所有页面共享(经过修改,它可以执行多个目录或站点或仅执行一个文件,但要保持简单,以便您可以根据口味调味)
如果可能的话,我建议对你的变量使用JSON对象,这样你就可以与你的服务器端(例如php)共享一个本地化文件,如果你需要的话,你可能需要为任何本地化的javascript函数包含第二个文件。
上一个:在循环期间获取客户端确认
评论