Skip to Content

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).

Meet Jarek, splendid Pontoon contributor

Some three months ago, a new guy named jotes showed up in #pontoon IRC channel. It quickly became obvious he’s running a local instance of Pontoon and is ready to start contributing code. Fast forward to the present, he is one of the core Pontoon contributors. In this short period of time, he implemented several important features, all in his free time:

Top contributors. He started by optimizing the Top contributors page. More specifically, he reduced the number of DB queries by some 99%. Next, he added filtering by time period and later on also by locale and project.

User permissions. Pontoon used to rely on the Mozillians API for giving permissions to localizers. It turned out we need a more detailed approach with team managers manually granting permission to their localizers. Guess who took care of it!

Translation memory. Currently, Jarek is working on translation memory optimizations. Given his track record, our expectations are pretty high. :-)

I have this strange ability to close my eyes when somebody tries to take a photo of me, so on most of them I look like a statue of melancholy. :D

What brought you to Mozilla?
A friend recommended me a documentary called Code Rush. Maybe it will sound stupid, but I was fascinated by the idea of a garage full of fellow hackers with power to change the world. During one of the sleepless nights I visited whatcanidoformozilla.org and after a few patches I knew Mozilla is my place. A place where I can learn something new with help of many amazing people.

Jarek Śmiejczak, thank you for being splendid! And as you said, huge thanks to Linda – love of your life – for her patience and for being an active supporter of the things you do.

To learn more about Jarek, follow his blog at var evil = true;.
To start hackin’ on Pontoon, get involved now.

A single platform for localization

Let’s get straight to the biscuits. From now on, you only need one tool to localize Mozilla stuff. That’s it. Single user interface, single translation memory, single permission management, single user account. Would you like to give it a try? Keep on reading!

A little bit of background.
Mozilla software and websites are localized by hundreds of volunteers, who give away their free time to put exciting technology into the hands of people across the globe. Keep in mind that 2 out of 3 Firefox installations are non-English and we haven’t shipped a single Firefox OS phone in English yet.

Considering the amount of impact they have and the work they contribute, I have a huge respect for our localizers and the feedback we get from them. One of the most common complaints I’ve been hearing is that we have too many localization tools. And I couldn’t agree more. At one of our recent l10n hackathons I was even introduced to a tool I never heard about despite 13 years of involvement with Mozilla localization!

So I thought, “Let’s do something about it!”

9 in 1.
I started by looking at the tools we use in Slovenian team and counted 9(!) different tools:

Eating my own dog food, I had already integrated all 3 terminology services into Pontoon, so that suggestions from these sources are presented to users while they translate. Furthermore, Pontoon syncs with repositories, sometimes even more often that the dashboards, practically eliminating the need to look at them.

So all I had to do is migrate projects from the rest of the editors into Pontoon. Not a single line of code needed to be written for Verbatim migration. Pootle and the text editor were slightly more complicated. They were used to localize Firefox, Firefox for Android, Thunderbird and Lightning, which all use the huge mozilla-central repository as their source repository and share locale repositories.

Nevertheless, a few weeks after the team agreed to move to Pontoon, Slovenian now uses Pontoon as the only tool to localize all (31) of our active projects!

Who wants to join the party?
Slovenian isn’t the only team using Pontoon. In fact, there are 2 dozens of locales with at least 5 projects enabled in Pontoon. Recently, Ukranian (uk) and Portugese Brasil (pt-BR) have been especially active, not only in terms of localization but also in terms of feedback. A big shout out to Artem, Marco and Marko!

There are obvious benefits of using just one tool, namely keeping all translations, attributions, contributor stats, etc. in one place. To give Pontoon a try, simply select a project and request your locale to be enabled. Migrating projects from other tools will of course preserve all the translations. Starting today, that includes attributions and submission dates (who translated what, and when it was translated) if you’re moving projects from Verbatim.

And, as you already know, Pontoon is developed by Mozilla, so we invite you to report problems and request new features. We also accept patches. ;) We have many exciting things coming up by the end of the summer, so keep an eye out for updates!

Throwing Pontoon backend around

Osmose pinged me the other day on IRC, pasting a link to his Pontoon branch and asking me to check out the stuff he’s been throwing around. I quickly realized he made substantial improvements to the backend, including things I’ve been resisting for too long, so I wanted to ship them as early as possible.

We worked together during the last week to make that happen and here it is – a preview of Pontoon with the new backend. Please give it a try and let us know if you run into any bugs. As soon as we’re all happy with it, we’ll deploy the changes to production.

The new codebase is way more robust and maintainable, simpler to setup for developers, easier to deploy and what matters most – it works considerably faster for localizers. The following are the most important changes that were made. The complete changelog is available on GitHub.

  • Removed Playdoh for easier maintenance and up-to-date dependencies, including the middleware we didn’t use.
  • Upgraded to Django 1.8, the latest Long-Term Support release, bringing many improvements over the currently-used Django 1.4.
  • Replaced MySQL with PostgreSQL, which is more suitable for our use case.
  • Switched to Docker for easier development setup and deployment to Heroku.

We also moved Pontoon repository under Mozilla organization on GitHub.

And now I’d like to take the opportunity to thank Michael for the heroic effort he has made by throwing stuff around!

Terminology Search in Pontoon

New release of Pontoon is out the door. It’s mostly a bugfix release eliminating annoying glitches like broken contributor profile links. Thank you for your first contribution to Pontoon, Benoit! :-)

Some new features are also available, e.g. displaying warnings on unsaved translations as suggested by flod. And — Terminology Search is now also available as a standalone feature, making it easier to access. It works similarly as the Search tab in the out-of-context translation panel.

Translations are taken from:

Offline localization by Sandra

Pontoon is a web application, which is great. You can run it on almost any device with any operating system. You can be sure you always have the latest version, so you don’t need to worry about updates. You don’t even need to download or install anything. There’s just one particular occasion when web applications aren’t so great.

When you’re offline.

Mostly that means the game is over. But it doesn’t need to be so. Application caching together with web storage has made offline web applications a reality. In its latest edition released yesterday, Pontoon now allows translating even when you’re offline. See full changelog for details.

There are many scenarios where offline localization is the only option our localizers have. Decent internet connection simply cannot be taken for granted in many parts of the World. If it’s hard for you to belive that, visit any local tech conference. :-) Or, if you started localizing at home, you can now continue with localization on your daily commute to work. And vice versa.

The way it works is very simple. After Pontoon detects you no longer have a connection, it saves translations to localStorage instead of server. Once you get online again, translations are stored to server. In the meantime, connection dependant functionality like History and Machinery is of course unavailable.

Offline mode was single-handedly developed by our new contributor Sandra Shklyaeva. She just joined Mozilla community and has already fixed one of our oldest bugs. She’s attacking the bugs everybody was pushing away. I can’t wait to see what the future holds (shhhhh)!

Sandra has an interesting story on what got her attracted to Mozilla:

I was exploring some JS API on the developer.mozilla.org when I noticed pretty tabzilla on the top. I clicked it and my chrome became unresponsive completely XD. Maybe it was just a coincidence… Anyway, the tabzilla has caught my attention and that’s how I found out about Get Involved stuff in Mozilla.

If you also want to get involved, now you know where you can find us!