Welcome to the new Pootle 2.7.0 final

Released on 4 August 2015

This is the first release of Pootle that combines the work of Evernote and Translate.

Changes in Requirements

  • Django >= 1.7, < 1.8
  • Translate Toolkit >= 1.13.0
  • Python >= 2.7, < 3.0
  • Redis >= 2.8
  • Unix-based operating system.

Major Changes

  • Switched license from GPLv2 to GPLv3.
  • The Evernote Pootle fork and Translate Pootle are now merged into the same code base and are being actively developed together.
  • Major UI revamp - browsing pages are consistent across all views. Navigation is now much easier, more consistent and more powerful. The editor is cleaner and works to prevent errors early.
  • Backgrounding statistics calculations - so Pootle and its users are never bogged down or delayed by real time stats calculations. Instead these are backgrounded and updated when available.
  • A number of features have been removed and will be recovered in future releases.

Below we provide much more detail. These are by no means exhaustive, view the git log for complete information.

Details of changes

Major user interface revamp


  • Pootle browsing pages now have a single column and wide stats table that shows the same data in the different views. This create a consistent look while browsing through languages and projects.
  • No home page. Users are redirected to their preferred language pages instead, falling back to the project listings page.
  • Critical errors and pending suggestions are prominently displayed on the browsing page and not hidden.
  • New navigation scheme:
    • All directories/files for a project are displayed in a new drop-down.
    • Directories/files can be navigated and translated across multiple languages in a project.
    • Tabs have been replaced in favor of drop-down menus.
    • The editor search box is now displayed in the action links section, keeping its positioning consistent with the browsing page.
    • A new action link in the editor, Go back to browsing, allows users to go back to the same place they entered translation mode from.
  • When there are failing checks, browsing tables now display the number of units which have failing checks, not the total number of failing checks.
  • Table sorting is now remembered across browsing pages, and not separately in project, language and translation project pages.
  • User actionable items in the navbar have been moved to a drop-down.
  • When selecting languages, redirect logic is now smarter.
  • Different last activity messages for new translations and edits.
  • Filters allow sorting units according to their last action date.
  • Implemented project specific announcements in a sidebar. These make use of static pages. Notifications are per-project and are displayed across languages (automatically adapting any hyperlinks).
  • Announcements for language and translation project have been also implemented.
  • Major speed improvements when calculating last action information.


  • New features:
    • Added context search URL prefix for projects, which allow integrating screenshots for units. This is the ability to provide a search URL (link to a search engine) where to look up the text of the current unit in.
    • Translation similarities are calculated in the client and sent to the server to calculate the user’s score. The score changes are logged over time. Along with this, the best matches are highlighted in the editor.
  • Navigation:
    • The editor now displays the numbering for units, not pages.
    • When going through all units in the translation editor, users will be automatically redirected back to browsing.
    • If the currently-submitted unit has failing checks then the editor won’t advance to the next unit and it will be updated displaying the unresolved checks. The same behavior applies when a suggestion is accepted.
    • The Submit/Suggest button is disabled until a change, over the initial state of the unit, is detected.
  • Checks:
    • Quality checks are always displayed and can be individually muted/unmuted.
    • When a users mutes or unmutes a quality check, the action will be recorded in the unit’s timeline.
    • A custom set of new quality checks has been incorporated. It is still possible to instead use the old quality checks.
    • It is possible filter the strings using the checks categories.
  • Usability improvements and other fixes:
    • Location comments are always displayed, providing a shortcut link to display the same source unit across languages.
    • The same string can’t be suggested more than once at the same time, avoiding duplicated suggestions pending review.
    • TM diffs now display what has been removed and what’s being added.
    • Latest translator comments can be “removed” or, in other words, can be blanked. The action is recorded in the timeline.


  • New welcome page for anonymous users, which displays the top scorers over the last 30 days.
  • User score is displayed in the header and dynamically updated when translation actions are made.
  • Revamped user profile pages. These now display user’s latest activity and their personal properties.


  • Rewritten contact form. It used to both contact the site owners from any page as well as to report any issues with strings.
  • Support for old web browsers has been dropped, despite this change Pootle might work on such browsers. More information on Pootle’s supported browsers.
  • Several layout improvements that take into account different screen sizes.
  • Implemented export view for cross-language and cross-project views.
  • Implemented global search. This allows to perform searches and edit units in collections that span multiple projects across languages, multiple languages across projects, or even the whole server.
  • Timeline tracks all changes done to units.
  • Uploads and downloads have been changed slightly. There are no options to overwrite or suggest. Your files will be accepted if no changes have been made online while you you translated offline. If changes were made while offline then the upload will be rejected. In such case download a the file again, use your offline tools or TM to retranslate and try another upload.
  • Added the initial implementation of virtual folders. This feature is meant to replace the now gone goals.

Statistics calculations

  • Statistics handling has received a major rewrite (in fact 3 rewrites). RQ is used to queue and manage the calculation of invalidated statistics. On the frontend, stats are now loaded asynchronously, thus any pending calculations no longer block page loads. This results in a major usability improvement for Pootle users.
  • POOTLE_WORDCOUNT_FUNC allows a custom word counting method to be used.
  • A new counter pootle.core.utils.wordcount.wordcount has been incorporated (it omits placeholders and words that shouldn’t be translated). Non-empty units with 0 words are immediately translated and marked as fuzzy.
  • Browsing pages now report the last time a unit was added to a store/project. In the browsing tables a Last Updated column is displayed and in the extended stats Created and Last Updated dates.
  • Statistics are also available for the All Projects view.


  • Only admins can set the fuzzy flag on the unit. Non-admin users are not shown the fuzzy checkbox by default, but in case it’s displayed (because the unit was already fuzzy, or some other action turned it fuzzy, such as using MT), they are always forced to clear the flag.
  • Projects can be disabled from the administration page, allowing them to be hidden temporarily while retaining statistics.
  • The view permission is now project-centric, it can be set server-wide or for projects, but not for individual language-project combinations.


  • Direct upgrade is now only possible from 2.6.0. Thus to upgrade from older releases first upgrade to 2.6.0
  • The ability to deploy using Fabric has been dropped. We advise to use the recommended upgrade and install instructions in the documentation.
  • Redis is now required for all caching, memcached and other alternatives will not work.
  • Exports no longer work if they are directly served by the web server. Apache users can refer to Apache and mod_wsgi for a suggested configuration.
  • Registration and authentication is now handled by django-allauth. gives Pootle implicit support for OpenID, OAuth, OAuth2 and Persona sign-in protocols. Check out the documentation on users auth for further details.
  • Integrated ElasticSearch-based local TM server into Pootle. Unit submissions update the index instantly. To configure adjust POOTLE_TM_SERVER and to load the TM use the update_tmserver management command.
  • The report target for reporting string errors has been dropped in favor of a report email address. The report is now sent using an automatically pre-filled contact form. If the project doesn’t have a report email then the reports are sent to POOTLE_CONTACT_REPORT_EMAIL.
  • Using the Django dumpdata and loaddata commands to move between databases is no longer supported. If you need to move, please use proper SQL scripts instead.
  • Captcha implementation details have been refined.
  • Yandex.Translate is now available as a Machine Translation backend.
  • POOTLE_QUALITY_CHECKER can be used to point to a custom quality check handler.
  • Xapian and Lucene are no longer required for searching and Pootle will not make use of them. You can safely remove supporting libraries and packages if these services were used only for Pootle.
  • POOTLE_REPORTS_MARK_FUNC allows a site wide function to provide marks to user graphs.
  • Pootle no longer runs on Windows. Pootle uses RQ which makes use of fork() therefore Pootle will only run on systems that implement fork(). Importantly that means that Pootle is no longer supported on Windows. It would be possible to run Pootle on Windows if the rqworkers are run on a system that supports fork().

Command changes and additions

  • Improved the way update_stores inserts and deletes units in the store (issue 3802).
  • In update_stores if a directory doesn’t exist while running the command, the project will be disabled. Thus the update_translation_projects command has been removed, it’s functionality has been merged into update_stores with this change.
  • Added the changed_languages management command.
  • Individual quality checks can now be recalculated via the --check flag passed to the refresh_stats management command.
  • Added --calculate-checks parameter to the refresh_stats command.
  • refresh_stats_rq was added to allow statistics to be refresh when running with multiple RQ workers.
  • Added a new system user to attribute changes done by the management commands.
  • Added command and store action logging.
  • Added test_checks management command.
  • Removed --directory and --path-prefix parameters from management commands. --project and --language should be used instead to reduce the scope of commands.
  • Removed the --modified-since flag. Optimizations will automatically be done based on the latest sync revision.
  • New management commands: revision, refresh_scores, retry_failed_jobs, import, export, dump and calculate_checks.

Deprecated settings

Internal changes

  • Switched to a custom user model. This merges the data and functionality available in auth.User and PootleProfile before, and has allowed to remove the dependency on deprecated third party apps that were bundled in the code.
  • The multiple Suggestion models have been merged into a single model.
  • Changed the way units needing to be sync’ed to disk is determined. Units now have a unique revision number within the store they belong to and they’ll be synchronized based on the last_sync_revision field of the store.
  • Tests have been resurrected.
  • Upgraded jQuery to 2.x and applied a bunch of fixes to the Tipsy plugin, avoiding ad-hoc hacks to remove dangling tips.
  • Translation projects now have a creation_time field.
  • Dropped code for several external apps from Pootle codebase. Also upgraded to newer versions of those apps.
  • Fixed and avoided any inconsistencies in the unit’s submitter information.
  • URLs have been unified and all follow the same scheme. URLs ending in .html have been removed altogether. reverse() and {% url %} are used almost everywhere.
  • All templates are gathered in a single location (pootle/templates), and have been reorganized and sorted.
  • Targetting modern browsers has allowed some CSS prefixes to be removed.
  • Ability to list top scorers over a period of time.


Removed features

There are two groups of features that have been dropped:

  1. Those removed that we will likely recover in future Pootle releases.
  2. Legacy features that will not be comming back

Recoverable features

The following features are removed from Pootle since and will be recovered at some time. Where possible we provide alternate approaches that can be used.


sysadmins should take note of these changes and determine if this prevents use of Pootle within their environment. Essentially you will need to evaluate the use and need for each missing feature.

  • Extension actions.
  • Tags and Goals.
  • Placeables support in the editor
  • SQLite support.
  • LDAP support.
  • Monolingual file format support - perform file conversion to and from bilingual files outside of Pootle.
  • Support for Version Control Systems - automate your version control integration outside of Pootle.
  • News, notifications and RSS feeds - make use of announcement pages or use other channels of communication.
  • Update against templates - do template updates outside of Pootle and use update_stores to load the changed files.
  • Public API.
  • The Wikipedia lookup backend
  • No Top Contributors tables - user scores likely provide the information you are looking for.
  • Project/Language/Translation Project descriptions - these are migrated to announcements.
  • Users can no longer specify their preferred Pootle UI language on their settings nor using the language picker. Pootle UI now uses the preferred language as specified by user’s browser. See Setting language preferences in a browse for more information. The ability to specify Pootle UI language will be added back (issue 4230).

Legacy features

We have dropped these features, some of which have been kept around to allow easy upgrades in the past:


The removal of some of these feature required extensive changes to the upgrading code, which means that upgrading directly from very old Pootle versions is no longer possible. In case you are trying to upgrade you must first upgrade to 2.6 before continuing the upgrade process.

  • .pending and .tm files support: Not necessary since the updatetm tool was removed in Pootle 2.5.0.
  • Live translation: Rarely enabled, and its use was actively discouraged.
  • Autosync: It was recommended to never use it. The files can be synced using sync_stores instead.
  • The voting feature for terminology suggestions has also been removed, due to its low popularity and high maintenance cost.
  • Removed the zoom feature. Users should use their browsers zooming features.
  • Hooks.
  • Automatic terminology extraction. It’s encouraged to use an external tool to generate any glossaries, then load them up on Pootle.
  • Management commands: update_translation_projects, updatedb, upgrade, setup, assign_permissions.

...and lots of refactoring, upgrades of upstream code, cleanups to remove old Django versions specifics, improved documentation and of course, loads of bugs were fixed.


This release was made possible by the following people:

Julen Ruiz Aizpuru, Taras Semenenko, Dwayne Bailey, Leandro Regueiro, Igor Afanasyev, Jerome Leclanche, Khaled Hosny, pfennig59, Zahim Anass, Trejkaz (pen name), safaalfulaij, Peter Bengtsson, msaad, Mikhail Paulyshka, Miha Vrhovnik, Kevin Scannell, Edmund Huber, Dídac Rios, Andras Timar.

And to all our bug finders, testers and translators, a Very BIG Thank You.