Помощник
|
![]() |
![]() |
![]()
Сообщение
#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> ------------------------------------------------------------------------ Если честно сказать, я только частично это сграбил из своего сайта. Там есть оченб много вариантов и приколов, впритык до использование БД. Это мой вариант решение даной задачи и на мой взгляд сейчас самое лучшее. Возможно у кого-от есть еще. |
|
|
![]() |
![]()
Сообщение
#13
|
![]() |
|
|
|
![]() |
![]()
Сообщение
#14
|
![]() |
Mulder, человек изобретает велосипед...
в 99.999% проектов просто используются файлы локализации с его подходом нужно создать пару сотен дублей файлов отличающихся лишь надписями |
|
|
![]() |
![]()
Сообщение
#15
|
![]() |
HTMLandPHP, я показал только пример, так чтоб сначала было понятно новичку, а не таким "СУПЕР-ПУПЕР ПРОФИ" как ты. А ты как всегда в своем репертуаре, типа ты там самый умный. Так иди на передачу Самый умный. Посмотрим....
Если честно сказать, я только частично это сграбил из своего сайта. Там есть оченб много вариантов и приколов, впритык до использование БД. Это мой вариант решение даной задачи и на мой взгляд сейчас самое лучшее. Возможно у кого-от есть еще. Конечно же лучше использовать XML: <menu>
<item1> <ru>item1</ru> <ua>item1</ua> <us>item1</us> </item1> </menu> |
|
|
![]() |
![]()
Сообщение
#16
|
|
![]() |
я показал только пример, так чтоб сначала было понятно новичку Вы показали дурной пример. Тот, который ни в коем случае не должен видеть и повторять новичок. Надо сразу показывать правильный пример, а не так как делаете вы: "сначала научим дурному, а потом пускай сам переучивается". Что касается способа организации локализации. Сам по себе движок сайта не должен подозревать о том, что сайт мультиязычен. Он должен иметь одинаковую структуру, что с 1 языком, что с 10. Единственное, чем сайт должен отличаться, это количеством файлов локализации, но ни как не количеством файлов скриптов. Есть два классических способа локализации. Так, как это сделано в Друпал (верх совершенства) и способ меток (подходит для простых задач). Допустим, вы хотите при входе пользователя на сайт приветствовать его сообщением "привет, %username%". В Друпале всегда любой текст в скриптах пишется на английском, даже если ваш сайт никогда не будет англоязычным. [PHP]t('Hello, @username', array('@username' => $account->name));[/PHP] А потом в файлах локализации идет перевод только слова Hello. Функции локализации в друпал способны подставлять правильные окончания при единственном и множественном числах и много еще каких фишек, очень сложно реализующихся через способ меток. В способе меток вы просто в нужном месте ставите метку: [PHP]echo lang['hello'].", $usrname";[/PHP] Как видите скрипт всегда один. Где хранить язык? Тут уже решать разработчику. Если вы хотите, чтобы пользователь при каждом посещение не выбирал язык заново, то его нужно записывать в куку (если это аноним) или в базу (если это зарегистрированный пользователь).
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
![]() |
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 |
![]() |
Текстовая версия | Сейчас: 27.4.2025, 0:20 |