Пишем класс мультиязычности сайта на php (Rating: +3)
Доброго времени суток!
Вот решил написать простой и удобный класс для реализации мультиязычности для Вашего сайта.
Итак начнем!
Структура у нас будет следующего вида:
Содержимое:
Создаем в папке system файл config.php.
Содержимое:
Создаем в папке system файл i18n.php.
Содержимое:
В папке system создаем файл lang.php
Создаем папку i18n в ней файл ru.php
Содержание:
Ну вот и все. Все работает)
Следующая статья будет о том как установить и настроить локальный веб сервер на виртуальной машине VitrualBox (debian). P.S. сайты будут доступны и на самой хост машине (т.е. на Windows 7)
Added: JustZero
06.08.2013 / 01:41Вот решил написать простой и удобный класс для реализации мультиязычности для Вашего сайта.
Итак начнем!
Структура у нас будет следующего вида:
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)
Rating:
+3
Views: 3618Comments (6) »