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

Переключение языка сайта

  • 10 января 2012 г.
  • В общем благодаря форуму и инету сделал такую конструкцию
    Код

    public function show_language()
    {
    if(count($this->diafan->language_all) < 2)
    {
    return FALSE;
    }

    $url = $_SERVER['REQUEST_URI'];
    echo '<ul class="language">';
    foreach ($this->diafan->language_all as $key => $language)
    {
    echo
    ($language[0] != _LANG ? '<li><a href="'.BASE_PATH.( $language[1] ? $language[1].''.$url.'' : '').'">':'<li class="active">' )
    .$this->diafan->_useradmin->get ($language[2], 'name', $language[0] ? $language[0] : 1, 'language').( $language[0] != _LANG ? '</a></li>' : '</li>').' ';
    }
    echo '</ul>';
    return TRUE;
    }

    Придал чуть оформления, попытался сделать так чтобы при переключении сохранялся url. Для английской версии нормально работает, а вот для русской все равно предлагает перейти на главную чтобы ее. Помоги программисты. Познаний php ноль. Вообще)))
    • 11 января 2012 г.
    • Загвоздка в чем? Что английская версия переходит на site.ru/eng/ а русская на site.ru?
      Конечно, ведь один язык должен быть основной и смысла переходить на site.ru/ru/ нет никакого. Сразу на главную. Сделайте основным язык английский, тогда русский будет переключать на site.ru/ru/, а английский вести на морду.
      • 11 января 2012 г.
      • Не загвоздка в том, чтобы сохранить путь. Допустим я нахожусь по адресу site.ru/eng/services и при переключении на русский, по идее меня должно перекинуть на site.ru/services. Т.е. я должен остаться на той же странице, на котороый и был, но в англоязычной версии.
    • 12 января 2012 г.
    • Все просто:
      Код
      $url= $this->diafan->_route->current_link();
  • 17 января 2012 г.
  • В общем такая проблема теперь. Если я делаю так
    Код

    ($language[0] != _LANG ? '<li><a href="'.BASE_PATH.( $language[2] ? $language[1].'/'.$url.'' : '').'">':'<li class="active">' )

    То при переключении получаю урл такого вида site.ru/en/page/, при переходе на русский урл сохраняется, но появляется лишний слеш site.ru//page/. Если же в коде убрать слеш, то при переключении на англ. получается так site.ru/enpage/ и соответственно 404.
    • 19 января 2012 г.
    • Ну можно сделать еще одну дополнительную проверку ставить слеш или нет
      • 20 января 2012 г.
      • Эх, если бы я еще знал как ее сделать)))
  • 23 января 2012 г.
  • Сохранение пути при переключении языков помогло расскоментирование строчки в includes/function.php. 283 строка функции show_language()
    Код
    //.($_GET["rewrite"]?$_GET["rewrite"].'/':'')

    убрать первые 2 слеша и всё работает!

    Но у меня возник другой вопрос. Если блок DIV в CSS оформлен background'ом как растровая картинка с русскими надписями, то при переключении языка каким образом подставить вместо неё другой фон блока с английской надписью.

    Примером может служить логотип (в двух языковых вариантах), растровые кнопки "Войти", "Отправить", "Зарегистрироваться" , либо это могут быть какие-то крупные кнопки на главной "Заказать", где шрифт слит с фоном в одну картинку, но при переключении языка поменялся бы на картинку "Order".

    Читал про value="" value2="", но не совсем понял, как их можно увязать с CSS описанием?
    • 23 января 2012 г.
    • Спасибо за подсказку. К сожалению я удалил весь блок и переделывал его заново, но открыв старый файл, понял что-куда и теперь все работает. И это хорошо))) Если кому надо, могу привести пример моего оформления. Делает он следующее, скрывает активный язык и оставляет только тот, на который нужно перейти. Все это в тегах ul li.
      includes/function.php
      Код

      public function show_language()
      {
      if(count($this->diafan->language_all) < 2)
      {
      return FALSE;
      }

      echo '<ul class="language">';
      foreach ($this->diafan->language_all as $key => $language)
      {
      echo
      ($language[0] != _LANG ? '<li><a href="'.BASE_PATH.( $language[1] ? $language[1].'/' : '').($_GET["rewrite"]?$_GET["rewrite"].'/':'').'">':'<li class="active">' )
      .$this->diafan->_useradmin->get ($language[2], 'name', $language[0] ? $language[0] : 1, 'language').( $language[0] != _LANG ? '</a></li>' : '</li>').' ';
      }
      echo '</ul>';
      return TRUE;
      }


      css:
      Код

      ul li.active { display: none; }
      • 23 января 2012 г.
      • Спасибо и Вам, Азат! Возможно, пригодится Ваш вариант!
    • 23 января 2012 г.
    • По поводу кнопок, предпочитаю делать все в CSS3, поскольку этот стандарт уже в принципе поддерживается современными браузерами. По крайней мере кнопки точно делаю текстом всегда, так и переводить проще :) Логотип же можно сделать блоком и вставить в шаблон, закинув соответствующее оформление тегами в редактор. Так делал пару раз.
  • 20 июня 2016 г.
  • Подскажите, почему я вставляю тег переключения языка, а он при переключении перебрасывает на главную. А должен на туже страницу, но другого языка. По умолчанию же так?

    Тег:
    Код
    <insert name="show_block" module="languages">

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум