Продолжение о многоязычности двойки.

+21
2.28K
В продолжение размышлений о многоязычности на двойке на реальном проекте пришлось столкнуться ситуацией, когда часть материала есть на обоих языках а часть на одном. Таким образом задача встала следующая:
1) При переключении на другой язык из внутренней страницы проверять, нет ли на сайте другого языка страницы с таким же адресом, только с вставлением ru/ или там en/.
2) Если есть, формируем ссылку на существующую страницу, если нет, ссылку на главную того языка.
Основной сайт на английском, внутренний на русском, в директории /ru.
Решение:
В русский main.tpl.php
  1. <?php $urlz = substr($_SERVER['REQUEST_URI'], 3) // убираем из начала адреса "/ru";
  2. $url = "http://".$_SERVER['HTTP_HOST'].$urlz // формируем полный адрес на английской странице;
  3. $Headers = @get_headers($url) // выдергиваем массив;
  4. ?>
  5. <img src="../images/ru.gif">
  6. <?php if(preg_match("|200|", $Headers[0])) { // проверяем, отдаётся ли код "200"?>
  7. <a href="<?php echo $urlz; ?>"> <img src="../images/en.gif"> </a>
  8. <?php } else { ?>
  9. <a href="<?php echo "/" ?>"><img src="../images/en.gif"></a>
  10. <?php }?>
В английский main.tpl.php
  1. <?php $urlz = "ru".$_SERVER['REQUEST_URI'] // добавляем в начало адреса "ru";
  2. $url = "http://".$_SERVER['HTTP_HOST']."/".$urlz // формируем полный адрес на русской странице;
  3. $Headers = @get_headers($url)// выдергиваем массив;
  4. ?>
  5. <?php if(preg_match("|200|", $Headers[0])) { // проверяем, отдаётся ли код "200"?>
  6. <a href="<?php echo "/ru".$_SERVER['REQUEST_URI'];?>"><img src="../images/ru.gif"></a>
  7. <?php } else { ?>
  8. <a href="<?php echo "/ru" ?>"><img src="../images/ru.gif"></a>
  9. <?php } ?>
  10. <img src="../images/en.gif">
Получаем на каждом сайте два флага с нужными ссылками. Ну, и конечно грузим картинки флагов. На текущем сайте свой флаг не активен.
Публикую это просто так, может кому то надо.
P.S. В php я чистый чайник, так что не ругайтесь сильно…
0
SpaceSel SpaceSel 9 лет назад #
Только решил заняться "языком", тут такое. Спасибо за наводку.
0
qwest qwest 9 лет назад #
Наверное так:
Код PHP:
  1. <?php } //Lang end ?>
нельзя?
Надо:
Код PHP:
  1. <?php } ?> //Lang end
0
Олег с клещами Олег с клещами 9 лет назад #
Да это впопыхах, можно и вообще не писать, это я для себя, чтоб не забыть...
0
Олег с клещами Олег с клещами 9 лет назад #
У меня настолько мало времени, что, когда тянет что-то написать для сообщества, порой нет времени всё причесать, чтобы всем было понятно, извините меня, пожалуйста.
0
qwest qwest 9 лет назад #
Во втором файле тоже похожая ошибка. Просто не все владеют РНР.
А так конечно понятно и плюс нужная штука.
0
Олег с клещами Олег с клещами 9 лет назад #
Это не ошибка, это просто справочная информация для разработчика, она на скрипт не влияет. Я просто выложил рабочий кусок, он не для тех, кто не в теме. Кто читает код, то всё понимает.
0
Олег с клещами Олег с клещами 9 лет назад #
Убрал все рабочие метки, чтобы никого не смущать.
0
Raiden Raiden 9 лет назад #
Имеется ввиду, что пояснение должно следовать после ?> дабы следовать фэньшую.
0
qwest qwest 9 лет назад #
Точно.
+1
Loadырь Loadырь 9 лет назад #
Не точно. Дабы следовать "фэньшую" комментарии и пояснения желательно ставить строкой выше или в конце строки кода, но не в середине строки кода, как тут
Спойлер
Что касается этого
Raiden:
пояснение должно следовать после ?>
то после закрывающего тега php фраза "//Lang end" будет обработана как строка html кода, а не комментарий php кода и выведена на экран.
0
Иван Шкута Иван Шкута 9 лет назад #
Все верно. Но если требуется таки оставить комментарий внутри строки, то оборачивать его следует в /* комментарий */.
А если вывести за пределы PHP, то то так: <!-- комметарий -->

Еще от автора

Добавление материалов гостями без регистраци
Много предлагалось способов как разрешить гостям добавлять материалы. Перепробовал все, на сегодня ни один не работает. Пришлось изобрести велосипед.
Фиктивный счетчик клиентов
Иногда требуется вывести на сайте фиктивный счетчик клиентов. Я люблю максимально простые решения.
Вставка из Word в CKEditor 1.хх
Не раз уже на форуме обсуждали проблемку в CKEditor когда нельзя вставить текст из Word (нет кнопки). Решения я не увидел, поэтому полез сам
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.