Make WordPress Core

Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#19924 closed defect (bug) (fixed)

An RTL WPLANG results in RTL even if messages are not loaded

Reported by: nacin Owned by: nacin
Milestone: 3.4 Priority: normal
Severity: normal Version:
Component: I18N Keywords: has-patch
Focuses: Cc:


define( 'WPLANG', 'he_IL' ); in wp-config.php results in get_locale() returning 'he_IL', and he_IL.mo will attempt to be loaded, as will he_IL.php.

he_IL.php previously set $text_direction = 'rtl'; It is a reasonable assumption that if he_IL.php is installed in WP_LANG_DIR, then so is he_IL.mo.

The new RTL detection code introduced in #19600 acts without the need for he_IL.php.

While I would consider it an incorrect configuration to have WPLANG = he_IL, I imagine there are some installations out there with an RTL WPLANG but no language files to trigger it. Normally, this would result in an English interface, but now, this would result in an English interface in RTL mode.

Maybe this is more edge than I am anticipating, but perhaps an is_readable() check of the $locale.mo file would make sense before trusting WP_Locale::is_locale_rtl().

We could give load_default_textdomain() a return value of its first load_textdomain() call, and then decide to not even load the $locale.php file or trigger an RTL switch.

Attachments (3)

19924.diff (3.0 KB) - added by nacin 4 years ago.
19924.patch (467 bytes) - added by SergeyBiryukov 4 years ago.
19924.2.diff (1.9 KB) - added by nacin 4 years ago.

Download all attachments as: .zip

Change History (10)

@nacin4 years ago

comment:1 @nacin4 years ago

  • Keywords has-patch added

Took a crack at my initial line of thought.

comment:2 @nacin4 years ago

  • Owner set to nacin
  • Resolution set to fixed
  • Status changed from new to closed

In [19797]:

Only set text_direction based on a locale being RTL if we successfully loaded a locale.mo file. Otherwise we may be in RTL land based on a WPLANG constant but nothing else. fixes #19924.

@SergeyBiryukov4 years ago

comment:3 @SergeyBiryukov4 years ago

  • Resolution fixed deleted
  • Status changed from closed to reopened

Part of [19797] has broken $locale.php inclusion on Windows. 19924.patch fixes that.

validate_file() for S:\home\wordpress\trunk/wp-content/languages/ru_RU.php returns 2.

comment:4 @nacin4 years ago

Hm. Okay. Guess it wasn't a typo after all.

comment:5 @nacin4 years ago

  • Resolution set to fixed
  • Status changed from reopened to closed

In [19824]:

WP_LANG_DIR is trusted, just need to check $locale. props SergeyBiryukov, fixes #19924.

@nacin4 years ago

comment:6 @nacin4 years ago

19924.2.diff is a more straightforward solution to these various problems.

comment:7 @nacin4 years ago

In [19836]:

Do RTL detection based on a translated string, rather than a hardcoded list. Makes things a bit cleaner. fixes #19924, fixes #19600.

Note: See TracTickets for help on using tickets.