Не применяйте gettext() с РНР при отсутствии инфраструктуры, необходимой для ее работы через Сеть. Если решено использовать gettextO, то при переходе на другой сервер, не поддерживающий эту библиотеку, придется модифицировать все команды вывода. Кроме того, лучше от нее отказаться при написании сценария, распространяемого среди разных многочисленных пользователей, поскольку это лишит большинство из них радости работы с ним.
С другой стороны, если gettext () станет стандартным компонентом РНР, это будет замечательная библиотека. В нескольких распространенных текстовых редакторах, например в emacs, есть специальная поддержка редактирования файлов . ро.
Расширение системы с помощью объектов
Мы видели, как просто локализуются сценарии в результате размещения строк в массивах или в случае применения Gettext. Можно воспользоваться обеими системами локализации, но следует изучить возможность их реконструкции с помощью объектов. Идея состоит в том, чтобы собрать в одном классе все функции, осуществляющие вывод. Функции должны быть достаточно общими и иметь возможность работы со многими языками путем простой подстановки переведенных строк. Одним из членов класса должен быть массив, в котором содержатся строки, необходимые функциям.
Важно отметить, что этот базовый класс не содержит в себе каких-либо строк. С массивом нельзя работать, пока в него не введены строки. Мы создадим новый класс, наследующий все методы базового класса. Все, что требуется от этого класса, - это заполнить строки, используемые методами вывода в родительском классе.
Преимущества объектов
Большое преимущество состоит в том, что новый класс может переопределять методы базового класса. Это звучит тривиально, пока не поймешь, что многие базовые функции вывода, необходимые любому специалисту по локализации, можно написать в виде общих методов. Бывает так, что большая часть методов дает прекрасный результат для ряда языков, но один из них не годится в некотором особом случае конкретного языка. Тогда переводчик берет базовую функцию и заново реализует ее так, как считает нужным. Как правило, можно просто скопировать код исходной функции и добавить к нему дополнительную проверку.
В результате программист полностью контролирует вывод перевода. Если программиста не удовлетворяет функция, имеющаяся в базовом классе, он может заменить некоторый конкретный метод. Необязательно копировать весь поскольку проблема заключается лишь в одном (предположительно) методе.