Php - 使用最小代码更改来创建站点多语言

时间:2015-11-12 15:52:33

标签: php multilingual translate

我的网站用php编码。它使用像

这样的结构
key

现在我想让我的网站成为多语言,但我想在代码中使用最少的更改,以便能够编写类似

的内容
print "$x $y at {$SERVER['HTTP_HOST']}";

将翻译我的网站。

这是更多的PSEUDO代码,说明了我的想法:

//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');

但它不起作用:))

如何实施这种方法?

2 个答案:

答案 0 :(得分:0)

不是很好,但是只需要很少的初始努力就能做到你想要的东西:

$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);

答案 1 :(得分:0)

我说如你所说的那样使用内联php数组进行翻译会导致一大堆混乱,以防你想扩展你的翻译功能。

我使用的基本方法如下:

1)坚持翻译'表,看起来像是:

Keyword | English | German | ...
hello   | hello   | hallo  | ...

2)然后在页面加载时,从DB中获取它们并创建一个翻译数组,如下所示:

$translate = array(
    'hello'=> array ("English"=>"hello", "German"=>"hallo"),
    'next_translation'=> array ("English"=>"...", "German"=>"..."),
    ....
);

3)使用当前语言维护一个$ lang变量,即"英语"。

4)所以每当你需要翻译时,你只需要密钥和语言var:

$translate[$keyword][$lang];