如何在PHP网站中包含不同的语言?

时间:2012-07-16 14:01:50

标签: php

在我正在创建的网站中,我想要包含多种语言。

以下是我如何识别我应该展示的语言。

    <?php
    $pagename = $_SERVER["REQUEST_URI"];
       if (strpos($pagename,'?en') !== false) 
         {
            echo 'english';
here is when I have to include a language template file for english language.
         }
    ?>

我的目标是包含语言模板文件,而不是复制任何语言的所有网站。

所以我想到的是,例如在index.php中,变量对于所有语言都是相同的,但内容将会改变。

<div id="main">
<?php echo $main_description; ?>
</div>

我应该如何为此工作添加语言文件?

$main_description ="this is the main description written in english"

5 个答案:

答案 0 :(得分:1)

您可以使用类似于if语句的内容,并将所有变量包含在特定文件中。

switch ($_GET['lang']) {
    case "en":
        include "lang/en.php";
        break;
    case "es":
        include "lang/es.php";
        break;
    default:
        include "lang/en.php";
}

但是在这里,你的所有字符串都在变量中,你必须小心不要在代码的其余部分中使用/覆盖这些变量。

This page提供了一个非常简单易懂的示例,说明如何使用JSON编码的语言文件,脚本加载并找到所需的文本并返回翻译后的文本。

答案 1 :(得分:1)

如果你不在开发阶段,我会建议使用支持国际化的框架。

例如,Codeigniter具有Language Class

或者你可以实现与他们类似的东西。

答案 2 :(得分:1)

您可能需要为每个模板编写不同的语言,只需包含该文件而不是英文文件。

如果我可以推荐,您是否已经为您的网站试过了? https://translate.google.com/manager/

可能会让你的工作变得更轻松。

答案 3 :(得分:1)

国际化的事实标准方法是GNU GettextPHP bindings)。

答案 4 :(得分:0)

不要使用文件,创建像:

这样的数据库
id               | en              | de             | es
---------------------------------------------------------------------
MAIN_DESCRIPTION | English desc .. | German desc .. | Spanish desc ..
MENU_1           | English des2 .. | German des2 .. | Spanish des2 ..

当你得到正确的代码时,只需加载正确的表

if ( strpos( $pagename, '?en' ) !== false ) {
  $lang_code = 'en';
} elseif ( strpos( $pagename, '?de' ) !== false ) {
  $lang_code = 'de';
...
}

$query = "SELECT " . $lang_code . " FROM texts WHERE id = MAIN_DESCRIPTION";
等等......

PS:不要在查询中直接插入变量,否则会导致query injection次尝试错误。