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


Как мы уже выяснили, это кратковременное решение проблемы Поэто­му лучше было бы записать все строки в массив $st rings, сохранив его в двух разных файлах: locale.en. inc и locale_dk. inc. Включив нужный файл, мож­но управлять языком

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

<?php Л

* This file holds the English translation of PHP Weather. To use it,

* just include it in the main phpweather.inc file.

*

* Author: Martin Geisler 4

if (isset(Sstrings)} { unset($strings);

)

/* Load the new strings */

{strings = array(

'ncLdata' => '<blockquote><p>Sorry! There is <b>no data</b> 1 .

'available for %s.</p></blockquote>', 'mm_inches' => '<b>%s</b>rm (<b>%s</b> inches)',

'precip_a_trace' => 'a trace',

was %s of precipitation 'sky_str_format1' => 'There were <b>%s</b> at a height of <b>%s</b>

'meters (<b>%s</b> feet)', 'sky_str_clear' => 'The sky was <b>clear</b>');

?>

После перевода файл может выглядеть так:

<?php

/* *

* This file holds the Danish translation of PHP Weather. To use it,

* just include it in the main phpweather. inc file.

*

* @author Martin Geisler

V

if (isset({strings)) { unset($strings);

}

/* Load the new strings */

{strings = array(

'no_data' => '<blockquote><p>Desvæ:rre! Der er '

'<b>ingen data</b> tilstæde for ' '%s.</p></blockquote>', 'mm_inches' =;- <b>%s</b; mm (<b>%s</b> tommer',

'precip_a_trace' => 'ensmule',

'precip_there_was' 'Oer var %s nedbø r ',

'sky_str_format1' => 'Dervar <b>%s</b> i en højde af ' .

'<b>%s</b>meter (<b>%s</b> fod)', 'sky_str_clear' => 'Himlen var <b>skyfri</b>');

?>

По мере того как в сценарии появляются новые строки, соответствующий английский перевод можно добавить во все языки. Это необходимо, чтобы

обеспечить некоторый запас прочности. В этом не было бы необходимости при использовании gettext() или функций-оболочек, с которыми мы позна­комились выше.

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