4

我想做客户端本地化(即嵌入 javascript 和资源文件)。一切正常,直到我们在同一个项目(“XXX.Web”)中同时拥有 js 文件和资源文件。

作为要求的一部分,我必须将所有资源文件移出到“XXX.LocalizedResources”项目,而我仍然需要对 js 文件进行客户端本地化。

我在 Web 项目的 AssemblyInfo.vb 中尝试了以下内容:

前:

程序集:System.Web.UI.WebResource("XXX.Web.GlobalStrings.js", "text/javascript")

程序集:System.Web.UI.ScriptResource("XXX.Web.GlobalStrings.js", "XXX.Web.Resources", "Resources")

后:

程序集:System.Web.UI.WebResource("XXX.Web.GlobalStrings.js", "text/javascript")

程序集:System.Web.UI.ScriptResource("XXX.Web.GlobalStrings.js", "XXX.LocalizedResources.Resources", "Resources")

(请忽略以上行中的语法错误)我现在得到的错误如下:

找不到适合指定区域性或中性区域性的任何资源。确保“XXX.LocalizedResources.Resources”在编译时被正确嵌入或链接到程序集“XXX.Web”中,或者所有所需的附属程序集都是可加载的并且是完全签名的。

从很少的研究中我发现只有 web 或 web.extension 项目可以在“Assembly: System.Web.UI.ScriptResource (...)”中使用。

我尝试在“XXX.LocalizedResources”的 AssemblyInfo 中添加“Assembly: InternalsVisibleTo("XXX.Web")”,但这无助于将资源文件打开到“XXX.Web”。此外,资源文件已经公开,并且也设置了嵌入选项。

知道如何将外部资源文件嵌入到 javascript 中以进行客户端本地化吗?

4

1 回答 1

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    

该文件与您的页面位于同一目录中,并且可以由该目录中的所有页面共享(经过修改,它可以执行多个目录或站点或仅一个文件,但要保持简单,以便您可以品尝)

如果可能的话,我建议您为变量使用 JSON 对象,以便您可以与服务器端共享单个本地化文件(例如 php)如果需要,您可能需要为任何本地化的 javascript 函数包含第二个文件。

于 2012-11-21T08:22:48.663 回答