Make WordPress Core

Opened 5 years ago

Last modified 3 weeks ago

#47547 accepted defect (bug)

switch_to_locale( 'en_US' ) is unreliable

Reported by: johnbillion's profile johnbillion Owned by: johnbillion's profile johnbillion
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: I18N Keywords: needs-patch reporter-feedback close
Focuses: administration Cc:

Description (last modified by garrett-eclipse)

Given a site that uses en_US as its language, a user with their user language set to something else, and that user logged into the admin dashboard, calling switch_to_locale( 'en_US' ) appears to be unreliable.

  1. ❌The return value of determine_locale() is the user's language, not en_US.
  2. ✅Localised text without a textdomain (ie. text from core) is correctly displayed in en_US.
  3. ❌Localised text with a textdomain (ie. text from plugins or themes) is incorrectly displayed in the user's language. This may be related to #39210.

Given a site that itself uses a language other than en_US, calling switch_to_locale( 'en_US' ) does appear to work although I haven't tested it extensively.

Change History (7)

#1 @garrett-eclipse
5 years ago

  • Description modified (diff)

I may be off-base but I believe some findings here can shed some light;
"switch_to_locale() only does something if the locale passed to it is different than the value of get_locale() outside of the admin. Inside the admin, it only switches if it's different than the locale of the current user."

#2 @garrett-eclipse
5 years ago

  • Description modified (diff)

Sorry about the emoji's disappearing, was fixed in meta#3838 so added them back.

#3 @swissspidy
8 months ago

  • Keywords reporter-feedback added

Is this still an issue?

#4 @johnbillion
8 months ago

I believe it is but I'll do some testing to confirm

#5 @swissspidy
3 weeks ago

  • Keywords close added

#6 @johnbillion
3 weeks ago

  • Owner set to johnbillion
  • Status changed from new to accepted

#7 @swissspidy
3 weeks ago

FWIW in my Preferred Languages plugin I have some e2e tests for the dashboard where I switch to en_US and strings are then in en_US as expected and determine_locale() returns en_US too. But might just be because of the plugin :)

Note: See TracTickets for help on using tickets.