Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите найти ошибку.
 
 автор: tavila2009   (23.11.2009 в 04:45)   письмо автору
 
 

Есть вот такой скрипт. Выдаёт ошибку. Можно запустить здесь http://iisus-hristos.com/paleh/index.php?lang=eng
<?
if(isset($_GET["lang"]) and $_GET["lang"]=="eng"){$language="eng";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="ru"){$language="ru";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="de"){$language="de";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="fr"){$language="fr";}
else{$language="eng";}

$st1_ru="home";
$st1_eng="home";
$st1_fr="home";
$st1_de="home";

$st2_ru="каталог икон";
$st2_eng="catalogue of icons";
$st2_fr="le catalogue des icоnes";
$st2_de="der katalog der ikonen";

$st3_ru="как купить";
$st3_eng="how to buy";
$st3_fr="comme acheter";
$st3_de="wie zu kaufen";

$st4_ru="контакт";
$st4_eng="contact";
$st4_fr="le contact";
$st4_de="der kontakt";

?>

<table width="180" border="0" align="left" cellpadding="0" cellspacing="0">
<tr><td height="16">&nbsp;</td></tr>
<tr><td height="16">&nbsp;</td></tr>
<tr><td><a href="index.php?m=home&lang=<?=$language;?>"><?=$st1_$language;?></a></td></tr> - вот здесь ругается
<tr><td><a href="index.php?m=catalog&lang=<?=$language;?>"><?=$st2_$language;?></a></td></tr>
<tr><td><a href="index.php?m=buy&lang=<?=$language;?>"><?=$st3_$language;?></a></td></tr>
<tr><td><a href="index.php?m=contact&lang=<?=$language;?>"><?=$st4_$language;?></a></td></tr>
<tr><td></td></tr>

</table>

  Ответить  
 
 автор: sim5   (23.11.2009 в 05:59)   письмо автору
 
   для: tavila2009   (23.11.2009 в 04:45)
 

Вместо первых пяти строк
<?
$language 
= isset($_GET["lang"]) ? $_GET["lang"] : "eng";


Еще бы не ругалось. Во-первых нет определенной перменной $st1_ и подобных (далее), а "склеивать" значения двух переменных нужно через точку, а у вас это попытка чего?
$st1_$language --- ??

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:03)   письмо автору
 
   для: sim5   (23.11.2009 в 05:59)
 

а как же надо записать. Уже голву сломала!!!

  Ответить  
 
 автор: sim5   (23.11.2009 в 06:05)   письмо автору
 
   для: tavila2009   (23.11.2009 в 06:03)
 

У вас что, кроме этого десятка записей на разных языках более ничего не будет?

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:09)   письмо автору
 
   для: sim5   (23.11.2009 в 06:05)
 

я вот так исправила. Теперь не ругается но пишет не то что надо http://iisus-hristos.com/paleh/
<?
if(isset($_GET["lang"]) and $_GET["lang"]=="eng"){$language="eng";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="ru"){$language="ru";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="de"){$language="de";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="fr"){$language="fr";}
else{$language="eng";}
echo $language;
$st1_ru="home";
$st1_eng="home";
$st1_fr="home";
$st1_de="home";

$st2_ru="каталог икон";
$st2_eng="catalogue of icons";
$st2_fr="le catalogue des icones";
$st2_de="der katalog der ikonen";

$st3_ru="как купить";
$st3_eng="how to buy";
$st3_fr="comme acheter";
$st3_de="wie zu kaufen";

$st4_ru="контакт";
$st4_eng="contact";
$st4_fr="le contact";
$st4_de="der kontakt";

?>

<table width="180" border="1" align="left" cellpadding="0" cellspacing="0">
<tr><td height="16">&nbsp;</td></tr>
<tr><td height="16">&nbsp;</td></tr>
<tr><td><a href="index.php?m=home&lang=<?=$language;?>"><?="$st1_"."$language";?></a></td></tr>
<tr><td><a href="index.php?m=catalog&lang=<?=$language;?>"><?="$st2_"."$language";?></a></td></tr>
<tr><td><a href="index.php?m=buy&lang=<?=$language;?>"><?="$st3_"."$language";?></a></td></tr>
<tr><td><a href="index.php?m=contact&lang=<?=$language;?>"><?="$st4_"."$language";?></a></td></tr>
<tr><td></td></tr>

</table>

  Ответить  
 
 автор: sim5   (23.11.2009 в 06:12)   письмо автору
 
   для: tavila2009   (23.11.2009 в 06:09)
 

Вы пытаетесь динамически "родить" имя переменной. Делается это не так, да и не стоит такого делать.
Еще раз задаю вопрос - эти значения четырех переменных, это и все что будет в интерфейсе страниц для разных языков?

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:16)   письмо автору
 
   для: sim5   (23.11.2009 в 06:12)
 

да. А как надо . Научите пожалуйста. Буду очень благодарна.

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:09)   письмо автору
 
   для: sim5   (23.11.2009 в 06:05)
 

это менюшка. нет ничего не намечается пока. Может у меня подход вообще не правильный. ?

  Ответить  
 
 автор: sim5   (23.11.2009 в 06:18)   письмо автору
 
   для: tavila2009   (23.11.2009 в 06:09)
 

Ну и слава богу (тем более о Христосе сайт).
Если вы разрабатываете сайт для разных языков, и при этом будете поступать так, как вы сейчас пытаетесь, то вы потонете в потоке обработки массы переменных.
Определите для каждого языка либо таблицы (таблицу) в базе, либо языковые файлы, в которых будут содержаться переменные (или константы) описывающие интерфейс страниц. Это и заголовки, это и пункты меню, и надписи кнопок и т.д..
А по полученному запросу вам остается только подключить соответсвующий языковый файл, или обратиться к необходимой таблице в базе. Имена же переменных (или констант) описывающих на соответсвующем языке элементы интерфейса будет в коде постоянны - "шевелить" их и "шаманить" над ними не будет необходимости.

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:21)   письмо автору
 
   для: sim5   (23.11.2009 в 06:18)
 

у меня было с ява кнопками. Вот ещё остался кусок. Но я решила сделать без кнопок. И запуталась. С кнопками всё работало прекрасно http://iisus-hristos.com/paleh/index.php?m=catalog&lang=de

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:24)   письмо автору
 
   для: sim5   (23.11.2009 в 06:18)
 

из-за четырех пунктов меню не хочется огород городить. Нельзя ли как-то всётаки склеить эти 2 части?

  Ответить  
 
 автор: sim5   (23.11.2009 в 06:43)   письмо автору
 
   для: tavila2009   (23.11.2009 в 06:24)
 

Дело не в кнопках или еще чем-то, дело в самом подходе. Чтобы вам что-то изменить или добавить в интерфейсе, вам придется перековыривать все ваши скрипты, это разве разумно?
Вся идея проста как тапочки, например:
1. Готовите языковые файлы:
а) ru.php
<?
define
('CHARSET''windows-1251');
define('OBJECT''Женщина');

б) en.php
<?
define
('CHARSET''windows-1252');
define('OBJECT''Woman');

Получаете запрос на язык:
<?
$lang 
= isset($_GET['lang']) ? $_GET['lang'] : 'ru';
//подключаете необходмый языковый файл
include($lang.'.php');
//используете его
echo OBJECT;

Вот таков принцип. Не обязательно именно так, не обязательно именовать файлы по переменной запроса, главное - это постоянные переменные (константы), а их значение "безболезненно" для скрипта можно редактировать. Просто будет добавлять новые значения - в скрипт переменные (константы), в соответствующий языковый файл - значения.

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:53)   письмо автору
 
   для: sim5   (23.11.2009 в 06:43)
 

я вот так сделала. Не совсем получается. Не рационально при больших меню. Согласна.
<?
if(isset($_GET["lang"]) and $_GET["lang"]=="eng"){$language="eng";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="ru"){$language="ru";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="de"){$language="de";}
elseif(isset($_GET["lang"]) and $_GET["lang"]=="fr"){$language="fr";}
else{$language="eng";}
echo $language;

if ($language="ru"){
$st1="home";
$st2="каталог икон";
$st3="как купить";
$st4="контакт";}

if ($language="eng"){
$st1="home";
$st2="catalogue of icons";
$st3="how to buy";
$st4="контакт";}

if ($language="de"){
$st1="home";
$st2="der katalog der ikonen";
$st3="wie zu kaufen";
$st4="der kontakt";}

if ($language="fr"){
$st1="home";
$st2="le catalogue des icones";
$st3="comme acheter";
$st4="le contact";}

?>

<table width="180" border="1" align="left" cellpadding="0" cellspacing="0">
<tr><td height="16">&nbsp;</td></tr>
<tr><td height="16">&nbsp;</td></tr>
<tr><td><a href="index.php?m=home&lang=<?=$language;?>"><?=$st1;?></a></td></tr>
<tr><td><a href="index.php?m=catalog&lang=<?=$language;?>"><?=$st2;?></a></td></tr>
<tr><td><a href="index.php?m=buy&lang=<?=$language;?>"><?=$st3;?></a></td></tr>
<tr><td><a href="index.php?m=contact&lang=<?=$language;?>"><?=$st4;?></a></td></tr>
<tr><td></td></tr>

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 06:56)   письмо автору
 
   для: tavila2009   (23.11.2009 в 06:53)
 

не понимаю почему сейчас-то берет только французский, т.е. последний в if
http://iisus-hristos.com/paleh/index.php?lang=ru

  Ответить  
 
 автор: sim5   (23.11.2009 в 07:00)   письмо автору
 
   для: tavila2009   (23.11.2009 в 06:53)
 

То что вы делаете, вообще не рационально. Если все языковые различия, это четыре записи, то стоит ли давать "громкое определение" мультиязычный, для вашего сайта? Не думаю, чтобы на этих четыре записях все мультиязычность и закончилась. Значит ваш подход в корзину и забыть о нем.

Вы пытаетесь сделать примерно следующее - вместо использования CSS, который дает самое главное, это описание стилей всех страниц в одном "месте", и позволяющий оперативно их изменять, Вы используете встроенный стиль для каждого тега на странице, чтобы в последствии долго карпеть, дабы изменить всего лишь цвет на их небольшом участке.

Если вы изначально делаете для себя неудобства, то в дальнейшем это выльется в серьезную проблему.

PS. Вы понимаете, что делате вот эта строка кода?:
<? 
$lang 
= isset($_GET['lang']) ? $_GET['lang'] : 'ru';

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 07:15)   письмо автору
 
   для: sim5   (23.11.2009 в 07:00)
 

? $_GET['lang'] : 'ru';вот эта часть кода не понятна.
я вообще-то сделала. Работает
http://iisus-hristos.com/paleh/index.php?lang=fr
но хотелось бы конечно с базой попробовать как вы советовали. Не знаю с чего там начать

  Ответить  
 
 автор: sim5   (23.11.2009 в 07:45)   письмо автору
 
   для: tavila2009   (23.11.2009 в 07:15)
 

Миледи, идите на кухню, приготовьте чашечку кофе, и порассуждаем маленько.

"я вообще-то сделала. Работает" - похвально, но не рационально, и почему. Допустим, что сейчас ваш мультиязычный сайт только и может выдать на нескольких языках пункты меню, и может даже этого и достаточно. Хотя в ваших переменных среди других языков почему-то есть русское, что для инстранца может оказаться непреодолимой проблемой. Ну это так, прелюдия.

Ваш скрипт, это автомат, причем автомат который совсем не знает кто им пользуется, немец, русский или иной басурман. Ваш автомат один для всех. Его главная задача, это выдать контент, причем выдать как можно быстрее, а быстрее будет подключить готовое и его использовать, чем заниматься ненужными вычислениями.

Ваши пользователи возможно захотят что-то у вас скачать, при этом немцу будет понятна ссылка с текстом "Гитлер капут", англичанину "Плиз, сэр", а русскому кроме "Валяй..." ничего не надо. И вы опять будете писать скрипт, в теле которого будете вычислять нечто, определять что это нечто должно выдавать.... А через неделю у ваших пользователей настроение измениться, им захочется другого, и вам придется опять вычислять, изменять....

"я вообще-то сделала. Работает" - забыть. Нельзя так делать, трудно вам будет потом вносить добавления и изменения. Вы можете привносить в свой автомат новые функции, видоизменять логику его работы, а вот поток данных, которые имеют одну и ту же суть, но разные значения, должны определяться загодя, и в нужном месте автомата только указывать на них ссылку, а не вычислять их имена, и не держать в теле автомата их значения. При этом вы можете спокойно добавлять любой язык, достаточно только описать все используемые автоматом констаны в новом языковом файле.

Я не знаю, что и как у вас на сайте, возможно для интерфейса удобнее будет иметь именно языковые файлы. Если ваши запросы идут через индексный файл, то вам достаточно подключить его в одном месте. Если же сайт имеет сложную структуру, возможно тогда будет удобнее воспользоваться базой. От этого сама суть не измениться - подключение необходимого языкового ресурса. Именно на это вы и должны обратить внимание, именно это и понять, а уж как сделать, это вторичный вопрос.

Вместо многих условий if, которыми вы определяте язык в скрипте, удобнее использовать условную операцию, которую я вам привел, и она означает следующее:

Переменная $lang равна (=), если пришел запрос языка (isset($_GET['lang'])), то равна значению этого запроса (тому, что после ?) $_GET['lang'], иначе она равна тому, что после (:) - значению по умолчанию 'ru'.

  Ответить  
 
 автор: tavila2009   (23.11.2009 в 07:56)   письмо автору
 
   для: sim5   (23.11.2009 в 07:45)
 

всё правильно вы говорите. Я займусь этим. Спасибо большое. Оказывается это у меня еще одно белое пятно которое надо победить. Спасибо большое.

  Ответить  
 
 автор: psychomc   (23.11.2009 в 10:20)   письмо автору
 
   для: tavila2009   (23.11.2009 в 07:56)
 

Бог помощь )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования