2017-06-21 9 views
0

私はユーザーが複数の言語で投稿を入力できる方法を探しています。次に、ユーザーの言語用のもののみを表示し、そうでなければ、デフォルトまたはリストされたデフォルトにフォールバックします。ruby​​ on railsは複数の言語で投稿を一度に書くことができます

私が思いついたことは、複数の投稿をそれぞれ言語タグで作成して、リクエストされた言語で投稿が存在し、デフォルトを返さない場合にチェックを行うことです。

もっと良い解決策はありますか?事前に

おかげRailsの中

答えて

3

使用している場合。モデルのフィールドを翻訳し、この変換をデータベースに保存することができます。

これは、国際化、現在のロケールで動作します:あなたが一度に多くの言語で複数のポストの入力をレンダリングするために、この構文を使用することができます例えば

I18n.locale = :en 
post.title = "english_title" 
I18n.locale = :fr 
post.title = "french_title" 
post.save 
I18n.locale = :en 
post.title #=> "english_title" 
I18n.locale = :fr 
post.title #=> "french_title" 

:私が実装しようとした

<% Globalize.with_locale(:fr) do %> 
    <%= render "post_partial" %> 
<% end %> 
<% Globalize.with_locale(:en) do %> 
    <%= render "post_partial" %> 
<% end %> 
+0

これはユーザーが実際に複数の言語で入力できるため、私が探しているようです。私はこれをフォームで行うことができると考えています。ありがとう – zeitue

1

翻訳は、一般的にthe i18n libraryを利用しています。 (「18」は「国際化」のスキップされた18文字を表しています)

これは非常に大きなトピックですドキュメンテーション。

しかし、簡単に言えば、独自の言語ルックアップツールを実装することで、ここで "ホイールを再発明"する必要はありません。 i18n翻訳in the databaseを保存して、ログインしているユーザーのロケールに従ってそれらを取得することができます。

+0

私はI18nライブラリ全体とその使い方を知っています。これまでのところ、このプロジェクトで使ってきました。しかし私がやろうとしているのは、ユーザーが多くの言語でテキストを投稿できるようにすることです。どうもありがとうございます。 – zeitue

+0

...そして、私はあなたがこのために 'i18n'を使うことができると言っています! UIデザインによっては、各翻訳を正しい場所に保存するためにいくつかの追加のバックエンドロジックが必要な場合がありますが、問題は 'i18n'でも簡単に解決できます。 –

+0

ええ、私はi18nがこれを行うことができると理解していますが、私はそれを行う方法を知らない。 – zeitue

1

同様のプロジェクトであり、実装についてのアイディアを持っていました。あなたはそれはあなたがユーザレコードにユーザーの優先言語を格納し、この

EasyTranslate.translate(@post.body, :to => current_user.language) 
を行うことができますパーソナライズされたようにするには、ポスト本体

EasyTranslate.translate(@post.body, :to => :russian) 

を変換するために、この文を使用することができます簡単に変換宝石(https://github.com/seejohnrun/easy_translate)を使用して

1

postgreSQLを使用している場合は、hstore_translate gemを使用できます。 hstoreモジュールは、データベース内の単一の値にキーと値のペアを格納するhstoreデータ型を実装します。

gemfile:移行中gem 'hstore_translate'

class Post < ActiveRecord::Base 
    translates :title, :body 
end 

:あなたのコンソールで

class CreatePosts < ActiveRecord::Migration 
    def up 
    create_table :posts do |t| 
     t.column :title_translations, 'hstore' 
     t.column :body_translations, 'hstore' 
     t.timestamps 
    end 
    end 
    def down 
    drop_table :posts 
    end 
end 

I18n.locale = :en 
post.title 

があなたのapplication.rbにフォールバックを有効にします。 config.i18n.fallbacks = true

関連する問題