2017-04-10 78 views
0

我喜歡轉發關係數據庫的概念,所以我通常創建表格。 但是現在我得到一個任務,這讓我想到了使用帶有翻譯的json字段。將翻譯置於JSON中是一個好主意嗎?

簡要說明任務: 有必要實施多語言應用程序。我通常創建表:

  • 內容
  • content_translations
  • contents_images
  • contents_image_translations

通常他們並沒有顯示出太多(大約5-7)。但是現在我需要導入一些帶有GEO數據的數據庫(國家,地區,城市,地區)。我嘗試創建一個轉換表,但後來我們失去了使用外鍵和多態連接的能力。我的例子不是那麼大,但是我有很多這樣的表,並且應該創建帶有翻譯的太多表(並且它們只包含Id,Relation_id和Name)。

這就是我想嘗試使用JSON字段。 MySQL 5.7提供了這種類型的字段。現場的 結構是這樣的:選擇

... 
json_encode([ 
    'ru' => ['locale' => 'ru', 'name' => $data['title_ru']], 
    'en' => ['locale' => 'en', 'name' => $data['title_en']], 
]); 
... 

樣品:

SELECT 
    alias, translations, 
    JSON_UNQUOTE(json_extract(translations, '$.en.name')) AS like_name 
FROM geo_countries 
WHERE 
    JSON_UNQUOTE(json_extract(translations, '$.en.name')) LIKE '%Ukraine%' 
    OR 
    JSON_UNQUOTE(json_extract(translations, '$.ru.name')) LIKE '%Ukraine%'; 

所以問題是: 的問題是: 誰使用這種方法的工作原理,有沒有利潤,如何生產展示自己嗎?

+0

幾乎所有的翻譯系統,你可以拿出從代碼方面的罰款。最大的問題是如何管理翻譯:更新可翻譯的字符串,讓他們翻譯第三方,管理缺失的字符串......這就是所有自釀系統發生故障的地方。 –

回答

0

您應該嘗試使用標準方法,例如與CakePHPWordPressLaravel一起使用。

它們都有數據庫表,用於指定要使用的語言環境。然後,您可以將您的翻譯進一步存儲在數據庫中。

我會堅持一個處理這種翻譯結構的標準模型。只有在純JavaScript實現中,他們試圖使用JSON數據來翻譯表。

  1. CakePHP Translations in the database
  2. Laravel translations
  3. WordPress translations
  4. POEdit
+0

'__('我的字符串')'這樣一個有意義的函數名稱。我討厭WordPress的另一個原因':/'很好的答案! –

+0

@ʰᵈˑ'_()'是'gettext()'的標準快捷別名,所以'__()'實際上是一個相當好的名字。 –

+0

@ÁlvaroGonzález是的,我知道,但快捷方式的名稱仍然沒有真正表明它做了什麼。我明白這是一條捷徑,但*仍*。我是一個函數名的信徒,應該描述它的功能。 '_()'不。個人偏好,但我更喜歡看'gettext()'而不是'_()'。 –

相關問題