在我创建的网站中,我希望包含几种语言。
以下是我如何确定我应该展示的语言。
<?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"
您可以使用类似于if语句的东西,并将特定文件包含在所有变量中。
switch ($_GET['lang']) {
case "en":
include "lang/en.php";
break;
case "es":
include "lang/es.php";
break;
default:
include "lang/en.php";
}
但在这里,所有的字符串都将在变量中,因此您必须小心,不要在代码的其余部分中使用/覆盖这些变量。
这个页面提供了一个非常简单易用的例子,说明如何做到这一点。脚本加载JSON编码的语言文件,找到您想要的文本,并返回翻译后的文本。
如果您在开发方面进展不远,我建议您使用支持国际化的框架。
例如,Codeigniter具有语言类
或者你可以实现一些与他们类似的东西。
您可能需要为每个模板编写不同的语言,并只包含该文件,而不是英文文件。
如果我可以推荐的话,你在你的网站上试过这个吗?https://translate.google.com/manager/
可能会让你的工作轻松很多。
事实上的国际化标准方法是GNU Gettext(PHP绑定)。
不要使用文件,创建一个类似的数据库
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
尝试失败。