Skip to content

Commit

Permalink
Add current_locale variable in LocaleSwitcherBlockService (#556)
Browse files Browse the repository at this point in the history
* Add current_locale variable in LocaleSwitcherBlockService
  • Loading branch information
ggabrovski committed Oct 11, 2021
1 parent c0ab559 commit 94e0753
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 10 deletions.
14 changes: 14 additions & 0 deletions src/Block/LocaleSwitcherBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,27 @@

use Sonata\BlockBundle\Block\BlockContextInterface;
use Sonata\BlockBundle\Block\Service\AbstractBlockService;
use Sonata\TranslationBundle\Provider\LocaleProviderInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Twig\Environment;

/**
* @author Nicolas Bastien <nbastien.pro@gmail.com>
*/
final class LocaleSwitcherBlockService extends AbstractBlockService
{
/**
* @var LocaleProviderInterface
*/
private $localeProvider;

public function __construct(Environment $twig, LocaleProviderInterface $localeProvider)
{
parent::__construct($twig);
$this->localeProvider = $localeProvider;
}

public function configureSettings(OptionsResolver $resolver): void
{
$resolver->setDefaults(
Expand All @@ -32,6 +45,7 @@ public function configureSettings(OptionsResolver $resolver): void
'template' => '@SonataTranslation/Block/block_locale_switcher.html.twig',
'locale_switcher_route' => null,
'locale_switcher_route_parameters' => [],
'current_locale' => $this->localeProvider->get(),
]
);
}
Expand Down
5 changes: 4 additions & 1 deletion src/Resources/config/block.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,8 @@

->set('sonata_translation.block.locale_switcher', LocaleSwitcherBlockService::class)
->tag('sonata.block')
->args([new ReferenceConfigurator('twig')]);
->args([
new ReferenceConfigurator('twig'),
new ReferenceConfigurator('sonata_translation.admin.provider.request_locale_provider'),
]);
};
9 changes: 1 addition & 8 deletions src/Resources/views/Block/block_locale_switcher.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,10 @@

{% if admin.class is translatable %}
{% set object = block_context.settings.object %}
{% set currentLocale = object.locale|default(null) %}
{% set object_id = object ? admin.id(object) : null %}
{% set locale_switcher_route = block_context.settings.locale_switcher_route|default(object_id is not null ? 'edit' : 'create') %}
{% set locale_switcher_route_parameters = block_context.settings.locale_switcher_route_parameters %}

{% for extension in admin.extensions %}
{% if extension.translatableLocale is defined %}
{% set currentLocale = extension.translatableLocale(admin) %}
{% endif %}
{% endfor %}

<div class="locale_switcher">
{% apply spaceless %}
{% for locale in sonata_translation_locales %}
Expand All @@ -21,7 +14,7 @@
{'id': object_id, 'tl': locale}|merge(locale_switcher_route_parameters)
) }}"
accesskey=""
{% if currentLocale == locale %}class="active"{% endif %}
{% if block_context.settings.current_locale == locale %}class="active"{% endif %}
title="{{ 'admin.locale_switcher.tooltip' |trans([], 'SonataTranslationBundle') }}">
{{ locale|localeName(app.request.locale) }}
</a>
Expand Down
6 changes: 5 additions & 1 deletion tests/Block/LocaleSwitcherBlockServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@

use Sonata\BlockBundle\Test\BlockServiceTestCase;
use Sonata\TranslationBundle\Block\LocaleSwitcherBlockService;
use Sonata\TranslationBundle\Provider\LocaleProviderInterface;
use Twig\Environment;

final class LocaleSwitcherBlockServiceTest extends BlockServiceTestCase
{
public function testDefaultSettings(): void
{
$environment = $this->createStub(Environment::class);
$localeProvider = $this->createStub(LocaleProviderInterface::class);
$localeProvider->method('get')->willReturn('en');

$localeSwitcherBlock = new LocaleSwitcherBlockService($environment);
$localeSwitcherBlock = new LocaleSwitcherBlockService($environment, $localeProvider);

$blockContext = $this->getBlockContext($localeSwitcherBlock);

Expand All @@ -33,6 +36,7 @@ public function testDefaultSettings(): void
'template' => '@SonataTranslation/Block/block_locale_switcher.html.twig',
'locale_switcher_route' => null,
'locale_switcher_route_parameters' => [],
'current_locale' => 'en',
], $blockContext);
}
}

0 comments on commit 94e0753

Please sign in to comment.