1

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 に答える