За последние 24 часа нас посетили 103309 программистов и 5656 роботов. Сейчас ищут 2269 программистов ...

Переключатель языков на PHP на статических страницах

Тема в разделе "PHP для новичков", создана пользователем Andrey1985, 27 апр 2019.

  1. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    Так в пустой странице должно быть два условия насколько я понял, сверяет с языком браузера, и в зависимости от этого перенаправляет в нужную папку.
    Код (Text):
    1. <?php
    2. $lang = ($_GET['lang'] == 'ru')?'ru':'ua';
    3. header('Location: /ru/'.$lang.'/index.php');
    4. ?><?php
    5. $lang = ($_GET['lang'] == 'ua')?'ua':'ru';
    6. header('Location: /ua/'.$lang.'/index.php');
    7. ?>
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    у меня всё работает, проверь адрес в строке браузера
    --- Добавлено ---
    там уже два условия 1-е это если get lang=ru, то кидает на руускую версию сайта, всё остальное (типа дефолт) в папку украинскую
    --- Добавлено ---
    header('Location: /ru/'.$lang.'/index.php');
    повнимательнее
     
  3. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    В корне сайта index.php (пустой с этим кодом), и две папки ru и ua
    Заработало видно браузер что-то закешировал
    написал так
    Код (Text):
    1. <?php
    2. $lang = ($_GET['lang'] == 'ru')?'ru':'ua';
    3. header('Location: /'.$lang.'/');
    4. ?>
     
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    я же написал в чём проблема
    у меня header('Location: /'.$lang.'/index.php');
    у тебя header('Location: /ru/'.$lang.'/index.php');
    найди одно отличие :)
     
    Andrey1985 нравится это.
  5. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    Спасибо, но как оно будет открыватся с молдовы или россии ? С чем сверяет язык ?
    Сейчас на тестовом серевере всегда с индекса кидает на укр. версию
    Что с английского интерфейса браузера, что с русского
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    @Andrey1985, так тебе 2 языка надо или дофигищи?
    PHP:
    1. <?php
    2. // языкастый массив, добавляй любые, главное не забывай в папки соответствующие языки раскладывать
    3. $arr = array('ua'=>'ua','ru'=>'ru','en'=>'en');
    4. $lang = (in_array($_GET['lang'],$arr)?$arr[$_GET['lang']]:'ua';
    5. header('Location: /'.$lang.'/');
    6. ?>
    что бы автоматически определяло язык, это совсем другая история, и по большей части не нужная, просто устанавливай куку с нужным языком, если куки нет, то отдавай украинскую версию и в модальном окне предоставляй выбор языка пользователю.
     
  7. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    Пока только два языка
     
  8. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    <?php
    $lang = ($_GET['lang'] == 'ru')?'ru':'ua';
    header('Location: /'.$lang.'/');
    ?>
    Это работает отлично, но видется роботом как 302 редирект, что не есть хорошо
    Нужен 301 редирект
     
    #33 Andrey1985, 29 апр 2019
    Последнее редактирование: 29 апр 2019
  9. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    Для 301 редиректа можно сделать так ? Вроде работает
    Код (Text):
    1.  
    2. <?php
    3. $lang = ($_GET['lang'] == 'ru')?'ru':'ua';
    4. header('Location: /'  .$lang.'/' ,TRUE,301);
    5. exit();
    6. ?>
     
    #34 Andrey1985, 29 апр 2019
    Последнее редактирование: 29 апр 2019
  10. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    Тут вроде была опечатка пропустили закрывающую скобу после :'ua';
     
  11. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    @Andrey1985, нет, пропустил но не там, погугли тернарный оператор и исправь мою ошибку.
     
    Andrey1985 нравится это.
  12. Andrey1985

    Andrey1985 Активный пользователь

    С нами с:
    25 апр 2016
    Сообщения:
    52
    Симпатии:
    0
    Привел к такому виду и работает добавил 301
    Код (Text):
    1. <?php
    2.  
    3. $arr = array('ua'=>'ua','ru'=>'ru');
    4. $lang = (in_array($_GET['lang'],$arr)?$arr[$_GET['lang']]:'ua');
    5. header('Location: /'.$lang.'/' ,TRUE,301);
    6. ?>