Мультиязычность API
Добавление мультиязычности к API. Перевод сообщений валидации и доменных ошибок. Автораспознавание заголовка Accept-Language.
- 00:00:40 - Подходы к мультиязычности
- 00:02:52 - Тест на перевод ошибок валидации
- 00:03:58 - Переводы для валидатора
- 00:04:57 - Компонент Translation
- 00:06:56 - Подключение переводчика к валидатору
- 00:12:08 - Автоматическое переключение языков
- 00:12:47 - Посредник TranslatorLocale
- 00:17:25 - Парсинг Accept-Language
- 00:20:54 - Тест TranslatorLocaleTest
- 00:23:54 - Рефакторинг с разделением ответственностей
- 00:25:31 - Посредник LocaleNegotiation
- 00:29:10 - Плюсы разделения ответственностей по разным классам
- 00:30:58 - Использование готовых посредников
- 00:34:22 - Перевод доменных исключений
- 00:40:50 - Публикация посредников на примере DomainExeptionHandler
Скрытый контент
Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram

Да, очень солидно и интересно, спасибо.
здесь, как понимаю, настройка языка и перевод происходит автоматически (от locale), а что если пользователь из России захочет английский текст - напр. ошибки в английском тексте?
Язык выбирается автоматически по HTTP-заголовку
Accept-Language
при запросе API. Так что может либо отправить запрос без заголовка, либо со значениемen
спасибо
Дмитрий, спасибо за как всегда очень содержательный и интересный урок!
Хотел узнать, будет ли затронута тема использования GraphQL для ReactJS клиента на базе текущего Slim API? Если в данном проекте это оверхед, то может Ваши критерии когда это актуально, преимущества/недостатки (н-р. легче поддерживать версионирование API, снижение количества запросов к API и др.), рекомендации использовать с Apollo-server или без и пр.
Спасибо.
Да, поговорим про него.
Супер, спасибо!
Дмитрий, спасибо за такое подробное объяснение!
При последней проверке кода psalm на файле ValidationExceptionHandler начал ругаться на отсутствие интерфейса Stringable, который указан в Symfony\Component\Validator\ConstraintViolationInterface в качестве возвращаемого типа данных для метода getMessage. Насколько я понял, этот класс появится/появился в PHP8, а у нас 7.4. Так что пришлось дополнительно поставить пакет symfony/polyfill-php80
Возможно, я забегаю вперед и этот момент еще будет разбираться в будущем... у меня вопрос по локализации самого сайта: меню, статьи и другой контент страниц. Каким образом лучше это организовать в базе данных? Разные таблицы? Разделение на разные записи в одной таблице с различием по полю locale?
Локализовать сайт не будем.
Для фронтенда можно установить
react-localize-redux
, добавить переводы и вызывать:А для бэкенда можно переводимый контент вынести в отдельную коллекцию:
Или войти через: