Ruby on rails ruby中的动态配置文件

Ruby on rails ruby中的动态配置文件,ruby-on-rails,ruby,Ruby On Rails,Ruby,在我的ruby代码中,为了便于翻译,我尝试将所有输出消息放在一个文件中,以防客户端想要更改返回消息,它将被组织在一个文件中 假设我在根目录下有一个名为messages.rb的配置文件,我将其包含在main.rb ruby进程中,如下所示: 需要“#{ROOT_PATH}/config/messages.rb” 该文件将包含以下内容: class Messages MSG = { :msg1 => "Account successfully created",

在我的ruby代码中,为了便于翻译,我尝试将所有输出消息放在一个文件中,以防客户端想要更改返回消息,它将被组织在一个文件中

假设我在根目录下有一个名为messages.rb的配置文件,我将其包含在main.rb ruby进程中,如下所示:

需要“#{ROOT_PATH}/config/messages.rb”

该文件将包含以下内容:

class Messages  
  MSG = {
    :msg1      => "Account successfully created", 
    :msg2      => "Hello" 
  }
end
puts Messages::MSG[:msg2]
现在,当我调用msg1时,让我们在main.rb中说,我会执行以下操作:

class Messages  
  MSG = {
    :msg1      => "Account successfully created", 
    :msg2      => "Hello" 
  }
end
puts Messages::MSG[:msg2]
但是正如你所看到的,以这种方式使用它并不方便,特别是在大多数情况下,我需要包括一些数据,比如

puts Messages::MSG[:msg2] + @username
我确信有某种动态conf文件或其他方法可以正确地执行此操作,如果您能为我提供最好的方法和最佳性能,我将不胜感激


谢谢

我认为您应该检查Rails I18n API的多语言支持。关于您正在谈论的配置文件,我很确定最常用的是.yml和Yaml librarie

您可以将消息放在区域设置文件中:

否则,您可以使用您现在使用的方法,但提供一个helper方法来提取消息中的实际消息,或者说ApplicationHelper

def message(k)
  Messages::MSG[k]
end
e、 g.在ApplicationHelper中

def message(k)
  Messages::MSG[k]
end

然后,您可以调用message(foo)(稍微干净一点),而不是一直引用Messages::MSG[foo])。

使用
Proc
对象而不仅仅是
字符串如何

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)
puts Messages::MSG[:msg1].call(@username, @userage)
puts Messages::MSG[:msg2].call(@username, @userage)
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()  
puts Messages::MSG[:msg2].call(@username)
puts Messages::MSG[:msg3].call(@username, @userage)
puts Messages::MSG[:msg1].call(@username, @userage)
puts Messages::MSG[:msg2].call(@username, @userage)
puts Messages::MSG[:msg3].call(@username, @userage)

因为让我们假设我想要var1+puts Messages::MSG[:MSG]+@ar2,它将是missy,这里的主要目的是将它与代码分离,我们考虑的是一个动态配置文件,可以接收一些参数,如:hi_MSG=hi$username。我不是在寻找翻译文件,而是一个通用配置文件,但为了动态,以便我可以轻松添加参数,我希望有一个文件的最终结果,例如,我可以轻松地发送给营销团队,以便他们可以修改它,它将包含如下内容:welcome_msg=welcome Mr.$username,您将在$time后收到通知,类似于此,另外我没有使用rails,我只是在用ruby代码处理一些分布式进程,foremanI被误解了。。。如果您不使用Rails,为什么要使用它进行标记?使用I18n,您可以将参数传递给字符串,这很有趣,我也会检查它,谢谢如果您想将消息与现有字符串组合,我建议使用内联方法:
“{message:greeting}Frank,{message:welcome\u message}”。
我已经在使用内联,但我想我可以找到更有条理的东西,这样我就可以把它发送给非技术团队,他们可以很容易地修改它。我正试图尽可能地将其与代码本身分离。非技术团队到底要编辑什么?它是应用程序中的模板,还是会更新数据库列中的某个文本字段?你总是可以考虑通过解析器自己运行内容,使用正则表达式来查找标识符(比如用$$开始的所有),然后通过引用消息来搜索+替换它们::MSG,如果不匹配,就把它放在适当位置(或者以某种方式警告它们)?我想这就是我正在寻找的,谢谢。难以置信:)即使没有参数,我仍然需要调用Messages::MSG[:msg1].call()吗?如果实现了,我可以直接调用它:msg1=>“Account successfully created.”对吗?这将不是一个正确的过程。你可以把它当作一根绳子。但是,这会使它有点混乱,因为根据消息是msg1还是msg2,您必须使用不同的方式调用消息。我让msg1成为一个进程的原因只是为了一致性。还有一个问题,我能传递多个参数吗,比如msg2:->name,age{“你好,{name}。你现在是{age},congts}诸如此类的吗?是的,这就是关键所在。我很快会把这一点补充到我的回答中。