0

我正在使用Ruby on Rails v3.2.2和Globalize3 v0.2.0 gem。目前我使用Globalize3來翻譯兩種語言的國家,地區和城市名稱,但我計劃用它來以更多語言(理想情況下全部)將我的應用程序國際化。所以,我用翻譯數據填充數據庫,但我有一些疑問:我應該填充我的country_translations,region_translationscity_translations數據庫表與所有國際化的名稱(即使它可能有些名稱是相同的默認的 - 在這種情況下,國際化名稱是或重複)?也就是說,在轉換表要創建我的應用程序支持的每個語言環境的翻譯記錄(以我目前的情況下,兩個語言環境),並每個國家,地區和城市?它是「可取的」/「正確的方式」來存儲所有可能的翻譯?

做的話,在「理想」方案,支持所有語言,提到表(主要是那些與區,市)將是非常大的,probabily性能較少。另一方面,它確保Globalize3能夠正常工作,因爲在某些情況下,當國際化記錄不存在時(我避免解釋我的具體情況,因爲這很難做到,也許它會需要一本書來解釋)寶石不是正確回退到當前的語言環境。

我該如何繼續?

回答

0

我會建議你確實預填充翻譯。我一直在做一個項目,內容的語言是初步知道的(其中5個),並且客戶需要5個標籤來填充管理後臺中的翻譯(當他們編輯包含翻譯的對象時)。

此,如果你沒有翻譯預填充的卻是不可能發生的。在我看來,這種情況下的數據庫空間或速度並不是問題;您需要100,000個以上的對象才能在默認的MySQL安裝中引入輕微的延遲。

假設你使用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 

......所以,當你銷燬對象,翻譯去用它。

...或者,你可以只得到循環代碼,並將其包含在您使用創建一個包含翻譯對象的任何其他控制器的方法。

我不太讓你有點hierarhic前瞻性翻譯模型,但我相信我已經說明了我的觀點。您應該能夠擴展以滿足您的特定需求。

+0

由於我使用的是'Globalize3'寶石,是有點像'的has_many:翻譯,:依賴=>:destroy'行爲已經由寶石啓用? – Backo

+0

我不這麼認爲。這些是Rails中的簡單模型 - 模型關係,您必須指定自己。 – dimitarvp

+0

*我的意思是*(來自[Globalize3 Official Documentation](https:// github。)「爲了使這個 - 模型翻譯 - 工作,你需要添加適當的翻譯表 - 與你的'has_many:translations:dependent =>相關的表:'destroy'*?* - Globalize3提供了一個方便的助手方法來幫助你做到這一點,它被稱爲create_translation_table!「。 *您的意思是什麼?* – Backo

相關問題