2016-08-05 53 views
8

我正在使用i18n-active_record 0.1.0在Rails 4中的應用程序,以保持我的翻譯在數據庫中,而不是在.yml文件中。它工作正常。I18n翻譯與i18n-active_record:相同的形式爲相同的密鑰

有一兩件事,我在掙扎,但是,是每個翻譯記錄是每個區域設置一個記錄,即

#1. { locale: "en", key: "hello", value: "hello") 
#2. { locale: "se", key: "hello", value: "hej") 

這就使更新一個單調乏味的工作。我希望將它作爲一個,例如:

{ key: "hello", value_en: "hello", value_se: "hej" } 

或類似的,以更新一種形式的一個密鑰的所有實例。我似乎無法找到任何有關此事的信息,這令我感到困惑。

有沒有什麼辦法可以輕鬆做到這一點?任何類型的黑客也可以。

回答

0

我最終創建了自己的使用全球化的翻譯功能。它並沒有明確依賴I18n,所以它是一個平行系統,但它可以工作,雖然不太好看,它不是I18n的替代品,但它具有能夠輕鬆添加語言環境並以一種形式處理所有翻譯的重要功能。

  • 翻譯模型與關鍵:字符串
  • 在翻譯模型:

    轉換:值 globalize_accessors:區域設置=> I18n.available_locales,:屬性=> [:值]

In ApplicationHelper:

def t2(key_str) 
    key_stringified = key_str.to_s.gsub(":", "") 
    t = Transl8er.find_by_key(key_stringified) 
    if t.blank? 
     # Translation missing 
     if t.is_a? String 
     return_string = "Translation missing for #{key_str}" 
     else 
     return_string = key_str 
     end 
    else 
     begin 
     return_string = t.value.strip 
     rescue 
     return_string = t.value 
     end 
    end 
    return_string 
    end 
2

您可以爲翻譯表創建一個ActiveRecord對象,然後在該模型上創建讀寫功能。

閱讀功能將拉出所有相關的記錄,然後將它們組合成一個散列。

編寫函數將採用您的單個散列輸入並將它們分成多個記錄以便寫入/更新。

+0

我從理論上得到了這一點,但如何使它與寶石一起工作,並在實踐中使它成爲完全不同的東西。 – Christoffer