|
|
|
| Есть вот такой скрипт. Выдаёт ошибку. Можно запустить здесь 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"> </td></tr>
<tr><td height="16"> </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> | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 04:45)
| | Вместо первых пяти строк
<?
$language = isset($_GET["lang"]) ? $_GET["lang"] : "eng";
|
Еще бы не ругалось. Во-первых нет определенной перменной $st1_ и подобных (далее), а "склеивать" значения двух переменных нужно через точку, а у вас это попытка чего?
$st1_$language --- ?? | |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 05:59)
| | а как же надо записать. Уже голву сломала!!! | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 06:03)
| | У вас что, кроме этого десятка записей на разных языках более ничего не будет? | |
|
|
|
|
|
|
|
для: 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"> </td></tr>
<tr><td height="16"> </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> | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 06:09)
| | Вы пытаетесь динамически "родить" имя переменной. Делается это не так, да и не стоит такого делать.
Еще раз задаю вопрос - эти значения четырех переменных, это и все что будет в интерфейсе страниц для разных языков? | |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 06:12)
| | да. А как надо . Научите пожалуйста. Буду очень благодарна. | |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 06:05)
| | это менюшка. нет ничего не намечается пока. Может у меня подход вообще не правильный. ? | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 06:09)
| | Ну и слава богу (тем более о Христосе сайт).
Если вы разрабатываете сайт для разных языков, и при этом будете поступать так, как вы сейчас пытаетесь, то вы потонете в потоке обработки массы переменных.
Определите для каждого языка либо таблицы (таблицу) в базе, либо языковые файлы, в которых будут содержаться переменные (или константы) описывающие интерфейс страниц. Это и заголовки, это и пункты меню, и надписи кнопок и т.д..
А по полученному запросу вам остается только подключить соответсвующий языковый файл, или обратиться к необходимой таблице в базе. Имена же переменных (или констант) описывающих на соответсвующем языке элементы интерфейса будет в коде постоянны - "шевелить" их и "шаманить" над ними не будет необходимости. | |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 06:18)
| | у меня было с ява кнопками. Вот ещё остался кусок. Но я решила сделать без кнопок. И запуталась. С кнопками всё работало прекрасно http://iisus-hristos.com/paleh/index.php?m=catalog&lang=de | |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 06:18)
| | из-за четырех пунктов меню не хочется огород городить. Нельзя ли как-то всётаки склеить эти 2 части? | |
|
|
|
|
|
|
|
для: 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;
|
Вот таков принцип. Не обязательно именно так, не обязательно именовать файлы по переменной запроса, главное - это постоянные переменные (константы), а их значение "безболезненно" для скрипта можно редактировать. Просто будет добавлять новые значения - в скрипт переменные (константы), в соответствующий языковый файл - значения. | |
|
|
|
|
|
|
|
для: 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"> </td></tr>
<tr><td height="16"> </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:53)
| | не понимаю почему сейчас-то берет только французский, т.е. последний в if
http://iisus-hristos.com/paleh/index.php?lang=ru | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 06:53)
| | То что вы делаете, вообще не рационально. Если все языковые различия, это четыре записи, то стоит ли давать "громкое определение" мультиязычный, для вашего сайта? Не думаю, чтобы на этих четыре записях все мультиязычность и закончилась. Значит ваш подход в корзину и забыть о нем.
Вы пытаетесь сделать примерно следующее - вместо использования CSS, который дает самое главное, это описание стилей всех страниц в одном "месте", и позволяющий оперативно их изменять, Вы используете встроенный стиль для каждого тега на странице, чтобы в последствии долго карпеть, дабы изменить всего лишь цвет на их небольшом участке.
Если вы изначально делаете для себя неудобства, то в дальнейшем это выльется в серьезную проблему.
PS. Вы понимаете, что делате вот эта строка кода?:
<?
$lang = isset($_GET['lang']) ? $_GET['lang'] : 'ru';
|
| |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 07:00)
| | ? $_GET['lang'] : 'ru';вот эта часть кода не понятна.
я вообще-то сделала. Работает
http://iisus-hristos.com/paleh/index.php?lang=fr
но хотелось бы конечно с базой попробовать как вы советовали. Не знаю с чего там начать | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 07:15)
| | Миледи, идите на кухню, приготовьте чашечку кофе, и порассуждаем маленько.
"я вообще-то сделала. Работает" - похвально, но не рационально, и почему. Допустим, что сейчас ваш мультиязычный сайт только и может выдать на нескольких языках пункты меню, и может даже этого и достаточно. Хотя в ваших переменных среди других языков почему-то есть русское, что для инстранца может оказаться непреодолимой проблемой. Ну это так, прелюдия.
Ваш скрипт, это автомат, причем автомат который совсем не знает кто им пользуется, немец, русский или иной басурман. Ваш автомат один для всех. Его главная задача, это выдать контент, причем выдать как можно быстрее, а быстрее будет подключить готовое и его использовать, чем заниматься ненужными вычислениями.
Ваши пользователи возможно захотят что-то у вас скачать, при этом немцу будет понятна ссылка с текстом "Гитлер капут", англичанину "Плиз, сэр", а русскому кроме "Валяй..." ничего не надо. И вы опять будете писать скрипт, в теле которого будете вычислять нечто, определять что это нечто должно выдавать.... А через неделю у ваших пользователей настроение измениться, им захочется другого, и вам придется опять вычислять, изменять....
"я вообще-то сделала. Работает" - забыть. Нельзя так делать, трудно вам будет потом вносить добавления и изменения. Вы можете привносить в свой автомат новые функции, видоизменять логику его работы, а вот поток данных, которые имеют одну и ту же суть, но разные значения, должны определяться загодя, и в нужном месте автомата только указывать на них ссылку, а не вычислять их имена, и не держать в теле автомата их значения. При этом вы можете спокойно добавлять любой язык, достаточно только описать все используемые автоматом констаны в новом языковом файле.
Я не знаю, что и как у вас на сайте, возможно для интерфейса удобнее будет иметь именно языковые файлы. Если ваши запросы идут через индексный файл, то вам достаточно подключить его в одном месте. Если же сайт имеет сложную структуру, возможно тогда будет удобнее воспользоваться базой. От этого сама суть не измениться - подключение необходимого языкового ресурса. Именно на это вы и должны обратить внимание, именно это и понять, а уж как сделать, это вторичный вопрос.
Вместо многих условий if, которыми вы определяте язык в скрипте, удобнее использовать условную операцию, которую я вам привел, и она означает следующее:
Переменная $lang равна (=), если пришел запрос языка (isset($_GET['lang'])), то равна значению этого запроса (тому, что после ?) $_GET['lang'], иначе она равна тому, что после (:) - значению по умолчанию 'ru'. | |
|
|
|
|
|
|
|
для: sim5
(23.11.2009 в 07:45)
| | всё правильно вы говорите. Я займусь этим. Спасибо большое. Оказывается это у меня еще одно белое пятно которое надо победить. Спасибо большое. | |
|
|
|
|
|
|
|
для: tavila2009
(23.11.2009 в 07:56)
| | Бог помощь ))) | |
|
|
|