2011-11-26 106 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. 你可以做一个脚本来比较定义的键。如果文件缺少密钥,可以提醒人们修复这种情况。

不要忘记你可以保持和语言文件像其他设置:日期格式,数字格式,等等/