Пишем класс мультиязычности сайта на php
Доброго времени суток!
Вот решил написать простой и удобный класс для реализации мультиязычности для Вашего сайта.
Итак начнем!
Структура у нас будет следующего вида:
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)
URL:
https://visavi.net/articles/496