Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails常用字符串(用于通知和错误消息等)_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails常用字符串(用于通知和错误消息等)

Ruby on rails Rails常用字符串(用于通知和错误消息等),ruby-on-rails,ruby,Ruby On Rails,Ruby,大约一年前,我决定确保每个包含非唯一文本的flash通知都能从模块中的方法中获取文本。我这样做的最初原因是为了避免反复输入相同的字符串。如果我想改变措辞,我可以在一个地方很容易地做到,而且重复同一件事的可能性就会降低 我的结局是: module Messages def format_error_messages(errors) errors.map {|attribute, message| "Error: #{attribute.to_s.titleize} #{me

大约一年前,我决定确保每个包含非唯一文本的flash通知都能从模块中的方法中获取文本。我这样做的最初原因是为了避免反复输入相同的字符串。如果我想改变措辞,我可以在一个地方很容易地做到,而且重复同一件事的可能性就会降低

我的结局是:

module Messages
    def format_error_messages(errors)
        errors.map {|attribute, message| "Error: #{attribute.to_s.titleize} #{message}.<br />"}
    end

    def error_message_could_not_find(object_name)
        "Error: Unable to find the specified " + object_name + "!"
    end

    def error_message_could_not_create(object_name)
        "Error: Unable to create the " + object_name + "!"
    end

    def error_message_could_not_save(object_name)
        "Error: Unable to save " + object_name + " to database!"
    end

    def error_message_could_not_update(object_name)
        "Error: Unable to update " + object_name + "!"
    end

    def error_message_could_not_destory(object_name)
        "Error: Unable to destroy " + object_name + "!"
    end

    def notice_message_created(object_name)
        object_name.capitalize + " has been created!"
    end

    def notice_message_updated(object_name)
        object_name.capitalize + " has been updated!"
    end

    def notice_message_destroyed(object_name)
        object_name.capitalize + " has been deleted!"
    end
end
模块消息
def格式错误消息(错误)
errors.map{|属性,消息|“错误:{attribute.to_.titleize}{message}.
” 结束 def错误消息找不到(对象名称) 错误:找不到指定的“+对象名称+” 结束 def错误消息无法创建(对象名称) 错误:无法创建“+对象名称+” 结束 def错误消息无法保存(对象名称) 错误:无法将“+对象\名称+”保存到数据库中 结束 def错误消息无法更新(对象名称) 错误:无法更新“+对象名称+” 结束 def错误消息无法删除(对象名称) 错误:无法销毁“+对象名称+” 结束 def通知\消息\已创建(对象\名称) 对象_name.capitalize+“已创建!” 结束 def通知消息更新(对象名称) 对象_name.capitalize+“已更新!” 结束 def通知\消息\已销毁(对象\名称) 对象_name.capitalize+“已被删除!” 结束 结束
在我的控制器中,当我设置闪存时,我可以执行以下操作:

flash[:notice]=创建的通知消息(“post”)

这样,所有成功创建的对象都会生成类似的消息

我现在正在重做我的一个项目,并且正在检查所有这些,我有一种烦人的感觉,这不是最好的方法。我的意思是,这是有效的,到目前为止,这对我来说很好,但我从来没有见过其他人这样做,我开始认为这是有原因的。每当我需要一个新字符串时,就必须添加一个新方法,这几乎是愚蠢的。但是,我如何才能在字符串中插入上下文文本(比如我们正在处理的对象类型的名称)

在处理常见的文本字符串时,是否有Rails社区标准?尤其是那些需要在运行时插入额外文本的文件

我一直在阅读Rails的国际化,因为将我的项目本地化为一种以上的语言会很好,而且我喜欢将我所有的文本字符串放在漂亮的YAML文件中,这会一举两得。但我不知道我如何才能做到这一点,并保持我已经拥有和需要的功能(除非我大错特错了,我不需要它,因为有更好的方法)


我对任何关于这个问题的想法、建议或相关阅读都持开放态度。

您可以将其作为替代方法。然后你可以用你想要使用的字符串填充你的语言环境文件。您想要给出的任何参数都可以像本教程第4.2节中的示例那样包括在内

I18n.backend.store_translations :en, :thanks => 'Thanks %{name}!'
I18n.translate :thanks, :name => 'Jeremy'
# => 'Thanks Jeremy!'
因此,请执行以下步骤:

  • 访问文件
    config/locales/en.yml

  • 在此处插入您的本地化:

    嗯: 已创建:“#{name}已创建!”

  • 调用而不是
    notice\u message\u created(object\u name)
    以下内容:
    t(:created,object\u name.capitalize)


  • 最后,一切都应该像以前一样工作,您已经摆脱了许多简单的方法,并且您可以通过包括区域设置,并将区域设置文件添加到
    config/locales
    来国际化您的应用程序。我肯定会选择I18N。然而,它需要一些努力,比如找到所有需要翻译的字符串,并且主要是为翻译文件提供一个好的结构

    Rails I18N支持,因此如果您需要在字符串中插入数字或名称,这不会是一个问题

    还是我误解了你所说的“同类功能”的意思