Всем привет! Прошу помощи. Чувствую сам не осилю. Создал динамический двуязычный сайт на одном домене с размещением файла index.php русскоязычной версии в корне, а английского index.php - в папке en: русская версия - http://sajt.com/ и английская - http://sajt.com/en/. CMS самописка. Сайт в двух языках содержит в общей сложности более 1000 страниц. На данном этапе все переведено, сайт работает отлично. Но... При переключении языка осуществляется переход на главную страницу локализации, а хотелось бы на иноязычный аналог текущей страницы. К примеру, находишься на странице 'catalog' русской версии сайта, и по ссылке необходимо перейти на эту же страницу, но на втором языке. http://sajt.com/en/catalog/item/... ==> http://sajt.com/catalog/item/... http://sajt.com/catalog/item/... ==> http://sajt.com/en/catalog/item/... http://sajt.com/en/about/... ==> http://sajt.com/about/... http://sajt.com/about/... ==> http://sajt.com/en/about/... и так далее. Пробовал вариант с использованием системной функции: <?substr($ENTRY_URL$,M,N)?> но безрезультатно. Изучаю PHP не очень давно, практики не слишком много. Что порекомендуете?
Код (PHP): $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en/$_SERVER[REQUEST_URI]"; header("Location: $url"); Отладьте сами. А вообще, можно было и додуматься, если вся разница в том, чтоб en подставить.
mkramer, спасибо за помощь, но никак не получается привязать переключатели языков. Очень нужна помощь. Своих знаний недостаточно.
Страница index.php русскоязычной версии: Код (Text): <!DOCTYPE html> <head> </head> <body> <div class= "menu"> <ul> <li><a href="/" <?if($page=="index") echo 'class="active"'?>>Главная</a></li> <li><a href="/about/" <?if($page=="about") echo 'class="active"'?>>О компании</a></li> <li><a href="/catalog/" <?if($page=="catalog") echo 'class="active"'?>>Каталог</a></li> <li><a href="/contacts/" <?if($page=="contacts") echo 'class="active"'?>>Контакты</a></li> </ul> </div> <? $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en/$_SERVER[REQUEST_URI]"; header("Location: $url"); <div style="width: 200px; position:absolute; right:342px; top: 5px; z-index: 999"> <a href="/en/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/enflag.png" />EN</a> " | " <a href="/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/ruflag.png" />RU</a> </div> ?> <? $alt_name="index"; include (ROOT_DIR.'/gms/modules/content/content.php'); ?> </div> <?}elseif($page=="catalog") { ?> <div class="mpage"> <div class="catalogpage"> <div class="content"> <div class="leftblock"> <h3>КАТАЛОГ</h3> <? $opt="rightm"; $type=1; include (ROOT_DIR.'/gms/modules/catalog/catalog.php'); ?> </div> </body> </html> Страница index.php английской версии: Код (Text): <!DOCTYPE html> <head> </head> <body> <div class= "menu"> <ul> <li><a href="/en/" <?if($page=="index") echo 'class="active"'?>>MAIN</a></li> <li><a href="/en/about/" <?if($page=="about") echo 'class="active"'?>>ABOUT</a></li> <li><a href="/en/catalog/" <?if($page=="catalog") echo 'class="active"'?>>PRODUCT</a></li> <li><a href="/en/contacts/" <?if($page=="contacts") echo 'class="active"'?>>CONTACTS</a></li> </ul> </div> <? $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en/$_SERVER[REQUEST_URI]"; header("Location: $url"); <div style="width: 200px; position:absolute; right:342px; top: 5px; z-index: 999"> <a href="/en/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/enflag.png" />EN</a> " | " <a href="/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/ruflag.png" />RU</a> </div> ?> <? $alt_name="index"; include (ROOT_DIR.'/../gms/modules/contenten/contenten.php'); ?> </div> <?}elseif($page=="catalog") { ?> <div class="mpage"> <div class="catalogpage"> <div class="content"> <div class="leftblock"> <h3>PRODUCT</h3> <? $opt="rightm"; $type=1; include (ROOT_DIR.'/../gms/modules/catalogtn/catalogen.php'); ?> </div>
Сделай функцию content_lang(). которая по текущему REQUEST_URI будет понимать язык и возвращать 'ru' либо 'en'. где-то в начале делаешь $lang = content_lang() Сделай локализованные хидер и футер в отдельных файлах подключай типа так: Код (PHP): $file = __DIR__."/header-{$lang}.php"; if (!file_exists($file)) die('ACHTUNG!'); include $file; А вообще, не надо смешивать язык интерфейса, т.е. язык надписей в меню, с языком контента. Это параллельные вещи. Я читаю доки и на русском, и английском. Вот сх*яли язык надписей должен меняться когда я перехожу из папки в папку?! Ересь просто. См. https://php.ru/forum/viewtopic.php?t=57227#p461192
Этот вопрос меня не интересует. Все уже реализовано и работает отлично. А вот переключатель никак. Какое мнение у mkramer?
wolf329, я не вижу, чтоб вы куда-то пытались встроить код, который я вам показал. Вы его понимаете вообще, что он делает?
Вопрос с переключением языков решен. Выкладываю готовое решение русскоязычная версия сайта: Код (Text): <!DOCTYPE html> <head> </head> <body> <div class= "menu"> <ul> <li><a href="/" <?if($page=="index") echo 'class="active"'?>>Главная</a></li> <li><a href="/about/" <?if($page=="about") echo 'class="active"'?>>О компании</a></li> <li><a href="/catalog/" <?if($page=="catalog") echo 'class="active"'?>>Каталог</a></li> <li><a href="/contacts/" <?if($page=="contacts") echo 'class="active"'?>>Контакты</a></li> </ul> </div> <? $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en$_SERVER[REQUEST_URI]"; echo '<a href="' . $url . '">EN</a>' ?> <? $alt_name="index"; include (ROOT_DIR.'/gms/modules/content/content.php'); ?> </div> <?}elseif($page=="catalog") { ?> <div class="mpage"> <div class="catalogpage"> <div class="content"> <div class="leftblock"> <h3>КАТАЛОГ</h3> <? $opt="rightm"; $type=1; include (ROOT_DIR.'/gms/modules/catalog/catalog.php'); ?> </div> </body> </html> и англоязычная версия сайта: Код (Text): <!DOCTYPE html> <head> </head> <body> <div class= "menu"> <ul> <li><a href="/en/" <?if($page=="index") echo 'class="active"'?>>MAIN</a></li> <li><a href="/en/about/" <?if($page=="about") echo 'class="active"'?>>ABOUT</a></li> <li><a href="/en/catalog/" <?if($page=="catalog") echo 'class="active"'?>>PRODUCT</a></li> <li><a href="/en/contacts/" <?if($page=="contacts") echo 'class="active"'?>>CONTACTS</a></li> </ul> </div> <? $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en$_SERVER[REQUEST_URI]"; echo '<a href="' . $url . '">RU</a>' ?> <? $alt_name="index"; include (ROOT_DIR.'/../gms/modules/contenten/contenten.php'); ?> </div> <?}elseif($page=="catalog") { ?> <div class="mpage"> <div class="catalogpage"> <div class="content"> <div class="leftblock"> <h3>PRODUCT</h3> <? $opt="rightm"; $type=1; include (ROOT_DIR.'/../gms/modules/catalogtn/catalogen.php'); ?> </div> </body> </html> Добавлено спустя 12 минут 12 секунд: mkramer, благодарю за направление. Но в вашем коде была ошибка. Удалил лишний слеш в коде - "/en$_SERVER[REQUEST_URI]";
Ну так тут же люди, заглянув вечерком, чегой-нибудь по быстрому пишут, я вам сразу написал, что не отлаживал. А вы на то и программист, чтоб разобраться ещё, что да как, а не просто код скопировать
mkramer, на то и вы программист, чтобы код правильно написать, а не с ошибками! Ладно я разобрался, но здесь же раздел новичков - в ступор можно войти. Ладно, проехали. Еще раз, спасибо, mkramer. Удачи! Добавлено спустя 2 минуты 4 секунды: artoodetoo, извини, но ты, чтобы умничать, реально бы давал советы. Мой сайт прекрасно работает! artoodetoo, шаблонно думаешь!! Если не во всем разбираешься, то, цитируя тебя: "Сам ересть не неси". Вот mkramer реально помог. Удачи всем!!!
Вам дали готовое решение а вы про слеш. Смешно. А критику надо уметь принимать. Добавлено спустя 1 минуту 22 секунды: Звучит так:-"Ты то дал, но это говно не работало, но я сделал все, все уже ничего не надо. Я ВСЕ СДЕЛАЛ".
@wolf329 Отличное решение! Сразу заработало. А есть ли решение для трех языков? Если в корне РУ а в соседней директории с EN находится DE