Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Translator] DataCollector always shows default instead of current locale #31600

Closed
althaus opened this issue May 23, 2019 · 0 comments
Closed

Comments

@althaus
Copy link
Contributor

althaus commented May 23, 2019

Symfony version(s) affected: 4.3.0-BETA2

Description

The current BETA2 has an issue with the TranslationDataCollector in combination with the LocaleAwareListener. I'm running a page with _locale prefixed routes and all works fine, but the profiler shows an incorrect locale. It just shows my default en.

For me the LocaleAwareListener is to blame for this. It's subscribing to onKernelRequest and onKernelFinishRequest and therefore setting the locale twice.

The first time all wents fine, but on the finish part

    public function onKernelFinishRequest(FinishRequestEvent $event): void
    {
        if (null === $parentRequest = $this->requestStack->getParentRequest()) {
            $this->setLocale($event->getRequest()->getDefaultLocale());

            return;
        }

        $this->setLocale($parentRequest->getLocale(), $parentRequest->getDefaultLocale());
    }

we don't have a $parentRequest and setLocale() is called with the default value, which is then injected into the Translator and lately collected by the TranslationDataCollector.

How to reproduce

Setup a simple app with 2 locales and check the profiler.

Possible Solution

No clue what part is the broken one. Could also be the collector running too late.

Additional context

See attached screenshots. Locale shows "en" while it's using German messages. The intl part is also set correctly.

profiler_bad_locale

profiler_correct_intl

Cheers
Matthias

nicolas-grekas added a commit that referenced this issue Jun 3, 2019
… (pierredup)

This PR was merged into the 4.3 branch.

Discussion
----------

[Translator] Collect locale details earlier in the process

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #31600
| License       | MIT
| Doc PR        | N/A

The [LocaleAwareListener](https://github.com/symfony/symfony/blob/4.3/src/Symfony/Component/HttpKernel/EventListener/LocaleListener.php) class reverts the locale back to the default locale when the request has finished. But the `TranslationDataCollector` only collects the locale in `lateCollect`, which only happens when the kernel terminates. This means the locale is reverted back to the default by the time the collector runs.

The PR moves the `locale` and `fallback_locales` from `lateCollect` to `collect`, so that the information can be captured earlier, before the `LocaleAwareListener` is run.

Commits
-------

5c394ee Collect locale details earlier in the process in TranslationDataCollector
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants