예제 #1
0
 /**
  * @param Request $request
  * @param string $code
  *
  * @return Response
  */
 public function switchAction(Request $request, $code)
 {
     if (!in_array($code, $this->localeProvider->getAvailableLocalesCodes())) {
         throw new HttpException(Response::HTTP_NOT_ACCEPTABLE, sprintf('The locale code "%s" is invalid.', $code));
     }
     $this->localeChangeHandler->handle($code);
     return new RedirectResponse($request->headers->get('referer', $request->getBaseUrl()));
 }
 /**
  * {@inheritdoc}
  */
 public function getLocaleCode()
 {
     $availableLocalesCodes = $this->localeProvider->getAvailableLocalesCodes();
     $localeCode = $this->localeProvider->getDefaultLocaleCode();
     if (!in_array($localeCode, $availableLocalesCodes, true)) {
         throw LocaleNotFoundException::notAvailable($localeCode, $availableLocalesCodes);
     }
     return $localeCode;
 }
 /**
  * {@inheritdoc}
  */
 public function getLocaleCode()
 {
     $availableLocalesCodes = $this->localeProvider->getAvailableLocalesCodes();
     try {
         $localeCode = $this->localeStorage->get($this->channelContext->getChannel());
     } catch (ChannelNotFoundException $exception) {
         throw new LocaleNotFoundException(null, $exception);
     }
     if (!in_array($localeCode, $availableLocalesCodes, true)) {
         throw LocaleNotFoundException::notAvailable($localeCode, $availableLocalesCodes);
     }
     return $localeCode;
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $locales = $this->localeProvider->getAvailableLocalesCodes();
     $localesWithRequirement = [];
     foreach ($locales as $locale) {
         $localesWithRequirement[$locale] = false;
         if ($this->localeProvider->getDefaultLocaleCode() === $locale) {
             $localesWithRequirement[$locale] = true;
             $localesWithRequirement = array_reverse($localesWithRequirement, true);
         }
     }
     $builder->addEventSubscriber(new ResourceTranslationsSubscriber($localesWithRequirement));
 }
예제 #5
0
 /**
  * Builds frontend locale menu.
  *
  * @return ItemInterface
  */
 public function createMenu()
 {
     $locales = $this->localeProvider->getAvailableLocalesCodes();
     $menu = $this->factory->createItem('root', ['childrenAttributes' => ['class' => 'nav nav-pills']]);
     if (1 === count($locales)) {
         $menu->setDisplay(false);
         return $menu;
     }
     foreach ($locales as $locale) {
         $menu->addChild($locale, ['route' => 'sylius_locale_change', 'routeParameters' => ['locale' => $locale]])->setLabel(Intl::getLocaleBundle()->getLocaleName($locale));
     }
     return $menu;
 }
 function it_builds_form(LocaleProviderInterface $localeProvider, FormBuilderInterface $builder)
 {
     $localeProvider->getAvailableLocalesCodes()->willReturn(['pl_PL', 'en_EN', 'en_GB']);
     $localeProvider->getDefaultLocaleCode()->willReturn('en_EN');
     $builder->addEventSubscriber(Argument::type(ResourceTranslationsSubscriber::class))->shouldBeCalled()->willReturn($builder);
     $this->buildForm($builder, ['type' => 'text']);
 }
 function it_throws_an_exception_if_locale_taken_from_storage_is_not_available(ChannelContextInterface $channelContext, LocaleStorageInterface $localeStorage, LocaleProviderInterface $localeProvider, ChannelInterface $channel)
 {
     $channelContext->getChannel()->willReturn($channel);
     $localeStorage->get($channel)->willReturn('pl_PL');
     $localeProvider->getAvailableLocalesCodes()->willReturn(['en_US', 'en_UK']);
     $this->shouldThrow(LocaleNotFoundException::class)->during('getLocaleCode');
 }
 function it_returns_master_request_locale_code(RequestStack $requestStack, LocaleProviderInterface $localeProvider, Request $request)
 {
     $requestStack->getMasterRequest()->willReturn($request);
     $request->attributes = new ParameterBag(['_locale' => 'pl_PL']);
     $localeProvider->getAvailableLocalesCodes()->willReturn(['pl_PL', 'de_DE']);
     $this->getLocaleCode()->shouldReturn('pl_PL');
 }
 /**
  * {@inheritdoc}
  */
 public function getLocaleCode()
 {
     $request = $this->requestStack->getMasterRequest();
     if (null === $request) {
         throw new LocaleNotFoundException('No master request available.');
     }
     $localeCode = $request->attributes->get('_locale');
     if (null === $localeCode) {
         throw new LocaleNotFoundException('No locale attribute is set on the master request.');
     }
     $availableLocalesCodes = $this->localeProvider->getAvailableLocalesCodes();
     if (!in_array($localeCode, $availableLocalesCodes, true)) {
         throw LocaleNotFoundException::notAvailable($localeCode, $availableLocalesCodes);
     }
     return $localeCode;
 }
 function it_throws_a_locale_not_found_exception_if_default_locale_is_not_available(LocaleProviderInterface $localeProvider)
 {
     $localeProvider->getAvailableLocalesCodes()->willReturn(['es_ES', 'en_US']);
     $localeProvider->getDefaultLocaleCode()->willReturn('pl_PL');
     $this->shouldThrow(LocaleNotFoundException::class)->during('getLocaleCode');
 }
예제 #11
0
 /**
  * @return Response
  */
 public function renderSelectorAction()
 {
     return $this->templatingEngine->renderResponse('SyliusShopBundle:Locale:selector.html.twig', ['activeLocaleCode' => $this->localeContext->getLocaleCode(), 'availableLocalesCodes' => $this->localeProvider->getAvailableLocalesCodes()]);
 }