Regarding the comment "we need to have markup to indicate translatable strings". I would like to comment that we have developed a technique that is able to extract messages from a XHTML file without any specific markup. To make it happen it makes a difference between block and inline elements.
It is also able to segment a text, so if a paragraph has several sentences it will extract them as different message ids.
You can give it a try, just download latest itoolsitools. Once installed the script try:
$ igettext-extract SOMEFILE.xhtml.en > fr.po
It will produce a PO file. Then you can translate this PO file and type:
$ igettext-build SOMEFILE.xhtml.en fr.po > SOMEFILE.xhtml.fr
This command will produce a new XHTML file that is the translation of the source file.
This technique produces good quality messages for the translator, and is a bless for the developer.