我正在尋找一種允許用戶以多種語言輸入帖子的方式。然後只顯示用戶的語言版本,除非沒有用戶回退到缺省值或列出的默認值。ruby on rails允許用戶一次寫入多種語言的帖子
到目前爲止,我所能夠想到的是每個語言標籤都創建了多個帖子,然後檢查帖子是否以所需語言存在,如果不是,則返回默認值。
有沒有更好的解決方案呢?
預先感謝
我正在尋找一種允許用戶以多種語言輸入帖子的方式。然後只顯示用戶的語言版本,除非沒有用戶回退到缺省值或列出的默認值。ruby on rails允許用戶一次寫入多種語言的帖子
到目前爲止,我所能夠想到的是每個語言標籤都創建了多個帖子,然後檢查帖子是否以所需語言存在,如果不是,則返回默認值。
有沒有更好的解決方案呢?
預先感謝
你應該明確地使用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 %>
翻譯Rails中通常利用the i18n
library。 (「18」代表「國際化」中的18個跳過的字母)。
這是一個非常大的主題,我無法合理地在單個StackOverflow中發佈 - 所以我強烈建議您花一些時間閱讀官方文檔。
但是,簡而言之,您不需要通過實施自己的語言查找工具來「重新發明輪子」。您可以簡單地存儲i18n
翻譯in the database並根據登錄用戶的區域設置獲取它們。
檢查出multilang-hstore寶石,如果你使用的Postgres
我試圖實現類似的項目,並有實施的想法。
使用容易翻譯寶石(https://github.com/seejohnrun/easy_translate)您可以使用此語句後體內轉化
EasyTranslate.translate(@post.body, :to => :russian)
爲了讓個性化,你可以存儲在用戶記錄用戶的首選語言,這樣做
EasyTranslate.translate(@post.body, :to => current_user.language)
如果您使用的是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
在控制檯
這看起來像我在尋找的內容,因爲它允許用戶以多種語言進行實際輸入。我認爲這可以通過表單完成。謝謝 – zeitue