ruby中的动态配置文件

时间:2012-02-24 02:47:08

标签: ruby-on-rails ruby

在我的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

我确信有某种动态配置文件或其他方式可以正确完成,如果你能为我提供最好的方法和最佳性能,我会很感激。

谢谢

3 个答案:

答案 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)(更清洁一点)。