0

Ruby on Rails v3.2.2 とGlobalize3 v0.2.0 gem を使用しています。現時点では、国、地域、都市名を 2 つの言語に翻訳するために Globalize3 を使用していますが、アプリケーションをより多くの言語 (理想的にはすべて) で国際化するために使用する予定です。したがって、データベースに翻訳データを入力していますが、それについていくつかの疑問があります。すべてのcountry_translations国際化された名前をデータベーステーブルに入力する必要があります(一部の名前がデフォルトのものと同じである場合でも-この国際化された名前がnilまたは繰り返される場合)? つまり、翻訳テーブルでは、それぞれの翻訳レコードを作成する必要がありますregion_translationscity_translationsアプリケーションでサポートされているロケール (現在の場合は 2 つのロケール) と、国、地域、都市ごとに?

そうすることで、すべての言語をサポートする「理想的な」シナリオでは、前述のテーブル (主に地域や都市に関連するもの) が非常に大きくなり、パフォーマンスが低下する可能性があります。一方、国際化されたレコードが存在しない場合があるように見えるため、Globalize3 が適切に機能することを確認します (実行するのが「難しい」ため、特定のケースを説明することは避けます。説明するには本が必要です)、gem が現在のロケールに適切にフォールバックしないことがわかりました。

どのように進めればよいですか?

4

1 に答える 1

0

実際に翻訳を事前入力することをお勧めします。私は、コンテンツの言語が事前にわかっているプロジェクト (そのうちの 5 つ) を行っており、顧客は管理バックエンドで (翻訳を含むオブジェクトを編集しているときに) 翻訳を入力するための 5 つのタブを必要としていました。

ただし、翻訳が事前に入力されていない場合、これは発生しません。私の意見では、このインスタンスの DB スペースまたは速度は問題ではありません。デフォルトのMySQLインストールでわずかな遅延を導入するには、それぞれがいくつかの翻訳を含む100,000以上のオブジェクトが必要になります.

ActiveAdmin を使用すると仮定すると、次のようになります。

# app/admin/your_models.rb
...
controller do
  def create
     ...
     YOUR_LANGUAGE_CODES.each do |lang|
       @your_model.translations.build(:locale => lang, :text => YOUR_DEFAULT_I18N_TEXT)
     end
  end
end

したがって、管理者が支援する翻訳を使用して新しいオブジェクトを作成する場合、必要なすべての翻訳も自動的に作成されます。もちろん、適切なクリーンアップのために、包含モデルにこれを含めることを忘れないでください。

has_many :translations, :dependent => :destroy

...そのため、オブジェクトを破棄すると、翻訳も一緒に行われます。

...または、代わりに、ループ コードのみを取得し、翻訳を含むオブジェクトを作成するために使用する他のコントローラー メソッドに含めることもできます。

やや階層的に見える翻訳モデルはよくわかりませんでしたが、私の要点は説明できたと思います。それを拡張して、特定のニーズをカバーできるはずです。

于 2012-11-07T21:26:12.127 に答える