在我的ruby代码中,我尝试将所有输出消息放在一个文件中以便进行翻译,以防客户端想要更改返回消息,它将被组织在一个文件中。
假设我在root上有配置文件名为messages.rb,我将它包含在我的main.rb ruby过程中,如:
需要“#{ROOT_PATH} /config/messages.rb”
该文件将包含以下内容:
class Messages
MSG = {
:msg1 => "Account successfully created",
:msg2 => "Hello"
}
end
现在,当我打电话给msg1时,请在main.rb中说出我做的事情:
puts Messages::MSG[:msg2]
但正如你所看到的那样,以这种方式使用它是不方便的,特别是在大多数情况下,我需要包含一些像
这样的数据puts Messages::MSG[:msg2] + @username
我确信有某种动态配置文件或其他方式可以正确完成,如果你能为我提供最好的方法和最佳性能,我会很感激。
谢谢
答案 0 :(得分:2)
如何拥有Proc
个对象而不只是String
?
module Messages
MSG = {
msg1: ->{"Account successfully created."},
msg2: ->name{"Hello, #{name}. How are you doing?"}
msg3: ->name, age{"Hello, #{name}. You are #{age} now, congrats"}
}
end
然后您可以将其称为
puts Messages::MSG[:msg1].call()
puts Messages::MSG[:msg2].call(@username)
puts Messages::MSG[:msg3].call(@username, @userage)
或者,如果您希望所有消息都采用相同的参数,那么只需要空白量化的变量:
module Messages
MSG = {
msg1: ->name, age{"Account successfully created."},
msg2: ->name, age{"Hello, #{name}. How are you doing?"}
msg3: ->name, age{"Hello, #{name}. You are #{age} now, congrats"}
}
end
然后您可以将其称为
puts Messages::MSG[:msg1].call(@username, @userage)
puts Messages::MSG[:msg2].call(@username, @userage)
puts Messages::MSG[:msg3].call(@username, @userage)
答案 1 :(得分:1)
我认为您应该检查Rails I18n API以获得多语言支持。关于你所说的配置文件我非常确定最常用的是.yml和Yaml librarie
答案 2 :(得分:0)
您可以将消息放在语言环境文件中: http://guides.rubyonrails.org/i18n.html
否则你可以使用你现在正在使用的东西,但提供一个帮助方法来提取实际的消息,可以在Messages中说或者说ApplicationHelper
e.g。在ApplicationHelper中
def message(k)
Messages::MSG[k]
end
然后,您不必一直引用Messages :: MSG [foo],而只需调用message(foo)(更清洁一点)。