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

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


software:development:demo:cms:ucms:creating_file_lang

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
software:development:demo:cms:ucms:creating_file_lang [2025/05/09 13:23] – создано vladpolskiysoftware:development:demo:cms:ucms:creating_file_lang [2025/05/18 13:08] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 ====== 8.3. Файл lang.php ====== ====== 8.3. Файл lang.php ======
-Файл перевода модуля установки+Файл перевода модуля установки
 +Количество языков перевода зависит только от желания автора проекта и определяется количеством  
 +файлов перевода. Для модуля установки нами было запланировано 2а языка, английский и русский. 
 + 
 +  * Создадим файл **%%lang.php%%** в нашей директории  **%%/library/install%%** 
 +  * Создадим вложенную директорию **%%lang%%** в директории  **%%/library/install%%** 
 +  * Создадим файлы **%%lang_en.php%%** и **%%lang_ru.php%%** в директории  **%%lang%%** 
 + 
 +=====Файлы перевода===== 
 + 
 +<code php 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'; 
 +?> 
 +</code> 
 + 
 +<code php 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'] = 'Электронная почта администратора'; 
 +?> 
 +</code> 
 + 
 +=====Файл lang_test.php===== 
 + 
 +Файл **lang_test.php** сначало проверит наличие файла **config.ini** и выведет соответствующее сообщение. Следом прочтет файл **config.ini**  
 +  * **ЕСЛИ** файл **config.ini** прочитан получим для переменной **$defaul_lang_user** значение языка в настройках 
 +  * **ЕСЛИ** значение языка в **config.ini** пустое место, то проверим директорию **lang** на наличие файлов перевода и подключим первый файл перевода. 
 +  * **ИНАЧЕ** подключим файл перевода, имя которого указанно в файле **config.ini** 
 + 
 +<code php 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']; 
 +
 +
 +</code> 
 + 
 +Создадим в **config.ini** тестовую запись выбора файла перевода пользователем  **lang_ru** и создадим в 
 +директории  **%%lang%%** пустой файл для французкого перевода **%%lang_fr.php%%** 
 + 
 +<code php config.ini> 
 +[defaul_lang] 
 +; default configuration 
 +defaul_lang = lang_ru 
 +</code> 
 + 
 +Откроем файл **lang_test.php** в браузере: 
 + 
 +{{:software:development:demo:cms:ucms:ucms_kernel_demo_book_32.png|}} 
 + 
 +Получаем сообщение о существовании файла **config.ini**, а так же значение переменной **defaul_lang = lang_ru** 
 +и вывод двух тестовых фраз на русском языке. 
 + 
 +{{:software:development:demo:cms:ucms:ucms_kernel_demo_book_33.png|}} 
 + 
 +Изменив в настройках файл перевода на **lang_en** получаем тестовые фразы на английском 
 + 
 +{{:software:development:demo:cms:ucms:ucms_kernel_demo_book_34.png|}} 
 + 
 +Если файл перевода в **config.ini** не указан, то получаем сообщение **Ошибка чтения INI-файла.**,  
 +проверяется директория **/lang** и выбираем первый файл, а это **lang_en.php** из массива, где еще присутствуют 
 +**lang_fr.php** и **lang_ru.php**. Тестовые фразы соответственно на английском. 
 + 
 +===== Файл lang.php ===== 
 + 
 +Сам файл **lang.php** в законченном виде нам ничего выводить не будет, т.к. в нем заключена логика выбора 
 +файла перевода. Логику выбора файла перевода из директории вынисем в отдельную функцию **check_lang_install()** чтобы  
 +не прописывать код дважда (для отсутствия **config.ini** и для **defaul_lang**=пустое значение) 
 + 
 +<code php 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();  
 +
 +?> 
 +</code> 
 +Т.к. **install.php** у нас является отдельным модулем, то и файлы перевода мы создаем только для этого 
 +мадуля в директори **/install**, больше они нам ни где не пригодятся, а так же фенкцию выбора мы не выносим 
 +в **function.php**, т.к. выбираем файл в директории модуля **install.php** 
 <note blue> <note blue>
 <wrap left>← [[software:development:demo:cms:ucms:index|8.2. Файл index.php]]</wrap>  <wrap left>← [[software:development:demo:cms:ucms:index|8.2. Файл index.php]]</wrap> 
 <wrap right>[[software:development:demo:cms:ucms:creating_file_lang_and_time_zone|8.4. Файл lang_and_time_zone.php]] →</wrap> <wrap right>[[software:development:demo:cms:ucms:creating_file_lang_and_time_zone|8.4. Файл lang_and_time_zone.php]] →</wrap>
 </note> </note>
software/development/demo/cms/ucms/creating_file_lang.1746786234.txt.gz · Последнее изменение: vladpolskiy