Drupal translation with PO and POT files

To easily manage the translation of a Drupal site, download the source strings in PO or POT format from your Drupal instance and bring them to the localization management platform POEditor. Here, you can manage the string translation process in multiple ways, into any language.

Find below the steps you need to take to quickly set up your Drupal translation project.

Set up your Drupal translation project

If you don’t have a POEditor account, take a second to register one. You’ll be able to manage for free up to 1000 Drupal interface strings.

Once you’re logged in, create a project in your Dashboard and add the languages you’ll be working with. You’ll want to add your Drupal site’s default language and the target languages (the languages you want to translate your Drupal site into).

After adding the languages to the translation project, import your Drupal source strings to POEditor using the import functionality in the project page. You can import them either from .pot or from .po.

Import terms and translation (Project page) - POEditor translation platform

POEditor fully supports Gettext PO and POT files, so after importing the file with the source strings, all the term attributes (such as context, comments and plurals) should be reflected in the translation project.

PRO TIP: To automate the import process, you can use the API or an integration with a code hosting platform. POEditor is currently integrated with GitHub, Bitbucket, GitLab and Azure Repos.

Choose how you want to translate the Drupal interface strings

After setting up the Drupal translation project, you can begin the string translation process. The translation options you can choose from are:

  • Assigning translators to specific languages in your translation project, by adding them as contributors. These people will be able to use POEditor’s online editor to add translations to your project.
Add contirbutor (Project page) - POEditor translation management platform
  • Crowdsourcing translations from your community for specific languages, using public projects. You can also allow others to add new languages to your public translation project. Just enable the option Contributors Can Add New Languages in the project’s settings.
  • Using the Automatic Translation feature. This works with the machine translation engine of your choice, from the options available. MT options include DeepL Translate, Google Translate and Microsoft Translator.
  • Ordering translation services from one of our partner language service providers*.

You can of course mix these translation options to your convenience to achieve your Drupal site localization. Note that if you have a paid account, you and your contributors can also reuse translations from the Translation Memory.

*To order human translation services from the integrated providers, you’ll need to add your source strings as translations in your source language. If you imported your source strings from .pot and your source language is at 0% completion rate in the project, to take it to 100% you can use the Copy Terms to Translation feature in the upper right corner of the source language page. This will copy the source strings from the terms to the translation boxes of the source language.

Export the translated PO files and add them to your Drupal site

Anytime during the string translation process, you can export the localized languages from POEditor and import them to your Drupal site. To export a language, access its translation page in the project, then use the Export functionality to download it in PO format to your computer. Note that exporting to the POT format is not a good idea, because POT files only contain the msgids and not the translations too.

Export PO file (Export page) - POEditor translation management system

With the API or with a code hosting service integration, you can also export all the localized languages at once. In case a translation is not specified in a particular language, your Drupal site will use the source text instead.


Top POEditor features you may not be using (yet) in your localization project

Whether you are interested in mobile app localization or you want to translate website strings, POEditor is surely one of the best translation management systems for the job.

One main point of difference for our translation and localization management system is that the user interface is uncluttered. Along the years, we’ve been stubborn to keep our UI easy to use for everyone, especially newbies. This meant making obvious only the most essential tools for translation and localization management, while keeping other powerful, more specialized tools on the discrete side.

Here we list a few of our top features that you may or may not be using in your localization project. If you’re not using them, we encourage you to give them a go. We’ve heard they make a great difference.


We built the Tagging System to help you keep strings grouped in your localization project.

Since we don’t store the files you use on import, but parse them to get the language data and store that only in our database, it’s important to know which strings came from where, in case you’re working with multiple source files.

Tags work perfectly for this case when you use them on import. But you can use them as custom filters too, and also mark your terms with tags in the interface, after import.

Tagging terms when importing them to the localization project
Tagging terms when importing them to the localization project

The best thing about tags? They are supported by the API and by the integrations with GitHub, Bitbucket, GitLab and Azure DevOps.

Continue reading

How to automate your localization workflow with Callbacks and Webhooks

At POEditor, we offer plenty of ways to keep yourself updated about the status of your localization projects. Polling the API over and over, however, is not always the most efficient way to go around this.

To use Callbacks and/or Webhooks would be a wiser way instead.

What are Callbacks

Using Callbacks is a “don’t call us, we’ll call you” kind of process.

Basically, what Callbacks do is fire a request to an endpoint specified by you every time an event is triggered. Events include: language is completely translated, language is completely proofread and so on.

POEditor callbacks form

Now, with this information you can get the gears going. If you use a code hosting service integration, you will probably want to push the updated language file to your repository. You can easily do that from the UI by selecting the language and clicking on the Export option. OR you can do this automatically by calling a webhook.

Continue reading

App localization: reading language files from an API

App localization: reading language files from an API

From time to time, someone sets their (mobile) app to read language files directly from the POEditor API.

Subsequently, for every language update made in POEditor, even for the smallest typo or text change, an update is pushed to their app. At a first glance, it’s a great idea. Users will always have the latest language version. It becomes unnecessary to deploy new versions of the code/binary/app every time a new translation is added or changed. Also, errors are corrected quickly and spread instantly to the user base.

As attractive as the benefits of reading language files from an API may appear, there are issues with this approach. Some of them might even kill your app or you users’ experience with it.

Some of the pitfalls of loading language files to your mobile app from an API are:

Continue reading

How to order translation services faster

POEditor users have multiple options for translating their software strings. They can bring their own translators, crowdsource translations using public projects, use machine translation engines, or even opt for third party human translation services. The latter feature is provided in partnership with well-reputed human translation platforms in the industry.

Until recently, as a POEditor user, you had to access each localization project to order human translations for it. And you had to repeat this process for each language. Because our users made us aware they wish to accelerate this part of their workflow, we’ve made some small changes.

What’s new with the human translation order process

In essence, you can now place orders for any project in the same page, and can order as many translations as you want, at the same time.

Add human translation order - POEditor localization platform
Continue reading

Machine translation in app and website localization

We can trace the idea of Machine Translation back to the 17th century, in the work of René Descartes. But it’s the 1970s which saw Machine Translation used for its actual purpose, initially in institutions like the European Commission, and later at big corporations. The advent of the Internet sped up the evolution of MT significantly and resulted in advanced technologies like today’s Statistical Machine Translation.

In software localization, we can use Machine Translation (or Automatic Translation) in a number of processes.

Google and Bing machine translation engines for automatic translation- POEdtior localization platform
Continue reading

Free localization with the POEditor translation platform

The online localization platform POEditor is free to use to translate software projects collaboratively in the following circumstances:

With Free Accounts

If you register to the POEditor, you get an account with a Free plan by default. The free account can accomodate software localization projects summing up to 1000 strings, which is usually enough to translate a small app or a WordPress theme into a few languages.

Also, you can use your free account to contribute without any limitation to localization projects owned by other users. The strings you translate for others are counted against their account.

Free plans, like all the other POEditor plans, can host an unlimited number of projects, languages and contributors. But, unlike accounts with paid plans, free accounts don’t come with a Translation Memory feature.
Continue reading

How to track the progress in a localization project

Whether you’re translating something with a few strings, like a theme or an app, or dealing with something with a zillion strings, like a big website, there’s one thing that will always come in handy to the localization manager: statistics.

Statistics can be helpful for many things, among which evaluating the general translation progress of the software localization project and calculating fees for translators.

The POEditor localization management platform comes with two categories of stats: for project owners and administrators, and for contributors.

What stats pages look like

At the top of every Statistics page, some general information about the localization project is available, such as the project name, the amount of terms in it, and the total of words and characters these terms sum up. Some users can see more information in this area, as a result of their role in the localization project and the Stats page they are on.Date Range Picker (Statistics) - POEditor localization platform
Continue reading

Recovering translations with the History module

The History module is one of the features that makes translating software strings with the POEditor localization management platform a safe and easy process. What the History module does is store translations that are one hour old in a database, so that they can later be recovered individually (with the History link), or in bulk, for a particular language (using the Recover from history feature). Below we will describe how the History module works.

Consulting previous translation versions for individual termsHistory link (Language page) - POEditor localization management platform

In any Languge page, you can find History links next to each previously translated string (remember – the translations must’ve been one hour old to be recorded). If you click on one of these links, you will see all the translations that have been made in that language for the corresponding term, as well as who made the translation and when.
Continue reading