Skip to Content

Log in to Pontoon using BrowserID

I spent last weekend in Berlin at the MozCamp Europe, which was one hell of a Mozilla event. My talk on localizing websites with Pontoon was well received and I got plenty of feedback.

Christian Heilmann delivered a talk on BrowserID, which is an easier way to sign in without giving away your identity or using password. It’s really easy to use for both, visitors of your websites and developers – go check it out!

As of today, you can log in to Pontoon using BrowserID.

Update: read more about BrowserID.

BrowserID in Pontoon

Report web forgery redesign proposal

Firefox users can access web forgery report tool through Help menu. It’s a web service, hosted by Google, but it looks very outdated:

Current web forgery reporter

There are several aspects of the existing web forgery reporter that should be changed:

Here‘s my proposal for the new design:

New web forgery reporter

Diff:

  • The new Firefox logo is used. :-)
  • Design is based on Firefox brand toolkit.
  • It resembles Firefox Input (shall we just integrate reporter?).
  • Phishing link is updated.
  • It should be hosted on Mozilla servers (localizable).

Thoughts? There’s Bugzilla for that!
Hackers? There’s GitHub for that!

Update before All Hands

I’m currently working on the back-end functionality of Pontoon, written in Django. It provides API necessary for the client, user authentication, accepts partial and full translations of the document, presents information on the current status of the document’s translation, and synchronizes work between multiple localizers. As stated previously, it covers most of the work that has to be done before releasing Pontoon to public.

If you see any other showstoppers, let us know! Quickly!

We are also in the process of setting up Pontoon stage environment on Mozilla’s server infrastructure. I’d like to thank the Webdev gang and I’m really excited to meet them at the forthcoming All Hands.

Besides our own server, we are also preparing bindings for Pootle and Transifex, so users will be able to use Pontoon together with these tools. Imagine that you’ll translate most of the strings that appear on the website in-place, using Pontoon, but the rest will be finalized via Verbatim (Pootle). How cool is that?

Oh, and by the way, Pontoon now provides translation memory support, which is collected from all Mozilla product localizations. Give it a try!

Translation memory

Looking for a geek to play with translation memory

Update: As Philippe from the French Mozilla community points out in the comments, transvision webservice is now available and it can do most of the job. Solution to the problem described below is now a one-line fix, but there are still many other features, where you can join Pontoon development.

As mentioned in the previous blog post, main development momentum for Pontoon will now continue on the back-end. One of the remaining items left to be implemented mostly on the front-end is translation memory support, briefly outlined on the Feature Brainstorming wiki.

Translation memory

For every entity on the website, we would like to provide matching translations from translation memory, similarly to how we already offer suggestions from other users, translations from other locales and machine translations.

There’s already room for translation memory hits in the interface, so what has to be done is:

  1. If user asks for translation memory suggestion for the first time in session, make AJAX request to get the translation memory file for the user’s locale.
  2. Search the original string in translation memory and provide 100% matches. Support for all matches above certain (50%?) percent is a plus.
  3. Present matches in the UI and enable user to copy them to translation.

Translation memory files are made available in the XML standard TMX file format by the amazing French Mozilla community. They contain translations from all Mozilla-related products. For the initial implementation, before our Django back-end is made available, TMX files can be copied to the Pontoon repository and requested from client.

We are looking for geeks to implement translation memory support in Pontoon. Interested? Drop us a line in the comments or find us on Twitter and IRC.

Enhanced by Zemanta

Latest UI changes

In the last couple of weeks, Pontoon has got a handful of new features:

  • Drag area has been extended to the full width of the header (but only a couple of upper pixels are draggable).
  • Keyboard shortcuts enable in-place translations without using a mouse. Click Enter to confirm translation, Esc to cancel and Tab to confirm + go to next entity.
  • Suggestions from other users and locales have been fully implemented.
  • Design of buttons has changed to become less eye-catching.
  • Warning has been added if user doesn’t have JavaScript enabled.

 

Pontoon UI

Pontoon UI has now been pretty much finalized, with only a couple of items remaining to be implemented. Main development momentum will now continue on the back-end.

Enhanced by Zemanta

Entity list refresh

You can extend Pontoon header (the black bar) by draging the logo up and down or by clicking the switch icon on the right side. That way the entity list will show up, which gives you access to the advanced tools, not available when translating website in-place.

The UI of the entity list has changed in the last couple of days. On the left side you will find source information, e.g. the original string that you can copy to the translation area on the right side. With mouse over entity, a menu will appear and give you access to additional data like suggestions and machine translation.

Translation area now also enables you translating directly in the textarea element with save and undo buttons for confirming or reverting translations. Please note that some parts like suggestions from other users and locales, translation memory support and the undo button functionality are not implemented yet.

New entity list look

Give Pontoon a try on the usual spot. Your feedback is greatly appreciated!

Enhanced by Zemanta

Powered by Microsoft Translator

A couple of days ago a kind guy named Ryan Freebern pinged me on IRC, saying that Pontoon “looks really cool” and asking if there’s anything he “can do to help out”. I was more than happy to give him a quick introduction and point him to our feature brainstorming page.

Later on Ryan, who’s been also contributing to FlightDeck, decided to tackle the machine translation bit. And a few days later I’m happy to announce that Pontoon now supports machine translation, which are brought to you by Microsoft Translator API. Ryan, thank you and welcome to the club!

To give it a shot, go to Pontoon demo and open the extended interface, where you’ll find machine translation icons.

Machine Translation

So, who else is joining the Pontoon gang?

Enhanced by Zemanta

Pontoon Feature Brainstorming

We are currently in the early development stage for Pontoon and would like to collect all the ideas for feature enhancements in a single place. I’d like to invite you to provide new ideas and comment on existing ones on the new Feature Brainstorming wiki page.

Features are currently listed in no specific order.

Enhanced by Zemanta

Implementing hooks

The goal of Pontoon is to enable localization of as many website messages as possible. Sometimes, messages are hidden behind a hard to reach sequene, such as JavaScript warnings. We try to minimize the number of such messages by designing Pontoon to operate in two modes:

Vanilla mode. Pontoon can open any HTML document and guess which messages are suitable for localization. This mode is useful when the content manager does not possess access to the server-side document, or when the document is not generated by server-side code.

Aided mode. If content manager has access to the code running on the server, Pontoon can receive background information on messages by the hook, which enables a more complete localization of a document. Useful for websites, developed and maintained in-house.

Hooks are responsible for two things: identifying messages and providing their background information, e.g. original message, translation, suggestions from other users, etc. But how exactly do we implement them? I’ve been playing with this question a lot lately, so I’d like to give you an overview of my conclusions. I identified four different approaches:

<span>. Perhaps the most obvious choice is to wrap every message in a span tag (or em) and use HTML5 data-* attributes for storing background information. But the problem is that changing markup with span tags also means changing style of the website.

<span data-original="Original">Translation</span>

<nonstandardtags>. The quickest solution to the problem above is using non-standard tags. Except that it’s not! We are Mozilla, and using non-standard tags is not an option.

<l10n data-original="Original">Translation</l10n>

<!– Comment nodes –>. What about comment nodes? They do not affect the appearance, which is good, and they do not support data-* attributes, which is bad. We could simply ignore the latter and parse background information, but that sounds fugly.

<!-- l10n data-original="Original" -->Translation<!-- /l10n -->

External file. The best option I’ve found so far is the use of an external file with all the background information stored in a structued format, e.g. JSON. There’s no need for parsing and it doesn’t affect the appearance. I still use comment tags for message identification, but the idea is to get rid of them and use Xpath to match messages with JSON entities.

{"entities":
[
  ...
  {
    "original": "Become a Test Pilot!",
    "translation": "Wird Test Pilot!",
    "comment": "Test Pilot should not be translated.",
    "suggestions": [
      {
        "translation": "Werden Test pilot"
      },
      {
        "translation": "Werden Sie Testni Pilot"
      }
    ]
  },
  ...
]}

Of course the list does not stop here. I’d love to hear your suggestions! What do you think about hooks and how would you like to see them implemented?

Enhanced by Zemanta

Pontoon at Mozilla Balkans ’11 Sofia

The third Balkans Inter-Community meet-up took place last weekend in Sofia, Bulgaria. As Chofmann pointed out, none of the participants got recruited by anyone, we got inspired by the work of people at Mozilla, so it’s important that we document our events and activities. Here’s my contribution to this.

I gave a talk on the current state of Pontoon. To my surprise, many localizers didn’t even know that this projects exist, which proves such talks (and blog posts) neccessary. I was really happy with the amount of feedback I got and I’d like to thank Gandalf who helped me collecting it. Following are some of the suggestions from audience.

Pre-Pontoon talk with Vito and Nino

QA mode. Many locales have more than one localizer working on the same project, so we have to find a way for more experienced ones to review, approve and reject translations from others. It’s always good to have someone proofread your work.

Filters. Maintaining control over who localized what and when will be useful together with batch operations. We should make it easy to show all suggestions made by one guy or remove everything that the other guy did, because it’s spam.

HTML translations. Source view icon next to the save and cancel icon should provide a way for a localizer to make changes to content that is not visible on a website, like href attributes in anchors.

Many other suggestions were given like support for glossaries, translations versioning, selecting entity in bottom bar should scroll to the entity in WYSIWYG, tab or ctrl+tab shortcut to go through untranslated entities, etc. And it doesn’t even stop here.

I’m happy to see people getting involved with Pontoon by giving us so much feedback. In Sofia I decided to setup a dedicated wiki page that will enable us to track all the feature request. It will be announced on this blog soon.

Enhanced by Zemanta