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

15 горячих:

greeko
рейтинг     сила
:) 0 :( 0

greeko

Профиль
   Блог  RSS
Новостной портал транслирующий интересные объявления

greekoПринципы создания мультиязычных сайтов на 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 :(

greekoПытаюсь разобраться с Управляющими конструкциями

Итак про управляющие конструкции

Попобовал использовать операторы цикла, такие как
for и while.
В результате выполнения оператора


for ($i = 4; $i < 8; $i++) {

print «I have eaten $i bagels today.\n»;
}



получим


I have eaten 4 bagels today.

I have eaten 5 bagels today.

I have eaten 6 bagels today.

I have eaten 7 bagels today.



Тот же самый результат даст


$i = 4;
while ($i < 8) {

print «I have eaten $i bagels today.\n»;

$i++;

}
И на этом полный ступор не могу продолжить
greeko 10 июля 2014 20:51 комментариев: 0
:) 0 :(

greekoТолько тут все объявления про операторов

Преимущества работы оператором для студента начинаются с гибкого графика. Ты заранее можешь выбрать изменения в желаемое время, конечно, согласовав это с «высшим руководством». Высшее руководство — это супервайзер, другими словами — главный оператор — надзиратель, который, при необходимости может как помочь, «отмазать», так и штраф взыскать за ошибки в разговоре и тут ничего не сделаешь. Зарплата, как для подработки неплохая: от 1$ за час. То есть, сколько работаешь, столько и платят. Рабочая смена — 6 часов, а минимальная занятость — 4 рабочие смены.



Оператор — это прикольная работа, высидеть 6 или даже 12:00 совсем не трудно. Но…сначала все эти «Доброе утро / день / вечер… меня зовут ...» и профессиональные клише типа «Как я могу к вам обращаться / скажите, пожалуйста, сколько вам лет / с
какого города вы звоните / откуда вы узнали о нашей горячей линии, повторенные в течение в средним 60-80 звонков за смену — и за неделю голос исчезает… На этой работе ты хочешь или нет, но выучишь и географию, и грамматику, и культуру устной речи.



У каждого возле своего рабочего места (а это ПК с гарнитурой) есть ручка и стикеры, в крайнем случае, когда „дерево“ (шпаргалка оператора — вся информация по той или иной горячей линии) не открылось, висят распечатанные города и области, слова и выражения, запрещенные к употреблению в разговоре с респондентом. Все эти речевые клише вводят не просто так. Эти моменты всегда обсуждают с заказчиками проекта или объявлений на сайтах тут.



Чем дольше ты работаешь, тем больше твоя ставка, и ты переходишь в другую категорию – некое повышение. Но требования тоже увеличиваются. „Универсальный“ оператор должен знать все линии, которые обслуживает call-центр и вдобавок в промежутках между входящими звонками делать еще и исходящие, и, реже, расфасовывать почту (количество конвертов прямо пропорциональна размеру премии). Сall-центр среднего рекламного агентства обслуживает минимум 15-20 горячих линий, и ты, как универсальный боец, должен не только свободно владеть информацией, но и на те 5 минут (в среднем столько длится разговор) стать специалистом в определенном деле.
greeko 29 июня 2014 16:21 комментариев: 0
:) 0 :(

greekoПрогноз движения валютной пары EUR/ USD до 19.00

Хочется дать прогноз на движения валюты на сегодня
Быстрая линия (белая)
на последнем прогоне, двигаясь вверх, пересекла свою медленную линию,
которая двигалась вверх – 50 баллов вверх.

Быстрая линия (белая)
на последнем прогоне, двигаясь вверх, имеет свойство «фигура»,
направленное вниз – 50 баллов вниз.

Тенденция дня нижняя — 25 баллов вниз.

Быстрая линия (белая)
на последнем прогоне, двигаясь вверх, имеет свойство «конвергенция» – 50
баллов вниз.

Быстрая линия (белая)
на последнем прогоне, двигаясь вверх, имеет свойство «неправильный
прогон» – 50 баллов вниз.

Итог: индикатор стохастик до 19.00
мск даёт нисходящую тенденцию.
Из чего стоит сделать единственно правильное заключение
Метки: бакс, евро
greeko 26 июня 2014 19:28 комментариев: 0
:) 0 :(
© 2008 | О сайте | Инструкции | Обратная связь
© Powered by BigStreet

Работа с БД:
 Время - 0.0615
 Запросов - 24
Работа с кэшем:
 Время - 0.0035
 Записей - 2
 Прочтений - 4
Общее время:
 0.1253