Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.245.152] |
|
Сообщ.
#1
,
|
|
|
Приветствую!
Возникла необходимость склепать несколько сайтов небольшого размера. Начал читать доки по Laravel 5. Идеология вроде достаточна понятна. Решил начать с того, что хочу смастерить в самом начале шаблон мультиязычного сайта. Нашел статью по этому вопросу. Прочитал - тоже все понятно. Но возникли вопросы по статье: 1) Автор статьи решил использовать middleware-решение. В комментах ему посоветовали другой вариант - просто использовать локаль в маршрутах. А автор статьи, и комментирующий обозвали друг друга огородостроителями Кто из них прав? Если оба неправы - то как правильно? 2) Автор статьи в своем решении в некоторых местах парсит URL, потом его склеивает. А нельзя ли это решение упростить? А именно, прописывать в маршрутах URL без языка, до обработки брать текущую локаль из куков, и вставлять язык из куков или по умолчанию и отправлять на последующую обработку? Мне кажется, если получится избавиться от парсинга/склейки URL, то будет кода по-меньше. Ваше мнение? И вопрос не по статье Как посоветуете организовать хранение в БД мультиязычных материалов? Например различных новостей, событий, галлерей ... & etc. |
Сообщ.
#2
,
|
|
|
Ну лично я и то и другое использовал. Т.е. в роутах просто прописан нужный префикс (в домене, типа ru.site.com или en.site.com), потом они в миддлваре уже маппятся на сущности в БД и регаются в DI:
https://github.com/railt/railt.org/blob/mas...ver.php#L60-L67 А в контроллере уже из DI выдираются: https://github.com/railt/railt.org/blob/mas...troller.php#L39 С другой стороны всё зависит от того что тебе надо в итоге получить Цитата JoeUser @ Как посоветуете организовать хранение в БД мультиязычных материалов? Например различных новостей, событий, галлерей ... & etc. Я бы через релейшн делал |
Сообщ.
#3
,
|
|
|
Цитата Serafim @ Я бы через релейшн делал Тут вот какая штука ... Возможно биг-босс через пару месяцев скажет "немецкий" убирай, добавляй "польский" и "китайксий упрощенный". Я пока мыслю категорями Друпала - там это искаропки. А вот тут что мутить? Городить подобное ССК? |
Сообщ.
#4
,
|
|
|
А ещё можно воспользоваться данными ссылками для получения менее субъективной инфы:
1) Discord: https://discord.gg/c8gJfed 2) Telegram: https://t.me/laravelrus Добавлено Цитата JoeUser @ Тут вот какая штука ... Возможно биг-босс через пару месяцев скажет "немецкий" убирай, добавляй "польский" и "китайксий упрощенный" И? Что сложного удалить просто язык из таблицы? Или просто пометить его как deleted =) Все связанные страницы тоже исчезнут. Так же и добавить новый язык можно запросто. |
Сообщ.
#5
,
|
|
|
Цитата Serafim @ Ну лично я и то и другое использовал. Ну оч бегло глянул твой код ... упоминания о куках не заметил. А мне нужно, чтобы повторный визит (при наличии куков у юзера) сразу же выставлял последний выбранный язык. Как сделать, вернее где? Добавлено Цитата Serafim @ И? Что сложного удалить просто язык из таблицы? Или просто пометить его как deleted =) Все связанные страницы тоже исчезнут. Так же и добавить новый язык можно запросто. Каки таблицы создавать-связывать? А при команде "удаляй" - правильно их чистить? |
Сообщ.
#6
,
|
|
|
А ещё можно что-то вроде 3х таблиц. Т.е. сама страница одна, а i18n содержимое ссылается как на язык, так и на страницу с инфой о видимости, адресе и проч (т.е. общей инфой).
languages contents pages id <--------- language_id slug title title is_visibile slug content ... is_visible page_id ----------> id Добавлено Цитата JoeUser @ Ну оч бегло глянул твой код ... упоминания о куках не заметил. А мне нужно, чтобы повторный визит (при наличии куков у юзера) сразу же выставлял последний выбранный язык. Как сделать, вернее где? Ну выставляй Просто default language в данном случае будет браться из кук, а не из локали. Добавлено Цитата JoeUser @ Каки таблицы создавать-связывать? А при команде "удаляй" - правильно их чистить? На уровне миграций - это foreign key |
Сообщ.
#7
,
|
|
|
Serafim, благодарю! Буду переваривать, когда малеха хмель пройдет
Добавлено Цитата Serafim @ Просто default language в данном случае будет браться из кук, а не из локали. А еще вдогоночку ... брать в boot()? Эта хрень или где в самом начале можно куки считать и инициализировать текущий язык? |
Сообщ.
#8
,
|
|
|
Цитата JoeUser @ А еще вдогоночку ... брать в boot() Нет, в провайдерах нельзя. Не везде есть HTTP окружение (есть же ещё CLI) и тем более кукисы (ещё есть stateles API без сессий и кук), а провайдеры - это глобальная фиговина. Добавлено Цитата JoeUser @ Эта хрень или где в самом начале можно куки считать и инициализировать текущий язык? Т.е. либо в провайдере выдёргивать внутри коллбека, вроде: public function boot(): void { $this->app->singleton(Language::class, function() { $request = $this->app->make(Request::class); // /// return $language; }); } $this->app->make(Language::class); // Если из под web окружения, то всё ок, если нет, то инициализация зафейлится, т.е. в коллбеке будет пустой объект Request Тогда объект будет инициализироваться только тогда, когда ты будешь пытаться выдрать Language, а там (в том месте, где будешь пытаться получить эту зависимость) вполне могут быть и кукисы и http окружение. Либо в миддлваре. |
Сообщ.
#9
,
|
|
|
Ясн. Пасиба! Есть фронт работ
|