Загрузка данных
 
Логин:   Пароль:      
Регистрация   Забыли пароль?

15 горячих:

Закрыть
Загрузить:
Указать:
Выравнивание:
Альт

Принципы создания мультиязычных сайтов на php

Задача данного урока – это реализация многоязычности данного сайта, в частности поддержка русского и английского. И перед тем как перейти к решению данной задачи, давайте рассмотрим составляющие данного сайта.

Итак, смотрите, данный сайт http://xn--1-7sbcdp0a8ck.in.ua/ состоит из контента, который содержится в базе данных. Это статьи, а также вертикальное и горизонтальное меню. И дополнительных специальных элементов, которые либо информируют пользователя о назначении блоков, или являются различными заголовками. К примеру, это заголовок сайта (TITLE), девиз (THE BEST CAR FOR YOU), строка MENU и т.д.

С контентом все просто, так как он содержится в базе данных, к примеру, в моем случае статьи содержатся в таблице statti, то для каждой статьи Вашего сайта или заголовка меню категории и т.д., необходимо сохранять копию, но уже на другом языке. И, конечно же, копий должно быть столько, сколько языков у Вас будет на сайте. Но возникает вопрос, как определить язык, который выбирает пользователь? Ответ на данный вопрос мы с Вами разберем дальше по ходу урока.

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

Если посмотреть на наш тестовый сайт, то мы с Вами увидим, что в шапке сайта есть две ссылки English и Русский, которые будут переключать язык сайта. Используя данные ссылки, мы будем передавать через адресную строку параметр lang. Значение en будет соответствовать английскому языку, значение ru – русскому.


Поэтому для определения языка мы должны проверять ячейку lang суперглобального массива GET. Итак давайте добавим следующий код в файл index.php (Вы конечно же будете создавать свой сайт, и данный код необходимо добавить в то место где Вы обрабатываете параметры из адресной строки):
view source
print
?
01.
if($_GET['lang']) {
02.
$_SESSION['lang'] = trim(strip_tags($_GET['lang']));
03.
$date = time() + 30*24*60*60;
04.
setcookie('lang', trim(strip_tags($_GET['lang'])),$date);
05.
}
06.
else if ($_COOKIE['lang']) {
07.
$_SESSION['lang'] = $_COOKIE['lang'];
08.
}
09.
else {
10.
$_SESSION['lang'] = 'en';
11.
}

Первым делом проверяем есть ли в суперглобальном массиве GET, ячейка lang. Если же есть данная ячейка, значит пользователь выбрал язык, поэтому значение данной ячейки мы сохраняем в сессию, что бы в любом месте нашего скрипта мы могли узнать какой язык выбрал пользователь. Также очень удобно хранить выбранный язык в куках. Так как при последующих посещениях Вашего сайта, пользователю не придется заново выбирать язык. Поэтому после того как мы сохранили выбранный язык в сессии – создаем куку и записываем в нее выбранный язык.

Если же в суперглобальном массиве GET нет ячейки lang, то выполняем проверку наличия куки с именем lang, если же данная кука есть то в сессию записываем ее значение.

Если же в суперглобальном массиве GET нет ячейки lang и нет куки с именем lang, значит, пользователь не выбрал язык и в сессию записываем язык по умолчанию. Давайте условимся — что это английский язык.
3. Где и как хранить словарь для вывода элементов сайта

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

Оба этих варианта предусматривают хранение словарей в обычных текстовых файлах. Словарь — это текстовый файл определенного формата, в котором связаны строки определенного языка с метками, которые мы будем использовать на сайте. Итак, словари для первого варианта. Файл en.php:
view source
print
?
1.
<? php
2.
return array (
3.
'STITLE' => 'Title',
4.
'SLOGO' => 'The best car for you',
5.
'SLANG' => 'Language',
6.
'SMENU' => 'Menu'
7.
);
8.
?>

Файл ru.php:
view source
print
?
1.
<? php
2.
return array (
3.
'STITLE' => 'Заголовок сайта',
4.
'SLOGO' => 'Лучшие автомобили для Вас',
5.
'SLANG' => 'Язык',
6.
'SMENU' => 'Меню'
7.
);
8.
?>

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

Словари для второго варианта. Файл en.ini:
view source
print
?
1.
STITLE = Title
2.
SLOGO = The best car for you
3.
SLANG = Language
4.
SMENU = Menu

Файл ru.ini:
view source
print
?
1.
STITLE = Заголовок сайта
2.
SLOGO = Лучшие автомобили для Вас
3.
SLANG = Язык
4.
SMENU = Меню

По второму варианту мы уже используем ini файлы в качестве словарей – так как их очень легко прочитать стандартными средствами языка PHP и при этом получить массив, который в дальнейшем можно использовать.
4. Первый вариант создания многоязычного сайта

Первый вариант предусматривает словари в виде файлов php. Поэтому давайте в файле index.php подключим данный файл сразу же после проверки наличия в суперглобальном массиве GET ячейки lang:
view source
print
?
1.
$dict = include $_SESSION['lang'].'.php';

Теперь у нас в переменной $dict – содержится массив словаря. Хочу заметить, что имена словарей совпадают со значением сессионной переменной $_SESSION['lang'] – это я выбрал для удобства.

Далее давайте создадим новый файл (dict.php), в котором будет содержаться вспомогательный класс Dict. В этом классе будет содержаться метод возвращающий значения ячеек массива $dict:
view source
print
?
01.
<? php
02.
class Dict {
03.
static function _($key) {
04.
$dict = $GLOBALS['dict'];
05.

06.
if($dict[$key]) {
07.
return $dict[$key];
08.
}
09.
else {
10.
return $key;
11.
}
12.
}
13.
}
14.
?>

Как Вы видите это очень простой класс, с единственным статическим методом _(), данный метод принимает параметром ключ массива dict и если данный ключ действительно существует в массиве, то метод возвращает его значение. Если же данного ключа нет, то будет возвращено имя ключа. Если же Вы создаете сайт при помощи процедурного подхода, то класс Dict замените обычной функцией, тело которой точно такое же как и метода _(). Теперь данный файл необходимо подключить к нашему сайту.
view source
print
?
1.
require_once(«classes/dict.php»);

Теперь в нашем шаблоне, в тех местах, где Вам нужно вывести слово из словаря, нужно вызвать метод _(). В моем случае, для шапки сайта это будет выглядеть вот так:
view source
print
?
1.

2.
<?=Dict::_('STITLE')?>
3.
«><?=Dict::_('SLOGO')?>
4.
»><?=Dict::_('SLANG')?>: English|Русский
5.


Если Вы используете процедурный подход, то вместо класса и метода, просто укажите свою функцию. Теперь давайте проверим что у нас получилось. Язык по умолчанию:


Русский язык:

5. Второй вариант

Итак по второму варианту мы с Вами используем ini файлы в качестве словарей. Значит, дополнительный класс на не нужен и поэтому, удаляем подключение файла dict.php, а также удаляем подключение файла словарей, сразу после определения языка.

Теперь для того что бы прочитать ini файл мы воспользуемся функцией (данную строчку я прописываю в фале ACore.php в методе get_body()):
view source
print
?
1.
$dict = parse_ini_file($_SESSION['lang'].'.ini');

При выполнении данного метода, в переменную $dict будет сохранен массив с словарем. Теперь в шаблоне где Вам необходимо вывести текст вместо меток, пропишите вывод на экран значений соответствующих ячеек массива $dict. Опять же для данного примера, для шапки сайта, необходимо сделать следующее:
view source
print
?
1.

2.
<?=$dict['STITLE']?>
3.
<?=$dict['SLOGO']?>
4.
<?=$dict['SLANG']?>: English|Русский
5.


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

с http://webformyself.com/principy-sozdaniya-multiyazychnyx-sajtov/ для почитателей php.
Метки: PHP, сайт
greeko 21 июня 2015 20:55 комментариев: 1
:) 0 :(

Комментарии:
Клуб №1 по WordPress. Много интересующей всех информации по теме WordPress, найдется здесь, интересный растущий молодой сайт https://clubwp.ru
greatcommy   28 декабря 2020 18:08 Комментировать может только авторизованный пользователь
:) 0 :( #
Только зарегистрированные пользователи могут оставлять комментарии.
© 2008 | О сайте | Инструкции | Обратная связь
© Powered by BigStreet

Работа с БД:
 Время - 0.0059
 Запросов - 7
Работа с кэшем:
 Время - 0.0026
 Записей - 2
 Прочтений - 5
Общее время:
 0.0396

sych