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