2009-04-22 56 views
3

我想在PHP中开发一个多语言页面,例如英语/德语/日语..所以当我点击德语时,页面语言将更改为德语,然后单击英语它会更改成英文。请指导我这样做。在此先感谢......在PHP中使用多语言创建网页

+0

要清楚,你自己提供翻译? – Rob 2009-04-22 11:59:36

回答

2

您可以使用会话来存储用户设置的语言。

$_SESSION["lang"] = "en"; 
$_SESSION["lang"] = $_GET["lang"]; 
// or this way, then you can do example.com/?lang=en 

然后用翻译数组创建一个文件。

$lang["en"]["welcome"] = "Welcome to the site"; 

然后另一个文件可以有德语翻译

$lang["de"]["welcome"] = "Willkommen auf der Webseite"; 

然后你只是调用$ LANG阵列与会话

echo $lang[$_SESSION["lang"]]["welcome"]; 

这就是一个简化版本,你也可以使用对象来存储翻译。 但我不建议使用数据库来存储翻译,因为这涉及到一个非常大的SELECT或非常非常多。

+0

在最后的回声你不是指:$ lang [$ _ SESSION ['lang'] ] ['welcome']; – 2009-04-22 11:47:52

+0

其实我需要改变该页面的所有内容,就像 http://www.google.co.in/ – Sakthivel 2009-04-22 11:48:36

+0

@sakthiopr网站通常以这种方式翻译(或者某种方式类似这只是一个字符串的集合,需要在某个位置输出 – 2009-04-22 11:50:17

-2

我个人翻译我的全部意见。因此,你必须像一个文件结构:

application/ 
someScript.php 
views/ 
de/ 
    someView.php 
en/ 
    someView.php 
models/ 
someModel.php 

然后由奥拉维尔的建议存储在一个会话变量的语言,做这样的事情。

session_start(); //dont forget to call this somewhere 
$_SESSION['lang'] = 'en'; 
//and then in somewehere else: 
include 'views/'.$_SESSION['lang'].'/someView.php'; //or whatever method is used to include views. 

编辑
你应该从你的脚本单独的输出结果。因此,你将有一个脚本,做一些脚本的东西,就像得到确认当期的UNIX时间戳,这将是someScript.php在上面的例子:

//someScript.php 
    $timestamp = time(); 

现在,我们可以添加所有的直接输出低于此,但会很难维护,所以我们在不同的文件中输出,这里是someView.php文件。所以someView.php在“恩”文件夹是:

<html> 
<head> 
<title>Currect UNIX timestamp!</title> 
</head> 
<body> 
<p>The current UNIX timestamp is: <?php echo $timestamp; ?> seconds</p> 
</body></html> 

,并在“德”文件夹这将是practicly相同的文件,但在德国的所有文本。

现在我们需要做的是包括在我们someScript.php这些输出文件因此,我们将下面的行添加到脚本的底部:

include '../views/'.$_SESSION['lang'].'/someView.php'; 

你应该阅读更多关于MVC在这里:http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html

注意:这个例子并不严格的MVC,但这应该给你的想法。

+0

我不明白你请详细解释一下 – Sakthivel 2009-04-22 11:55:15

+2

但是,当你需要编辑一个视图时,你必须编辑每个视图语言?这听起来不太实际 – 2009-04-22 12:15:30

0

大多数框架都有帮助你的帮手。对于初学者,这里是Codeigniter's和cakePHP's。

7

我们使用http://php.net/manual/en/intro.gettext.php的方式。工作正常,我们都在其他项目(非PHP项目)中使用http://www.gnu.org/software/gettext/manual/gettext.html。所以很容易开始。

我认为正确的方法取决于谁翻译文本!如果是开发人员,您可以为每种语言提供自己的视图。但是如果你有其他人翻译文本,像gettext(翻译是在一个专门的文件,并有工具与这类文件)正确的选择!

1

通常你需要一个支持UTF-8的网站。这是通过文件的头文件设置的。 (并可以通过header()函数进行设置)。

然后我猜你想拥有英文和中文网站。然后我建议有一个语言文件。也许是一个数组或对象,用于存储要在网站上显示的段落。然后你只是打印出这一段。

然后要知道用户要求什么语言,我会使用$ _SESSION存储用户选择的语言。

那么你的语言文件看起来是这样的

$lang["en"]["Welcome"] = "Welcome to the site"; 

然后是中国欢迎文件会在你想打印出来的位置,这样的事情

$lang["ch"]["Welcome"] = "歡迎"; 

然后。你会这样做

echo $lang[$_SESSION["lang"]]["Welcome"]; 
0

导轨处理它well。您可能想要查看有关如何执行此操作的想法。

8

奇怪的是,许多PHP开发人员似乎认为所有自然语言都具有相同的语法。制作一个没有参数的翻译框架是不可能的。虽然字符串$lang['welcomeTo'] $sitename可能会正确翻译大多数语言(欢迎使用stackoverflow),但土耳其语无法正常翻译,例如它应该是$sitename $lang['welcomeTo'](stackoverflow'a hos geldiniz)或德语,任何一种方式都是可能的(请注意, Sie willkommen)。当你尝试用多个变量翻译句子时,情况会变得更糟。

唯一的一个选择是使用参数化的翻译(比如:函数)

Language::getCurrentLanguage()->translate('welcomeTo', array('sitename' => $sitename)); 

# Translation file for english (configfile-style): 
welcomeTo=Welcome to $sitename 

# Translation file for turkish: 
welcomeTo=$sitename'a hos geldiniz 

# Translation file for german: 
welcomeTo=Willkommen auf $sitename 
# Or 
welcomeTo=$sitename heißt sie willkommen 

简而言之:如果你想真正的国际化,使用功能来检索您的翻译,而不是变量。你可能也想看看php的intl扩展。

1

构建多语言网站的一种有效方法是不使用硬编码标签,而是从适当的语言文件中检索它们,因为基本上你需要做的是在网站上定位不同的用户。如果显示的数据存储在数据库中,则可能应考虑添加一些存储不同语言翻译的数据库表。例如,要使用C#中的一些工作,可以使用资源文件存储标签值。

0

正如格里高尔所说; gettext是我的专业方式...

这里是一个很好的文章link

但我想补充一些重要的点

I-用这种方法你也会有,如果你创建Windows下一个PO文件中使用的.po和.MO文件,你不能在linux下使用它。或者在Linux下创建的.po文件不能在Windows下使用。

II-Linux可以创建.po文件本身,而是在窗口我建议你使用一个程序,如poEdit的(其中U可以从它的网站上找到它:http://www.poedit.net/

III-某些地区有性格问题。但是我不记得他们是哪一个?:(