Php-使站点多语言,代码更改最少
我有一个用php编写的网站。它使用如下结构Php-使站点多语言,代码更改最少,php,multilingual,translate,Php,Multilingual,Translate,我有一个用php编写的网站。它使用如下结构 print "$x $y at {$SERVER['HTTP_HOST']}"; 现在我想让我的网站多语言,但我想在代码中使用最小的更改,以便能够编写类似 //my translation array - I select all such lines in one place //IMPORTANT: $x, $y and $SERVER['HTTP_HOST'] are not defined yet. //This templates sho
print "$x $y at {$SERVER['HTTP_HOST']}";
现在我想让我的网站多语言,但我想在代码中使用最小的更改,以便能够编写类似
//my translation array - I select all such lines in one place
//IMPORTANT: $x, $y and $SERVER['HTTP_HOST'] are not defined yet.
//This templates should be defined before the code.
$lang = array(
'message'=>'$x $y at {$SERVER['HTTP_HOST']}';
);
translate('message');
这将翻译我的网站
这是更多说明我想法的伪代码:
<?php
error_reporting(E_ALL);
///////////////////////translation
//my translation array.
//IMPORTANT: $x, $y and $SERVER['HTTP_HOST'] are not defined yet.
//This templates should be defined before the code.
$_SERVER['HTTP_HOST']=='localhost';
$lang = array(
'message'=>"$x $y at {$_SERVER['HTTP_HOST']}",
);
function translate($v){
//hmmm. All magic is doing here - but I do not know how :)
global $lang;
$tpl = $lang[$v];
print $tpl;
eval("\$tpl = \"$tpl\";");
print $tpl;
}
////////////////////////start main work
$x = 'hello';
$y = 'world';
print $lang['message'];
translate("message");
//I want to print "hello world at localhost";
$y = 'world2';
translate("message");
//I want to print "hello world2 at localhost";
$lang['message'] = 'only $x';
translate("message");
//I want to print "only hello";
?>
不是很好,但只需最少的初始努力即可实现您的目标:
$lang = array(
'en'=>"$x $y at {$_SERVER['HTTP_HOST']}",
'it'=>"$x $y italiano {$_SERVER['HTTP_HOST']}",
// whatever other language
);
function translate($v, array $lang){
if (array_key_exists($v, $lang)) {
return $lang[$v];
} else {
throw new Exception('Invalid language');
}
}
echo translate('it', $lang);
我想说的是,如果您想扩展翻译功能,那么使用内联php数组进行翻译(如您所建议的)将导致一个大混乱
我使用的基本方法如下:
1) 保留一个“翻译”表,该表将类似于:
Keyword | English | German | ...
hello | hello | hallo | ...
2) 然后在页面加载时,从数据库中获取它们并创建一个翻译数组,如下所示:
$translate = array(
'hello'=> array ("English"=>"hello", "German"=>"hallo"),
'next_translation'=> array ("English"=>"...", "German"=>"..."),
....
);
3) 使用当前语言(即“英语”)维护$lang变量
4) 因此,每当你需要翻译某物时,你只需要钥匙和语言变量:
$translate[$keyword][$lang];
关于gettext
?关于“想在代码中使用最小的更改,以便能够编写类似的东西”如何?使用google translate for Website顺便说一下:你真的不需要$lang作为全局语言,但它不起作用-请清楚地解释什么不起作用..我知道如何生成$translate[$keyword][$lang]。但问题是,使用它不是为了逐字翻译,而是为了更困难的事情,比如$translate[$keyword][$lang]=“{$\u服务器['HTTP\u HOST']}”
上的$x$y,我想在描述变量$x和$y之前使用这样的模板。问题是,我想在{$\u服务器上使用类似于“$x$y”的语言翻译['HTTP_HOST']}',
在描述变量$x和$y之前。