--- turbogears-1.0.1/i18n/kidutils.py	2007-04-18 10:41:55.000000000 -0400
+++ turbogears/i18n/kidutils.py	2007-04-18 17:03:57.000000000 -0400
@@ -35,8 +35,15 @@
     if attr is None:attr = turbogears.config.get("i18n.templateLocaleAttribute", "lang")    
     translate_all(item, item.get(attr), attr)
     return item
-    
-def translate_all(tree, lang, attr):
+
+def __translate_text(text, lang):
+    prefix = ''
+    postfix = ''
+    if len(text) > 0 and text[0].isspace(): prefix = text[0]
+    if len(text) > 1 and text[-1].isspace(): postfix = text[-1]
+    return prefix + gettext(text.strip(), lang) + postfix
+
+def translate_all(tree, lang, attr, inroot=True):
     """Recursive function to translate all text in child elements
     @param tree: parent ElementTree element
     @param lang: language setting
@@ -44,11 +51,14 @@
     """
 
     if tree.text:
-        tree.text = gettext(tree.text.strip(), lang)
+        tree.text = __translate_text(tree.text, lang)
+    if tree.tail and not inroot:
+        # Don't translate tail of root. It is beyond the scope of the lang attr 
+        tree.tail = __translate_text(tree.tail, lang)
     for element in tree:
         # check overriding lang attribute
         if element.get(attr):lang = element.get(attr)
-        translate_all(element, lang, attr)
+        translate_all(element, lang, attr, False)
 
 def i18n_filter(stream, template, locale=None):
     """Kid template filter which calls translates all elements matching language 

