【发布时间】:2011-01-21 06:35:18
【问题描述】:
在构建网站时,我多次需要支持多种语言,但还没有想出一种将语言字符串从服务器传递到客户端的好方法,以便它们可以在 Javascript 中用于对话,消息等。
您对此有何建议或经验?
编辑:我倾向于即时生成 javascript 语言文件,如果有人知道任何可以执行此操作的第三方库,我将不胜感激。
【问题讨论】:
标签: javascript .net web-applications
在构建网站时,我多次需要支持多种语言,但还没有想出一种将语言字符串从服务器传递到客户端的好方法,以便它们可以在 Javascript 中用于对话,消息等。
您对此有何建议或经验?
编辑:我倾向于即时生成 javascript 语言文件,如果有人知道任何可以执行此操作的第三方库,我将不胜感激。
【问题讨论】:
标签: javascript .net web-applications
我通常将所有字符串规范移动到单独的文件中,然后在页面上包含适当的文件,如下所示:
在 st/js/messages-ru.js 中:
hello = "Привет"
bye = "Пока"
在 st/js/messages-en.js 中:
hello = "Hello!"
bye = "Good bye!"
页面生成时,可以确定语言,在页面上插入合适的js文件。
【讨论】:
动态生成 javascript 的语言相关部分来处理语言环境。一旦为给定的语言环境生成了特定于语言的 javascript,就可以进行性能缓存。这样可以避免维护太多特定于语言的 javascripts
【讨论】:
我们将一个对象传递给需要翻译的 JavaScript 方法,并从服务器端代码填充该对象:
<script type="text/javascript">
var dialogl10n = {
caption: '<%= Resources.GetString(x => x.DialogCaption) %>',
okButton: '<%= SharedResources.GetTerm(x => x.Ok) %>'
cancelButton: '<%= SharedResources.GetTerm(x => x.Cancel) %>'
};
</script>
在javascript函数中:
Foo.Bar.doSomething = function(l10n) {
alert(l1n0.caption);
}
我们正在考虑增强它以自动创建 JSON 对象:
onClick='Foo.Bar.doSomething(<%= Resources.GetPackageAsJson(); %>);'
这将创建上面手动创建的等效对象。
【讨论】:
没有很好的方法来解决这个问题。但是我或我们的团队有一个繁重的方法,在 js 中为不同的语言编写不同的字符串,例如,在 uk 我们编写一个名为 uk.js 的 js,在 fr 我们编写一个 fr .js 用于对话框或消息中的静态表达式。
【讨论】:
如果您使用的是 ASP.NET AJAX 框架,则 ScriptManager 控件包含各种机制,用于从本地化的 .resx 文件自动生成 javascript,并根据其余部分的标准 CultureInfo 设置向用户发送正确的语言网站正在使用。教程见this MSDN article。
【讨论】: