在构建网站时,我需要多次支持多种语言,但尚未提出将语言字符串从服务器传递到客户端的好方法,以便它们可以在Javascript中用于对话框,消息等。
您对此有何建议或经历?
编辑:我倾向于动态生成javascript语言文件,如果有人知道任何可以执行此操作的第三方库,我将不胜感激。
答案 0 :(得分:2)
我通常会将所有字符串规范移动到单独的文件中,然后在页面上包含相应的文件,如下所示:
在st / js / messages-ru.js中:
hello = "Привет"
bye = "Пока"
在st / js / messages-en.js中:
hello = "Hello!"
bye = "Good bye!"
生成页面时,您可以确定语言并在页面上插入相应的js文件。
答案 1 :(得分:1)
在即时处理语言环境中生成javascript的语言相关部分。对于性能缓存特定于语言的javascript,一旦为给定的语言环境生成。这样可以避免维护太多特定于语言的javascripts
答案 2 :(得分:1)
我们将对象传递给需要翻译的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(); %>);'
这将创建上面手工创建的等效对象。
答案 3 :(得分:0)
没有好方法来完成这个问题。但是我或我们的团队有一个沉重的方法,在js中为不同的语言编写不同的字符串,例如,在英国,我们写了一个名为uk.js的js,在fr中我们写了一个fr .js用于对话框或消息中的静态表达。
答案 4 :(得分:0)
如果您正在使用ASP.NET AJAX框架,则ScriptManager控件包含各种机制,用于从本地化的.resx文件自动生成javascript,并根据其余的标准CultureInfo设置向用户发送正确的语言。网站正在使用。有关教程,请参阅this MSDN article。