我想做客户端本地化(即嵌入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”打开。此外,资源文件已经公开,并且也设置了embed选项。
知道如何将外部资源文件嵌入到javascript中以进行客户端本地化吗?
答案 0 :(得分:0)
将此信息包含在您的信息页中:
<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
此文件与您的页面位于同一目录中,并且可以由该目录中的所有页面共享(通过修改,它可以执行多个目录或站点,或只有一个文件,但保持简单,以便您可以根据需要进行调整)< / p>
我建议尽可能使用JSON对象作为变量,以便您可以与服务器端共享一个本地化文件(例如php)如果需要,可能需要为任何本地化的javascript函数包含第二个文件任何