Size: a a a

2020 February 07

DS

Dmitriy S in Yii Framework 3
Откуда? Она же должна быть сначала проинициализирована какой-то строкой где-то.
источник

АН

Александр Некрасов in Yii Framework 3
ну так в мидлваре определяет по реквесту, если не определил, берет дефолтную локаль
источник

DS

Dmitriy S in Yii Framework 3
Под локалью я имею в виду объект Locale. Я апросто еще не успел просмотреть все пакеты, но он же должен использоваться и в ай18эн и в форматтере.
источник

АН

Александр Некрасов in Yii Framework 3
ну там все строкой передается
источник

АН

Александр Некрасов in Yii Framework 3
не передается сам объект
источник

АН

Александр Некрасов in Yii Framework 3
это в Translator: $locale = new Locale($localeString);
источник

DS

Dmitriy S in Yii Framework 3
Ага, то есть в риквесте есть атрибут locale и в него передается эта строка и каждый потом сам себе инициализирует свой объект Locale. Так понятно
источник

АН

Александр Некрасов in Yii Framework 3
да
источник

АН

Александр Некрасов in Yii Framework 3
пример

final class Locale implements MiddlewareInterface
{
   public const ATTRIBUTE_NAME = 'locale';

   private Parameters $parameters;
   private I18n\TranslatorInterface $translator;

   public function __construct(Parameters $params, I18n\TranslatorInterface $translator)
   {
       $this->parameters = $params;
       $this->translator = $translator;
   }

   public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
   {
       $availableLocales = $this->parameters->get('locale.available', []);

       foreach ($this->fetchLocales($request) as $localeString) {
           if (in_array($localeString, $availableLocales, true)) {
               $locale = new I18n\Locale($localeString);
               break;
           }
       }

       $locale = $locale ?? new I18n\Locale((string)$this->parameters->get('locale.fallback'));
       $this->translator->setLocale($locale->asString());

       return $handler->handle($request->withAttribute(self::ATTRIBUTE_NAME, $locale));
   }

   /**
    * @param ServerRequestInterface $request
    * @return \Generator
    */
   public function fetchLocales(ServerRequestInterface $request): \Generator
   {
       $header = $request->getHeaderLine('Accept-Language');
       foreach (explode(',', $header) as $value) {
           if (strpos($value, ';') !== false) {
               yield substr($value, 0, strpos($value, ';'));
           }
           yield $value;
       }
   }
}
источник

АН

Александр Некрасов in Yii Framework 3
у себя такой мидлваре сделал
источник

АН

Александр Некрасов in Yii Framework 3
не очень четабельно в телеге (
источник

АН

Александр Некрасов in Yii Framework 3
Dmitriy S
Ага, то есть в риквесте есть атрибут locale и в него передается эта строка и каждый потом сам себе инициализирует свой объект Locale. Так понятно
передается объект локале, а где нужно стринг то уже Locale:asString() или же Locale::language()
источник

А

Алексей R in Yii Framework 3
простынями кода можно делиться через Pastebin
источник

DS

Dmitriy S in Yii Framework 3
Александр Некрасов
не очень четабельно в телеге (
Я умею копировать в phpstorm
источник

DS

Dmitriy S in Yii Framework 3
Александр Некрасов
у себя такой мидлваре сделал
А можно вот этот массив $this->parameters->get('locale.available', []); для примера.
источник

АН

Александр Некрасов in Yii Framework 3
['ru', 'en']
источник

АН

Александр Некрасов in Yii Framework 3
Fallback: ru
источник

DS

Dmitriy S in Yii Framework 3
Это понятно, но там жн вроде еще куча всего инициализируется типа валюты и т.д.
источник

АН

Александр Некрасов in Yii Framework 3
Ну это не обезательно же всегда передавать
источник

АН

Александр Некрасов in Yii Framework 3
Этой инфы нету при реквесте
источник