1

我对一个实体有很多静态偏好。我需要将它们存储在数据库表中吗?或者我可以使用 YAML 配置文件,其结构大致如下:

name: "Lights"
descriptions: ""
items: 
  title: "Fog lighs"
  description: "Should be used in foggy environment only!"

  title: "Xenon"
  description: "6500K"

name "Safety"
description: "Safety systems"
items:
  title: "Airbag"
  description: ""

  title: "ABS"
  description: "bla bla bla"

使用ruby​​/对象模型标记。这可以用我上面例子中的嵌套结构来完成吗?

有人可以告诉,这样做是否是一个好习惯?我不想使用数据库,因为这些设置几乎是静态的,需要更改任何内容的可能性很小。

如果可能的话,我还想知道如何为结构的元素(名称和标题)实现翻译(i18n)。在这种特殊情况下,我不知道该放在哪里。

或者我应该使用完全不同的方法?

4

2 回答 2

2

当然,您可以像在任何 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 文件中删除描述标签,或者如果没有可用的翻译,则将它们作为默认后备。

希望这可以帮助。

于 2012-08-27T12:15:58.707 回答
1

你应该有:

en:
  thing1:
    name: "Lights"
    descriptions: ""
   items:
      item1: 
        title: "Fog lighs"
        description: "Should be used in foggy environment only!"
      item2:
        title: "Xenon"
        description: "6500K"
es:
  thing1:
    name "translation"
    description: "translation"
    items:
      item1:
        title: "translation"
        description: "translation"
      item2:
        title: "translation"
        description: "translation"
于 2012-08-27T12:05:24.613 回答