php gettext и poedit - что было бы быстрее, используя конструктор или без
Я храню некоторые атрибуты и их параметры в классе 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, потому что он не может читать динамические переводы. У меня сейчас два варианта:
а) Поместите все значения массива в один файл дампа. Этот файл будет использоваться только анализатором 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 будет вызываться только для отдельных значений атрибутов, которые будут фактически использоваться.
Я сделал тест на аб, но был удивлен, потому что не было никакой разницы. Но я беспокоюсь о том, что я должен что-то упустить, так как мой смысл сказал бы, что вызов конструктора таким образом вызовет некоторое замедление.
1 ответ
Лично я бы придерживался решения B, поскольку оно чище, и через несколько месяцев вы все еще знаете, что $attr->ethnicity[3];
делает.
Если вы все еще не уверены, попробуйте выполнить стресс-тест - попробуйте вызвать конструктор много раз. Но мое скромное мнение таково, что не будет существенной разницы. Особенно, если вам не нужно называть это много раз в живом приложении. gettext разработан, чтобы быть быстрым.