4

假设我正在构建一个相当大的基于浏览器的交互式媒体应用程序,并且我有以下要求:

  • 仅限 Webkit(让我们假设桌面上的 chrome)
  • 平板电脑和台式机版本,用户界面可能略有不同
  • 完全客户端:没有任何服务器交互
  • 可能的最佳性能
  • 完全国际化
  • 我将构建很多这样的应用程序
  • 长期可维护性不是优先事项(这里没有 TDD)
  • 从项目到项目的重用和利用是优先事项
  • 设计师称雄 - 大量时间将花在外观和动画上
  • 非常短的开发时间表
  • 小而精的团队

我正在寻求以前做过类似事情的人的建议,以避免事先做出一些错误的选择。

我对 JS 和 CSS3 了如指掌,但我足够聪明/经验丰富/老到知道使用别人开发的架构框架而不是自己开发的架构框架是有好处的。但是,只有当我编写的应用程序符合框架开发人员的目标时,这些好处才有效。

我花了一天时间试图了解 SenchaTouch 并得出结论,它非常适合构建与我正在构建的完全不同的东西。(以此类推,SenchaTouch/ExtJS 是 Swing,我正在寻找 Flash。)此外,Sencha 似乎费了很大力气将 Javascript 更改为基于类的系统,而不是仅仅接受/拥抱它是一个原型- 为基础的系统。这让我很烦。

我花了一天时间学习所有关于backbone.js的知识,我真的很喜欢它,除了1)我真的不需要任何服务器交互的东西(尽管我可能会用它来引导资源文件中的所有UI元素) , 和 2) 它完全强调保持观点是最新的。但也许这是件好事?我不清楚这一点。

我查看了 knockout.js,尽管它确实很担心保持视图的更新,但我查看的演示都没有解决国际化问题。我的 i18n 需求很简单:我的应用程序中出现的每个文本字符串都需要来自一个表格(并且可以随时更改使用的语言)。当我在 knockout.js 主页中看到这样的内容时:

optionsCaption="choose..."

我担心根据运行时变量设置使该字符串动态化是多么容易。也就是说,如果我想写相当于:

optionsCaption=l10n("choose")

有没有一种相当轻松的方法来做到这一点,以及让语言更改自动在整个 UI 中传播涉及到什么?

有什么强烈的建议可以让我看看另一个框架,这可能更合适?

另外,我假设我们将使用 jquery/ui 或 zepto,可能是 zepto,以消除动态页面更新和动画内容中的大量样板。关于架构的那一部分有什么有用的想法吗?

4

5 回答 5

7

我自己对此很好奇(一个淘汰赛 + i18n 搜索让我在这里),我用 Jed 实用程序和 Akasha 建议的 knockoutjs 做了一个快速而肮脏的 JSFiddle。我还不得不使用一点 JQuery。

看看这里:http: //jsfiddle.net/yUE7a/5/

我创建了一个绑定到您当前语言环境的自定义绑定 (i18n)。i18n 绑定从元素中获取文本并将其用作键并将其替换为来自 Jed 的翻译文本。

语言环境本身是作为 ko.obervable 实现的,因此您可以更改语言环境值并让 knockoutjs 一次性更新所有翻译标签(您可能必须在 init 和 update 之间缓存键,因为它被 $( 元素覆盖).html() 调用)。

一个问题仍然存在,当我将 Jed 包含在 JsFiddle 中时,所有样式都消失了。我不知道为什么,如果这是 Jed + KnockoutJS 或仅 Jed + JsFiddle 的实际问题。

我以前从未使用过 Jed,所以我不知道它是否符合您的目的,但它应该足够简单,可以用另一个 i18n 框架替换 Jed。

希望这可以帮助!

于 2012-04-05T10:43:40.180 回答
0

只需从服务器端生成所有 html 并使用语言标签。我使用 PHP 执行此操作并使用 knockoutjs 和 sammyjs。html 使用所有语言的标签,并且每种语言都有一个不同的 PHP 文件,其中包含该语言中的所有标签及其值。

此解决方案的“缺点”是您可能需要在更改语言时重新加载页面(如果您要使用单页应用程序解决方案,这可能只是一个缺点)。

于 2012-03-14T08:44:35.073 回答
0

我还没有尝试过这些,但它们似乎很容易与任何框架一起使用:

javascript的gettext:http://slexaxton.github.com/Jed/

灵活的复数和性别形式:https ://github.com/SlexAxton/messageformat.js

于 2012-03-13T22:38:21.027 回答
0

我最近遇到了同样的问题,并且由于有很多 JS 工具可以做到这一点,它们(据我发现)都不能很好地与 KnockoutJS 配合使用,并且能够在不刷新页面的情况下更改语言。

因此,我创建了一个我自己的工具来处理它,称为KnockoutJS-i18n

它适用于简单文本和变量:

<div data-bind="html: i18n.get('hello')"></div>
<div data-bind="html: i18n.get('hello_name',{'name' : 'John Doe'})"></div>
于 2013-10-31T10:10:24.310 回答
0

我想你会发现有很多JavaScript 可以满足你的需求。如果您想快速了解各种框架的感受,我建议您查看TodoMVC 项目,其中相同的应用程序已在 18 个不同的 JavaScript 框架中实现,包括您为这个问题标记的那些。我刚刚在这个项目中添加了一个 GWT 实现 - 而 GWT 是我认为值得考虑的技术。它具有许多“企业”特性,例如内置 i18n,加上使用强类型 Java 语言使得重用变得更加容易。

于 2012-03-13T15:53:57.923 回答