Mic*_*son 5 php class gettext private-members
我正在制作一个将被翻译成多种语言的网站。
\n\n所有字符串都必须本地化。
\n\n有时我需要显示语言名称、国家/地区名称或从数据库检索的其他信息。以这种方式处理的数据很少会改变 - 如上所述,我正在谈论语言名称、国家/地区等。
\n\n在此示例中,我使用的数组保存了网站 UI 已翻译成的语言。为了允许翻译名称(当“更改语言”标志/链接悬停时用于标题文本),我有一个像*这样的数组:
\n\nArray("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));\nRun Code Online (Sandbox Code Playgroud)\n\n我使用它们来获取给定语言的相关名称字符串。
\n\n目前我正在使用全局数组:
\n\n$global_langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));\nRun Code Online (Sandbox Code Playgroud)\n\n用法:
\n\nglobal $global_langNames;\n\necho $global_langNames[$code]; // $code = \'zh_CN\'\nRun Code Online (Sandbox Code Playgroud)\n\n输出(区域设置 = en_GB):
\n\n\n\n\n简体中文
\n
输出(语言环境 = zh_CN):
\n\n\n\n\n\xe7\xae\x80\xe4\xbd\x93\xe4\xb8\xad\xe6\x96\x87
\n
我更愿意将这个(和其他)常量数组声明为类的私有成员,但 PHP 似乎不愿意:
\n\nclass constants_lang{\n\n private static $langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));\n\n static function getLangName($code){\n return self::$langNames($code);\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n结果是:
\n\nParse error: syntax error, unexpected \'(\', expecting \')\' in /site/http/includes/classes/constants/lang.php on line 20\nRun Code Online (Sandbox Code Playgroud)\n\n我应该低下头并返回到全局数组,还是有另一种更好的方法让我以这种方式使用“常量”数组?
\n\n*数组键来自存储语言代码以及我们是否有 UI 翻译的数据库表:
\n\ncode ui translation\nzh_CN 1\nen_GB 1\nzh_TW 0\n ....\nRun Code Online (Sandbox Code Playgroud)\n\n解决方案
\n\nclass constants{\n\n private $langNamesFromCode;\n\n function __construct()\n {\n $this->langNamesFromCode = $this->initLangNamesFromCode();\n }\n\n /* INIT */\n\n private static function initLangNamesFromCode()\n {\n return Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));\n }\n\n /* GETTERS */\n\n public static function getLangNameFromCode($code)\n {\n if(self::isStatic()){\n $langNamesFromCode = self::initLangNamesFromCode();\n return $langNamesFromCode[$code];\n }\n else{\n return $this->langNamesFromCode[$code];\n }\n }\n\n /* UTILITY */\n\n private static function isStatic()\n {\n return !(isset($this) && get_class($this) == __CLASS__);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
是的,您只能在变量初始化中使用(大多数)文字。
解决方法是这样的:
class A {
private $var;
public function init() {
$this->var = func();
}
}
A::init();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |