Skip to Content

Set permissions per project

Until now, Pontoon allowed team managers to grant Translator permission on a locale level. That means permission to submit and approve translations could only be granted to users in batch – for all projects enabled for that locale.

From now on, permission can also be set for each project within a locale, allowing team managers to set default Translators for a locale, and then override them for a specific project.

Simply select a project you would like to define custom permissions for and then add additional Translators or remove ones with General Translator permission.

This feature is yet another community effort. Kudos to Jotes who implemented the entire backend piece, and Michal for contributing wireframes and filing bug 1223945!

Designing CAT tool UI for L20n

L20n is an open source, localization-specific scripting language used to process gender, plurals, conjugations, and most of the other quirky elements of natural language. If you haven’t heard about it yet, check it out – it’s incredible.

We want to bring its powers to translators who aren’t coders, so we’re designing a L20n-specific user interface in Pontoon. Here’s a sneak peek of our progress so far.

Simple strings
Pontoon users will find the UI for translating simple strings familiar, because it looks exactly the same as for translating strings in any other file format.

Multiline strings
L20n syntax uses special notation for multiline strings. Pontoon will make it transparent to end users when rendering original strings or serializing translations. Again, no surprises.

HTML attributes
L20n allows adding additional information to the main entity value like HTML attributes. Such cases are marked with a special notation in the UI.

Access keys
Since L20n lets you combine access keys with labels within the same entity, we were able to design a dedicated UI, that lists all possible access keys as you translate the label. You can also type in a custom access key if none of the candidates meets your criteria.

Grammatical cases
With L20n, it’s possible to define different variants of the entity value. Check out the video to see how to store locale-specific variants based on grammatical case.

The plurals UI automatically shows input fields for all CLDR plural forms available for your locale and also displays an example value for each form.

Please note that this is still a work in progress and we’re very much interested in hearing your feedback.

Combining multiple filters

Pontoon now allows you to apply multiple string filters simultaneously, which gives you more power in selecting strings listed in the sidebar. To apply multiple fillters, click their status icons in the filter menu as they turn into checkboxes on hover.

The new functionality allows you to select all translations by Alice and Bob, or all strings with suggestions submitted in the last week. The untranslated filter has been changed to behave as a shortcut to applying missing, fuzzy and suggested filters.

Big thanks to our fellow localizer Victor Bychek, who not only developed the new functionality, but also refactored a good chunk of the filters codebase, particularly on frontend.

And thanks to Jarek, who contributed optimizations and fixed a bug reported by Michal!

Set up your own Pontoon instance in 5 minutes

Heroku is a cloud Platform-as-a-Service (PaaS) we use at Pontoon for over a year and a half now. Despite some specifics that are not particularly suitable for our use case, it has proved to be a very reliable and easy to use deployment model.

Thanks to the amazing Jarek, you can now freely deploy your own Pontoon instance in just a few simple steps, without leaving the web browser and with very little configuration.

To start the setup, click a Deploy to Heroku button in your fork, upstream repository or this blog post. You will need to log in to Heroku or create an account first.

Deploy to Heroku

Next, you’ll be presented with the configuration page. All settings are optional, so you can simply scroll to the botton of the page and click Deploy.

Still, I suggest you to set the App Name for an easy to remember URL and Admin email & password, which are required for logging in (instead of Firefox Accounts, custom Heroku deployment uses conventional log in form).

When setup completes, you’re ready to View your personal Pontoon instance in your browser or Manage App in the Heroku Dashboard.

This method is also pretty convenient to quickly test or demonstrate any Pontoon improvements you might want to provide – without setting the development environment locally. Simply click Deploy to Heroku from the README file in your fork after you have pushed the changes.

If you’re searching for inspiration on what to hack on, we have some ideas!

Connect your Pontoon profile with a Firefox Account

We are switching the sign in provider in Pontoon from Persona to Firefox Accounts. This means you will have to connect your existing Pontoon profile with a Firefox Account before continuing to use Pontoon. You need to do this before November 1, 2016 by following these steps:

1. Go to and sign in with Persona as usually.

2. After you’re redirected to the Firefox Accounts migration page, click Sign in with Firefox Account and follow the instructions.

3. And that’s it! From this point on, you can log in with your Firefox Account.

Note that the email address of your Firefox Account and Pontoon account do not need to match. And if you don’t have a Firefox Account yet, you will be able to create it during the sign in process.

November 1, 2016 will the last day for you to sign in to Pontoon using Persona and connect your existing Pontoon profile with a Firefox Account. We recognize this is an inconvenience, and we apologize for it. Unfortunately, it is out of our control.

Huge thanks to Jarek for making the migration process so simple!

Improving string filters

A new filter is available in Pontoon that allows you to search for translations submitted within a specified time range. Do you want to review all changes since the last merge day or check out work from the last week? It’s now easier than ever.

Time range can be selected using the manual input, calendar widget and a few predefined shortcuts. Or perhaps more conveniently using the chart that displays translation submissions over time, so you don’t shoot in the dark while defining range.

With recent additions to strings filters, we’ve also slightly redesigned the filter panel to make it more structured. Also available are translation counts, so you don’t need to apply the filter only to learn there are no matches.

We have more plans for improving filters in the future, most notably with the ability to combine multiple filters, so that you could e.g. display all suggestions submitted yesterday by Joe.

Coming up next
Our current focus is dashboard redesign, which will add some features currently only available on external dashboards. For more details on what’s currently in the oven, check out our roadmap. If you’d like to see a specific feature come to life early, get involved!

Improving in-page localization in Pontoon

We’re improving the way in-page localization works in Pontoon by droping a feature instead of introducing a new one. Translating text on the web page itself using the contentEditable attribute has been turned off.

That means the actual translation (typing) always takes place in the translation editor, which gives you access to all the relevant information you need for the translation.

The sidebar is always visible, allowing you to select strings from the list and then translate them. Additionally, you can still use the Inspector-like tool to select any localizable string on the page, which will then open in the translation editor in the sidebar to be translated.

Translation within the web page has turned out to be suboptimal for various reasons:

  • Original string is not always presented unambiguously, e.g. if containing markup,
  • Additional string details like comments and file paths are not displayed,
  • Suggestions from history, machinery and other locales are not available,
  • Only the first plural form can be translated,
  • It’s hard to control markup or new lines on various sites if they’re part of the string.

Define preferred locales in Pontoon

When translating a string, Pontoon displays all existing translations to other languages in the Locales tab. This is helpful for localizers that understand other languages than English and their native language.

However, the list can get pretty long sometimes, making it hard and time-consuming to find translations one can actually understand. To overcome this problem, localizers can now select preferred locales in the settings, which are shown on top of the list.

Translation counts from preferred and other locales are displated separately in the Locales tab header, making it clear if translations from your preferred list are available before even openning the tab.

Preferred locales

Get involved

This feature has been developed by our volunteer contributor jotes. Would you like to get involved, too? Start here!

Triage translations by author in Pontoon

A few months ago we rolled out bulk actions in Pontoon, allowing you to perform various operations on multiple strings at the same time. Today we’re introducing a new string filter, bringing mass operations a level further.

From now on you can filter translations by author, which simplifies tasks like triaging suggestions from a particular translator. The new filter is especially useful in combination with bulk actions.

For example, you can delete all suggestions submitted by Prince of Nigeria, because they are spam. Or approve all suggestions from Mia Müller, who was just granted Translator permission and was previously unable submit approved translations.

See how to filter by translation author in the video.

P.S.: Gašper, don’t freak out. I didn’t actually remove your translations.

Pontoon: Q1 report and Q2 roadmap

Over the past 3 months, we deployed new Pontoon code to production servers 65 times, which means approximately once per workday. Most of the changes were incremental improvements, optimizations or bugfixes, but some of them require a brief introduction. We hope you’ll like them.

Progressive loading of strings

Instead of requesting all strings at once, we now only load the first 50 and add others progressively while you scroll down the string list (in batches of 50). The benefits are particularly noticable when loading resource files with 1000s of strings, with search & filters also becoming snappier. Kudos to jotes for implementing it!

The idea of progressive loading is simple, but its implications go far beyond what the name suggests. It allowed us to add the All Resources menu entry, which makes it easy to load, search and filter strings across the entire project. If you have 7 missing strings in 4 different files, you can finally translate them without manually loading each resource.

In Q2, we’ll make common filters (e.g. strings with pending suggestions) accessible directly from the dashboard.

Bulk actions

Some time ago my team decided to change the translation of cookie in Firefox. It would be a nightmare to do it for each string separately in Pontoon, so we had to fire up a text editor and use find & replace. This use case is now covered by Pontoon.

Translation status icons in the string list act as checkboxes, allowing you to select strings. (You can also hold Shift to select a range of strings or use Select All). 3 bulk actions are available (to Translators only) — Approve All, Delete All and Find & Replace.

In Q2, we’ll add new filters to help you with more interesting mass actions. For example, you will be able to delete all suggestions submitted by No Name, because they are spam. Or approve all suggestions from Annie, who was just granted Translator permission.

Improved translation helpers

Translation helpers are the three tabs below translation textarea, where we keep history of user translations (History), translation memory and machine translation suggestions (Machinery) and translations into other locales (Locales).

All helpers are loaded instantly after a string is opened for translation. Additionally, a number of suggestions is displayed in each tab title, so you don’t click on them in vain. Duplicate Machinery results are grouped and sorted by source (in addition to Levenshtein distance).

In Q2, we’ll make it possible for localizers to define a preferred list of locales to get suggestions from.

Homepage and dashboard optimization

Pontoon homepage now loads 70% faster, mostly due to smarter handling of the iframe and loading Persona script on demand. Dashboards are 30-60% faster, thanks to denormalized statistics data and optimized latest activity database queries.

On a related note, you can now access team and project dashboards directly from the main menu in the translate view. Thanks to Emin for submitting the patch!

In Q2, we’ll focus on optimizing sync, because we have a huge room for improvement there. We’ll continue with web interface optimization, but we’re getting to the point where it’s becoming more of a hardware than software problem. :-)

Other improvements

  • Team and project positions in the main menu are switched to match the URL structure.
  • (Multiple) new projects can now be requested from the project menu.
  • Links to images in string comments are presented as images in the translation editor.
  • Projects with less than 10 resources are downloaded as ZIP.

Plans for Q2

We’d love to hear your feedback on the features we’ve shipped. In addition to that, we’d like to invite you to participate in developing our roadmap for Q2. Now is the best time to file feature requests and leave feedback on existing bugs (quarterly goals have priority set to P2).