gtomilin
@gtomilin
JavaScript HTML CSS

Многоязычный сайт php twig — как лучше реализовать?

Добрый вечер!
Делаю многоязычный сайт.
Основа backend реализован на php + шаблонизатор twig

Как лучше реализовать мультиязычность?
Вариант использовать i18n twig extension - коллега говорит что gettext на основе которого не очень хороший вариант по ряду неких причин)
Вариант использовать подключаемые словари в зависимости от языка - и преобразовывать их в twig массив
Может ещё какие варианты кто подскажет?)
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Локализация (хорошая) всегда держится на кастомных наборах переводов, обычно это или таблица в бд, либо файлик с массивом, который правят по ходу наполнения сайта. Как конкретно реализовывать зависит от многих параметров, в том числе и от наличия готовых решений для используемого фреймворка. Ну или свое что-то пишут. Но смысл всегда примерно один - итоговый массив с ключами типа
$translate = ['welcome'=>['ru'=>"Приветики",'jp'=>"Komichiwa"]...];
Как достать значения по ключу думаю не надо разжевывать?..
Ответ написан
@grek_cheburek
Программист самоучка
Я всегда держу в файлах ini ключи для слов.
У меня есть папка lang_pack
В ней имеются подкаталоги de,ru,en,uk и тд.
В каждой из этих папок имеются файлы .ini в которых есть ключи для слов
title=Мой сайт
link_index=Главная страница
И так далее.
Кстати, я делаю для каждого модуля отдельный такой файл.
А на самом сайте использую что-то подобное.

<?php
echo "<a href='/'>".$main->lang('link_index','head_menu.ini')."</a>";
?>
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Если говорить про Twig, а не просто вспоминать былые денёчки, как в пятом классе на коленке переводил мамкин сайт для бижутерии, то для переводов в нем используется фильтр.

То есть берется готовый или делается кастомный фильтр. Который и занимается поиском соответствия для переводимой фразы. Которая выводится, как {{ message|trans }}

Вот пример реализации такого фильтра в Симфони

Если же говорить про переводы вообще, то хранить как угодно, но при деплое писать в массив в пхп файл. Который лежит себе спокойно в опкеше, и подключается тем самым фильтром.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы