For a server you manage, install rtlcss before enabling the language. Odoo uses it to generate right-to-left CSS. On Odoo Online, start with the language and website steps; shell access is handled by the host.
1. Understand how Odoo generates RTL styles
Odoo’s Odoo 20 source-install guide says that languages with a right-to-left interface, such as Arabic or Hebrew, require the rtlcss package.
rtlcss is a Node.js command. When a user’s language direction is right to left, Odoo runs that command on the compiled CSS, using its own config file base/data/rtlcss.json, and stores the result.
You do not upload a second CSS file.
If the command is missing, Odoo keeps the original left-to-right CSS and writes this warning to the log: “You need https://rtlcss.com/ to convert css file to right to left compatiblity. Use: npm install -g rtlcss”.
Translations can still appear. The layout does not flip.
The Debian package dependencies for Odoo 20 do not include rtlcss, so installing the .deb does not do this step.
2. Install Node.js and rtlcss
Use the instructions for the operating system running Odoo. Install Node.js and npm first.
Linux
sudo npm install -g rtlcssWindows
npm install -g rtlcssMake the folder containing rtlcss.cmd available on the Path of the account and process running Odoo. The Odoo source guide gives the usual location as C:\Users\<user>\AppData\Roaming\npm\. Replace <user> with the Windows account name. Odoo looks for rtlcss.cmd specifically.
macOS
Install Node.js with Homebrew or MacPorts, then run:
npm install -g rtlcssCheck that the Odoo account can run the command
Run the version check using the operating-system account that runs Odoo. A successful check under your own account does not prove the service can find the command.
rtlcss --versionExpected: rtlcss prints its version. Fix any command-not-found or permission error before continuing.
3. Restart Odoo and rebuild assets
Restart the Odoo process after rtlcss is on its Path. For a foreground developer process, reopen the terminal after updating your user Path. For a Windows service, configure the service account’s environment or an appropriate system Path; another user’s successful command check is not sufficient.
Open the database with ?debug=assets to inspect asset loading and the RTL result. Debug mode alone is not a guarantee that an existing production bundle was invalidated.
If an old bundle remains, use the supported asset-regeneration procedure for your Odoo version and hosting, preferably in a test database first. Reload without debug mode and verify the normal user experience afterward.
4. Add the language and select it for a user
Follow the Odoo 20 language guide:
- Open My profile from the profile icon, then use the globe icon next to Language. You can also open Settings → Add Languages.
- Select the language and click Add.
- Choose the language under My profile for your own user.
- For another user, open Settings → Manage Users, select the user, then set Preferences → Language.
Expected: the user’s interface uses the selected language. Emails and printed documents can instead use the recipient or customer language and the report context; test those separately.
5. Add the language to your website
- Open Website → Configuration → Settings.
- Under General, click Install new languages. Select the language, click Add, then Close.
- Add the language in the Languages field and click Save.
- Refresh the website and check for the language selector in the header or footer.
Odoo adds the selector automatically. If a visitor’s browser language is not installed, the website uses the Default language from the same settings screen.
6. Translate pages and check a PDF
- Switch to the new language, click Edit, then Translate.
- Review the yellow text, which has no translation, and the green text, which already has one. The button next to Translated to can fill the yellow strings. You can edit either color by hand.
- Switch back to the default language before changing the page structure.
- Print a quotation or invoice in the RTL language and check the layout, header, and footer.
PDF headers and footers depend on wkhtmltopdf 0.12.6, which the Odoo source guide says to install separately.
7. Check custom styles and hosting limits
Odoo’s web client sets direction: ltr in its own SCSS so that rtlcss can convert those rules when it runs.
CSS that is part of an asset bundle, including SCSS and plain CSS from installed modules, goes through that same pass.
A custom module does not need a second file named “rtl.css” if its styles are in the bundle and rtlcss can execute.
Two things skip that pass. Styles saved on a website page, and images drawn for a left-to-right layout, are not converted by installing rtlcss. Check those in the RTL language.
Directional Odoo UI icons are handled separately: the Odoo 20 icon reference says directional icons flip when an RTL language is active, and points to rtl_icons.scss for the set.
On Odoo Online you do not get a shell, so you cannot run npm install there. Use the language and website steps above. If words translate but layout remains left to right, check the selected language, stale assets, custom styles, and theme behavior. Ask the host to inspect asset-generation logs if the standard interface is affected; missing rtlcss is one possible cause.
8. Complete the RTL readiness checklist
Check each item before announcing the language to your users.
rtlcss --versionworks as the operating-system user that runs the Odoo service- On Windows, the Odoo process or service account can find
rtlcss.cmd, and that process was restarted after the Path change - RTL assets load correctly in normal mode after any required regeneration; debug mode was used only to investigate problems
- The server log does not contain the “You need https://rtlcss.com/” warning
- The language was added from Settings or from the globe icon on My profile, then selected for a real user
- The website language was installed, added in the Languages field, and saved; the header or footer selector shows it
- Yellow website text was translated, and one PDF was printed in the RTL language
These steps target Odoo 20. Menu labels can differ in older versions. The warning message above preserves the text from Odoo’s asset log.
9. Frequently asked questions
Do I install a CSS file or an extra Odoo module?
Neither. You install the rtlcss program with npm. Odoo calls it while building assets and saves the converted CSS. There is no RTL module to install for this, and Community and Enterprise use the same mechanism.
The language is translated, but the page is still left to right.
Missing rtlcss is one possible cause. Check the active language, the asset logs, and rtlcss availability for the Odoo process account. Then investigate stale bundles, custom styles, and theme overrides. Use the supported regeneration procedure if needed and verify the result without debug mode.
Can one website serve both directions?
Yes. Direction follows the language the visitor selects. After you add the language to the website and save, Odoo shows the selector in the header and footer. English stays left to right; Arabic is right to left on the same site.
10. Related reading and next steps
Tell us what you want to achieve. Email OdooMatrix or chat on WhatsApp (opens a new tab).