Model view controller 在MVC模式中,语言翻译在哪里合适?
我正在以MVC模式为起点构建一个多语言的web应用程序。该应用程序有许多用户将与之交互的表单,其中许多表单都有从数据库表(例如“省”)进行查找的字段 如果我需要在屏幕上以用户语言显示这些列表中的选项,我可以看到几种方法:Model view controller 在MVC模式中,语言翻译在哪里合适?,model-view-controller,web-applications,architecture,Model View Controller,Web Applications,Architecture,我正在以MVC模式为起点构建一个多语言的web应用程序。该应用程序有许多用户将与之交互的表单,其中许多表单都有从数据库表(例如“省”)进行查找的字段 如果我需要在屏幕上以用户语言显示这些列表中的选项,我可以看到几种方法: 在模型中。查询模型时,我可以提供希望返回结果的语言。这将允许在显示模型数据的任何地方使用转换,而不进行任何更改。然而,这也意味着我的示例中的省模型(加上所有其他应用程序模型)现在需要知道如何进行语言翻译 在控制器中。我可以像往常一样在控制器操作中查询模型,然后创建一个“Tran
谢谢你的帮助 老实说,与数据库的任何交互都应该在模型中处理,而这是模型中唯一处理的事情。解释/组织应在控制器中处理的数据。我想需要更多的信息来说明这个翻译是从哪里来的,以及它是如何工作的,才能真正给出一个可靠的答案。最好的处理方法是在视图中。您的问题只引用数据库中的动态数据,但您还必须处理视图中的静态信息。最好在同一个地方处理这两个问题。MVC中处理多种语言的一种常见做法是资源字符串、每种语言的单独视图或两者的组合。对于来自数据库的信息,可以使用资源字符串。您将在数据库中为列表中的选项存储一个标记(该标记可以是英文翻译),视图将从指定国家/地区的资源中获取适当的翻译。中有一个关于这种方法的详细解释。如果您需要翻译部分UI,那么我将创建一个助手方法,该方法将读取资源文件并输出该资源的翻译字符串。例如
@Translate("NewUserHeading")
因此,关于UI,在UI中处理这一点是有意义的
如果您要在某个时刻翻译的数据可能会显示在Flash客户端或移动应用程序中,那么它应该由服务器翻译,并且与您的MVC应用程序无关。视图将仅显示资源文件中的字符串。为区域设置包含正确的资源文件应该可以做到这一点。在Web应用程序中,通常是一个单一语言的JS文件,定义每个区域设置的UI字符串,例如strings.en-us.JS、strings.pt-br.JS等等 有些字符串确实是动态地来自服务器的,控制器不需要知道它,模型应该只获取本地化字符串并作为数据请求的一部分返回
所以它要么在视图中(如果是静态的),要么在模型中(如果是动态的)。控制器只需将数据从视图转换为模型,从模型到视图< P>,另一个非常重要的事情是什么时候翻译。如果您的页面上只有100个翻译,那么使用类似于
@Translate(“NewUserHeading”)
的每次翻译一次方法是可以的,但是如果您有更多的翻译呢
因为想想看,翻译是基于语言选择的,每页只发生一次,甚至每期只发生一次。剑道用户界面人员在他们的演示中这样做的方式是,当用户单击一种新语言时,将加载一组新的服务器文件。这意味着拥有类似于:/src/html/en-us/
/src/js/en-us/
/src/html/es/
/src/js/es/
等等 查看
这是为了更好的表现而付出更多努力的代价。目前翻译的最终用例是900多种语言 我想这会引发肥胖模型/瘦控制器和瘦模型/胖控制器之间的争论。“我是对的,你会把你的业务逻辑放在控制器上吗?”WallyAlless从未听过有人为胖控制器辩护。控制器是一个从视图到模型以及从模型到视图的薄层。控制器通常不被重用,它们只是胶水,不要用胶水填充代码。