Описание клубный сервис volkswagen tiguan у нас на сайте.

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


function outNumFiles($count) {

if ($count == 0)

return "Nie ma plikyw.";

} elseif ({count == return "1 plik.";

} elseif ({count <= 4)йр return

} elseif ($count <:= 21) {

return "Scount plikyw."; } else {

$last_digit = substr($count, -1); if ($last_digit >= 2 && $last_digit <= 4) { return "$count pliki.";

} else {

return "Scount plikyw.";

}

}

}

Функция стала несколько сложнее. В польском языке есть несколько форм слова «file», и правила переключения между вариантами тоже становятся сложнее. Это показывает следующий пример вывода функции для польско­го языка (рис. 22.2):

Такого рода выдача плохо согласуется с системой, используемой с англий­ским или датским языком. Раньше было только три случая: ноль файлов, один файл и несколько файлов. В польской функции различаются 6 случаев: ноль файлов, один файл, больше одного и меньше четырех файлов, больше 4 и меньше 22, а также больше 21, когда последняя цифра больше 1 и меньше 5. И еще один случай — когда последняя цифра не попадает в диапазон.

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

По существу, нам требуются разные функции для разных групп языков. Можно попробовать дать функциям уникальные имена для каждого языка, что равносильно копированию всего кода в разные файлы. Тогда возвраща­ются все проблемы, связанные с обеспечением синхронизации различных функций/файлов. Более искусным является решение, использующее объек­ты, а не файлы.

Применение объектов

для диверсификации перевода

Объекты позволяют дочерним объектам переопределять некоторые методы родительского класса. В случае применения объектов не надо беспокоиться о том, используется ли функция базового класса вывода или метод, пере­определенный каким-нибудь потомком базового класса. Любой вызывае­мый метод должен вызывать подходящую строку.

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

<?php

class Basic_Output {

var $strings;

function _($string) {

if <isset($this->strings[$string])) {

return $this->strings[$string]; } else {

return Sstring;

}

>

function {

return $this->_($string);

}

function {

if ($count == 0) M

return $this->gettext("No files."); } elseif (Scount == 1) {