С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 22.04.2021
Сообщений: 68

Функционал buttons переключения языка на php

13.05.2021, 08:15. Показов 2859. Ответов 10

Студворк — интернет-сервис помощи студентам
Сайт на английском языке. Есть база с переводом всего контента, в файле /locale/ru_RU/LC_MESSAGES/ru_RU.mo\po.
Есть скрипт в index.php подключающий эту базу и задающий сессию для вновь прибывших людей на сайт.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$loader = new Twig_Loader_Filesystem('./');
$twig = new Twig_Environment($loader, array(
    'cache' => "./cache",
    'auto_reload' => true
));
 
$twig->addExtension(new Twig_Extensions_Extension_I18n());
 
putenv('LC_ALL=ru_RU.UTF-8');
setlocale(LC_ALL, 'ru_RU.UTF-8');
 
bindtextdomain('ru_RU', './locale/ru_RU/LC_MESSAGES/');
textdomain('ru_RU');
 
session_start();
$languages = array('en', 'ru');
if(isset($_GET['languages']) and in_array($_GET['languages'], $languages)){
    $_SESSION['languages'] = $_GET['languages'];
}
if(!isset($_SESSION['languages'])) {
    $_SESSION['languages'] = "en";
}
Есть DropDown с кнопками переключения языка.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
<div class="dropdown">
                <a class="btn btn-danger dropdown-toggle" href="#" role="button" id="dropdownLanguage" data-bs-toggle="dropdown" aria-expanded="false">
                    Language
                </a>
 
                <ul class="dropdown-menu" aria-labelledby="dropdownMenuLink">
                    <li><a class="dropdown-item text-center" id="index.php?lang=en" href="#">EN</a></li>
                    <li><a class="dropdown-item text-center" id="index.php?lang=ru" href="#">RU</a></li>
                </ul>
            </div>
Вопрос в том, как прописать функцию переключения для кнопок, чтобы они обращались к файлам с переводом и переводили текст.
P.S.Я знаю как прописывать в шаблонах код, чтобы он переводил этот текст. К примеру <?php echo_('input') ?>. Смысл вопроса заключается в коде для кнопок. Чтобы я не пробовал, кнопки не работают как положено.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2021, 08:15
Ответы с готовыми решениями:

Нужно доработать функционал для плагина Visual Form Builder Pro (share buttons)
Доброго времени суток! На сайте с бронированием туров стоит плагин Visual Form Builder Pro http://vfb.matthewmuro.com/ . Отдельный тур...

Панель переключения языка
После переустановки Windows XP вместо привычных значков En - Рус появился значок клавиатуры и переключение через Alt + левый Shift, хотя в...

Переключения языка на вин + спейс
Можно ли как-то такое реалиовать &quot;чтобы язык переключался на вин + спейс&quot; , если да то подскажите как это сделать ?

10
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
13.05.2021, 10:00
AlerinGustovski, а как у вас маршрутизация устроена? Может лучше организовать URL так:
https://example.com/ru/page
https://example.com/en/page

Тогда из маршрута можно было бы легко получать язык (ru, en).
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
13.05.2021, 11:39
Цитата Сообщение от AlerinGustovski Посмотреть сообщение
Чтобы я не пробовал, кнопки не работают как положено.
Так у вас в ссылке lang, а в коде смотрите languages.
Интересно что же вы пробовали, это же сразу в глаза бросается)

Еще немного странно что url у вас записан в ID, может конечно это dropdown такой, но обычно ссылки пишут в href

Держать язык в path ссылки смысла не вижу. Только лишние проблемы с тем чтобы его в каждую ссылку дописывать.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
13.05.2021, 12:31
Цитата Сообщение от tarasalk Посмотреть сообщение
Держать язык в path ссылки смысла не вижу. Только лишние проблемы с тем чтобы его в каждую ссылку дописывать.
Если маршрутизатора и генератора URL нет. При их использовании проблем не возникнет.
В query string подставлять не легче, если это "вручную" делать.

А использование cookie или сессии для сохранения выбранного языка вообще в уныние вгоняет. Представляю, как кто-то делится ссылкой и говорит: только ты там нужный язык выбери, а-то по умолчанию статья на английском будет.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
13.05.2021, 13:01
Цитата Сообщение от Para bellum Посмотреть сообщение
Если маршрутизатора и генератора URL нет. При их использовании проблем не возникнет.
Проблем полно.
1) Их нужно писать. Зачем, если можно не делать?
2) Будет как минимум 2 независимые реализации (PHP и JS).
3) Другим сервисам придется тоже поддержать эту логику, чтобы ходить на твой сайт. Например в админке.

Цитата Сообщение от Para bellum Посмотреть сообщение
В query string подставлять не легче, если это "вручную" делать.
Да, поэтому вручную это делается один раз, когда непосредственно меняется язык. Дальше можно через JS автоматически приписывать его в query.

Цитата Сообщение от Para bellum Посмотреть сообщение
А использование cookie или сессии для сохранения выбранного языка вообще в уныние вгоняет. Представляю, как кто-то делится ссылкой и говорит: только ты там нужный язык выбери, а-то по умолчанию статья на английском будет.
Я встречал и обратное Это палка о двух концах. Поэтому как раз таки лучше хранить в куках, а не в урле. Если в куках языка нет, то берешь дефолтный из браузера.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
13.05.2021, 14:31
Цитата Сообщение от tarasalk Посмотреть сообщение
Их нужно писать. Зачем, если можно не делать?
Так себе аргумент, конечно; но если их в проекте не было изначально, то -- да, встроить, скорее всего, будет проблематично.
Потому я и спросил, как у него маршрутизация устроена.
Цитата Сообщение от tarasalk Посмотреть сообщение
Будет как минимум 2 независимые реализации (PHP и JS).
Если изначально не было нормальной реализации на стороне JS, с чего она вдруг потребуется после реализации на стороне PHP?
Конечно, можно допустить, что у него там какая-нибудь самоделка с AJAX-подгрузкой страниц.
Цитата Сообщение от tarasalk Посмотреть сообщение
Другим сервисам придется тоже поддержать эту логику, чтобы ходить на твой сайт.
Не понял.
Цитата Сообщение от tarasalk Посмотреть сообщение
Это палка о двух концах
Да, зависит от проекта. Если какой-то статейник, я настаиваю, что лучше в URL: получатель перейдет на статью на нужном языке.
Если какое-то приложение, то лучше cookie.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
13.05.2021, 15:30
Цитата Сообщение от Para bellum Посмотреть сообщение
Так себе аргумент, конечно;
Ну я лично свое время ценю Поэтому если есть возможность не делать лишнего, то не делаю.

Цитата Сообщение от Para bellum Посмотреть сообщение
Если изначально не было нормальной реализации на стороне JS, с чего она вдруг потребуется после реализации на стороне PHP?
А как мне в JS переиспользовать генератор из PHP?
Что-то подобное
JavaScript
1
2
let lang = 'ru';
location.href = `${lang}/orders`;
Да, можно конечно прямо в PHP сгенерировать JS аля
PHP
1
echo 'location.href = ' . generateUrl('/orders', ['lang' => $lang]);
Но это просто невероятные костыли
Хотя конечно в каком-то простейшем фронте можно без этого обойтись.

Цитата Сообщение от Para bellum Посмотреть сообщение
Не понял.
Любой проект, где фронт не монолитный. Например админка и клиентская часть. Нужно уметь генерировать ссылки друг на друга. Это очень легко когда у тебя статичный url, но чем больше динамики, тем сложнее. В сложных проектах типа гугла это превращается в настоящий ад. В элементарном статейники конечно можно любые костыли лепить, на маленьком масштабе их не видно.

Цитата Сообщение от Para bellum Посмотреть сообщение
Да, зависит от проекта. Если какой-то статейник, я настаиваю, что лучше в URL: получатель перейдет на статью на нужном языке.
Тот кто кинул ссылку может читать на русском, а я может на английском предпочитаю. И заранее мы об этом никак не узнаем. Я например в международном проекте работаю и у нас это частый кейс.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
13.05.2021, 19:20
Цитата Сообщение от tarasalk Посмотреть сообщение
А как мне в JS переиспользовать генератор из PHP?
Зачем переиспользовать? Я хотел сказать, что внедрение маршрутизатора и генератора URL на стороне сервера не обязательно повлечет за собой изменения на фронте. Нет информации, какой там фронт. Может, как на https://bbc.com, без какой-либо асинхронности.
Цитата Сообщение от tarasalk Посмотреть сообщение
Но это просто невероятные костыли
Мягко сказано.
Цитата Сообщение от tarasalk Посмотреть сообщение
Любой проект, где фронт не монолитный
Тут ничего не поделаешь. Делая независимые фронты, придётся прибегать к дублированию, если и там и там нужна одинаковая функциональность.
Если генерировать URL не на фронте, а на сервере (где и для админки и для клиентской части сайта используется один и тот же экземпляр маршрутизатора), то проблем возникнуть не должно.
Цитата Сообщение от tarasalk Посмотреть сообщение
Тот кто кинул ссылку может читать на русском, а я может на английском предпочитаю.
С натяжкой, но предположим -- для ситуации, когда один человек передает одному человеку ссылку.
Но не для ситуации, когда один человек передаёт ссылку многим людям. Например, новостное агентство распространяет анонсы своих новостей среди русскоязычных и англоязычных. Под анонсом ссылка "Читать подробнее".
Как думаете, если англоязычные при нажатии на ссылку будут попадать на страницу с новостью на русском, они будут благодатно искать кнопку переключения языка?

Про поисковики, опять же, забывать не стоит. Допустим, поисковик окажется послушным, получит от нашего сайта cookie и просканирует страницу на русском.
Пользователь же, перейдя из поиска на сайт, будет недоумевать: в поиске страница на русском, а при тут -- английский.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
13.05.2021, 22:06
Цитата Сообщение от Para bellum Посмотреть сообщение
Зачем переиспользовать? Я хотел сказать, что внедрение маршрутизатора и генератора URL на стороне сервера не обязательно повлечет за собой изменения на фронте. Нет информации, какой там фронт. Может, как на https://bbc.com, без какой-либо асинхронности.
1) Глянул network, там есть ajax запросы)
2) Кажется мультиязычности на этом сайте нет, странно его в пример приводить.
3) Да, вероятно какие-то частные случаи найти можно. Я просто привык использовать современные технологии и на фронте у меня как минимум гибридный PHP/JS, а лучше vue/react

Цитата Сообщение от Para bellum Посмотреть сообщение
Тут ничего не поделаешь. Делая независимые фронты, придётся прибегать к дублированию
Как это не поделаешь. Мой вариант как раз таки снимает с других логику определения языка.

Цитата Сообщение от Para bellum Посмотреть сообщение
Но не для ситуации, когда один человек передаёт ссылку многим людям. Например, новостное агентство распространяет анонсы своих новостей среди русскоязычных и англоязычных. Под анонсом ссылка "Читать подробнее".
Как думаете, если англоязычные при нажатии на ссылку будут попадать на страницу с новостью на русском, они будут благодатно искать кнопку переключения языка?
Я не очень понимаю как у вас так получилось.
Если вы напечатали ссылку "читать подробнее", то язык уже известен.
Даже если это просто ссылка без текста, т.е. язык неизвестен, то откуда там русский? Неужели мы говорим о частном случае, когда англичанин приехал в Россию, поставил себе русскую винду и браузер, а потом удивляется что у него сайты на русском открываются?)
Посмотрите как реализованы крупные сервисы, я вот только что походил в инкогнито по .com доменам гугл, ютуб, фейсбук, тиктик...сразу русский язык стоит. Также посмотрел новости на почте, там при переходе по ссылкам тоже на русском открывается.

Цитата Сообщение от Para bellum Посмотреть сообщение
Про поисковики, опять же, забывать не стоит. Допустим, поисковик окажется послушным, получит от нашего сайта cookie и просканирует страницу на русском.
Пользователь же, перейдя из поиска на сайт, будет недоумевать: в поиске страница на русском, а при тут -- английский.
Опять же фантастический кейс. Много таких примеров знаете?
А если с другой стороны посмотреть. Я сейчас нагуглил paypal, поисковик выдал один и тот же сайт на разных языках. Я зашел на английскую версию, поменял на русский. Он ее запомнил, язык сохраняется при перемещению по сайту. Дальше вернулся в поисковик, открыл еще одну ссылку и язык опять английский. WTF?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2021, 11:41
Цитата Сообщение от tarasalk Посмотреть сообщение
Я не очень понимаю как у вас так получилось.
Я невнятно выразился. Имел в виду распространение анонсов на сторонних ресурсах. Например, в Телеграм-каналах. Там размещают анонс и ссылку на полную статью на сайте. Допустим, я подписан на англоязычный канал, прочитал анонс на английском, решил прочитать статью полностью -- перехожу на сайт, а он мне на русском выдает.
Цитата Сообщение от tarasalk Посмотреть сообщение
Опять же фантастический кейс.
У меня при написании того сообщения была установка, что язык переключается строго после самостоятельного выбора пользователем.
Если устанавливать язык из заголовка Accept-Language, то всё-таки -- да, кейс фантастический.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
14.05.2021, 12:52
Цитата Сообщение от Para bellum Посмотреть сообщение
Допустим, я подписан на англоязычный канал, прочитал анонс на английском, решил прочитать статью полностью -- перехожу на сайт, а он мне на русском выдает.
Я был бы рад такому поведению) Если я выбрал на сайте русский, или он сам взял русский из браузера, то наверно именно на нем я предпочитаю читать.
Но ладно, думаю тема себя исчерпала)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2021, 12:52
Помогаю со студенческими работами здесь

Анимация переключения раскладки (Языка), отключить
Добрый день, как убрать анимацию переключения языка? дело в том, что когда жму shift+alt в правой части экрана, ровно посередке появляется...

Смена порядка переключения языка на Alt+Shift
Залил клавиатуру кофем. Схему вроде не залил. Клавиатура осталась рабочей полностью, только кнопки тяжело стали нажиматься. Разобрал,...

Вернуть функцию переключения и корректное отображение индикатора языка
OS Windows 8 (64) Здравствуйте. Помогите пожалуйста вернуть назад(как было) индикатор смены языка на панели. После...

PHP + JS buttons for update qualitity of products
Здравствуйте, уважаемые форумчане :) Есть такой вопрос: Почему кнопочки увеличения/уменьшения кол-ва товаров, меняют все значения,...

Функционал страницы PHP
Всем привет, проблема в том что не работает кнопка Изменить, ну как не работает, при нажатии перекидывает на страницу 404... Сколько не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru