如何在PHP上包含适当的文件制作多语言网站?

时间:2011-12-26 13:11:41

标签: php lang

我的网站上有2种语言。我想根据所选语言添加适当的文件。例如,<a href='index.php?lang=en'>English</a><a href='index.php?lang=tr'>Turkish</a>。如果用户点击第一个超链接(英文),我想显示此信息(带有HTML标签):

<h1>Hello</h1>
How are you

否则:

<h1>Selam</h1>
Nasılsın

如果用户访问网站内的其他页面,我也不希望用户选择的语言发生变化。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

最适合您的解决方案名为Gettext

见:
PHP manual Gettext
Localizing PHP web sites using gettext

这是没有任何讨论,拥有多语言网站的最佳方式。 Gettext比任何其他解决方案都快。

答案 1 :(得分:2)

您可以使用.ini文件来保存您文本的翻译版本,例如,en.ini将包含:

hello    = "Hello"
greeting = "How are you"

虽然tr.ini将包含:

hello    = "Selam"
greeting = "Nasılsın"

两者都是简单的文本文件(以UTF-8格式保存)。 现在你可以看到这些字符串在所有语言中都有通用名称(hello&amp; greeting),这些字符串可以在代码中使用,如下所示:

// First, load the appropriate language file:

$lang = "en";
$strings = parse_ini_file( "$lang.ini" );

// Now we can use the following code no matter what $lang indicates (tr or en):

echo( "<h1>{$strings[ "hello" ]}</h1><br/>{$strings[ "greeting" ]}" );

你应该对此有所了解:

  • 由于parse_ini_file从文件系统中读取文件,因此您必须非常小心地验证$ lang中的值!不要以任何方式依赖用户输入$lang的值,因为它可能是恶意的(链接到page.php?lang=en不够好)。 检查$ lang的值是否符合您自己的白名单,例如:$langs = array( "en", "tr" );如果失败,请重定向到常规错误页面或其他内容......

答案 2 :(得分:0)

我想最好的方法是在数据库中映射所有单词,检测哪种语言,然后通过映射语言ID(英语为EN,土耳其语为TU)和指定单词来检索数据库中的所有数据。你可以用“If,else”来做同样的方法......