使用Rails应用程序的多语言来准备YML文件

时间:2016-03-29 21:05:45

标签: ruby-on-rails internationalization globalize

我正在使用Ruby on Rails构建一个汽车租赁应用程序,目前我一直使用英语编码。基本上我有一个用户和汽车模型,用户可以登录,登录,注销并列出他们的汽车。

我想实现另一种语言,允许用户从下拉列表中选择英语或西班牙语。我有控制器操作的默认错误消息返回,例如"不能为空,已经使用过"我还有自定义的JS消息,例如,如果用户成功添加汽车,jQuery返回"您的汽车已经发布"。最后,我也有Flash消息。但我不知道如何根据用户的语言选择处理YML文件中的错误,自定义JS和Flash消息。

2 个答案:

答案 0 :(得分:0)

它实际上取决于您的YAML文件的结构,例如,ActiveRecord错误消息:

it:
  errors:
    format: "%{attribute} %{message}"

    messages: &errors_messages
      empty: "non può essere vuoto"
      blank: "non può essere lasciato in bianco"

如果您想在视图之外访问I18n(a.k.a国际化),您可以使用I18n.t(your_key),这实际上是您在视图中可以访问的帮助程序。因此,例如,如果您希望在控制器中翻译通知,您可能会执行以下操作:

def your_action
  redirect_to other_path, notice: I18n.t("notices.successful_action")
end

然后在你的YAML中有相应的结构:

en:
  notices:
    successful_action: "You did it!"

希望这有帮助!

答案 1 :(得分:0)

  

我不知道如何根据用户的语言选择处理yml文件中的错误,自定义js和flash消息

  • 对于一般的Rails应用相关翻译,包括错误消息,Rails i18n gem已经涵盖了您。您可以在the gem's locale file
  • 中查看已翻译的语言
  • 有关专门覆盖错误消息或创建新消息的信息,请参阅looking up translationstranslations for ActiveRecord models上的“Rails指南”部分,了解您应该将翻译放在YAML文件中的哪些键。
  • 对于Flash消息,请查看this StackOverflow question以了解如何在控制器中使用延迟查找(例如t('.notice'))。
  • 为了能够像在Ruby中一样使用Javascript文件中的翻译(例如I18n.t("my_translation"),并且能够使用其余的Rails翻译管理YAML文件中的翻译,请查看在i18n-js gem。安装说明在README文件中。