我有翻译功能t($var);
function t($word) {
return $this->words[$word];
}
其中$this->words
是数组
$this->words = array(
'word1' => 'word',
'word2' => 'something'
);
我使用的函数为<?php echo t('word1'); ?>
输出为:word
我的目标是使用通配符%s ,%d ,%f 将其替换为变量
示例:
$this->words = array(
'word1' => 'word',
'word2' => 'something',
'sentence' => 'Hello, my name is %s. I am %d years old.'
);
然后将变量解析为t()
函数。
<?php echo t('sentence', array('Mike', 99));
因此输出将是:Hello, my name is Mike. I am 99 years old.
到目前为止我的工作:
function t($word, $vars = array()) {
foreach ($vars as $key) {
if(is_string($key)){
$this->words[$word] = str_replace ('%s', $key, $this->words[$word]);
}
if(is_int($key)) {
$this->words[$word] = str_replace ('%d', $key, $this->words[$word]);
}
if(is_float($key)){
$this->words[$word] = str_replace ('%f', $key, $this->words[$word]);
}
}
return $this->words[$word];
}
但是这个函数并不适用于每种类型的变量。
答案 0 :(得分:4)
我看过有人建议使用sprintf
,但我个人建议使用vsprintf
:http://www.php.net/manual/en/function.vsprintf.php
function t($word, $vars = array()) {
return vsprintf($this->words[$word], $vars);
}
这允许您传入一组变量,而不是将它们作为单独的参数传递。
一般来说,翻译函数会首先检查翻译,如果没有找到则只返回查找键。
function t($word, $vars = array()) {
return isset($this->words[$word]) ? vsprintf($this->words[$word], $vars) : $word;
}
答案 1 :(得分:0)
您可以像下面这样定义t函数:
function t($array)
{
return sprintf($array['sentence'],$array['word1'],$array['word1']);
}
数组是:
$array = array(
'word1' => 'word',
'word2' => 'something',
'sentence' => 'Hello, my name is %s. I am %d years old.'
);
调用该函数: echo t($ array);