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

Форум PHP

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

 

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

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

тема: Сайт на 2-х языках, ак реализовать?
 
 автор: Bvz   (07.05.2008 в 21:42)   письмо автору
 
 

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

Например:

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

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

   
 
 автор: AcidTrash   (07.05.2008 в 21:56)   письмо автору
 
   для: Bvz   (07.05.2008 в 21:42)
 

>БД не используются.
А данные то откуда берутся?

   
 
 автор: Bvz   (07.05.2008 в 22:01)   письмо автору
 
   для: AcidTrash   (07.05.2008 в 21:56)
 

з языковых файлов, через константы

   
 
 автор: AcidTrash   (07.05.2008 в 22:17)   письмо автору
 
   для: Bvz   (07.05.2008 в 22:01)
 

>языковых файлов
Стесняюсь спросить, а что такое языковые файлы ?

P.S. рентабельнее использовать DB.

   
 
 автор: Bvz   (07.05.2008 в 22:22)   письмо автору
 
   для: AcidTrash   (07.05.2008 в 22:17)
 

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

   
 
 автор: Bvz   (07.05.2008 в 22:25)   письмо автору
 
   для: AcidTrash   (07.05.2008 в 22:17)
 

в чем рентабельность выражается?

   
 
 автор: Bvz   (07.05.2008 в 22:35)   письмо автору
 
   для: AcidTrash   (07.05.2008 в 22:17)
 

можно просто так сделать
index.php
<body>
текст
</body>

а можно так

ru.php
<?php
define ( 'TEKST' , 'текст');
?>

index.php
<?php
require_once( '/lang/ru.php');
<?php echo TEKST;?>
?>

а когда появляется второй язык
en.php
<?php
define ( 'TEKST' , 'text');
?>

то просто ножно выбрать нужный язык для подгрузки

index.php
<?php
выбрать и запомнить выбор между require_once( '/lang/ru.php'); и require_once( '/lang/ru.php');
<?php echo TEKST;?>
?>

   
 
 автор: Гончий пёс   (07.05.2008 в 22:28)   письмо автору
 
   для: Bvz   (07.05.2008 в 21:42)
 

2AcidTrash: Я вот тоже надолго задумался)

По сабжу:


<?php
session_start
();

if(!isset(
$_SESSION['lang'])) $_SESSION['lang']='ru';
if(!empty(
$_GET['lang'])) $_SESSION['lang']=$_GET['lang']; 
$lang $_SESSION['lang'];


if(
$lang=='ru'){
// ....
}
if(
$lang=='en'){
// ....
}
if(
$lang=='de'){
// ....
}
?>


Да, кстати, напомню, что лучше проверять $lang, если он напрямую будет использоваться в запросе к БД или файловой системе. Это потенциальная дыра.

   
 
 автор: Bvz   (07.05.2008 в 22:37)   письмо автору
 
   для: Гончий пёс   (07.05.2008 в 22:28)
 

но БД не будет использована, спасибо, пошел изучать сессии, а lang где берется?

   
 
 автор: Гончий пёс   (07.05.2008 в 22:57)   письмо автору
 
   для: Bvz   (07.05.2008 в 22:37)
 

На всяк пожарный "разжую" три строчки:

Если в сессии не установлена языковая переменная, устанавливаем русский по умолчанию.

if(!isset($_SESSION['lang'])) $_SESSION['lang']='ru';


Если GETом был передана переменная языка, сохраняем ее в сессию; предыдущее значение, перезапишется.

if(!empty($_GET['lang'])) $_SESSION['lang']=$_GET['lang']; 


Для простоты вводим переменную $lang, которая берется из сессии.

$lang = $_SESSION['lang'];



А GETом (на всякий, опять таки, случай) передать можно так:

<a href="index.php?lang=ru">Русский</a><br />
<a href="index.php?lang=en">English</a><br />
<a href="index.php?lang=de">Deutsch</a><br />

   
 
 автор: Bvz   (07.05.2008 в 23:01)   письмо автору
 
   для: Гончий пёс   (07.05.2008 в 22:57)
 

ты гений!, а при нажатии на ссылку. будет переход на index.php, правильно?

   
 
 автор: Гончий пёс   (07.05.2008 в 23:05)   письмо автору
 
   для: Bvz   (07.05.2008 в 23:01)
 

Да, будет переходить на index.php

   
 
 автор: Bvz   (08.05.2008 в 12:04)   письмо автору
 
   для: Гончий пёс   (07.05.2008 в 23:05)
 

сделал, все работает, гениально и просто, а могу я еще одну переменную использовать, для реализации еще одной функции?

   
 
 автор: Bvz   (07.05.2008 в 23:14)   письмо автору
 
   для: Bvz   (07.05.2008 в 23:01)
 

здорово, я же могу не только lang задавать , но и другие переменные при переходе по другим ссылкам для других целей, и потом эту переменную вставить в код. здорово когда по человечески объяснять!
еще пару вопрсов можно,
1. а вот переменная QUERY_STRING наскоько уместна в использовании?
2. насколько уместно использование языковых файлов?
3. сессии и передача данных через url в чем различие или сходство?

   
 
 автор: AcidTrash   (07.05.2008 в 22:47)   письмо автору
 
   для: Гончий пёс   (07.05.2008 в 22:28)
 

>2AcidTrash: Я вот тоже надолго задумался)
И в чем задумались? С проектированием таблиц БД?

P.S.
В вашей конструкции, я бы воспользовался конструкцией switch.

   
 
 автор: Гончий пёс   (07.05.2008 в 23:10)   письмо автору
 
   для: AcidTrash   (07.05.2008 в 22:47)
 

>>2AcidTrash: Я вот тоже надолго задумался)
>И в чем задумались? С проектированием таблиц БД?
>
>P.S.
>В вашей конструкции, я бы воспользовался конструкцией switch.

Задумался насчет языковых файлов.

Да, абсолютно справедливое замечание. Со свитчом, конечно, лучше. Я в данном случае исходил из того, что с IFами пример более нагляден.

   
 
 автор: Fredy314   (08.05.2008 в 15:33)   письмо автору
 
   для: Гончий пёс   (07.05.2008 в 22:28)
 

можно ещё если сессия не установлена посмотреть $_SERVER['HTTP_ACCEPT_LANGUAGE'], чтоб пользователю у кого английский по умолчанию получал английский сайт без лишних нажатий

   
 
 автор: Bvz   (04.03.2009 в 19:28)   письмо автору
 
   для: Гончий пёс   (07.05.2008 в 22:28)
 

а в чем потецеильноть дыры?

   
 
 автор: KPETuH   (08.05.2008 в 08:33)   письмо автору
 
   для: Bvz   (07.05.2008 в 21:42)
 

делал это с помощью XML в зависимости от языка подгружается определенный файл с языковыми данными...

   
Rambler's Top100
вверх

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