2011-06-10 73 views
0

我需要對我的網站本地化系統解決方案發表評論。PHP中的語言本地化

內容

Field Type Null Key Default Extra 
id int(11) NO PRI NULL auto_increment 
Page varchar(30) YES  NULL  
Locale varchar(10) YES  NULL  
Data longtext YES  NULL 

我的想法是存儲每個頁面,每個區域設置到內容表中。例如:

index.php en_GB {data} 
index.php de_DE {data} 

數據字段將包括一個json_encoded陣列,其中每個頁面元素的文本將被存儲的。例如:

$data['Headline1'] = 'The Headline'; 
$data['Welcome'] = 'The welcome text.'; 

我還沒有實現它,但我打算使用的memcached以提高性能 - 和小我知道這是一個完美的數據種類上使用它,因爲它是不容易經常更新。

這是好還是壞,是否應該全部報廢?請評論!

+0

最近我已經用poedit來實現gettext(與wordpress使用的解決方案相同),它不是很難構建 – Dalen 2011-06-10 08:37:36

回答

1

一些注意事項:

  1. 不要每頁店的翻譯,這會導致很多冗餘數據的一些翻譯將出現OM多個頁面。
  2. 我反對將所有翻譯引入數據庫中的一個字段,爲每個翻譯後的句子添加一個條目。
  3. 將locale(varchar)替換爲unsigned tinyint並在其上創建索引,請在語言環境表中使用語言環境。

沿東西的喜歡:

translationId | localeId | translationKey | translationText 
+0

該網站將承受非常沉重的負載。我想將查詢次數保持在最小,這就是爲什麼我選擇一次性爲某個特定區域設置整個頁面的原因。你對此有何想法? locale => int的想法很好,我會用它。 – Mattis 2011-06-10 11:17:14

2

如果你想要做的本地化在PHP中使用gettext,你將有時間就實現其他的功能也一樣,而不是建立自己的定位系統。

不要擔心速度,php gettext擴展比使用字符串數組運行得更快。

+0

我不會使用任何依賴於設置區域設置的東西。 – 2011-06-10 08:42:49

+0

我不願意使用額外的插件,因爲我想完全控制數據。我會讓我的用戶將網站翻譯成他們各自的語言,並且實現顯然將由我編碼。我將不得不閱讀gettext(並且我也看到了一些關於Zend插件的內容)。如果它跟你說的一樣快,它肯定聽起來很有希望。 – Mattis 2011-06-10 11:14:11