Я храню некоторые атрибуты и их параметры в атрибутах класса.
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');
Почему я храню их в коде, а не в db — это отдельная история. Теперь у меня проблема с poedit, потому что он не может читать динамические переводы. У меня сейчас два варианта:
а) Поместите все значения массива в один файл дампа. Этот файл будет использоваться только парсером poedit:
_('Asian'), _('Black / African descent'), ...
Таким образом, я могу вызывать переводы в поле зрения следующим образом:
echo _(Attributes::$ethnicity[3]));
б) Я могу использовать конструктор и вызвать оттуда 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 будет вызываться только для значений отдельных атрибутов, которые будут фактически использоваться.
Я сделал тест на пресс, но был удивлен, потому что не было никакой разницы. Но я беспокоюсь, что я должен что-то упустить, поскольку мой смысл подсказывает, что вызов конструктора таким образом приведет к некоторому замедлению.