晚上好,
在我正在开发的应用程序中,我有一个处理多语言的课程。它通过外部加载关联数组来实现,其中转换源的定义如下:
'Source input' => 'Zdroj vstupního'
目前,通过以下方式解决和使用该类,可以完美地工作:
$lang = new Lang('Czech');
print $lang->_('Source input'); // output: "zdroj vstupního"
但是,我希望在一个不依赖于“Lang”类实例的快捷方式中使用它。我尝试过使用静态方法,但到目前为止我运气不好。
我想要实现的伪代码。
$lang = new Lang('Czech');
$lang->setCurrent('contact_us'); // loads the language file for contact_us
<p>
<?php print _('Source input'); ?> // output: "zdroj vstupního"
</p>
正确方向上的一点很棒。谢谢!
答案 0 :(得分:4)
如果您使用$lang
声明,则可以从_
函数访问全局global $lang
变量:
<?php
class Lang
{
function _($str)
{
return 'Zdroj vstupního';
}
}
function _($str)
{
global $lang;
return $lang->_($str);
}
$lang = new Lang('Czech');
print _('Source input');
?>
或者,您可以在static
类中使用Lang
变量,而不是创建类的实例。这种方式更简洁,因为您不必在全局命名空间中创建$lang
变量。
<?php
class Lang
{
static $lang;
function setCurrent($lang)
{
self::$lang = $lang;
}
}
function _($str)
{
if (Lang::$lang == 'Czech')
{
return 'Zdroj vstupního';
}
}
Lang::setCurrent('Czech');
print _('Source input');
?>