PHP - 多语言支持
PHP - MultiLanguage support
我正在尝试为我的网站添加多语言支持,如下所示:
Language.php
:
class lang {
private $lang = null;
function __construct($lang) {
global $module;
$module['lang'] = true;
$this->lang = parse_ini_file("includes/languages/{$lang}.ini");
}
public function xlate($str) {
$arg_count = func_num_args();
if ($arg_count > 1) {
$params = func_get_args();
// strip first arg
array_shift($params);
} else {
$params = array();
}
$out_str = isset($this->lang[$str]) ? $this->lang[$str] : null;
if (!$out_str) {
throw new exception("Lang String Not Found: $str");
$this->lang = parse_ini_file("includes/languages/en_gb.ini");
}
return vsprintf($out_str, $params);
}
}
然后我将我的语言变量存储在一个 ini 文件中:
en_gb.ini
:
Support = Support
Quick Menu = Quick Menu
HOME_MAIN_TITLE = You will Get Paid
然后我像这样使用它:
echo $lang->xlate("Support");
echo $lang->xlate("Quick Menu");
echo $lang->xlate("HOME_MAIN_TITLE");
哪个有效。但是,每当我在语言中传递 '
字符时,它都不起作用:
HOME_MAIN_TITLE = You'll Get Paid
它回显文本直到 '
字符:
You
然后它停止了。
我该如何解决这个问题?
一般来说,.ini
文件中的所有字符串都应该包装到 "double quotes"
中。这将解决问题。
我可以建议你看一些通用的和社区认可的东西。喜欢 https://github.com/symfony/translation(里面有 .ini
加载程序)
我正在尝试为我的网站添加多语言支持,如下所示:
Language.php
:
class lang {
private $lang = null;
function __construct($lang) {
global $module;
$module['lang'] = true;
$this->lang = parse_ini_file("includes/languages/{$lang}.ini");
}
public function xlate($str) {
$arg_count = func_num_args();
if ($arg_count > 1) {
$params = func_get_args();
// strip first arg
array_shift($params);
} else {
$params = array();
}
$out_str = isset($this->lang[$str]) ? $this->lang[$str] : null;
if (!$out_str) {
throw new exception("Lang String Not Found: $str");
$this->lang = parse_ini_file("includes/languages/en_gb.ini");
}
return vsprintf($out_str, $params);
}
}
然后我将我的语言变量存储在一个 ini 文件中:
en_gb.ini
:
Support = Support
Quick Menu = Quick Menu
HOME_MAIN_TITLE = You will Get Paid
然后我像这样使用它:
echo $lang->xlate("Support");
echo $lang->xlate("Quick Menu");
echo $lang->xlate("HOME_MAIN_TITLE");
哪个有效。但是,每当我在语言中传递 '
字符时,它都不起作用:
HOME_MAIN_TITLE = You'll Get Paid
它回显文本直到 '
字符:
You
然后它停止了。
我该如何解决这个问题?
一般来说,.ini
文件中的所有字符串都应该包装到 "double quotes"
中。这将解决问题。
我可以建议你看一些通用的和社区认可的东西。喜欢 https://github.com/symfony/translation(里面有 .ini
加载程序)