语言翻译在哪里适合MVC模式?

Wal*_*ess 7 architecture model-view-controller web-applications

我正在构建一个使用MVC模式作为起始位置的多语言Web应用程序.应用程序有许多用户将与之交互的表单,其中许多表单将具有从数据库表中查找的字段,例如"省".

如果我需要在屏幕上以用户的语言显示这些列表中的选项,我可以看到以下几种方法:

  1. 在模型中. 在查询模型时,我可以提供我希望返回结果的语言.这将允许在无需更改的情况下显示模型中的数据的任何地方使用翻译.但是,这也意味着我的示例中的省模型(以及所有其他应用程序模型)现在需要知道如何进行语言翻译.
  2. 在控制器中. 我可以像往常一样在控制器操作中查询模型,然后创建一个'Translator'对象,我可以在完成操作之前将结果传递给它.这意味着每个控制器操作可能会复制相同的转换代码,违反DRY原则.
  3. 在视图中.由于通常期望应用程序的呈现存在于视图中,并且用户的语言不影响系统的业务逻辑,因此可以进行语言翻译属于此的论点.特别是考虑到页面还可能包含需要翻译的静态内容.这样做的缺点是它会使视图有些复杂化,特别是对于必须解决新翻译代码的前端设计人员而言.

对于Web应用程序的MCV模式,文本翻译属于何处,是否存在公认的最佳实践?如果我通过AJAX调用而不是在页面加载时加载选择列表选项,这会发生什么变化吗?

谢谢您的帮助!

Kev*_*ans 5

在视图中处理它的最佳位置.您的问题仅引用数据库中的动态数据,但您还必须处理视图中的静态信息.最好在同一个地方处理这两个.MVC中用于处理多种语言的常见做法是资源字符串,每种语言的单独视图或两者的组合.对于来自数据库资源的信息,字符串可以正常工作 您可以在数据库中存储令牌中的选项(该令牌可以是英文翻译),并且视图将从指定国家/地区的资源获得适当的翻译.在这篇博客文章中对这种方法有一个很好的详细解释.


小智 1

如果您需要翻译部分 UI,那么我将创建一个辅助方法,该方法将读取资源文件并输出该资源的翻译字符串。例如

@Translate("NewUserHeading")
Run Code Online (Sandbox Code Playgroud)

因此对于 UI,在 UI 中处理这个问题是有意义的。

如果您要在某个时刻翻译的数据可能会显示在 Flash 客户端或移动应用程序中,那么它应该由服务器翻译,并且应该与您的 MVC 应用程序无关。