8.3. Файл lang.php
Файл перевода модуля установки. Количество языков перевода зависит только от желания автора проекта и определяется количеством файлов перевода. Для модуля установки нами было запланировано 2а языка, английский и русский.
- Создадим файл lang.php в нашей директории /library/install
- Создадим вложенную директорию lang в директории /library/install
- Создадим файлы lang_en.php и lang_ru.php в директории lang
Файлы перевода
- lang_en.php
<?php /* ------------------ Language: English ------------------ */ //определяем $lang как массив. $lang = array(); // задаем значения ключ/перевод $lang['INSTALL_APP_NAME'] = 'UCMS Kernel Installation'; //Language and time zone settings $lang['SELECT_APP_LANG'] = 'Select application language:'; $lang['ENGLISH'] = 'English'; $lang['RUSSIAN'] = 'Russian'; $lang['SELECT_TIME_ZONE'] = 'Select time zone:'; //Database Options $lang['DATABASE_UPTION'] = 'Database Options'; $lang['DATABASE_SERVER_MAN'] = 'Database Management System Server'; $lang['DATABASE_SERVER'] = 'Server: localhost'; $lang['DATABASE_USER'] = 'Database user'; $lang['DATABASE_NAME'] = 'Name:Login to connect to the database'; $lang['DATABASE_PASS'] = 'Password::Login to connect to the database'; //Database $lang['DATABASE'] = 'Database'; $lang['DATABASE_NAME_UCMS'] = 'Database name: (UCMS)'; //Administrator Settings $lang['ADMIN_SETTING'] = 'Administrator Settings'; $lang['ADMIN_LOGIN'] = 'Login admin'; $lang['ADMIN_PASS'] = 'Password admin'; $lang['ADMIN_PASS_CONFIRM'] = 'Confirm password admin'; $lang['ADMIN_PASS_EMAIL'] = 'Email admin'; ?>
- lang_ru.php
<?php /* ------------------ Language: Russian ------------------ */ //определяем $lang как массив. $lang = array(); // задаем значения ключ/перевод $lang['INSTALL_APP_NAME'] = 'Установка UCMS Kernel'; //Параметры языка и часового пояса $lang['SELECT_APP_LANG'] = 'Выберите язык приложения:'; $lang['ENGLISH'] = 'Английский'; $lang['RUSSIAN'] = 'Русский'; $lang['SELECT_TIME_ZONE'] = 'Выберите часовой пояс:'; //Параметры базы данных $lang['DATABASE_UPTION'] = 'Параметры базы данных'; $lang['DATABASE_SERVER_MAN'] = 'Сервер системы управления базами данных'; $lang['DATABASE_SERVER'] = 'Сервер: localhost'; $lang['DATABASE_USER'] = 'Пользователь базы данных'; $lang['DATABASE_NAME'] = 'Имя:Логин для соединения с базой данных'; $lang['DATABASE_PASS'] = 'Пароль:Пароль для соединения с базой данных'; //База данных $lang['DATABASE'] = 'База данных'; $lang['DATABASE_NAME_UCMS'] = 'Имя базы данных: (UCMS)'; //Параметры администратора $lang['ADMIN_SETTING'] = 'Параметры администратора'; $lang['ADMIN_LOGIN'] = 'Логин администратора'; $lang['ADMIN_PASS'] = 'Пароль администратора'; $lang['ADMIN_PASS_CONFIRM'] = 'Повторить пароль администратора'; $lang['ADMIN_PASS_EMAIL'] = 'Электронная почта администратора'; ?>
Файл lang_test.php
Файл lang_test.php сначало проверит наличие файла config.ini и выведет соответствующее сообщение. Следом прочтет файл config.ini
- ЕСЛИ файл config.ini прочитан получим для переменной $defaul_lang_user значение языка в настройках
- ЕСЛИ значение языка в config.ini пустое место, то проверим директорию lang на наличие файлов перевода и подключим первый файл перевода.
- ИНАЧЕ подключим файл перевода, имя которого указанно в файле config.ini
- lang_test.php
<!-- test/lang_test.php --> <?php /* подключим файл с константами, для определения корневой директории приложения */ require_once __DIR__ . "../../../includes/cons.php"; /* Присваиваем переменной $file_config значение константы FOLDER (а это директория ucms, записанная в файле cons.php)и добовляем '/includes/config.ini' - директорию includes и искомый файл config.ini */ $file_config = FOLDER . '/includes/config.ini'; /* Если config.ini существует */ if (file_exists($file_config)) { /* выводим запись о существовании */ echo "Файл $file_config существует". "<br/>"; /* Иначе выводим запись о не существовании*/ } else { echo "Файл $file_config не существует". "<br/>"; } //загружаем ini-файл, и возвращаем его настройки в виде ассоциативного массива $config_defaul_lang = parse_ini_file(FOLDER . "/includes/config.ini",true); // Проверьте, успешно ли прочитан ini-файл. // переменная $config_defaul_lang не ровно ЛОЖЬ if ($config_defaul_lang !== false) { // Доступ к индивидуальным настройкам $defaul_lang_user = $config_defaul_lang['defaul_lang']['defaul_lang']; if ($defaul_lang_user == ""){ echo "Ошибка чтения INI-файла. выбираем из наличия в папке /lang"; //Проверка наличия языковых файлов в директории /lang/ $dir = INSTALL . "/lang/"; //Возвращает массив (array), содержащий имена файлов и каталогов $source = scandir($dir); // Создадим массив - фильтр для исключения '..', '.' $filter = ['..', '.']; //В массиве с результатом функция scandir также покажет наличие папок с именами ".." и ".". //Технически первое имя соответствует ссылке на родительскую папку, а второе - на текущую. // Сравним массивы $files = array_diff($source, $filter); //Извлекает первый элемент массива $lang_one = array_shift($files); // выведем оставшийся массив print_r($files); echo "Первый элемент массива это:" . $lang_one; // Подключаем полученную страницу с переводом include_once 'lang/' . $lang_one; echo $lang['INSTALL_APP_NAME']; echo $lang['SELECT_TIME_ZONE']; } else { echo "Конфигурация по умолчанию: " . $defaul_lang_user . "<br/>"; // Подключаем полученную страницу с переводом include_once 'lang/' . $defaul_lang_user . '.php'; // Выведем перу переводов для теста echo $lang['INSTALL_APP_NAME']; echo $lang['SELECT_TIME_ZONE']; } }
Создадим в config.ini тестовую запись выбора файла перевода пользователем lang_ru и создадим в директории lang пустой файл для французкого перевода lang_fr.php
- config.ini
[defaul_lang] ; default configuration defaul_lang = lang_ru
Откроем файл lang_test.php в браузере:
Получаем сообщение о существовании файла config.ini, а так же значение переменной defaul_lang = lang_ru и вывод двух тестовых фраз на русском языке.
Изменив в настройках файл перевода на lang_en получаем тестовые фразы на английском
Если файл перевода в config.ini не указан, то получаем сообщение Ошибка чтения INI-файла., проверяется директория /lang и выбираем первый файл, а это lang_en.php из массива, где еще присутствуют lang_fr.php и lang_ru.php. Тестовые фразы соответственно на английском.
Файл lang.php
Сам файл lang.php в законченном виде нам ничего выводить не будет, т.к. в нем заключена логика выбора файла перевода. Логику выбора файла перевода из директории вынисем в отдельную функцию check_lang_install() чтобы не прописывать код дважда (для отсутствия config.ini и для defaul_lang=пустое значение)
- lang.php
<?php //echo "это lang"; /* подключим файл с константами, для определения корневой *директории приложении и файлов конфигурации и функций */ require_once __DIR__ . "../../../includes/cons.php"; ////////////////////////////////////////////////////////// // Создадим функцию для выбора первого файла и директории function check_lang_install() { $dir = INSTALL . "/lang/"; //Возвращает массив (array), содержащий имена файлов и каталогов $source = scandir($dir); // Создадим массив - фильтр для исключения '..', '.' $filter = ['..', '.']; //В массиве с результатом функция scandir также покажет наличие папок с именами ".." и ".". //Технически первое имя соответствует ссылке на родительскую папку, а второе - на текущую. // Сравним массивы $files = array_diff($source, $filter); //Извлекаем первый элемент массива $lang_one = array_shift($files); // Подключаем полученную страницу с переводом include_once 'lang/' . $lang_one; } ////////////////////////////////////////////////////////// /* Присваиваем переменной $file_config значение константы FOLDER (а это директория ucms, записанная в файле cons.php)и добовляем '/includes/config.ini' - директорию includes и искомый файл config.ini */ $file_config = FOLDER . '/includes/config.ini'; /* Если config.ini существует */ if (file_exists($file_config)) { //загружаем ini-файл, и возвращаем его настройки в виде ассоциативного массива $config_defaul_lang = parse_ini_file(FOLDER . "/includes/config.ini",true); // Проверьте, успешно ли прочитан ini-файл. // переменная $config_defaul_lang не ровно ЛОЖЬ if ($config_defaul_lang !== false) { // Доступ к индивидуальным настройкам $defaul_lang_user = $config_defaul_lang['defaul_lang']['defaul_lang']; if ($defaul_lang_user == ""){ //подключим функцию выбора файла из директории check_lang_install(); } else { // Подключаем полученную страницу с переводом include_once 'lang/' . $defaul_lang_user . '.php'; } } } else { //подключим функцию выбора файла из директории check_lang_install(); } ?>
Т.к. install.php у нас является отдельным модулем, то и файлы перевода мы создаем только для этого мадуля в директори /install, больше они нам ни где не пригодятся, а так же фенкцию выбора мы не выносим в function.php, т.к. выбираем файл в директории модуля install.php