Skip to main content

RTL Layout Support

Better Messages automatically mirrors its entire interface for right-to-left languages — Arabic, Hebrew, Persian (Farsi), Urdu, and any other language WordPress identifies as RTL. There's no separate RTL theme, no admin toggle, and no per-user setting — the messenger detects the site language direction and adapts everything: message bubbles, conversation list, navigation, input field, toolbars, attachments, and call UI.

What it adds#

  • Automatic detection of WordPress site language direction (no manual configuration)
  • Full interface mirroring — message bubbles align right, avatars on the right, controls on the left
  • Works with all 30+ shipped translations including ar, he, fa, fa_IR, ar_DZ, ar_MA, ur, ar_SY, ar_LB
  • Same RTL behavior in DMs, group chats, chat rooms, mini-chats, and the mobile app
  • Compatible with all integrations — BuddyPress, BuddyBoss, PeepSo, UM, etc. all render RTL correctly
  • No extra plugin or addon required

How it works#

WordPress sets is_rtl() to true when the active locale is one of its known RTL languages (or when a translation file declares RTL). Better Messages reads this flag on every render and:

UI elementRTL behavior
Message bubblesOwn messages on the left, others' on the right (mirrored)
Conversation listAvatar on the right, name + last message reading right-to-left
Message inputCursor starts on the right, text flows right-to-left
Toolbar (emoji, attachment, send)Mirrored — send button on the left
Conversation headerTitle and back arrow mirrored
Mini-chat popupsOpen from the bottom-left instead of bottom-right
Call UIControls mirrored, participant grid order reversed
Notification badgesPosition adapted to RTL flow

Mixed content (an Arabic message that contains an English URL or code block) is handled correctly — bidirectional Unicode rules apply within each message, so the URL stays left-to-right inside the RTL bubble.

Supported RTL languages#

The plugin ships with translations and tested RTL support for:

LanguageWordPress locale codes
Arabic (multiple dialects)ar, ar_DZ, ar_MA, ar_SY, ar_LB, ar_EG, ar_SA
Hebrewhe_IL
Persian / Farsifa_IR, fa_AF
Urduur

Any RTL language not in this list is still supported visually — the layout mirrors based on is_rtl(). You just may need to provide your own .po translation file if the strings aren't bundled.

How to enable#

RTL activates automatically when the WordPress site language is set to an RTL language.

Set the site language at WP Admin → Settings → General → Site Language.

For per-user multilingual sites (where some users prefer Arabic and others English), pair this with a translation plugin like TranslatePress or WPML — RTL direction follows the user's chosen language automatically.

Frequently asked questions#

Does RTL break any feature?#

No. Every feature — voice/video calls, attachments, emoji picker, AI bots, mini-chats — is RTL-aware. If you spot a UI element that doesn't mirror, that's a bug — report it on the support forum.

How does RTL interact with the mobile app?#

The mobile app respects the device's language direction. If the user's iOS/Android system is set to Arabic or Hebrew, the entire app mirrors. The web app respects WordPress site language; they're independent.

Can a single user override RTL to use LTR layout?#

No per-user override exists. Direction is driven by site (or device on mobile) language. To allow LTR within an Arabic site, use a multilingual plugin and let users switch language.

What about CSS customizations — will they break RTL?#

The plugin uses logical CSS properties (margin-inline-start instead of margin-left, etc.) wherever direction matters. Custom CSS that uses physical properties (margin-left) will work in LTR but may need mirroring for RTL.

Is the AI chat bot's response in RTL too?#

Yes — the AI's response is just text. If the conversation is in Arabic, the AI replies in Arabic (using the configured AI provider's language detection), and the bubble renders right-to-left.

See also#