Ruby on rails 我应该防止在模型中进行I18n转换调用吗
Ruby on rails 我应该防止在模型中进行I18n转换调用吗,ruby-on-rails,model-view-controller,rails-i18n,Ruby On Rails,Model View Controller,Rails I18n,这只是一个关于代码风格的问题
我正在RubyonRails4中开发一个多语言应用程序。我个人的感觉告诉我,理想情况下不要在模型中调用I18n.t(),我只是认为模型方法应该是一致的,并且不依赖于不同的环境情况,比如当前用户的区域设置,特别是因为I18n通常与视图相关。不过,我有几个问题要问:
一般来说,你认为这是一条好规则吗
如何管理自定义验证方法中的错误消息?我应该为这种情况做些例外吗
我应该如何管理表单字段中使用的自定义键,例如部分翻译的集合的显示文本?有没有一种方法可以在这些情况下使用视图
这只是一个关于代码风格的问题
我正在RubyonRails4中开发一个多语言应用程序。我个人的感觉告诉我,理想情况下不要在模型中调用I18n.t()
,我只是认为模型方法应该是一致的,并且不依赖于不同的环境情况,比如当前用户的区域设置,特别是因为I18n通常与视图相关。不过,我有几个问题要问:
一般来说,你认为这是一条好规则吗
如何管理自定义验证方法中的错误消息?我应该为这种情况做些例外吗
我应该如何管理表单字段中使用的自定义键,例如部分翻译的集合的显示文本
?有没有一种方法可以在这些情况下使用视图辅助工具,即(几乎)与这些情况下的建筑模型方法一样方便
对。翻译属于视图层,只属于视图层的“显示”部分(即,不属于API,它仍然是视图)
错误消息应该足够标准,这样您就可以通过在视图中迭代它们并获得分段转换来正确地转换它们。不幸的是,这并不总是可能的,因为语言中句子的语法顺序不同。但是,将这些翻译移到模型中是没有用的。ActiveRecord的Errors类与ActiveModel一样具有用于转换的挂钩,因此视图可以依赖这些挂钩,而无需在模型本身中注入任何i18n
选择帮助器通常可以将lambda作为标签生成器,您可以使用和滥用视图路径和相对i18n键以及您需要的任何内容,而无需在模型中注入任何内容。如有疑问,请使用演示者并在其中注入I18n
对。翻译属于视图层,只属于视图层的“显示”部分(即,不属于API,它仍然是视图)
错误消息应该足够标准,这样您就可以通过在视图中迭代它们并获得分段转换来正确地转换它们。不幸的是,这并不总是可能的,因为语言中句子的语法顺序不同。但是,将这些翻译移到模型中是没有用的。ActiveRecord的Errors类与ActiveModel一样具有用于转换的挂钩,因此视图可以依赖这些挂钩,而无需在模型本身中注入任何i18n
选择帮助器通常可以将lambda作为标签生成器,您可以使用和滥用视图路径和相对i18n键以及您需要的任何内容,而无需在模型中注入任何内容。如有疑问,请使用演示者并在其中注入I18n
对。翻译属于视图层,只属于视图层的“显示”部分(即,不属于API,它仍然是视图)
错误消息应该足够标准,这样您就可以通过在视图中迭代它们并获得分段转换来正确地转换它们。不幸的是,这并不总是可能的,因为语言中句子的语法顺序不同。但是,将这些翻译移到模型中是没有用的。ActiveRecord的Errors类与ActiveModel一样具有用于转换的挂钩,因此视图可以依赖这些挂钩,而无需在模型本身中注入任何i18n
选择帮助器通常可以将lambda作为标签生成器,您可以使用和滥用视图路径和相对i18n键以及您需要的任何内容,而无需在模型中注入任何内容。如有疑问,请使用演示者并在其中注入I18n
对。翻译属于视图层,只属于视图层的“显示”部分(即,不属于API,它仍然是视图)
错误消息应该足够标准,这样您就可以通过在视图中迭代它们并获得分段转换来正确地转换它们。不幸的是,这并不总是可能的,因为语言中句子的语法顺序不同。但是,将这些翻译移到模型中是没有用的。ActiveRecord的Errors类与ActiveModel一样具有用于转换的挂钩,因此视图可以依赖这些挂钩,而无需在模型本身中注入任何i18n
选择帮助器通常可以将lambda作为标签生成器,您可以使用和滥用视图路径和相对i18n键以及您需要的任何内容,而无需在模型中注入任何内容。如有疑问,请使用演示者并在其中注入I18n
这听起来很有希望。我将尝试将lambda添加到select helpers中,看看是否有效。至于错误消息:我不知道如何做,我目前使用errors.add
添加消息。我该怎么做?将转换键用作错误消息,然后在视图中转换该消息?(这不能与Rails自己的消息一起工作。)你能给我举个例子说明我应该如何做验证错误,或者给我指出正确的方向吗?对于错误和属性名称等,I18n已经通过ActiveModel::Translate
支持ActiveRecord。看见您只需为每个特定错误定义实际消息,并在视图中调用.full\u messages
。对于selects,实际上您可以为select的options\u from\u collection\u中的标签和值函数提供一个可调用函数。这听起来很有希望。我将尝试将lambda添加到select helpers中,看看是否有效。至于错误消息:我不知道如何做,我目前使用errors.add
添加消息。我该怎么做?将转换键用作错误消息,然后在视图中转换该消息?(这不能与Rails自己的消息一起工作。)你能给我举个例子说明我应该如何做验证错误,或者给我指出正确的方向吗?对于错误和属性名称等,I18n已经通过ActiveModel::Translate
支持ActiveRecord。看见您只需为每个说明符定义实际消息