0

我将一些属性及其选项存储在类 Attributes 中。

public static $ethnicity        = array(0 => '-', 
                                        1 => 'Asian',
                                        2 => 'Black / African descent',
                                        3 => 'East Indian',
                                        4 => 'Latino / Hispanic',
                                        5 => 'Middle Eastern',
                                        6 => 'Native American',
                                        7 => 'Pacific Islander',
                                        8 => 'White / Caucasian',
                                        9 => 'Other');  

为什么我将它们保存在代码中而不是数据库中是另一回事。现在我对 poedit 有疑问,因为它无法读取动态翻译。我现在有两个选择:

a) 将所有数组值放入一个转储文件。此文件将仅由 poedit 解析器使用:

_('Asian'), _('Black / African descent'), ...

通过这种方式,我可以通过以下方式调用视图中的翻译:

echo _(Attributes::$ethnicity[3]));

b)我可以使用构造函数并从那里调用 gettext 。

class Attributes 
{ 

    public function __construct()
    {
        $this->ethnicity        = array(0 => _('-'), 
                                        1 => _('Asian'),
                                        2 => _('Black / African descent'),
                                        3 => _('East Indian'),
                                        4 => _('Latino / Hispanic'),
                                        5 => _('Middle Eastern'),
                                        6 => _('Native American'),
                                        7 => _('Pacific Islander'),
                                        8 => _('White / Caucasian'),
                                        9 => _('Other'));  
      //...      
    }                                    
}

通过这种方式,我可以通过以下方式调用视图中的翻译:

$attr = new Attributes;
echo $attr->ethnicity[3]; 

现在我的问题:

假设将有大约 10 个这样的属性,平均有 40 个选项,所以这总共有 400 个数组对。以这种方式使用构造会以任何方式减慢应用程序吗?因为这意味着每次我调用构造函数时,都会为所有数组值调用 gettext,即使此属性值未显示在视图中。如果我不使用构造函数,那么只会为实际使用的单个属性值调用 gettext。

我做了ab测试,但很惊讶,因为没有任何区别。但我担心我一定会遗漏一些东西,因为我的感觉会说以这种方式调用构造函数会减慢速度。

4

1 回答 1

1

我个人会坚持使用解决方案 B,因为它更清洁,几个月后你仍然知道$attr->ethnicity[3]; 它的作用。

如果您仍然不确定,请尝试做一些压力测试 - 尝试多次调用构造函数。但我的拙见是不会有显着差异。特别是如果您不需要在实时应用程序中多次调用它。gettext 旨在快速。

于 2012-10-07T20:17:17.977 回答