@hdtor

Как лучше сделать несколько языков?

Пишу самописный движок одного сайта.

Есть задача сделать несколько языков на сайте, но не хочу плодить нам нем папки:

/ru
/en
/pl

и влаживать в каждую папку все файлы заново.

Все данные берутся из БД. Конечно уже создал массив с фразами для каждого языка. Но проблема в том что нужно сделать ссылки по типу как вверху, но не плодить кучи папок.

Как можно это сделать? Может как-то в htaccess по типу сделать, если есть get параметр ?lang=ru то редирект на ту же ссылку только подставляем папку ru или если ?lang=en то редиректим на папку en?
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ответы на вопрос 3
Lumore
@Lumore
Front-end developer
Ставите по дефолту язык русским, создаете 'lang.php', где берете get lang. И в зависимости от языка выводите слово с массива.

Давно не писал, но все же:

if(isset($_SESSION['lang'])) { include('/langs/'.$_SESSION['lang'].'.php'); }
<a href="/lang.php?lang=en">En</a>
<a href="/lang.php?lang=pl">Pl</a>

<p><?= $lang['hello'] ?>, <?= $user->username ?></p>


lang.php
if(isset($_GET['lang'])) {
$_SESSION['lang'] = $_GET['lang'];
}

P.S. код может быть не точным
Ответ написан
IvanCher
@IvanCher
Мысли шире
Пишу самописный движок одного сайта.

Не буду даже объяснять насколько нелепа затея.
Просто несколько вопросов, которые Вам лучше самому себе задать и ответить:
  • С какими цмс и фреймворками Вы уже работали и насколько глубоко их знаете ?
  • С каким кол-вом проектов в целом уже сталкивались, какие сложности возникали ?
  • На какой тип проектов рассчитана Ваша cms ?
  • Какие готовые решения будете брать за основу ?

Думаю, конечно, что Вы почти ни с чем не работали еще и даже не очень представляете, как спроектировать более-менее гибкую и надежную систему, ну да ладно, это Ваше уже дело.

Какой htaccess ? А если "сайт взлетит" и придется nginx поставить ? :) Ладно, шучу, не взлетит ни сайт, ни cms, так что за это не беспокойтесь :)

По сути Вашего вопроса.
У Вас должен быть слой, который отвечает за сопоставление запроса к некоторому контроллеру/действию/методу/еще чему-то. Назовем данный слой Router.
А у Router'a может быть такая логика: если после домена идёт /(ru|en|pl), то установить в сессию или куку соответсвующее значение текущего языка.
В коде, где выводите какой-либо текст, то оборачиваете этот текст в метод перевода. Например, пусть это будет статический метод Translator::trans($message). Внутри статического метода берёте из сессии/куки текущий язык и смотрите есть ли данное сообщение для такого языка. Ну а дальше развивайте логику, как хотите.
Ответ написан
@mik222
Если вы пишете движок сами. Зачем вы это делаете на PHP?
На свете много приятных и удобных инструментов.
Зачем выбирать что-то ущербное.
--------
Как бы я сделал локализацию.
Я бы определил глобальный хешмап в отдельный файлик. И функцию, которая мапит вашу стандартную локализацию, на локализацию в хешмапе.
Быстро, никакого парсинга, никаких баз и прочих файлов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽