javascript - 客户端本地化

标签 javascript .net localization assemblyinfo client-side

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

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

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

之前:

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

Assembly: System.Web.UI.ScriptResource("XXX.Web.GlobalStrings.js", "XXX.Web.Resources", "Resources")

之后:

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

Assembly: System.Web.UI.ScriptResource("XXX.Web.GlobalStrings.js", "XXX.LocalizedResources.Resources", "Resources")

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

Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "XXX.LocalizedResources.Resources" was correctly embedded or linked into assembly "XXX.Web" at compile time, or that all the satellite assemblies required are loadable and fully signed.

通过少量研究,我发现只有 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 函数包含第二个文件任何。

关于javascript - 客户端本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085881/

相关文章:

localization - DNN 中的模块本地化

wpf - 基于 LOCBaml 或 Resx 的本地化的最佳本地化方法是什么?

c++ - LoadString、静态库和可执行文件

javascript - 无法在 webpack 配置中使用 ES6 导入

javascript - 在同一网站中使用多个 Google Analytics 帐户

java - 数据透视表生成错误

c# - MemoryStream.WriteTo(Stream destinationStream) 与 Stream.CopyTo(Stream destinationStream)

javascript - Jquery 事件,简单的点击,如何以及为什么?

.net - .net 中的开源文档管理系统?

c# - 列表列表的交集