- la2ha / Lang_detect.php
- Скрипт определить язык php
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
- Совет: активация отображения всех ошибок в PHP
- Как определить язык пользователя средствами PHP?
- И другой способ определения языка пользователя PHP
- Как автоматически переслать посетителя нужную языковую версию сайта PHP?
- Определение языка пользователя на PHP
- Комментарии ( 7 ):
la2ha / Lang_detect.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
/** |
* Lang_detect Class |
* |
* Language detection library for CodeIgniter. |
* |
* @author La2ha |
* @version 1.0 |
* @link http://la2ha.ru/dev-seo-diy/web/lang_detect |
*/ |
class Lang_detect |
var $ language = null ; |
public function __construct () |
if ( $ list = isset( $ _SERVER [ ‘HTTP_ACCEPT_LANGUAGE’ ]) ? strtolower( $ _SERVER [ ‘HTTP_ACCEPT_LANGUAGE’ ]) : null ) |
if (preg_match_all( ‘/([a-z](?:-[a-z])?)(?:;q=([0-9.]+))?/’ , $ list , $ list )) |
$ this -> language = array_combine( $ list [ 1 ], $ list [ 2 ]); |
foreach ( $ this -> language as $ n => $ v ) |
$ this -> language [ $ n ] = $ v ? $ v : 1 ; |
arsort( $ this -> language , SORT_NUMERIC ); |
> |
> else $ this -> language = array (); |
> |
public function getBestMatch ( $ default , $ langs ) |
$ languages = array (); |
foreach ( $ langs as $ lang => $ alias ) |
if (is_array( $ alias )) |
foreach ( $ alias as $ alias_lang ) |
$ languages [strtolower( $ alias_lang )] = strtolower( $ lang ); |
> |
> else $ languages [strtolower( $ alias )]=strtolower( $ lang ); |
> |
foreach ( $ this -> language as $ l => $ v ) |
$ s = strtok( $ l , ‘-‘ ); // убираем то что идет после тире в языках вида «en-us, ru-ru» |
if (isset( $ languages [ $ s ])) |
return $ languages [ $ s ]; |
> |
return $ default ; |
> |
> |
Скрипт определить язык php
В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Совет: активация отображения всех ошибок в PHP
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.
Как определить язык пользователя средствами PHP?
В наше время считается нормальной практикой делать сайт с интерфейсом на нескольких языках. Вы, наверное, уже замечали, что зайдя, например, на facebook.com сайт автоматически определяет Ваш язык и пишет уже на русском. Как это происходит? Поскольку изначально тот же facebook был написан на php, то и пример в разделе php-статей приведу на этом языке.
Всё очень просто. Для определения ip, домен, адреса, браузера и других вещей в php есть стандартные элементы суперглобального массива — $_SERVER. Но нам нужен один из них:
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
Данный элемент передаёт серверу информацию о языке посетителя. Он возвращает нам, например, либо en, либо ru и тд. Сама информация выглядит примерно следующим образом:
ru-RU,ru;q=0.8,
en-US;q=0.5,
en;q=0.3
Сначала язык (ru), потом регион (RU), а после уже приоритет (q=0.8). Чем больше приоритет (q), тем больше пользователь предпочитает данный язык. Если q нет, значит, оно равно 1. Например, у ru-RU нет q, значит, оно равно 1, и данный язык наиболее подходящий.
Теперь воспользуемся следующим кодом для определения языка:
preg_match_all('/([a-z](?:-[a-z])?)(?:;q=([0-9.]+))?/', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches); // вычисляем соответствия с массивом $matches
$langs = array_combine($matches[1], $matches[2]); // Создаём массив с ключами $matches[1] и значениями $matches[2]
foreach ($langs as $n => $v)
$langs[$n] = $v ? $v : 1; // Если нет q, то ставим значение 1
arsort($langs); // Сортируем по убыванию q
echo key($langs); // Выводим язык по умолчанию
?>
В результате получаем язык пользователя по умолчанию. После его можно установить на сайте, а посетители увидят интерфейс уже с нужным ему языком, причём для этого ему не нужно будет совершать каких-либо действий! Всё это будет незаменимо для сайтов, которые подразумевают работу с мультиязычной аудиторией и контентом.
И другой способ определения языка пользователя PHP
preg_match('/^\w/',$_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
switch (strtolower($matches[0])) case "ru": $accept_lang="ru";break; // если русский
case "de": $accept_lang="de";break; // если немецкий
case "en": case "uk": case "us": $accept_lang="en";break; // если английский
case "ua": $accept_lang="ua";break; // если украинский
default: $accept_lang="en";break; // если нет совпадений, то по умолчанию, например, английский
>
echo $accept_lang;
?>
Как автоматически переслать посетителя нужную языковую версию сайта PHP?
Для начала создаём массив с адресами (+ нужные поддомены) для каждого языка. Допустим, русская версия будет иметь стандартный адрес. Английская будет иметь вначале en. , испанская es. , а французская fr.
// Создаем массив с адресами для каждого языкового кода
$sites = array(
"ru" => "http://mysite.com/",
"en" => "http://en.mysite.com/",
"es" => "http://es.mysite.com/",
"fr" => "http://fr.mysite.com/",
);
// получаем язык
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // вырезаем первые две буквы
// проверяем язык
if (!in_array($lang, array_keys($sites))) $lang = 'ru';
>
// перенаправление на субдомен
header('Location: ' . $sites[$lang]);
Определение языка пользователя на PHP
Сайты, которые рассчитаны на множество стран мира, как правило, имеют несколько языков. Безусловно, на всех страницах сайта там можно переключиться с одного языка на другой. Однако, Вы, наверняка, замечали, что в большинстве случаев сайты каким-то образом определяют Ваш язык и устанавливают сразу для Вас наиболее подходяющий. Вот о том, как определяется язык пользователя на PHP, я и расскажу в данной статье.
В основе лежит константа $_SERVER[«HTTP_ACCEPT_LANGUAGE»], которая как раз и содержит сведения о предпочитаемых языках пользователя. Выглядит она примерно так: «ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3«. Здесь перечисляются языки и регионы, а также приоритет q. Чем больше q, тем больше пользователь предпочитает данный язык. Если q нет, значит, оно равно 1. Например, у ru-RU нет q, значит, оно равно 1, и данный язык наиболее подходящий.
Чтобы определить язык пользователя на PHP, надо воспользоваться следующим кодом:
preg_match_all(‘/([a-z](?:-[a-z])?)(?:;q=([0-9.]+))?/’, strtolower($_SERVER[«HTTP_ACCEPT_LANGUAGE»]), $matches); // Получаем массив $matches с соответствиями
$langs = array_combine($matches[1], $matches[2]); // Создаём массив с ключами $matches[1] и значениями $matches[2]
foreach ($langs as $n => $v)
$langs[$n] = $v ? $v : 1; // Если нет q, то ставим значение 1
arsort($langs); // Сортируем по убыванию q
$default_lang = key($langs); // Берём 1-й ключ первого (текущего) элемента (он же максимальный по q)
echo $default_lang; // Выводим язык по умолчанию
?>
Получив язык по умолчанию, мы можем сразу же установить его и на сайте, тем самым, выводя контент для пользователя на том языке, который он предпочитает.
Таким образом определяется язык пользователя на PHP, что очень пригодится мультиязычным сайтам.
Создано 12.07.2013 10:42:47
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 7 ):
приятного вам отдыха. можно ли применить этот код на сайте ,с переключениями «en»,»ru»? Это для меня сложновато,но хотелось бы потестировать.там нужны какие-то изменения в коде,можно узнать подробнее?
Это полученное значение нужно предавать в движок Вашего сайта, чтобы он знал на каком языке все шаблоны выводить.
В вашем коде 2 ошибки. Поправьте
Ошибочка в коде! В конце $langs[0] не работает! Это же ассоциативный массив и для сайта важно не значение первого элемента, а ключ! echo key($langs);
А вы проверяли,работает или нет,о великий гуру?)
Да. Я прям этот код у себя на денвере запустил и получил пустую страницу. Порылся в интернете — у некоторых тоже не работает обращение к нулевому элементу ассоциативного массива.
может,перепутали чего?)или забыли? синтаксических ошибок точно нет.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.