2017-06-21 42 views
0

我正在尋找一種允許用戶以多種語言輸入帖子的方式。然後只顯示用戶的語言版本,除非沒有用戶回退到缺省值或列出的默認值。ruby​​ on rails允許用戶一次寫入多種語言的帖子

到目前爲止,我所能夠想到的是每個語言標籤都創建了多個帖子,然後檢查帖子是否以所需語言存在,如果不是,則返回默認值。

有沒有更好的解決方案呢?

預先感謝

回答

3

你應該明確地使用Globalize寶石。它允許您翻譯模型中的字段並將該翻譯保存到數據庫中。

它與的I18n當前區域:

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

翻譯Rails中通常利用the i18n library。 (「18」代表「國際化」中的18個跳過的字母)。

這是一個非常大的主題,我無法合理地在單個StackOverflow中發佈 - 所以我強烈建議您花一些時間閱讀官方文檔。

但是,簡而言之,您不需要通過實施自己的語言查找工具來「重新發明輪子」。您可以簡單地存儲i18n翻譯in the database並根據登錄用戶的區域設置獲取它們。

+0

我瞭解整個I18n庫以及如何使用它。到目前爲止,我已經在這個項目中使用了它。但我想要做的是允許用戶在多語言文本中發帖,謝謝 – zeitue

+0

...而且我說你*可以*使用'i18n'來完成這個!根據您的UI設計,您可能需要一些額外的後端邏輯來將每個翻譯存儲在正確的位置 - 但問題仍然可以通過'i18n'輕鬆解決。 –

+0

是的我知道國際能源署可以做到這一點,但我不知道該怎麼做。 – zeitue

1

我試圖實現類似的項目,並有實施的想法。

使用容易翻譯寶石(https://github.com/seejohnrun/easy_translate)您可以使用此語句後體內轉化

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

爲了讓個性化,你可以存儲在用戶記錄用戶的首選語言,這樣做

EasyTranslate.translate(@post.body, :to => current_user.language) 
1

如果您使用的是PostgreSQL,您可以使用hstore_translate gem。 hstore模塊實現hstore數據類型,用於將鍵值對存儲在數據庫中的單個值中。

的Gemfile:gem 'hstore_translate'

class Post < ActiveRecord::Base 
    translates :title, :body 
end 
在遷移

I18n.locale = :en 
post.title 

啓用您的application.rb中回退: config.i18n.fallbacks = true

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 
在控制檯
相關問題