带有语言文件的PHP多语言站点

时间:2013-08-30 22:16:46

标签: php multilingual

我用2种语言制作我的网站。对于该语言,我只需加载一个包含以下结构的数组的php文件:

$translation = array(
    "username" => "Username",
    "something_else" => "Something else"
);

然后在我的主网站内,而不是回显Username我回应$translation["username"],它适用于所有语言。现在我想知道,通常一个字符串分为两部分。目前我这样做:

"amount_of_something" => array("You have logged in","times.")

然后我使用echo $translation["amount_of_something"][0] . " 5 ". $translation["amount_of_something"][1];检索它。

现在,对于实际的问题:最后一个有更短的方法吗?在jQuery插件中,我遇到了以下语法:

maxlength: $.validator.format("Maximum {0} characters allowed.")

我想这是在这个例子中使用额外的功能完成的。在php中是否有内置的方法(因为php有一个bazillion数组函数),否则最有效的方法是什么?

我认为使用函数会很容易,但是由于可能的变量数量(它们之间的值可能超过1),我不太确定它是否值得我现在使用的方法

我希望我的问题有点清楚,如果不是,请告诉我问题的哪一部分不是。

3 个答案:

答案 0 :(得分:3)

我相信php sprintf是一个相关的功能,在这里提及

看看他们的例子。

<?php
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
?>

您可以使用类似方法解决问题。很多php框架在你的情况下使用sprintf

答案 1 :(得分:2)

拥有多种语言的最简单方法是:

$lang = array();

$lang['Example'] = "Welcome $User";

然后,嵌入您的网站,如:

<p> echo $lang['Example']; </p>

您可以设置Cookie,并根据设置的Cookie包含包含数组的其他文件。

if(isset($_COOKIE['german'])) {
   $lang = "languages/german.php";
} else {
   $lang = "languages/english.php";
}

include_once($lang);

答案 2 :(得分:1)

您可能寻找的功能是sprintf。要使用您的示例,请将数组转换为字符串:“您已登录%d次”。