【问题标题】:Translating views with HotTowel (Durandal framework) + VS2012使用 HotTowel(Durandal 框架)+ VS2012 翻译视图
【发布时间】:2013-03-12 05:26:37
【问题描述】:
我使用 Durandal 和 Breeze 开发了一个 ASP.NET MVC 解决方案。我需要将前端翻译成法语和荷兰语。如何进行 Durandal/淘汰赛?
在经典的 ASP.NET MVC 解决方案中,我们有机会将视图呈现在服务器端(感谢 razor)。
感谢您的帮助。
【问题讨论】:
标签:
asp.net
asp.net-mvc
breeze
durandal
hottowel
【解决方案1】:
为了扩展 Rob 尝试为 require.js 使用 i18n.js 插件的答案,这是我遵循的步骤(我正在 Visual Studio 中使用 Durandal 入门模板)。
- 下载i18n.js plugin并将其放入
App文件夹中。
-
创建一个 App/nls 文件夹,您将在其中放置 require.js 资源包,例如App/nls/welcomeBundle.js.
define({
"root": {
"displayName": "Welcome to the Durandal Starter Project!"
},
"fr-fr": true
});
-
您会看到我添加了一行来告诉 require.js 有可用的法语版本。这将在App/nls/fr-fr/welcomeBundle.js 中创建,我在下面做了一些(更改为 le :D)
define({
"displayName": "Welcome to le Durandal Starter Project!"
});
-
require.js 最初需要使用语言环境进行配置(不能动态完成)。所以在 main.js 文件中,我声明了下面的 getLocale() 函数,我用它来配置 require.js 的语言环境:
function getLocale() {
var locale = 'en-us';
if (localStorage) {
var storedLocale = localStorage.getItem('locale');
locale = storedLocale || locale;
}
return locale;
}
requirejs.config({
paths: {
'text': 'durandal/amd/text'
},
locale: getLocale()
});
-
然后我在welcome.js 模块中加载包并将其用于displayName 属性:
define(function(require) {
var bundle = require('i18n!nls/welcomeBundle');
return {
displayName: bundle.displayName,
...
}
});
-
然后我将语言环境设置为法语并通过 JavaScript 重新加载页面:
localStorage.setItem('locale', 'fr-fr');
location.reload();
希望有帮助:)
编辑:2013-04-04:我更新了上面的内容以在 main.js 文件中初始化语言环境,而不是在 shell.js 模块中,因为由于某种原因,语言环境不是在 shell 模块中加载包时正确使用。认为无论如何都应该尽快配置它。