Пишем класс мультиязычности сайта на php (Оценка: +3)

Печать / RSS-лента
Доброго времени суток!
Вот решил написать простой и удобный класс для реализации мультиязычности для Вашего сайта.
Итак начнем!
Структура у нас будет следующего вида:

dir: [b]/[/b]
- dir: [b]i18n[/b]
- file: [b]ru.php[/b] // тут будут переводы
- dir: [b]system[/b]
- file: [b]config.php[/b] // тут будут настройки
- file: [b]lang.php[/b] // доп. функционал
- file: [b]i18n.php[/b] // тут собственно сам класс
- file: [b]index.php[/b]

Создаем файл index.php.
Содержимое:

<?php
include_once ('system/lang.php'); // Подключаем класс
echo __('Test') . '<br />'; // проверка
?>

Создаем папку system.
Создаем в папке system файл config.php.
Содержимое:

<?php
$langs = array('ru', 'en'); // массив с доступными языками
$default_lang = 'ru'; // Язык по умолчанию
?>

Теперь перейдем к самому классу.
Создаем в папке system файл i18n.php.
Содержимое:

<?php
class I18n {
/** задаем язык классу **/
public static $lang = 'en';
/** задаем путь к папке где лежат файлы с языками **/
public static $path = 'i18n';
/** кеширование **/
protected static $_cache = array();

/** задаем язык. Пример I18n::lang('ru') **/
public static function lang($lang) {
I18n::$lang = $lang;
return I18n::$lang;
}

/** функция отвечающая за вывод **/
public static function get($string, $lang = NULL) {
if (!$lang) {
$lang = I18n::$lang;
}
$table = I18n::load($lang);
if (isset($table[$string])) {
return $table[$string];
}
return $string;
}

/** функция отвечающая за загрузку файла с переводами **/
public static function load($lang) {
if (isset(I18n::$_cache[$lang])) {
return I18n::$_cache[$lang];
}
$table = array();
$path = I18n::$path . DIRECTORY_SEPARATOR . $lang . '.php';

if (file_exists($path)) {
$table = array_merge_recursive($table, include($path));
}

return I18n::$_cache[$lang] = $table;
}

}
?>


В папке system создаем файл lang.php


<?php
header('Content-Type: text/html; charset=utf-8'); // задаем кодировку (это я для теста писал)
include('config.php'); // подключаем настройки
include('i18n.php');

// Здесь переключение языков
if (!empty($_GET['lang']) && in_array($_GET['lang'], $langs)) {
setcookie('lang', $_GET['lang']);
$allowed_lang = $_GET['lang'];
} elseif (!empty($_COOKIE['lang']) && in_array($_COOKIE['lang'], $langs)) {
$allowed_lang = $_COOKIE['lang'];
} else {
$allowed_lang = $default_lang;
}

I18n::lang($allowed_lang);

if (!function_exists('__')) {
// функция __() выводит переведенную строку
// Если такой строки нету в словаре, то выводит значение $string
function __($string) {
return I18n::get($string);
}

}
?>


Создаем папку i18n в ней файл ru.php
Содержание:

<?php
return array(
'Test' => 'Тест',
);
?>


Ну вот и все. Все работает)
Следующая статья будет о том как установить и настроить локальный веб сервер на виртуальной машине VitrualBox (debian). P.S. сайты будут доступны и на самой хост машине (т.е. на Windows 7)
Автор статьи: JustZero (06.08.13 / 01:41)
php, lang, i18n, мультиязычность
Рейтинг: +3
Просмотров: 2692
Комментарии (6) »