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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> многоязычные сайты 
:(
    Опции темы
Igor_CH
Дата 27.6.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пожалуйста объясните, как работают многоязычные сайты?

Например есть страница 1.php, на которой выбор языка:
Код

<a href=2.php?yaz=1>Русский</a><br>
<a href=2.php?yaz=2>Английский</a><br>
<a href=2.php?yaz=3>Немецкий</a><br>


Т.е. $yaz соответствует языку.

На следующей странице 2.php:
Код

<?php
if ($yaz=2) {
?>
Английский
<?php
} elseif ($yaz=3) {
?>
Немецкий
<?php
} else {
?>
Русский
<?php
}
?>

Т.е. если $yaz = 1 Русский язык, $yaz = 2 Английски, …

Но почему то так не работает, почему?

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


Хороший человек
**


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

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



register_globals off ?
Код
<?php
if ($_GET['yaz'] == 2) {
?>
Английский
<?php
} elseif ($_GET['yaz'] == 3) {
?>
Немецкий
<?php
} else {
?>
Русский
<?php
}?>


И если писать if ($a = 1), то это означает, что Вы присваиваете переменной $a значение 1, а не проверяете, равно ли оно 1. Надо писать if ($a == 1).

Это сообщение отредактировал(а) Mace - 27.6.2005, 16:58
PM   Вверх
Igor_CH
Дата 27.6.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо

а как делать остальные страницы, что бы переменная не проподала, например на следующей странице 3.php:
делаем страницу 2.php вот такой:
Код

<?php
if ($_GET['yaz'] == 2) {
?>
<a href=3.php>Английский</a>
<?php
} elseif ($_GET['yaz'] == 3) {
?>
<a href=3.php>Немецкий</a>
<?php
} else {
?>
<a href=3.php>Русский</a>
<?php
}?>


а на третьей странице 3.php (и т.д. хоть 30 страниц) опять:
Код

<?php
if ($_GET['yaz'] == 2) {
?>
Английский
<?php
} elseif ($_GET['yaz'] == 3) {
?>
Немецкий
<?php
} else {
?>
Русский
<?php
}?>


PM MAIL   Вверх
Opik
Дата 27.6.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Igor_CH
ставь куку.
http://www.php.net/setcookie
далее проверяй
1) Есть ли yaz в строке адреса, если да - ставим новую куку.
2) Если нету, то берем значение языка из куки.
PM MAIL Skype   Вверх
Igor_CH
Дата 27.6.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А если куки блокируются?
PM MAIL   Вверх
Opik
Дата 27.6.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



То в сессию.
PM MAIL Skype   Вверх
Igor_CH
Дата 27.6.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



можно по подробнее как сделать оба варианта?

1 вариант:
в начале каждого файла должны быть строки:
Код

function writeCookie() {
   setcookie("yaz", $_GET['yaz'], time() + 2*60*60);
   return true;
}
// Очистка кук
function cleanCookie() {
   setcookie("$yaz", "");
}
if ($_GET['yaz']) writeCookie();

ob_start();

Потом идет содержание файла
Код

<?php
ob_end_clean()
?>


Но почему то не выходит. smile

Как реализовать второрй вариант?
PM MAIL   Вверх
Opik
Дата 27.6.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



зачем тебе буферизация?
и подумай, обоснованно ли писать функцию, которая вызывается только 1 раз?
Цитата
Как реализовать второрй вариант?

не вижу оного.
Цитата
Но почему то не выходит

далее берешь значение из куки и с ним работаешь - вместо ГЕТ параметра.
PM MAIL Skype   Вверх
kelt
Дата 28.6.2005, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я могу предложить такой вариант, проверенный, рабоает через сессии.
На страницах ставлю ссвлки для выбора языка, потом передаю через сессии название языка, а в папке с языками, языковые файлы. В начале каждой странице ставлю проверку на язык и потом подключаю файл с соответсвующим я зыком. У меня получается что макет один и тот же, а значения переменных изменяется в зависимости от языка!
--------------------
Timeo danaos et dona ferentes 
PM ICQ   Вверх
Igor_CH
Дата 28.6.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kelt очень интересно!

Подскажи как этот правильно сделать?
PM MAIL   Вверх
kelt
Дата 28.6.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В общем я делаю, так создаю несколько языковых файлов в них пишу переменные и присвиаваю им в зависимости от языка. В название файла я ставлю название языка. А на страницах я просто использую переменные, и когда идет выбор языка я вставляю в начало страницы include-дом языковой файл, и у меня выходит на странице ставиться выбранный язык.
--------------------
Timeo danaos et dona ferentes 
PM ICQ   Вверх
Igor_CH
Дата 28.6.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



kelt можешь подсказать кодом?

Что у меня не так:
файл lib.php
Код

<?php
function writeCookie() {
   setcookie("yaz", $_GET['yaz']);
   return true;
}
// Очистка кук
function cleanCookie() {
   setcookie("$yaz", "");
}
?>


файл 0.php
Код

<?php include('lib.php'); ?>

<a href=1.php?yaz=1>Русский</a><br>
<a href=1.php?yaz=2>Английский</a><br>
<a href=1.php?yaz=3>Немецкий</a><br>


файл 1.php, 2.php, ...
Код

<?php
include('lib.php');

if ($_GET['yaz']) writeCookie();
ob_start();

if ($_GET['yaz'] == 2) {
?>
<a href=1.php>Английский</a>
<?php
} elseif ($_GET['yaz'] == 3) {
?>
<a href=1.php>Немецкий</a>
<?php
} else {
?>
<a href=1.php>Русский</a>
<?php
}

ob_end_clean()
?>


Это сообщение отредактировал(а) Igor_CH - 28.6.2005, 09:25
PM MAIL   Вверх
kelt
Дата 28.6.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А что конкретно не работает?
--------------------
Timeo danaos et dona ferentes 
PM ICQ   Вверх
Opik
Дата 28.6.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



kelt
а ты код посмотри, и подумай. что код делает, и что хочет программист, совершенно 2 разные вещи smile
PM MAIL Skype   Вверх
kelt
Дата 29.6.2005, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да именно. А любые файлы, это те которые отображаются пользователям!
--------------------
Timeo danaos et dona ferentes 
PM ICQ   Вверх
Wolf1994
Дата 2.7.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Предлагаю два варианта решения данной ситуации.
1. "Не в тему" - как у меня. На русскоязычной странице есть ссылка на English. С одной англоязычной страницы ссылка ведёт на другую англоязычную страницу и тд. То есть все страницы на одном языке связаны. Получается несколько версий сайтов. Минус - отсутствие "модульности". Плюс - более гибкая настройка под каждый язык - некоторые объекты можно не отображать, некоторые, наоборот, добавить.
2. Передавать номер языка:
Код

<a href="index.php?lang=1">Русский</a>
<a href="index.php?lang=2">Английский</a>
<a href="index.php?lang=3">Немецкий</a>


Создаётся файл со списком подключаемых файлов:
Код

<?php
$lib [1]="russian.php";
$lib [2]="english.php";
$lib [3]="deutch.php";
?>


В index.php подключается выбранный файл:
Код

include $lib [$lang];


Как я уже упомянул я использую первый вариант, второй применяю для других функций, поэтому не вполне уверен, что он подходит для данного случая. Но, надеюсь, работать будет.
PM MAIL WWW   Вверх
Opik
Дата 4.7.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Вообщем финиш:
lib.php:
Код

<?php
error_reporting(E_ALL);
session_start();

$lang_name = isset($_GET['set_lang'])? basename($_GET['set_lang']): false;
if($lang_name && file_exists("lang/" . $lang_name . ".php"))
{
        $_SESSION['setLang'] = $lang_name;
}
elseif(!isset($_SESSION['setLang']))
{
$_SESSION['setLang'] = "rus";
}

include("lang/" . $_SESSION['setLang'] . ".php");

?>

rus.php
Код

<?php
  $lang['hello'] = 'Привет';
?>

script.php
Код

<?php
include('lib.php');
print $lang['hello'];
?>


Это сообщение отредактировал(а) Opik - 5.7.2005, 15:51
PM MAIL Skype   Вверх
Igor_CH
Дата 5.7.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Opik топик сверху не работает, вообще не переходит с языка на язык.
PM MAIL   Вверх
Opik
Дата 5.7.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Исправил, очепятка была, нет ошибок 100%
PM MAIL Skype   Вверх
Igor_CH
Дата 5.7.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тоже проверил не работает. Берется перевод только с файла rus.php, на английский не перейти.

Это сообщение отредактировал(а) Igor_CH - 5.7.2005, 16:04
PM MAIL   Вверх
Bikutoru
Дата 5.7.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


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

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



Код

<?php
error_reporting(E_ALL);
session_start();

$lang_name = isset($_GET['set_lang'])? basename($_GET['set_lang']): false;

echo "Lang_name: {" . $lang_name . "}<BR>\n"; #DEBUG

if($lang_name && file_exists("lang/" . $lang_name . ".php"))
{
echo "Choise #1<BR>\n"; #DEBUG
$_SESSION['setLang'] = $lang_name;
}
elseif(!isset($_SESSION['setLang']))
{
echo "Choise #2<BR>\n"; #DEBUG
$_SESSION['setLang'] = "rus";
}
else
{
echo "Choise #3<BR>\n"; #DEBUG
}

echo "SESSION[setLang]: {" . $_SESSION['setLang'] . "}<BR>\n"; #DEBUG

include("lang/" . $_SESSION['setLang'] . ".php");

?>


Igor_CH, это называется отладка. Если ты до сих пор не понял, что именно тебе, а никому-нибудь другому, придется ей заниматься, то это клинический случай... За тебя никто ничего делать не будет, потому что это нужно тебе. Тебе написали уже столько кода, что по одному нему можно во всем разобраться. Жаль, что Opik почистил тему и удалил ту ссылку, тебе было бы полезно почитать что там написано...

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


Возможно, я высказал это в несколько резкой форме, но других слов у меня уже нет...
P.S. Если где палку перегнул, модераторы подправят smile


Это сообщение отредактировал(а) Bikutoru - 5.7.2005, 18:20


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Opik
Дата 5.7.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Igor_CH
А имена файлов точно совпадают? Этот код я проверил, работает на ура.
Цитата
Жаль, что Opik почистил тему и удалил ту ссылку, тебе было бы полезно почитать что там написано...

Эту? http://phpfaq.ru/debug

PM MAIL Skype   Вверх
Igor_CH
Дата 5.7.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да не деградирую, неделю бьюсь уже сил нету, неполучается.
после твоего поста почти получилось smile

вот оканчательный код:
Код

<?php
error_reporting(E_ALL);
session_start();

$lang_name = isset($_GET['lang'])? basename($_GET['lang']): false;

if($lang_name && file_exists("lang/" . $lang_name . ".php"))
{
$_SESSION['Lang'] = $lang_name;
}
elseif(!isset($_SESSION['Lang']))
{
$_SESSION['Lang'] = "rus";
}

include("lang/" . $_SESSION['Lang'] . ".php");

?>

как ни покажется странным он приводился, с одним но строоки:
Код

$_SESSION['Lang'] = $lang_name;
и
elseif(!isset($_SESSION['Lang']))

были вот такими:
Код

$_SESSION['lang'] = $lang_name;
и
elseif(!isset($_SESSION['lang']))

почему из заглавной буквы такая ошибка?
И последний вопрос уже по рабочему коду.
Если сылка имеет вид 1.php?lang=eng то выводится одна буква "H", а если простот 1.php то "HELLO"?

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


Увлекающийся
**


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

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



Opik, да именно про нее я и говорил

Igor_CH, честно говоря, не очень понял, что ты имеешь в виду. Поробуй ту переменнную с "HELLO" переименовать. Мне кажется проблема в этом:
$_GET['lang'] = "eng";
...
$lang["hello"] = "Hello";//Здесь происходит преобразование $lang к массиву и из-за него возникает баг

Других мыслей нет


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Aliance
Дата 5.7.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Я поднимал подобный вопрос, поиск рулит.
PM MAIL WWW ICQ Skype   Вверх
Igor_CH
Дата 7.7.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Aliance просмотрел кучу тем, ответа в них нет.
Вот эта тема: http://forum.vingrad.ru/index.php?showtopi...60&unread=1&hl=
и вот твой ответ:
Цитата
Все, все настроил, но как и ожидал, не работает если в ссылке есть еще параметры

PM MAIL   Вверх
Igor_CH
Дата 8.7.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну все таки вернусь к вопросу выше, почему если в url есть переменная слова не выводятся полностью?
Можно ли в таком случае выводить их в таком виде:
Файл eng.php
$h = “hello”;
А потом выводить как echo “$h”; ?

PM MAIL   Вверх
Aliance
Дата 8.7.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Я сделал просто. В файле, где нужна многоязычность я сделал так.
Был:
Код

Привет. Это моя страница.

Стал:
Код

<?=$hello;?>


Затем, в нем же определяю, что стоит в параметрах (см. код в моем топике), если русский - то подгружаю конфиг www.ya.ru/rus/conf.php если англ. - www.ya.ru/eng/conf.php а в них храню такое:
Код

// rus
$hello = 'Привет. Это моя страница.';

Код

// eng
$hello = 'Hello. This is my page.';

PM MAIL WWW ICQ Skype   Вверх
Страницы: (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.0734 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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