2013-01-09 102 views
0

我在Symfony2中使用website.com/_locale/xxxxxxxx路由創建了一個網站,將靜態數據翻譯成兩種語言。這個實現工作成功,但我希望比這更進一步。我想爲其他幾個國家運營這個網站,爲了讓這些國家(不同語言)成爲一個網站,必須進行適當的轉型。Symfony2多語言網站數據分發

比方說,我有一個商店的實體。創建的每個對象都有一些變量,如地址,業務類型,設備等。這允許用戶使用自己的語言創建條目,但所有條目都會混合在表格中。該表格將包含意大利語,英語和西班牙語數據,當有人從不同位置進入網站時,我們不得不查看其他語言的數據。

我希望用戶能夠用兩種語言創建一個新商店:英文和他自己的。我想到的解決方案是:

  • 我會在例如「ORIGINAL_LANGUAGE」同桌創建新列和每個條目將與區域設置存儲:EN_US,es_SP等。當網站想要檢索一行將通過一張表搜索將成千上萬的條目。
  • 我將用另一種語言創建另一個表格,它將成爲原始表格的鏡像。這意味着我將擁有Shops表/實體,Shops_it,Shops_es和Shops_br等。不幸的是,此解決方案需要我在其他鏈接表之間創建多個表和關係。
  • 我將在每個字段的同一行中創建另一列。該Shops.description,Shops.address等也將包括Shops.description_en,Shops.description_br,Shops.address_en,Shops.address_br等

什麼是做什麼最安全,最快捷,更專業的方式我想?

+0

不要用多個表/列去!這太可怕了,我必須在遺留數據庫上處理它!不要! – Ocramius

+0

所以這是一個不好的做法? – Radolino

+0

是的。任何你想表示爲集合/索引集合的東西都是SQL中的表格。如果你有一個字段有多個值,那麼這是1-n關係。 – Ocramius

回答

1

可以使用[DoctrineExtensions][1]庫來翻譯您的列(它使用類似於EAV的結構進行翻譯)或者爲已翻譯的實體編寫1-n關係,其中包含「基本」實體和「已翻譯」實體。您可以使用集合的indexBy屬性來使讀取和邏輯更易於處理。

+0

好吧,我明白你的建議,但我相信你有點誤解。與翻譯沒有任何關係,但是爲不同語言的同一個實體保存數據。兩種語言的商店可能具有相同的名稱,但數據可能會更改。用戶可能需要爲英文和西班牙文描述設置不同的數據。但實體結構是完全一樣的。 – Radolino

+0

它仍然是一個與翻譯有關的概念 – Ocramius

+0

這是一個與數據庫相關的概念。問題是數據將如何從數據庫中保存和檢索。 – Radolino