In my opinion, one of the coolest features of EPiServer is the way language resources are handled. The ease of use and flexibility of xml files in the /lang directory is very powerful.
At startup, your EPiServer site will load all the .xml files in the ~/lang directory, alphabetically. A DOM of all language resources will be built in memory, adding all elements from each .xml file, and then cached for the rest of the application life-time (if you change one of the files, it will automatically trigger a reload.)
If you have defined the same element twice, the last definition will be used, and as the files are read alphabetically, you can use this to overwrite "system" language resources, instead of changing the files shipped with EPiServer. This is a best practice, as you do not have to worry about your changes being overwritten during an upgrade. In most of my projects I define a "z_overrides.xml" file, where I put all elements that override values defined in the shipped xml files.
Unfortunately, there is no tool for working with these files. You basically have to use your favorite xml editor, notepad or Visual Studio. Another pain in larger projects is that these files can get out of sync, if people are sloppy when adding new language resources. Usually, when a site has more than one language, and I cannot translate to that language, I just copy the English (or Norwegian) text to the other language files, and someone will have to translate the files later.
At some time, the files will probably get out of sync, and you will have entries for one language that do not exist in another. The result is the well known - and dreaded - "[Missing text /pagetypes/common/ohno for en]" labels on your site.
It is time to open the toolbox, and fix this. For a long time, I've been using Beyond Compare for all my diff needs (I have even replaced the TortoiseSVN diff tool with Beyond Compare). It is not free, but almost (only $30) and is worth every penny! One of the (many) features of Beyond Compare is that you can write your own "File Comparison Rules", to compare files exactly the way you want to. I've made an "Xml - no values" rule, to compare xml files, ignoring values, and concentrating on elements and attributes. This is perfect for EPiServer xml language files, as the elements and attributes should be the same regardless of language, but the values will of course be different.
This is how it looks (click image for full-size version):
In the picture above, you can see that the English lang_EN.xml file is missing two language elements that are defined in the Swedish one (lang_SE.xml), "privacy" & "send". For this comparison to work, each language must be in a separate file (which I think is a good idea anyway.)
In Beyond Compare I can just right click the lines with red background, and select "Copy to Other Side" (and even change the text directly if I know how to translate it).
The magic is in the rule. If you've got Beyond Compare installed, compare two language files, go to the Tools menu, select "Pick Rules" submenu and click "New Rules". Name it "Xml - no values", and change the values on the "Importance" tab to this:
When you compare xml language files, you can just select this new rule on the Tools menu, and it will show you the mismatches. With Beyond Compare, keeping your language files in sync is a breeze.
(Also see Fail Safe EPiServer Translation, Do not change the name of default properties in EPiServer)