客户端本地化

时间:2012-10-26 11:13:36

标签: javascript .net localization assemblyinfo client-side

我想做客户端本地化(即嵌入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中以进行客户端本地化吗?

1 个答案:

答案 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函数包含第二个文件任何