我是否应该阻止在模型中进行I18n翻译调用

时间:2014-11-25 22:42:36

标签: ruby-on-rails model-view-controller rails-i18n

这只是一个关于代码风格的问题。

我正在使用Ruby on Rails 4中的多语言应用程序。我个人的感觉告诉我理想情况下不要在模型中调用I18n.t(),我只是认为模型方法应该是一致的,而不是依赖于不同的环境像当前用户的语言环境一样,特别是因为I18n通常与视图有关。我虽然对此有一些疑问:

  1. 你认为这一般是一个好规则吗?
  2. 如何在自定义验证方法中管理错误消息?我应该为这种情况制作例外吗?
  3. 我应该如何管理我们在表单字段中使用的自定义键,例如部分翻译的collection_select的显示文本?有没有办法在这些场合使用视图帮助器,这几乎就像为这些场景构建模型方法一样方便?

1 个答案:

答案 0 :(得分:3)

  1. 是。翻译属于视图层,只属于它的“显示”部分(即,不是API,仍然是视图)
  2. 错误消息应该足够标准,以便您可以通过在视图中迭代它们并获得分段翻译来正确翻译它们。不幸的是,由于语言中句子的语法顺序不同,这并不总是可行的。将这些翻译移到模型中仍然没有用。 ActiveRecord的Errors类具有与ActiveModel类似的翻译钩子,因此视图可以依赖它们,而不会在模型本身中注入任何i18n。
  3. 选择助手通常可以将lambda作为标签生成器,您可以使用和滥用视图路径和相关的i18n键以及您需要的任何内容,而无需在模型中注入任何内容。如有疑问,请使用演示者并在其中注入I18n。