Инструменты пользователя

Инструменты сайта


software:development:demo:cms:ucms:creating_file_lang

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

Только авторизованные участники могут оставлять комментарии.
software/development/demo/cms/ucms/creating_file_lang.txt · Последнее изменение: 127.0.0.1