Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подгрузка языкового файла. 
:(
    Опции темы
Dima85
Дата 22.2.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Добрый день коллеги. Помогите пожалуйста разъяснить такую задачу.

Есть index.php который проверяет наличие языкового файла lang.txt

Содержимое файла lang.txt
Код

<?php
$lang=array(
'title' => 'ываваы',
'description' => 'ваыаыва',
'wDagda' => 'аыва');
?>


Если он есть берет надписи с файла, если он не обнаружен берет надписи с index.php

Реализуется это так: 
файл index.php:
Код

$lang=array(
'title' => 'dfdsf',
'description' => 'dfdsf',
'wDagda' => 'sdf');

$language = @file_get_contents("lang.txt"); // Проверяем есть ли языковой файл.
Как подгрузить файл? ; 

Вывод 
echo $lang['description'];



Это сообщение отредактировал(а) Dima85 - 22.2.2011, 14:33
PM MAIL   Вверх
ayax2005
Дата 22.2.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



fopen


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
patap
Дата 22.2.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



почему бы просто не заинклудить с помошью include() ?

Добавлено через 1 минуту и 9 секунд
ведь имя массива в файле lang.txt - всегда известно и является $lang?


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Dima85
Дата 22.2.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Цитата(patap @ 22.2.2011,  15:33)
почему бы просто не заинклудить с помошью include() ?

Добавлено @ 15:34
ведь имя массива в файле lang.txt - всегда известно и является $lang?

Код

$language = @file_get_contents("lang.txt");
if (!$language) { include("lang.txt");break; }


Предлагаете сделать так? 

После этого появляется ошибка:
Код

Warning: include(lang.txt) [function.include]: failed to open stream: No such file or directory in /var/site/index.php on line 55
Warning: include() [function.include]: Failed opening 'lang.txt' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/site/index.php on line 55
Fatal error: Cannot break/continue 1 level in /var/site/index.php on line 55


Указывающая на эту строчку:
if (!$language) { include("lang.txt");break; }


Тоесть если файла нету, он не должен пытается его загрузить, а он насколько я понимаю пытается это сделать.
PM MAIL   Вверх
gta4kv
Дата 22.2.2011, 16:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



что это за код не нормальный?

вы пытаетесь загрузить файл, и если он не загружен - вы пытаетесь его заинклюдить.

Добавлено через 1 минуту и 29 секунд
Делаете файл
lang.php:
Код

<?php
$lang=array(
'title' => 'ываваы',
'description' => 'ваыаыва',
'wDagda' => 'аыва');
?>


а где надо:
Код

include('lang.php');

PM MAIL   Вверх
ayax2005
Дата 22.2.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



Инклудить txt? Круть. Надеюсь, php и apache настроены на обработку txt как php.


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
Dima85
Дата 22.2.2011, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Если lang.php нету он должен работать с  :
Код

$lang=array(
'title' => 'dfdsf',
'description' => 'dfdsf',
'wDagda' => 'sdf');

который находится в index.php

На данный момент меня это интересует.
PM MAIL   Вверх
solenko
Дата 22.2.2011, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Откройте для себя file_exists


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 25.2.2011, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



а объясните мне зачем такой сложный механизм? 
Если я делаю проект то делаю языковой файл на своём языке (ну или на андружитийском). Потом если используется альтернативный языковой файл то я просто где-то в настройках и подключаю его.

Например, в отдельную директорию кидаю языковые файлы типа

lang.ru.php
lang.aj.php
lang.en.php

кому надо, то пусть просто закинет свой файл, а где-нибудь в настройках укажет язык типа

Код

$lang = 'ru';
// и подключит файл

// если он есть
if(file_exists('абсолютный_путь/lang.'.$lang.'.php'){
   require_once('абсолютный_путь/lang.'.$lang.'.php');
}
// и если файла нет то по умолчанию
else{
   require_once('абсолютный_путь/lang.aj.php');
}

можно дополнительно проверить и наличие файла поумолчанию.. хотя если это часть скрипта, то он должен явно быть smile

Это сообщение отредактировал(а) Gold Dragon - 25.2.2011, 09:38


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 25.2.2011, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



хотя языковой файл я бы делал всё таки по другому... НУ это конечно всё относительно, но всё же...

первый вариант - вводить константы.. получится что-то типа

Код

DEFINE('title', 'dfdsf');
DEFINE('description', 'dfdsf');
DEFINE('wDagda', 'sdf');
// хотя конечно лучше привести сами имена к единому образцу чтобы не путаться по тексту
// например так
DEFINE('_TITLE', 'dfdsf');
DEFINE('_DESCRIPTION', 'dfdsf');
DEFINE('_W_DAGDA', 'sdf');

ну а использовать вообще просто
Код

echo 'описание - '._DESCRIPTION;


второй вариант - это через класс
Код


class LangQQ {
   $title = 'dfdsf';
   $description= 'dfdsf';
   $wDagda= 'sdf';
}

использовать тоже просто...

Код

// подключаем файл
// ...
// подключаем класс
$lang_qqq = new LangQQ();

// и используем
echo 'описание - '.$lang_qqq->description;


третий вариант вообще использовать файл INI. Обработка файла чуть сложнее, но по сути тот же класс... Хотя наверное подход правильнее... минимум кода в файле

Просто, моё мнение, языковой файл должен быть понятен и как можно меньше лишнего кода


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ayax2005
Дата 25.2.2011, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



А по мне так MVCL


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
Gold Dragon
Дата 25.2.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



ayax2005, а суть?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Dima85
Дата 4.4.2011, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Остановился на такой конструкции:
Код

index.php:

$lang=array(
'title' => 'Hello!',
***
);
if (file_exists("./lg.php")) { 
include("./lg.php"); 
}


Но есть проблема. Если найден файл lg.php, он грузит все оттуда и если в этом файле допустим нет строчки 'title' => 'Hello!', то он ее выводит пустой. Хотя в самом index.php в $lang=array( она есть. Почему так происходит? и подскажите пожалуйста как сделать если строчки нет в файле lg.php но она есть в index.php что б он ее выводил.

Это сообщение отредактировал(а) Dima85 - 4.4.2011, 01:23
PM MAIL   Вверх
Gold Dragon
Дата 4.4.2011, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Код

if(isset($lang['title'])){
   echo "есть";
}else{
   echo "нет";
}


Это сообщение отредактировал(а) Gold Dragon - 4.4.2011, 07:35


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Dima85
Дата 4.4.2011, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Если таких классво несколько это нормально. Но если их более 50, каждый проверять таким способом это безумие. Возможно есть какое-то другое решение?
PM MAIL   Вверх
Gold Dragon
Дата 4.4.2011, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Dima85, если честно, я тебя не понимаю вообще... Что значит нет? Это языковой файл и там это должно быть.. Это тоже самое что стереть половину  твоего index.php.. И почему ты оставил языковые переменные в основном файле? Зачем тогда подключение языковых?
Цитата(Dima85 @  4.4.2011,  11:44 Найти цитируемый пост)
Если таких классво несколько это нормально. Но если их более 50
Это вообще про что?

Сделай нормальное подключение файлов и таких проблем не будет...



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.