2011-11-26 109 views
2

這更多的是一個分析問題。開發多語言系統

我需要知道如何製作多語言系統,也就是說用戶可以更改語言的系統。該語言將存儲在cookie或數據庫中。
我已經在過去的工作與爲每種語言不同的文件,例如:

nl.php

$lang['hi'] = 'Hoi'; 
$lang['howareyou'] = 'Hoe gaat het?'; 

en.php

$lang['hi'] = 'Hi']; 
$lang['howareyou'] = 'How are you?'; 

指數。 php

include($language . '.php'); 

正如你所看到的,這個系統既低效又不安全。有沒有更好的方法來做到這一點? 我可以想到幾個方法來做到這一點,但我不知道哪一個會很好。

任何人都可以幫助我嗎?請不要只說「這樣做!」,還要告訴我爲什麼這是一個好辦法。
謝謝。

+0

@mario如何使用gettext? – RobinJ

回答

4

好吧,如果你不需要提供通過Web界面更改本地化文本的能力,你可以做這樣的:

包括/ locales.php

<?php 
    if (!isset($locales)) { 
     $locales = array(
      "en" => array(
       "hi" => "Hi", 
       "howareyou" => "How are you?" 
      ), 
      "nl" => array(
       "hi" => "Hoi", 
       "howareyou" => "Hoe gaat het?" 
      ) 
     ); 
    } 
?> 

index.php文件

include("include/locales.php"); 
if (!isset($locales[$language])) $locale = $locales[$deflang]; // $deflang could be "en" 
else $locale = $locales[$deflang]; 

echo $locale["hi"]." ".$locale["howareyou"]; 

這是最快的方法,因爲解析單含用哈希ude文件是非常快速的操作。 如果您需要提供通過Web界面修改本地化字符串的能力,那麼您需要將本地化字符串存儲在數據庫中,並在每次顯示頁面時從其中讀取em ...此方法速度更慢。

+0

...這就是要點。我*需要*能夠通過網絡界面改變語言easilly。 – RobinJ

+0

在這種方法中,通過Web界面更改語言有什麼問題?我使用您的$ language變量作爲從cookie傳遞的語言的標識符或您喜歡的任何位置。 我的意思是你不能改變語言_strings_,而不是用戶想要查看頁面的語言。 – mephisto123

+0

但是這種方式似乎效率低下:\是不是有我能做到的方式,例如,讓整個系統以荷蘭語/英語製作,並且多語言系統將所有內容都從另一個文件中的字符串轉換而來? – RobinJ

0

首先你不需要在文件中有更多的語言。將每種語言保存在不同文件中。

  1. 它的清潔
  2. 你可以做一個腳本來比較定義的鍵。如果文件缺少密鑰,可以提醒人們修復這種情況。

不要忘記你可以保持和語言文件像其他設置:日期格式,數字格式,等等/