当然,您可以像在任何 ruby 应用程序中一样在您的 rails 应用程序中使用 YAML:
require 'yaml'
things = YAML::load(open("my_things.yml"))
对于翻译,只需使用现有的 Rails I18n 框架。
例如,给定类:
class Thing
attr_accessor :title, :description
end
class Lights < Thing
end
class Safety < Thing
end
以及以下 YAML 数据文件:
---
- !ruby/object:Lights
title: "Fog lights"
description: "Should be used in foggy environments only!"
- !ruby/object:Lights
title: "Xenon"
description: "6500K"
- !ruby/object:Safety
title: "Airbag"
- !ruby/object:Safety
title: "ABS"
description: "bla bla bla"
您可以在 config/locale/things.nb.yml 中添加翻译:
nb:
lights:
fog_lights:
title: "Tåkelys"
description: "Kun til bruk i tåke!"
xenon:
title: "Xenon"
description: "6500K"
safety:
airbag:
title: "Kollisjonspute"
abs:
title: "ABS"
description: "bla bla bla"
当然,其他语言也类似。现在让我们实现一个描述事物的方法:
class Thing
def describe
key = title.parameterize
thing = self.class.to_s.downcase
translated_title = I18n::t("#{thing}.#{key}.title")
if description
translated_description = I18n::t("#{thing}.#{key}.description")
else
translated_description = ""
end
"#{translated_title}: #{translated_description}"
end
end
假设当前语言是挪威语,您现在可以执行以下操作:
things.each do |thing|
puts thing.describe
end
并得到:
Tåkelys: Kun til bruk i tåke!
Xenon: 6500K
Kollisjonspute:
ABS: bla bla bla
请注意,您可以从原始 YAML 文件中删除描述标签,或者如果没有可用的翻译,则将它们作为默认后备。
希望这可以帮助。