2011-10-02 70 views
3

我有一個ASP.NET MVC網站,依靠資源文件進行UI國際化。 數據庫中的一些數據將由useres(用他們的語言)生成,但有些數據由我生成,用戶不應編輯它。對於那些系統數據,我需要在數據庫中只存儲一個「令牌」,並在將它翻譯爲用戶的語言時翻譯它。如何國際化來自數據庫的數據?

我真的不喜歡在數據庫中進行翻譯並將每個文本列與翻譯表連接起來的想法。

有什麼替代品可以實現這個目標? 可能是數據庫和資源的混合?

編輯:語言的數量是不確定的,現在我們正在使用3種語言,但我希望我們可能需要許多其他語言。

編輯2:這主要是針對目錄數據...有些目錄在同一個表中有系統和用戶數據。系統數據需要翻譯,因爲用戶無法編輯。

回答

1

實際上,您可以將標識符存儲在數據庫中,並在運行時將它們解析爲資源文件(常規* .resx)中的語言內容。
雖然在這種情況下根本沒有意義將它存儲在數據庫中(只需使用資源文件即可)。當然,保持這一點將是一場噩夢(您需要實際將數據庫的內容與資源文件同步)。

除此之外,您實際上可以創建自己的資源管理器來讀取數據庫中的內容,並將翻譯與標識符一起使用 - 在這種情況下,您的主鍵需要在資源標識符和語言我認爲這是所謂的複合鍵,是不是):

--------------------------------------------------------- 
| Id | Locale | Translation        | 
--------------------------------------------------------- 
| 1 | en-US | Something happened on the way to heaven | 
| 1 | pl  | Coś się stało na drodze do nieba  | 
--------------------------------------------------------- 

但是,如果需要修改數據庫模式...

+0

我不太想修改我的查詢來加入語言表。你如何看待混合方法:來自數據庫的數據和從資源進行翻譯的代碼? – Romias

+0

@Romias:我認爲這就是我上面提到的。您從數據庫中提取數據並基於該數據從資源文件中提取適當的翻譯。這是最典型的情況,實際上這是建議(通過IEEE)解決方案的DB本地化。 –

0

我不清楚閱讀您的文章無論您是維護用戶將生成的內容與您自己的可本地化內容一起放入同一個數據庫表中。如果是這樣,這聽起來像你應該考慮分離它們。

如果你自己的內容是穩定的(即你不會添加新的內容或改變你的應用程序的更新部署之間的變化),那麼它應該生活在你的本地化資源而不是數據庫中,你應該對待它就像您的本地化用戶界面。

如果另一方面它是動態內容,那麼似乎沒有其他選擇將它存儲在數據庫中。您需要在單獨的本地化表格中存儲內容ID以及每種語言的ID(複合鍵PawełDyda指的是),以提供每種內容的翻譯版本。或者,也許你可以依靠多語種CMS來管理這種多語言內容(例如,請參閱WPML WordPress插件)

+0

主要用於目錄數據。他們中的一些人有一個標誌「系統」的項目,不允許用戶更改它...但用戶可以將更多的項目添加到該目錄。在這種情況下,應該翻譯系統數據。 – Romias