我有翻译功能t($var);
function t($word) {
return $this->words[$word];
}
Run Code Online (Sandbox Code Playgroud)
$this->words数组在哪里
$this->words = array(
'word1' => 'word',
'word2' => 'something'
);
Run Code Online (Sandbox Code Playgroud)
我使用函数为<?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.'
);
Run Code Online (Sandbox Code Playgroud)
然后将变量解析为t()函数。
<?php echo t('sentence', array('Mike', 99));
Run Code Online (Sandbox Code Playgroud)
所以输出将是: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];
}
Run Code Online (Sandbox Code Playgroud)
但此函数不适用于每种类型的多个变量。
小智 5
我见过人们推荐使用sprintf,但我个人建议使用vsprintf:http://www.php.net/manual/en/function.vsprintf.php
function t($word, $vars = array()) {
return vsprintf($this->words[$word], $vars);
}
Run Code Online (Sandbox Code Playgroud)
这允许您传递变量数组,而不是将它们作为单独的参数传递。
一般来说,翻译函数会首先检查翻译,如果没有找到,则返回查找键。
function t($word, $vars = array()) {
return isset($this->words[$word]) ? vsprintf($this->words[$word], $vars) : $word;
}
Run Code Online (Sandbox Code Playgroud)