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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен совет по переводу сайта на ин. языки, Более правильный 
V
    Опции темы
rodendron
Дата 13.2.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день,
хотел получить консультацию.

Ситуация следующая. Имеется сайт на английском языке. Хотелось бы его перевести еще и на немецкий.
Мною был сделан файл языка, который теперь в каждой страничке подтягивается как инклуд.

Теперь как его правильно подключить?
Я знаю как сделать точно: на всех страницах сайта, где имеются ссылки, дописать еще и "?lang=$lang", это помимо "?page=$i" и т.д.
НО, это технически сложно, потому что на сайте имеются также формы регистрации, и придется в каждой форме вставлять "<input type=hidden name=lang value=$lang>".

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

Как вариант, еще обдумывал создание поддоменов. То есть, http://de.mydomain.com, но если переводить сайт на множество языков, то необходимо создавать и множество доменом. Но это технически неразрешимо - количество возмжных саб-доменов меньше, чем требования по количеству языков на сайте в будущем.

Посовейтуйте пожалуйста возможное решение.
Заранее благодарен.
PM MAIL   Вверх
Dave
Дата 13.2.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(rodendron @ 13.2.2006, 10:36 Найти цитируемый пост)
Я знаю как сделать точно: на всех страницах сайта, где имеются ссылки, дописать еще и "?lang=$lang", это помимо "?page=$i" и т.д.
НО, это технически сложно, потому что на сайте имеются также формы регистрации, и придется в каждой форме вставлять "<input type=hidden name=lang value=$lang>".

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

Делаешь какой то язык по который будет использоватся по умолчанию, заносишь его идентификатор в сессию, а если язык указан явно, через GET
Код

?lang=$lang

то перезаписываешь идентификатор языка в сессии на новый, просто присваиваешь новое значение сессионной переменной в которой хранится идентификатор языка.

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


Бывалый
*


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

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



Dave,
Как будет производиться смена языка? Чтобы я мог его сменить, при этом остаться на той же странце, на которой и находился.
PM MAIL   Вверх
Dave
Дата 13.2.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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




Цитата(rodendron @ 13.2.2006, 11:05 Найти цитируемый пост)
Dave,
Как будет производиться смена языка? Чтобы я мог его сменить, при этом остаться на той же странце, на которой и находился.

Делай редирект на ту же страницу с параметром языка.

То есть ссылка переключения языков не должна быть статической а динамической, подставляй в нее полный текущий урл добавляя в конце переменную с идентификатором языка.



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


Бывалый
*


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

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



Цитата(Dave @ 13.2.2006, 10:49)
Цитата(rodendron @  13.2.2006,  10:36 Найти цитируемый пост)
Я знаю как сделать точно: на всех страницах сайта, где имеются ссылки, дописать еще и "?lang=$lang", это помимо "?page=$i" и т.д.
НО, это технически сложно, потому что на сайте имеются также формы регистрации, и придется в каждой форме вставлять "<input type=hidden name=lang value=$lang>".

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

Делаешь какой то язык по который будет использоватся по умолчанию, заносишь его идентификатор в сессию, а если язык указан явно, через GET
Код

?lang=$lang

то перезаписываешь идентификатор языка в сессии на новый, просто присваиваешь новое значение сессионной переменной в которой хранится идентификатор языка.

Если не сложно, скинь пожалуйста какой-нибудь простенький пример.

Заранее благодарен.
PM MAIL   Вверх
z-END
Дата 13.2.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



а может проще через mod_rewrite сделать?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Kefir
Дата 13.2.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



rodendron,
Код
session_start();
// если язык был задан запросом ГЕТ, то пробуем его поставить (в ф-ции valid_language проверяем язык на валидность):
if(isset($_GET['lang'])) {
  if(valid_language($_GET['lang'])) {
    $_SESSION['lang'] = $_GET['lang'];
  }
}
// если не было языка в ГЕТ запросе и в $_SESSION['lang'], то ставим язык по умолчанию:
if(!isset($_SESSION['lang']) {
  $_SESSION['lang'] = $default_lang;
}

Вот простенький пример который ты просил. Второй блок - if, а не elseif, т.к. в случае если в ГЕТ был язык, но этот язык не валидный мы должны проверить текущий язык и так или иначе поставить какой-нибудь язык.
PM MAIL WWW Skype   Вверх
rodendron
Дата 13.2.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Kefir,
Спасибки. По логике так и должно бвть. Но у меня чего-то не работает.
Добавил еще в конец твоего кода
Код

session_register('lang');

Правда все равно не помогает. Только помле кода session_register() у меня создалась переменная $lang. До этого и она была пуста. Может я чего не так делаю?
Добавлено @ 21:12
Код

$default_lg = "EN";

session_start();

if(isset($_GET['lang'])) {
  if(valid_language($_GET['lang'])) {
    $_SESSION['lang'] = $_GET['lang'];
  }
}
if(!isset($_SESSION['lang'])) {
  $_SESSION['lang'] = $default_lang;
}

echo "$lang<br><br>";


$lang тут пустой...
PM MAIL   Вверх
Kefir
Дата 13.2.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



название переменной, в которой хранится язык - $_SESSION['lang'] smile
Код
echo $_SESSION['lang'];

И ещё - насколько я помню (не ручаюсь) - разхработчики ПХП писали о нежелательности использования session_register и $_SESSION в одном и том же коде.
PM MAIL WWW Skype   Вверх
CyClon
Дата 13.2.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прогонять сайт через какой-нибудь он-лайн переводчик, далее загружать все с помощью fopen и выводить. ИМХО. А вообще сделать несоклько языковых файлов, где все слова определены константами, в COOKIE и БД хранить инфу о языке юзера.


--------------------
user posted image
PM   Вверх
Kefir
Дата 13.2.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



CyClon, вопрос не в том как организовать сам перевод, а как организовать хранение переменной языка.
Цитата
в COOKIE и БД хранить инфу о языке юзера

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

smile Я почему-то очень скептически отношусь к онлайн переводчикам... да и к переводчикам как таковым. Если мне понадобится нормальный перевод - я лучше выделю на это деньги и схожу в бюро по переводам.
PM MAIL WWW Skype   Вверх
rodendron
Дата 14.2.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Kefir,
Все равно пусто smile

Код

$default_lg = "EN";

session_start();

if(isset($_GET['lang'])) {
  if(valid_language($_GET['lang'])) {
    $_SESSION['lang'] = $_GET['lang'];
  }
}
if(!isset($_SESSION['lang'])) {
  $_SESSION['lang'] = $default_lang;
}

echo "{$_SESSION['lang']}<br><br>";


Проверил, что последний if срабатывает, но вот присвоения значения не происходит.
Может ли что-то быть с версией php? У менян а работе на денвере вроде что-то пытается работать.
А на сайте на valehost почему-то ничего не происходит, да и к тому же еще и ссылка потом становиться некрасивой и кончается на PHPSESID. Я конечно понимаю, что надо как-то обозначить uid, но не так же страшно и коряво...
PM MAIL   Вверх
Kefir
Дата 14.2.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



rodendron, посмотри на две строки:
Код
$default_lg = "EN";

Код
$_SESSION['lang'] = $default_lang;

Тебе ничего странным не кажется? smile Преимущественно в названии переменной языка по умолчанию
PM MAIL WWW Skype   Вверх
rodendron
Дата 14.2.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Kefir,
Уф ну и нахимичил я там, пока тестировал.
Спасибки огромное! Исправил. Все стало выводиться.
Добавлено @ 00:51
Kefir,
Можно еще несколько вопросов параллельно?

Я когда писал диплом - вылавливал данные из форм так:

$lang = $_GET['lang'] или
$lang = $_POST['lang']

Сечас столкнулся с тем, что можно это не определять. То есть просто использовать в программе $lang и он сам его определяет. Это с чем может быть связано?
Заранее благодарен.
PM MAIL   Вверх
rodendron
Дата 14.2.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А второй вопрос - от "...?PHPSESSID=0dd036d784580773d14be950db2b4401" никак нельзя избавиться?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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