Welcome to Elmo’s documentation!¶
Elmo is l.m.o, which is l10n.mozilla.org.
Elmo is an infrastructure of web apps that are intended to help the l10n community. Presently, our tools, docs, sites, wikipages, etc., all live in a fairly disorganized, disparate world that we often ask localizers to navigate to get stuff done.
This documentation is about the elmo django application and how it works and why it works like it works.
All code is available here: https://github.com/mozilla/elmo
The production is available here: https://l10n-stage-sj.mozilla.org/
Contents:
Overview¶

(image originally from http://people.mozilla.org/~axel/all.svg)
As you can see in this database diagram, Elmo consists of 3 major parts:
Their names imply what they each do and deal with. There are other various tools that aren’t directly part of these major apps but are also important. For example, the privacy app (TODO: figure out whether to bother documenting this).
Basically the whole database model is based around the structure that is used in Mozilla to develop Firefox, Thunderbird, etc. but instead of source code to the running programs, it’s definition files containing translatable strings. An example of a translatable string file can for example look like this:
<!-- Tab context menu -->
<!ENTITY reloadTab.label "Oppdater fane">
<!ENTITY reloadTab.accesskey "O">
<!ENTITY reloadAllTabs.label "Oppdater alle fanene">
<!ENTITY reloadAllTabs.accesskey "d">
<!ENTITY closeOtherTabs.label "Lat att andre faner">
<!ENTITY closeOtherTabs.accesskey "a">
(this is the Norwegian (nn-NO) source for browser.dtd)
Life¶
life is the app that defines the most fundamental models of elmo. It basically reflects the state of translation work done and to be done. All other applications depend on this app for interactions.
Let’s delve into some of the key models:
Locale¶
Key fields:
code
- e.g. “nn-NO”name
- e.g. “Norweigian (Nynorsk)”native
- e.g. “Norsk nynorsk”
Every repository and every shipping signoff references a locale. It’s
Changeset¶
Key fields:
revision
- e.g. “9b2a99adc05e53cd4010de512f50118594756650”- (TODO: any more “key” fields here?)