Wow, thanks for your kind words! This is my first real working InDesign script ever, so I was terrified I might be doing something the wrong way without noticing it.
Building in a check if our menu item already exists is pretty simple. I added it to the updated version.
To reload the script during development, I do this: I created a little script that removes all scripting event handlers and menu items. So whenever I wanted to reload the script, I would run the clean script first. Here is what it looks like. I think this technique is mentioned somewhere in InDesign's scripting guide.
//
// ClearEventListeners.jsx
//
#target "InDesign"
#targetengine "session"
// Remove all event listeners
app.eventListeners.everyItem().remove()
// Remove all menu items created by scripts
app.scriptMenuActions.everyItem().remove();
Now for the localization problem: I edited the code so that my getTopLevelMenu() function now uses app.translateKeyString to convert the name of the object menu into the current InDesign language. I also implemented a primitive localization system and added (probably very bad) translations for French, Italian, and German of both the menu item name and the error messages. If the current language is not supported, English is used. It's easily extensible and could theoretically be used for other scripts as well. However, I can only test this on an English version of InDesign right now, so there might be some bugs I wasn't able to find. Moreover, I'm not very familiar with JavaScript, so the way I chose may not be the most efficient way to do it, but hey, it works.
Here is the updated link:
http://www.sendspace.com/file/tca5wr
Hope this makes some people's lives easier :)
Peter