Php 将Gettext字符串分配给类成员
我正在制作一个网站,将被翻译成x语言 所有字符串都必须本地化 有时,我需要显示从数据库检索到的语言名称、国家名称或其他信息。以这种方式处理的数据很少会被更改——如上所述,我谈论的是语言名称、国家等 在本例中,我使用的数组包含站点UI翻译成的语言。为了允许名称的翻译(当“change language”标志/链接悬停时用于标题文本),我有一个类似*的数组:Php 将Gettext字符串分配给类成员,php,class,gettext,private-members,Php,Class,Gettext,Private Members,我正在制作一个网站,将被翻译成x语言 所有字符串都必须本地化 有时,我需要显示从数据库检索到的语言名称、国家名称或其他信息。以这种方式处理的数据很少会被更改——如上所述,我谈论的是语言名称、国家等 在本例中,我使用的数组包含站点UI翻译成的语言。为了允许名称的翻译(当“change language”标志/链接悬停时用于标题文本),我有一个类似*的数组: Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English
Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
我使用它们来获取给定语言的相关名称字符串
目前我使用的是全局数组:
$global_langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
用法:
global $global_langNames;
echo $global_langNames[$code]; // $code = 'zh_CN'
输出(语言环境=en_GB):
简体中文
输出(区域设置=zh_CN):
简体中文
我更愿意将这个(和其他)常量数组声明为类的私有成员,但PHP似乎不愿意:
class constants_lang{
private static $langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
static function getLangName($code){
return self::$langNames($code);
}
}
结果:
Parse error: syntax error, unexpected '(', expecting ')' in /site/http/includes/classes/constants/lang.php on line 20
我应该低着头回到全局数组中,还是有其他更好的方法让我以这种方式使用“常量”数组
*数组键来自存储语言代码的数据库表,以及我们是否有UI转换:
code ui translation
zh_CN 1
en_GB 1
zh_TW 0
....
解决方案
class constants{
private $langNamesFromCode;
function __construct()
{
$this->langNamesFromCode = $this->initLangNamesFromCode();
}
/* INIT */
private static function initLangNamesFromCode()
{
return Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
}
/* GETTERS */
public static function getLangNameFromCode($code)
{
if(self::isStatic()){
$langNamesFromCode = self::initLangNamesFromCode();
return $langNamesFromCode[$code];
}
else{
return $this->langNamesFromCode[$code];
}
}
/* UTILITY */
private static function isStatic()
{
return !(isset($this) && get_class($this) == __CLASS__);
}
}
是的,您只能在变量初始化中使用(大多数)文本
解决方法类似于:
class A {
private $var;
public function init() {
$this->var = func();
}
}
A::init();
不能在成员声明中使用函数。如果您需要这样做,请将其移动到构造函数或静态函数。这样做是否比使用全局数组更好?更新了我的问题,并从您的答案中获取了解决方案。谢谢。请参见[此问题][1]了解其他选项。YMMV。[1]: