100% Arabic Translation for both frappe and erpnext

Hi everyone,
I have translated the PO files for Arabic. I know the translation must be submitted on Crowdin and that it should auto-sync, but writing those lines manually (around 20k lines) would be a huge effort. I would like to know if there is any method to import the PO file into Crowdin or if it possible to create a PR with full translations?

Thank you :grin:

4 Likes

Hi,

To import a .po file into Crowdin, navigate to the ā€œUploadā€ tab within your project. Then, select the target branch and either drag and drop the file or click ā€œSelect Filesā€. Crowdin will attempt to detect whether the file is a source or translation, and you can adjust the language settings if needed. Finally, click ā€œUploadā€ to finalize the import.

Thanks,

Divyesh M.

1 Like

Hi Divyesh,

Thank you for your response. I believe the solution you provided would work if I were the owner of the project. However, I’m looking for a way to upload the .po files to the Frappe/ERPNext Crowdin projects.

Thank you for your assistance.

Best regards,
Ibrahim Aboelsoud

It would be great to add the translations. Arabic is very poor in ERPNext

For now I have the translation files available at
ERPNext Arabic Full Translation

you can place the files in there place (e.g /apps/frappe/frappe/locale/ar.po ) and compile the po files into .mo using

bench compile-po-to-mo --app frappe --locale ar

thank you for sharing, will absolutely give it a try.

Shukran for the contribution!

Is it any different from the current available translation, like the one from Crowdin?

I submitted a PR

Yes, the one available on Crowdin only cover 40-50% of the translations
While the proposed translation almost cover 100% of the translations

1 Like

Thank you for the effort, would it be possible to merge this with the current ERPNext/Frappe/HRMS translation on Crowdin? if not will this repo be maintained on regular basis?

Again, Great work @ibrahim317 !

1 Like

Thank you for the kind words! @Omar-Abdullah

regarding the Crowdin merge, I actually looked into that. Unfortunately, I couldn’t find a way to perform a bulk upload/merge; it seemed to require updating entries one by one, which wasn’t feasible given the volume.

Regarding the repository itself: Yes, the plan is to maintain it and keep it up-to-date regularly.

1 Like

I really appreciate your hard work. I wonder if @rmeyer can help us with integrating your translation into the Frappe ERPNext and HRMS modules in Crowdin.

The repository has been completely updated with the following key changes:

  1. Enhanced Compatibility: The translations now support both the .po file format (for newer versions, including v15) and the .csv format (for older versions of Frappe/ERPNext). This ensures the translations can be used across a wider range of versions.

  2. Easy Installation via Custom App: The biggest change is that the static files, which previously required manual copying by users, have been converted into an installable custom application. You can now simply install the app to apply the full Arabic translation to your Frappe and ERPNext instances!

You can find the updated repository and the new installation instructions here:

GitHub Repository: erpnext-arabic-full-translation

I hope this makes using and maintaining the Arabic translation much easier for the community :heart: .

5 Likes

Will check it out for sure! Thank you @ibrahim317

As I understood, when installing the erpnext-arabic-full-translation, the app auto replace the translations for the detected apps.

However, my question is: When updating any of ERPNext apps, the old APP translation would be fetched with it, does the erpnext-arabic-full-translation re-replaces the old translation files when migrating any of the sites? or installing/updating an ERPNext app? or is it a one-time only process, just replace when installing the erpnext-arabic-full-translation app for the first time?

Thank you in advance


You’re correct: the Arabic translations are only applied once during the initial installation. When ERPNext or other apps are updated/reinstalled, their original translation files overwrite the Arabic ones, and they aren’t automatically re-applied.

I’ve created a GitHub issue to track this: Overwritten by reinstall of apps Ā· Issue #3 Ā· ibrahim317/erpnext-arabic-full-translation Ā· GitHub

I plan to address this soon by enabling the after_app_install hook so Arabic translations are automatically re-applied whenever any app is updated or reinstalled.

For now, if you need to restore the Arabic translations after an app update, you can reinstall the arabic_translations app.

Thanks for bringing this up :heart:.


2 Likes

Salam, Ibrahim,

A 100% translation is indeed a great step forward, and I think the next step is to verify/validate the translations.

Even with the existing core translation, it’s obviously a machine translation, but unfortunately, a poor one. Especially given the context. Feels like the machine translation did not contain context at all.

What would it take to organize all strings along with their contexts, then provide them to an LLM API provider? Even the cheapest LLM would perform way better if given the context.

I am happy to contribute to the API usage cost if we have a proper automated way or a proper technical structure.

3 Likes

I would suggest adding an after_migrate script that compares the current app versions stored in some file in your app with each app version as in their _init_.py. If it was different version, update the translations.

This ensures that the translation is updated whenever an app is updated, as each app update requires a migrate to the site(s) set-upped.

The current translations were already done by an LLM (Gemini 2.5 Pro), and it had the necessary context (in the .po files, each translation line includes a reference to where it is used). All I had to do was split the large ar.po file into chunks of 200 lines and run 10 instances (I used Cursor), giving each one the same prompt to look up the usage and translate it into Arabic. You can use the same method with a better model, such as Gemini 3, and see if the results are better (you can open a PR anytime :heart:).

1 Like

Thanks for the suggestion. You’re right that after_app_install only runs on initial install, not on updates. Since bench update runs migrations, an after_migrate hook is needed to keep translations in sync.

I’ve added an after_migrate hook that re-applies Arabic translations after each migration, reusing the existing copy_locale_files() function for all installed apps.

For simplicity, the files are re-copied on every migrate. The operation is fast and idempotent, so this avoids extra version-tracking complexity. The changes are committed and translations will now update automatically during bench migrate.

2 Likes

Thanks for the clarification! Then I guess I must have judged the core translation. Did you overwrite them or only translate the non-translated ones?

1 Like