За последние 24 часа нас посетили 111915 программистов и 7643 робота. Сейчас ищут 1848 программистов ...

Переключатель языков в двуязычном сайте

Тема в разделе "PHP для новичков", создана пользователем wolf329, 1 апр 2016.

  1. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    Всем привет! Прошу помощи. Чувствую сам не осилю.

    Создал динамический двуязычный сайт на одном домене с размещением файла 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 не очень давно, практики не слишком много.

    Что порекомендуете?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Код (PHP):
    1. $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en/$_SERVER[REQUEST_URI]";
    2. header("Location: $url");
    3.  
    Отладьте сами. А вообще, можно было и додуматься, если вся разница в том, чтоб en подставить.
     
  3. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    Ок, попробую.
     
  4. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    mkramer, спасибо за помощь, но никак не получается привязать переключатели языков. Очень нужна помощь. Своих знаний недостаточно.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Код давайте. Я же не телепат, чтоб понять, что вы там делаете
     
  6. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    Страница index.php русскоязычной версии:
    Код (Text):
    1.  
    2. <!DOCTYPE html>    
    3.     <head>
    4.     </head>
    5.     <body>
    6.         <div class= "menu">
    7.         <ul>
    8.             <li><a href="/"  <?if($page=="index") echo 'class="active"'?>>Главная</a></li>
    9.             <li><a href="/about/" <?if($page=="about") echo 'class="active"'?>>О&nbsp;компании</a></li>
    10.             <li><a href="/catalog/" <?if($page=="catalog") echo 'class="active"'?>>Каталог</a></li>
    11.             <li><a href="/contacts/" <?if($page=="contacts") echo 'class="active"'?>>Контакты</a></li>
    12.         </ul>  
    13.         </div>
    14.        
    15. <?
    16.         $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en/$_SERVER[REQUEST_URI]";
    17. header("Location: $url");
    18.  
    19.         <div style="width: 200px; position:absolute; right:342px; top: 5px; z-index: 999">
    20. <a href="/en/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/enflag.png" />EN</a> " | "
    21. <a href="/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/ruflag.png" />RU</a>
    22. </div>
    23.  
    24. ?>               
    25.          
    26.             <?
    27.                     $alt_name="index";
    28.                     include (ROOT_DIR.'/gms/modules/content/content.php');
    29.             ?>
    30.             </div>
    31.  
    32.           <?}elseif($page=="catalog")
    33.           {
    34.             ?>
    35.             <div class="mpage">
    36.               <div class="catalogpage">
    37.               <div class="content">
    38. <div class="leftblock">
    39. <h3>КАТАЛОГ</h3>
    40.  
    41.    <?
    42.                     $opt="rightm";
    43.                     $type=1;
    44.                     include (ROOT_DIR.'/gms/modules/catalog/catalog.php');
    45.         ?>
    46.  
    47. </div>
    48.     </body>
    49. </html>
    Страница index.php английской версии:
    Код (Text):
    1.  
    2. <!DOCTYPE html>    
    3.     <head>
    4.     </head>
    5.     <body>
    6.         <div class= "menu">
    7.         <ul>
    8.             <li><a href="/en/"  <?if($page=="index") echo 'class="active"'?>>MAIN</a></li>
    9.             <li><a href="/en/about/" <?if($page=="about") echo 'class="active"'?>>ABOUT</a></li>
    10.             <li><a href="/en/catalog/" <?if($page=="catalog") echo 'class="active"'?>>PRODUCT</a></li>
    11.             <li><a href="/en/contacts/" <?if($page=="contacts") echo 'class="active"'?>>CONTACTS</a></li>
    12.         </ul>  
    13.         </div>
    14.        
    15.        
    16.         <?
    17.         $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en/$_SERVER[REQUEST_URI]";
    18. header("Location: $url");
    19.  
    20.         <div style="width: 200px; position:absolute; right:342px; top: 5px; z-index: 999">
    21. <a href="/en/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/enflag.png" />EN</a> " | "
    22. <a href="/" style="font-size:14px; font-family: Tahoma; text-decoration: none;"><img alt="" border="0" src="/i/ruflag.png" />RU</a>
    23. </div>
    24.  
    25. ?>
    26.          
    27.          
    28.             <?
    29.  
    30.                     $alt_name="index";
    31.                     include (ROOT_DIR.'/../gms/modules/contenten/contenten.php');
    32.  
    33.             ?>
    34.             </div>
    35.  
    36.           <?}elseif($page=="catalog")
    37.           {
    38.             ?>
    39.             <div class="mpage">
    40.               <div class="catalogpage">
    41.               <div class="content">
    42. <div class="leftblock">
    43. <h3>PRODUCT</h3>
    44.  
    45.    <?
    46.                     $opt="rightm";
    47.                     $type=1;
    48.                     include (ROOT_DIR.'/../gms/modules/catalogtn/catalogen.php');
    49.         ?>
    50.  
    51. </div>
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    Сделай функцию content_lang(). которая по текущему REQUEST_URI будет понимать язык и возвращать 'ru' либо 'en'.
    где-то в начале делаешь $lang = content_lang()

    Сделай локализованные хидер и футер в отдельных файлах подключай типа так:
    Код (PHP):
    1. $file = __DIR__."/header-{$lang}.php";
    2. if (!file_exists($file)) die('ACHTUNG!');
    3. include $file; 
    А вообще, не надо смешивать язык интерфейса, т.е. язык надписей в меню, с языком контента. Это параллельные вещи. Я читаю доки и на русском, и английском. Вот сх*яли язык надписей должен меняться когда я перехожу из папки в папку?! Ересь просто.

    См. https://php.ru/forum/viewtopic.php?t=57227#p461192
     
  8. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    Этот вопрос меня не интересует. Все уже реализовано и работает отлично. А вот переключатель никак. Какое мнение у mkramer?
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    wolf329, я не вижу, чтоб вы куда-то пытались встроить код, который я вам показал. Вы его понимаете вообще, что он делает?
     
  10. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    Вопрос с переключением языков решен.
    Выкладываю готовое решение
    русскоязычная версия сайта:
    Код (Text):
    1.  
    2. <!DOCTYPE html>    
    3.    <head>
    4.    </head>
    5.    <body>
    6.       <div class= "menu">
    7.         <ul>
    8.             <li><a href="/"  <?if($page=="index") echo 'class="active"'?>>Главная</a></li>
    9.             <li><a href="/about/" <?if($page=="about") echo 'class="active"'?>>О&nbsp;компании</a></li>
    10.             <li><a href="/catalog/" <?if($page=="catalog") echo 'class="active"'?>>Каталог</a></li>
    11.             <li><a href="/contacts/" <?if($page=="contacts") echo 'class="active"'?>>Контакты</a></li>
    12.       </ul>  
    13.         </div>
    14.        
    15. <?
    16.    $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en$_SERVER[REQUEST_URI]";
    17.    echo '<a href="' . $url . '">EN</a>'
    18. ?>                    
    19.        
    20.             <?
    21.                     $alt_name="index";
    22.                     include (ROOT_DIR.'/gms/modules/content/content.php');
    23.             ?>
    24.             </div>
    25.  
    26.           <?}elseif($page=="catalog")
    27.           {
    28.             ?>
    29.             <div class="mpage">
    30.               <div class="catalogpage">
    31.               <div class="content">
    32. <div class="leftblock">
    33. <h3>КАТАЛОГ</h3>
    34.  
    35.    <?
    36.                     $opt="rightm";
    37.                     $type=1;
    38.                     include (ROOT_DIR.'/gms/modules/catalog/catalog.php');
    39.         ?>
    40.  
    41. </div>
    42.     </body>
    43. </html>
    и англоязычная версия сайта:
    Код (Text):
    1.  
    2. <!DOCTYPE html>    
    3.    <head>
    4.    </head>
    5.    <body>
    6.       <div class= "menu">
    7.         <ul>
    8.             <li><a href="/en/"  <?if($page=="index") echo 'class="active"'?>>MAIN</a></li>
    9.             <li><a href="/en/about/" <?if($page=="about") echo 'class="active"'?>>ABOUT</a></li>
    10.             <li><a href="/en/catalog/" <?if($page=="catalog") echo 'class="active"'?>>PRODUCT</a></li>
    11.             <li><a href="/en/contacts/" <?if($page=="contacts") echo 'class="active"'?>>CONTACTS</a></li>
    12.       </ul>  
    13.         </div>
    14.        
    15.      
    16.       <?
    17.    $url = strpos($_SERVER["REQUEST_URI"], "/en/") !== false ? str_replace("/en/", "/", $_SERVER["REQUEST_URI"]) : "/en$_SERVER[REQUEST_URI]";
    18.    echo '<a href="' . $url . '">RU</a>'
    19. ?>
    20.        
    21.        
    22.             <?
    23.  
    24.                     $alt_name="index";
    25.                     include (ROOT_DIR.'/../gms/modules/contenten/contenten.php');
    26.  
    27.             ?>
    28.             </div>
    29.  
    30.           <?}elseif($page=="catalog")
    31.           {
    32.             ?>
    33.             <div class="mpage">
    34.               <div class="catalogpage">
    35.               <div class="content">
    36. <div class="leftblock">
    37. <h3>PRODUCT</h3>
    38.  
    39.    <?
    40.                     $opt="rightm";
    41.                     $type=1;
    42.                     include (ROOT_DIR.'/../gms/modules/catalogtn/catalogen.php');
    43.         ?>
    44.  
    45. </div>
    46. </body>
    47. </html>
    Добавлено спустя 12 минут 12 секунд:
    mkramer, благодарю за направление. Но в вашем коде была ошибка. Удалил лишний слеш в коде - "/en$_SERVER[REQUEST_URI]";
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну так тут же люди, заглянув вечерком, чегой-нибудь по быстрому пишут, я вам сразу написал, что не отлаживал. А вы на то и программист, чтоб разобраться ещё, что да как, а не просто код скопировать :)
     
  12. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    mkramer, на то и вы программист, чтобы код правильно написать, а не с ошибками! Ладно я разобрался, но здесь же раздел новичков - в ступор можно войти.
    Ладно, проехали. Еще раз, спасибо, mkramer. Удачи!

    Добавлено спустя 2 минуты 4 секунды:
    artoodetoo, извини, но ты, чтобы умничать, реально бы давал советы. Мой сайт прекрасно работает!
    artoodetoo, шаблонно думаешь!! Если не во всем разбираешься, то, цитируя тебя: "Сам ересть не неси".
    Вот mkramer реально помог.
    Удачи всем!!!
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Новичок != придурок, знающий только Ctrl+c и Ctrl+v, в моём понимании.
     
  14. wolf329

    wolf329 Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    10
    Симпатии:
    0
    Уважать нужно людей... Любой профессионал когда-то был новичком!
     
  15. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.599
    Симпатии:
    206
    Любой профессионал, бывши новичком, учился.
     
  16. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.601
    Симпатии:
    423
    Адрес:
    РД, г. Махачкала.
    Вам дали готовое решение а вы про слеш. Смешно. А критику надо уметь принимать.

    Добавлено спустя 1 минуту 22 секунды:
    Звучит так:-"Ты то дал, но это говно не работало, но я сделал все, все уже ничего не надо. Я ВСЕ СДЕЛАЛ".
     
  17. Kokss

    Kokss Новичок

    С нами с:
    9 авг 2018
    Сообщения:
    1
    Симпатии:
    0
    @wolf329
    Отличное решение! Сразу заработало.
    А есть ли решение для трех языков?
    Если в корне РУ а в соседней директории с EN находится DE