45

そこにあるymlファイルで宣言された変数を使用したいと思います。たとえば、私は宣言しsite_name、以下でそれを使用したいと思いますdescription

en:
  site_name: &site_name "Site Name"
  static_pages:
    company:
      description: *site_name #this works fine
      description: "#{*site_name} is an online system" #this doesn't work

*site_name変数を追加のテキストと組み合わせるにはどうすればよいですか?

4

3 に答える 3

68

簡単な答えは、エイリアスを使用してYAMLで文字列補間を希望どおりに実行することはできないと私は信じています。

あなたの場合、私がすることは私のロケールファイルに次のようなものを持っていることです:

en:
  site_name: "Site Name"
  static_pages:
    company:
      description: ! '%{site_name} is an online system'

次に、サイト名をパラメータとして適切なビューを呼び出します。

t('.description', site_name: t('site_name'))

それはあなたを得るでしょう"Site Name is an online system"

ただし、YAMLファイルでエイリアスを使用して文字列を連結する必要がある場合は、文字列を配列の2つの要素にすることで、次の完全に推奨されないコードも機能します。

en:
  site_name: &site_name "Site Name"
  static_pages:
    company:
      description:
        - *site_name
        - "is an online system"

次に、次joinのような適切なビューで配列を作成します。

t('.description').join(" ")

それもあなたを得るでしょう"Site Name is an online system"

ただし、@ felipeclopesがリンクしている質問とは別に、このパスを進むことを決定する前に、以下を確認してください。

于 2012-12-19T14:03:54.503 に答える
6

例のように、次の構文を使用できます。

dictionary:
  email: &email Email
  name: &name Name
  password: &password Password
  confirmation: &confirmation Confirmation

activerecord:
  attributes:
    user:
      email: *email
      name: *name
      password: *password
      password_confirmation: *confirmation
  models:
    user: User
users:
  fields:  
    email: *email
    name: *name
    password: *password
    confirmation: *confirmation
sessions:
  new:
    email: *email
    password: *password

この例は、辞書を使用したRuby on Railsi18nYAMLファイルのリファクタリングから抜粋したものです。

于 2012-10-24T20:41:46.660 に答える
0

パーティーに遅れた。私はまさにそれを行う宝石を作成しました。i18n-env-var-lookup

しかし、私の特定のユースケースは少しユニークです。私たちの組織には、組織内の別のチームによる別のプロジェクトの「ホワイトラベル」を作成したい既存のRailsアプリがあります。サイト名を変更するだけで、両方のプロジェクトで同じソースコードリポジトリを共有したかったのです。ロケールファイルにはすでに数千のエントリがあり、そのうちの100近くにサイト名が含まれていることを考えると、サイト名を変数として渡すようにすべてのテンプレートを更新することはお勧めできません。関連する質問で見つけた他の提案も、私たちの場合は良くありません。ソースコードの混乱を避け、サードパーティのローカリゼーションサービスを使用してロケールファイルを簡単に管理できるように、両方のプロジェクトでロケールファイルを完全に同じに保ちたいと考えています。

したがって、私はgemの実装に目を向け、それが私たちの正確な問題を解決します。

于 2022-02-22T17:07:55.097 に答える