Можно ли установить домен перевода по умолчанию на указанном пути?

Мой сайт состоит из 2 частей, публичная часть с разными локалями работает, админка переведена только на 1 язык.

Проблема в том, что файл lang для общедоступной стороны такой же, как и для административной. Я хотел бы использовать другой файл для всех административных маршрутов

Я пытался изменить домен с помощью {% trans_default_domain "admin" %}, но мне нужно поместить эту строку во все мои файлы ветки. Я не нашел решения изменить домен в контроллере или где-либо еще.

Я также пытался использовать определенную локаль для администратора, но переводы не найдены, а «админ» явно не является языком.

Спасибо за вашу помощь :)

Вы должны иметь возможность установить локаль с помощью специальный параметр_locale, но это будет сильно зависеть от вашей конфигурации маршрутизации, структуры классов и т. д.

msg 11.07.2019 19:13

Спасибо за ваш быстрый ответ, административная часть не имеет локали в URL-адресе. Буду искать в этом направлении и выложу здесь то, что нашел

Raphaël 12.07.2019 09:16

Я имел в виду, что вы должен можете установить _locale в routing.yaml, установив defaults._locale на основе префикса пути, но рад, что у вас это работает.

msg 12.07.2019 16:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
509
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел половинчатое решение, заменив класс Translator, этот пост мне помогает Замена службы переводчика в Symfony 3

Это решение меняет домен перевода для всех методов в контроллере и вызываемых в нем шаблонов (даже расширенный шаблон и включения).

Мой файл переводов 'admin.fr.yml'

Я добавил в папку Service мой новый класс Translator

<?php


namespace App\Service;


use Symfony\Component\Translation\TranslatorBagInterface;
use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Translation\Translator as BaseTranslator;

class Translator implements LegacyTranslatorInterface, TranslatorInterface, TranslatorBagInterface
{
    private $defaultDomain = 'messages';

    private $translator;

    public function __construct(BaseTranslator $translator)
    {
        $this->translator = $translator;
    }

    public function getDefaultDomain(): string
    {
        return $this->defaultDomain;
    }

    public function setDefaultDomain(string $defaultDomain): Translator
    {
        $this->defaultDomain = $defaultDomain;
        return $this;
    }

    public function trans($id, array $parameters = [], $domain = null, $locale = null)
    {
        if (null === $domain) {
            $domain = $this->defaultDomain;
        }

        return $this->translator->trans($id, $parameters, $domain, $locale);
    }

    public function getCatalogue($locale = null)
    {
        return $this->translator->getCatalogue($locale);
    }

    public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null)
    {
        return $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
    }

    public function setLocale($locale)
    {
        return $this->translator->setLocale($locale);
    }

    public function getLocale()
    {
        return $this->translator->getLocale();
    }
}

Потом в services.yaml

App\Service\Translator:
    decorates: translator

Затем в моей папке контроллера администратора я создал абстрактный класс BaseAdminController.

<?php


namespace App\Controller\Admin;


use App\Service\Translator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Contracts\Translation\TranslatorInterface;

abstract class BaseAdminController extends AbstractController
{

    /**
     * @var Translator
     */
    protected $translator;

    public function __construct(TranslatorInterface $translator)
    {
        $this->translator = $translator;
        $this->translator->setDefaultDomain('admin');

    }

}

Теперь в каждом контроллере, где я хочу переводы администратора, мне просто нужно заменить «расширяет абстрактный контроллер» на «расширяет BaseAdminController».

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

public function __construct(Translator $translator, EntityManagerInterface $manager)
{
    $this->manager = $manager;
    parent::__construct($translator);
}

Другие вопросы по теме