Аргерих Л. О языке РНР. Часть 5. Страница 63


Объектно-ориентированная технология дает решение всех этих проблем. Объекты удобны тем, что переводчики могут начать просто с перевода мас­сива строк, как в прежней системе.

Перед применением новой системы надо сделать несколько вещей. Прежде всего, язык функции декодирования должен быть нейтральным, т. е. она бу­дет возвращать только числа. Интерпретировать эти числа в специфическом для языка контексте должна какая-то другая функция. После этого код вы­вода можно поместить в класс, назвав его, например, locale_common. Все пере­воды будут тогда действовать внутри собственного класса, например:

<?php /"

* Provides all the strings, needed by locale_common to produce English

* output.

*

* ©author Martin Geisler

4

class locale^en extends locale_common {

/** This constructor provides all the strings used. * @param array This is just passed on to locale_cornmon() -/'

furiet ion locale_en ($ input)

$this->strings['list_sentences_and'] = and : $this->stringst'list_sentences_comlna,] = ', '; $this->strings['list_sentences_final_and'] = \and'; $this->strings['location'] = 'This is a report

'for %s%s%s.';

.'. $this->strings['minutes'] = ' minutes';

$this->strings['time_format'] = 'The report was made' .

'%s ago, at ' , '%s%s%s UTC.';

}

?>

Этот класс просто загружает массив $st rings с английскими строками. Трое­кратное повторение %s предназначено для того, чтобы можно было размечать данные другими кодами, помимо просто <Ь>. Например, первый %s можно за­менить элементом <font color=" red ">, второй - фактическими данными, а тре­тий - тегом </font>. Таким образом, появляется выбор в стиле маркировки.

На этом заканчивается рассказ о том, как можно полностью интернациона­лизировать сценарий из реальной жизни.

Резюме

В этой главе мы рассмотрели способы интернационализации программ с ми­нимальной затратой сил. Было рассмотрено несколько технологий - чистый РНР с объектами или без них и библиотека Gettext.

Мы также узнали, как получить из броузера информацию о предпочтитель­ном для пользователя языке. На основе этой информации можно отправлять страницы с правильной кодировкой символов.

Наконец, мы разобрали простые примеры, которые могут послужить твердой основой для расширения и экспериментов. Кроме того, мы преодолели неко­торые более практические проблемы программирования, показав способы их решения, отличные от обычного подхода, и архитектурные решения для по­лучения реальных результатов в нелинейных языковых конструкциях.