I am a design engineer at Automattic, the company behind WordPress.com, working with the Theme Team to address the design concerns of millions of WordPress users.

Friday, December 10th, 2010

Using Google Chrome-style locales in Firefox extensions

In which I simplify cross-browser extension translation.

Update: Don’t use this code. Use this new version.

If you’ve ever developed the same extension for both Google Chrome and Firefox, you’ve probably noticed that there is no easy way to reuse internationalization efforts between the two. Firefox uses a mix of Java-style properties files and DTD files to store translated strings, while Chrome uses JSON “messages” files. This was especially frustrating to me because 95% of the code in ScribeFire is shared between the Chrome and Firefox (and Safari) versions.

To eliminate this annoyance, I came up with a method to parse and query the locales from the Chrome version in the Firefox version. If you want to use this method in your Firefox extension, you need to take the following steps:

  • Replace “MY_EXTENSION_ID” with the ID of your extension.
  • Rename “MY_EXTENSION_STRINGS” to something that won’t interfere with another extension.
  • The _locales directory from your Chrome extension should be in the chrome/content/ directory of your Firefox extension.
  • Include the excellent io.js library in your extension.

View the code at GitHub.

After running this function, you can call MY_EXTENSION_STRINGS.get(key, substitutions); anywhere that you would have called chrome.i18n.getMessage(key, substitutions);. (It doesn’t work in Firefox 4 (yet) due to the extension manager changes, but I’ll post a follow-up when I have a Firefox 4-compatible version.)

What are your thoughts? Is there a better way? Would it be better to write a script to convert Firefox-style locales for use in Chrome?


2 Responses to “Using Google Chrome-style locales in Firefox extensions”

  1. Richard Klein Says:

    We ended up using jquery.localize to do the localization in one of the extensions I work on. This allows us to use the same code between Firefox and Chrome.

  2. Christopher Finke Says:

    Richard: My goal was to have at least one platform still use the standard locale files, but jquery.localize looks like a nice solution too. I wonder if they have plans to support different translation file formats.


Leave a Reply

Notify me of followup comments via e-mail. You can also subscribe without commenting.