X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V  < 1 2
Открыть тему
Тема закрыта
> Как сделать 2 языка на сайте
ZhukV
ZhukV
сообщение 12.11.2010, 1:56; Ответить: ZhukV
Сообщение #12


Вот и сейчас играюсь именно над этим.
Задача:
Сайт, ссылки формата ЧПУ. Три языка: Украинський, Руский, Англ.
Решение:
Раз используется ЧПУ, так зачем тыкать язык в куки, если возможно, что куки не принимаются.
Будем использовать и далее ЧПУ
Вот к примеру:
http://zhukv.com/ru/
http://zhukv.com/ua/
http://zhukv.com/us/
http://zhukv.com/
Код .htaccess для ЧПУ:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]


Теперь, в нас адресная строка после домена будет в $_GET['page']
Ну а теперь остается определить, какой именно язык, учитывая то, что руский -- дефоултный.
В индексе сверзу пишем:
[PHP]
$temp = explode('/', $_GET['page']);//разбем в массив
foreach($temp as $k => $v){
if($v){ $CHPU[] = $v; }//удалим все лишние значение, чтоб они нам не мешали
}
unset( $temp ); //удалим временную переменную, чтоб ишло меньше ресурсов =) (для большых проектов)
#Так мы получили разбитую в массив всю адресную строку.
#все языки
$lang = array('ru', 'ua', 'us');
#порверим язык
if(in_array($CHPU[0], $lang)){
//lang yes
$SUIT_LANG = array_shift($lang);//со смещением к нулю
}else{
// если в адресной строке не указан язык.
$SUIT_LANG = "ru";
}
[/PHP]
Ну вот. Определили, какой именно язык у нас на сайте в даный момент используется пользователем.
Далее, создаем папку "lang", а в ней файлы такого рода:
menu.RU.php
menu.UA.php
menu.US.php
Вот пример одного файла:
[PHP]
<?
$menu = array(
array(
"TITLE" => "HTML",
"HREF" => "{$_DOMEN}html/",
),
array(
"TITLE" => "CSS",
"HREF" => "{$_DOMEN}css/",
),
array(
"TITLE" => "PHP",
"HREF" => "{$_DOMEN}php/",
),
array(
"TITLE" => "JavaScript",
"HREF" => "{$_DOMEN}javascript/",
),
array(
"TITLE" => "jQuery",
"HREF" => "{$_DOMEN}jquery/",
),
array(
"TITLE" => "CS 1.6",
"HREF" => "{$_DOMEN}cs16/",
),


);
?>
[/PHP]
Последующие файлы такие же, вот только тексты другие (языки)
Остается подключить....
Можна вот так:
[PHP]
$file = "lang/menu." . strtoupper($SUIT_LANG) . '.php';
include($file);
[/PHP]

А теперь самое интересное:
А как тогда создавать ссылки. Постоянно писать условие? А если языков много?
А здесь все просто!!!
Создадим функцию генерации ссылки:
[PHP]
function CreateHrefA($href = ''){
global $SUIT_LANG; // Здесь текущий язык
$DEFAULT_LANG = "RU";//язык по умолчанию
if(!$href){ return NULL; }
$ar = array('http://' . $_SERVER['HTTP_HOST'] . '/');
$href = str_replace($ar, "", $href);
$return = "http://" . $_SERVER['HTTP_HOST'] . '/';
$return .= strtoupper($DEFAULT_LANG) == strtoupper($SUIT_LANG) ? '' : $SUIT_LANG . '/';
return $resturn . $href;
}
[/PHP]
А вызов порстой:
<a href="<?=CreateHrefA('news')?>">NEWS</a>


------------------------------------------------------------------------
Если честно сказать, я только частично это сграбил из своего сайта. Там есть оченб много вариантов и приколов, впритык до использование БД.
Это мой вариант решение даной задачи и на мой взгляд сейчас самое лучшее. Возможно у кого-от есть еще.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 12.11.2010, 11:24; Ответить: Mulder_hb
Сообщение #13


(ZhukV @ 12.11.2010, 03:56) *
Вот пример одного файла:

И что для каждого языка свой набор скриптов? Жесть...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 12.11.2010, 13:26; Ответить: Witu
Сообщение #14


Mulder, человек изобретает велосипед...

в 99.999% проектов просто используются файлы локализации

с его подходом нужно создать пару сотен дублей файлов отличающихся лишь надписями
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 12.11.2010, 15:07; Ответить: ZhukV
Сообщение #15


HTMLandPHP, я показал только пример, так чтоб сначала было понятно новичку, а не таким "СУПЕР-ПУПЕР ПРОФИ" как ты. А ты как всегда в своем репертуаре, типа ты там самый умный. Так иди на передачу Самый умный. Посмотрим....


(ZhukV @ 12.11.2010, 03:56) *
Если честно сказать, я только частично это сграбил из своего сайта. Там есть оченб много вариантов и приколов, впритык до использование БД.
Это мой вариант решение даной задачи и на мой взгляд сейчас самое лучшее. Возможно у кого-от есть еще.

Конечно же лучше использовать XML:
<menu>
  <item1>
  <ru>item1</ru>
  <ua>item1</ua>
  <us>item1</us>
  </item1>
</menu>
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 12.11.2010, 17:05; Ответить: Mulder_hb
Сообщение #16


(ZhukV @ 12.11.2010, 17:07) *
я показал только пример, так чтоб сначала было понятно новичку

Вы показали дурной пример. Тот, который ни в коем случае не должен видеть и повторять новичок. Надо сразу показывать правильный пример, а не так как делаете вы: "сначала научим дурному, а потом пускай сам переучивается".

Что касается способа организации локализации. Сам по себе движок сайта не должен подозревать о том, что сайт мультиязычен. Он должен иметь одинаковую структуру, что с 1 языком, что с 10. Единственное, чем сайт должен отличаться, это количеством файлов локализации, но ни как не количеством файлов скриптов.
Есть два классических способа локализации. Так, как это сделано в Друпал (верх совершенства) и способ меток (подходит для простых задач). Допустим, вы хотите при входе пользователя на сайт приветствовать его сообщением "привет, %username%".
В Друпале всегда любой текст в скриптах пишется на английском, даже если ваш сайт никогда не будет англоязычным.
[PHP]t('Hello, @username', array('@username' => $account->name));[/PHP]
А потом в файлах локализации идет перевод только слова Hello. Функции локализации в друпал способны подставлять правильные окончания при единственном и множественном числах и много еще каких фишек, очень сложно реализующихся через способ меток.
В способе меток вы просто в нужном месте ставите метку:
[PHP]echo lang['hello'].", $usrname";[/PHP]
Как видите скрипт всегда один.

Где хранить язык? Тут уже решать разработчику. Если вы хотите, чтобы пользователь при каждом посещение не выбирал язык заново, то его нужно записывать в куку (если это аноним) или в базу (если это зарегистрированный пользователь).

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V  < 1 2
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) CryptoCloud — прием USDT, BTC, ETH, LTC на любом сайте
61 CryptoCLoud 22782 17.4.2025, 13:46
автор: CryptoCLoud
Открытая тема (нет новых ответов) Как выводить на сайте разную рекламу для разных стран?
1 CrypTomera 1030 16.4.2025, 17:17
автор: malamut
Открытая тема (нет новых ответов) Как монетизировать мелкие Ютуб каналы?
3 uahomka 1827 16.4.2025, 14:02
автор: malamut
Открытая тема (нет новых ответов) Как лучше выводить рекламу на сайте?
3 Boymaster 989 16.4.2025, 14:00
автор: malamut
Горячая тема (нет новых ответов) Стало известно, как снизится скорость YouTube в России
56 Room 11403 14.4.2025, 22:24
автор: Liudmila


 



RSS Текстовая версия Сейчас: 27.4.2025, 0:20
Дизайн