ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 将Gettext字符串分配给类成员

2019-07-05 04:29:33  阅读:290  来源: 互联网

标签:php private-members gettext class


我正在制作一个将被翻译成x种语言的网站.

所有字符串都必须本地化.

有时我需要显示从数据库中检索的语言名称,国家/地区名称或其他信息.以这种方式处理的数据很少会改变 – 如上所述,我所说的是语言名称,国家等.

在这个例子中,我使用的数组包含已翻译网站UI的语言.为了允许翻译名称(当“更改语言”标志/链接悬停时用于标题文本),我有一个类似*的数组:

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'

输出(locale = en_GB):

Chinese Simplified

输出(locale = 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();

标签:php,private-members,gettext,class
来源: https://codeday.me/bug/20190705/1383853.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有