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


break;

}

)

}

Вот базовый класс для всех классов вывода:

class Basic_0utput

{

var {strings;

function _($string)

{

if (isset($this->strings[$string])) { return $this->stringst{string];

} else {

return {string;

}

function gettext($string) return

}

Общая функция outNumFiles(), которую мы уже видели:

function outNumFiles(Scount) {

; if ({count == 0) {

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

return {this->gettext("1 file."); } else {

return sprintf({this->gettext("%s files"), {count);

>

Функция getChar set () возвращает набор символов для перевода:

function (

return

)


class English Output extends 8asic_0utput

I

Конструктор инициализирует массив $st rings, записывая правильный на­бор символов. Другие строю! находятся в basicOutput:

function English_Output()

<

$this->strings = array(

'charset' => 'ISO-8859-1');

)

}

class Danish_Output extends Basic_0utput {

function Danish_Output() {

$this->strings = array(

'No files. => 'Ingen filer. '. '1 file.' => '1 fil. ', '%s files. 1 => '%s filer', 'charset' => 'ISO-8859-1');

}

}

class Polish_Output extends Basic_Output {

function Polish_Output() {

$this->strings = array!

'charset' => 'IS0-8859-2');

}

function

{

if (Scount == 0) {

return "Nie ma plikyw."; } elseif (Scount == 1) {

return "1 plik."; } elseif (Scount <= 4) {

return "Scount pliki."; } elseif (Scount <= 21) {

return "Scount plikyw."; } else {

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

return "Scount pliki."; } else {

return "Scount plikyw.";

)

Наконец, создадим новый объект Арр и отправим правильный заголовок, прежде чем выводить HTML:

$obj = new App();

header('Content-Type: text/html; charset=' . $obj->output->getCharset());

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">http://www.w3.org/TR/REC-html40/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=<?php echo($obj->output->getCharset()); ?>"> <title>My Apix/title> </head>

<body>

<?php

echo("<p>" . $obj->output->outNumFiles(7) . "</p>\n"); ?>

</body> </html>

Строки многобайтовых символов

Существует немало языков, в которых недостаточно одного байта для каж­дого символа. В одном байте содержится 8 бит, и потому он может содержать 256 (28) различных значений. В таких языках, как китайский и японский, тысячи символов. В китайском письме 40 000 символов. В японском содер­жатся все китайские и еще два алфавита. Для этих языков каждый символ должен иметь размер два или более байтов.