У меня есть кодовая база, которую можно настроить для разных клиентов.В большинстве случаев это выполняется путем загрузки класса с константами, специфичными для каждого клиента, но с тем же именем класса.Столкновение имен классов управляется, и, очевидно, загружается только одно.
class Customer () {
const CUST_NAME = 'Alpha Corp.';
}
class Customer () {
const CUST_NAME = 'Beta, Inc.';
}
Для каждого клиента я также хочу, чтобы код был интернационализирован.Таким образом, программа может извлекать отображаемый текст из источника, зависящего от языка, но при этом сохранять динамичность в отношении информации, специфичной для клиента.Предположим, что информация о клиенте безразлична к i18n.Это уменьшает количество файлов с одного на клиента для каждого языка до одного на язык.Желаемый результат заключается в реализации чего-то похожего на
// in separate language files:
$greeting = 'Hello. Welcome to ';
$greeting = 'Hola. Bienvenido a ';
// in front-end
$greeting = get $greeting in desired language;
echo $greeting, Customer::CUST_NAME, "\n";
. Лучшее решение, которое я могу придумать для удовлетворения этих требований, - это класс i18n (или семейство классов), который будет работать с несколькими клиентами и / или несколькими языками.Однако вызов методов является дорогостоящим по сравнению с строковыми литералами или константами.Методы будут объединять переводы из констант или внешних источников и объединять их со значениями из класса Customer.(Я сейчас застрял с PHP 5.2, поэтому тонкости heredoc для свойств / констант класса недоступны.)
class i18n_en () {
const GREETING = 'Hello. Welcome to ';
static public function getGreeting () {
return self::GREETING . Customer::CUST_NAME;
}
}
В качестве альтернативы я могу написать скрипт для «шаблонного подхода», в котором яподдерживать файл шаблона класса с текстовыми заполнителями.Пользовательские файлы создаются во время создания клиента из этих шаблонов.Было бы легко создавать или повторно генерировать файлы по мере необходимости, но я вернулся к необходимости отдельного файла для каждого клиента для каждого языка.Таким образом, это не удовлетворяет мою потребность так хорошо.
Конечно, я не первый сталкиваюсь с этой проблемой.Кто-нибудь может предложить альтернативы или лучшие практики?Поскольку код будет выполняться во много раз больше, чем я создам нового клиента, я предпочитаю эффективность времени выполнения, а не простоту обслуживания.Конечно, отличное решение предложит и то и другое.