2012-07-16 25 views
0

在我创建的网站中我想包含几种语言。如何在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" 
+4

你有没有尝试过使用'php本地化'的东西? – ametren 2012-07-16 14:07:04

+3

看看'Gettext':http://php.net/manual/en/book.gettext.php – 2012-07-16 14:08:21

+0

我对PHP/GNU gettext有很好的体验(http://php.net/manual/en/书。gettext.php) – Arcadien 2012-07-16 14:08:24

回答

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编码语言文件,并找到您想要的文本并返回翻译的文本。

+0

谢谢你。我想现在我会使用这个解决方案,但是我得到这个错误:'解析错误:语法错误,意外的T_BREAK' – EnexoOnoma 2012-07-16 14:15:48

+0

啊是的,默认情况下没有break语句。这些行也应以分号结尾。我的坏,修复。 – sachleen 2012-07-16 14:43:54

1

我会推荐使用一个支持国际化的框架,如果你在开发过程中还远没有。

例如,笨有Language Class

或者您也可以实现类似的东西他们。

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尝试。

1

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

如果我能推荐,你有没有试过这个为你的网站? https://translate.google.com/manager/

可能使您的工作变得更容易。