Многоязычность Интернет страницы/сайта

chi100v

Стало интересно как можно реализовать многоязычность Интернет страницы/сайта, "погуглил" некоторое время, но на толковое разъяснение что да как не наткнулся... Не могли бы Вы товарищи ткнуть носом в строну куда надо копать?

3 ответа

chi100v

Нужно сделать файл, содержащий объявление констант, в которых будут строки для вывода в разных местах сайта.

Например (приводил уже где то)...

Главный файл:

Файл русского языка:

Файл английского языка:

Файл шаблона:

<title><?=LANG_TITLE?></title>


    
    <p>
        <!--?=LANG_MESSAGE1?-->
    </p>

Просто нужно поместить в $language имя файла языка, для удобства без расширения. Следует еще предусмотреть вывод страницы на дефолтном языке, если в $language ничего не присвоено. Вот, такова идея. Если что не ясно, пишите! Удачного дня :)


chi100v

Процесс создания мультиязычности обычно делят на две части: интернационализацию и локализацию. Оба этих процесса хорошо описаны в wikipedia.

Наиболее популярным и удобным инструментом для интернационализации, как сайтов, так и прикладных программ является gettext. Для PHP так же есть соответствующее расширение.

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

<title><?= _('Main page') ?></title>


    
    <p>
        <!--?= _('Welcome to our site.') ?-->
    </p>

Более подробно про gettext и его возможностях можно прочитать в той-же wikipedia.

PS В документации к gettext говорится, что оригинальные строки должны быть на английском, однако, в последних версиях gettext можно использовать и русские строки, при условии повсеместного использования utf-8. В этом случае, возможно, будет некоторая путаница в английской локализации, но это проблема легко решается.


chi100v

Хотелось бы дополнить, если использовать базу данных, то в списке страниц сайта, можно добавить вариант текста на нескольких языках пример таблицы :

id - идентификатор страницы в базе

name - имя на английском как псевдоним

t_ru - название на русском

t_en - название на английском

c_ru - контент на русском

c_en - контент на английском

и при необходимости грузить только нужную колонку, язык давать на выбор изначально, а сохранять его параметры в cookie, например :

<!--?php
setcookie('lang', $_POST['lang']);
?-->
<form action="?set=lang" method="post">
<select name="lang">
<option value="ru">ru</option>
<option value="en">en</option>
</select>

</form>
<!--?php
$pid = $_GET['pid'];
$pref_lang = '_'.$_COOKIE['lang'];
mysql_query("SELECT t.$pref_lang, c.$pref_lang FROM pages WHERE id='$pid'");
?-->

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

А если нужно перевести надписи на кнопках, заголовки и т.д., то можно создать файл с массивами, и подключать его в начале страницы функцией require, именно ей и именно вначале, т.к. она не замедляет работу программы, как это делает include();.

пример :

<!--?php
//langpack.php
$arroflangs['button1_ru'] = 'отправить';
$arroflangs['button1_en'] = 'submit';
?-->
<!--?php
require("./langpack.php");
$lang = '_'.$_COOKIE['lang'];
echo '<input type="button" value="'.$aroflangs['button1'.$lang]'" /-->';
?>

Сразу извиняюсь за возможные ошибки, т.к. пишу без возможности проверить.

licensed under cc by-sa 3.0 with attribution.