我将一些属性及其选项存储在类 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测试,但很惊讶,因为没有任何区别。但我担心我一定会遗漏一些东西,因为我的感觉会说以这种方式调用构造函数会减慢速度。