Php 带参数的多语言脚本

Php 带参数的多语言脚本,php,Php,我一直在制作一个多语言脚本。 我已经让它完美地工作了,有一个带有语言变量的数组。每种语言都有自己的带有变量的文件。脚本根据用户选择的语言决定加载哪个文件 这是我在每个语言文件中的内容: $lang = array(); $lang['var1'] = "Some text here"; $lang['var2'] = "Some text here"; ... $lang['var20'] = "Some text here"; 现在我想让它更具动态性并包含参数。 我在vBulletin语言模

我一直在制作一个多语言脚本。 我已经让它完美地工作了,有一个带有语言变量的数组。每种语言都有自己的带有变量的文件。脚本根据用户选择的语言决定加载哪个文件

这是我在每个语言文件中的内容:

$lang = array();
$lang['var1'] = "Some text here";
$lang['var2'] = "Some text here";
...
$lang['var20'] = "Some text here";
现在我想让它更具动态性并包含参数。 我在vBulletin语言模板中看到了它,有如下内容:
text{1}text{2}text text

我想要这个文本:
Hello{1},这是用户CP
。参数应该是动态的,每个用户都不同


如何执行此操作?

这取决于您想如何使用它,但您可以执行的操作例如,使用
printf
或用于输出:

语言文件:

$lang['varxx'] = 'Hello %s, this is the User CP';
使用它的脚本:

$name = "test user";
printf($lang['varxx'], $name);
$modified_string = sprintf($lang['varxx'], $name);

通常使用包装器函数。如果到目前为止您一直在直接访问
$lang
数组,则必须进行调整

这是非常艰难的:

 function t ($textid) {

      $text = $GLOBALS["lang"][$textid];
      $args = func_get_args();

      $text = preg_replace('#\{(\d+)\}#e', '$args[$1]', $text);

      return $text;
 }
不过,您可以使用另一种模式方案来避开正则表达式

用法很简单:

 print t("var1", "placeholder", ...);
产出:

Hello John, here's a cookie
更多关于和

Hello John, here's a cookie