diff -r 3d365b4aed70 -r cc5d84d7e577 translatedpages/translatedpages.py
--- a/translatedpages/translatedpages.py	Thu Dec 30 15:07:27 2010 +0100
+++ b/translatedpages/translatedpages.py	Fri Dec 31 15:34:02 2010 +0100
@@ -59,6 +59,9 @@
     def __init__(self):
         self.languages_page_version = 0
         self._update_languages()
+        self.template_re = re.compile(self.PAGE_CODE \
+            .replace('{lang}', r'(?P<lang>%s)' % self.LANG_REGEXP) \
+            .replace('{page}', r'(?P<page>.+?)') + '$')
 
     def _parse_languages_list(self, text):
         langs = {}
@@ -94,34 +97,36 @@
         self._update_languages()
         return self.languages.get(lang_code, lang_code)
 
-    def _get_translated_page(self, name, lang_code):
-        if lang_code == self.BASE_LANG:
-            return name
+    def _get_translated_page(self, prefix, name, lang_code):
+        if lang_code != self.BASE_LANG:
+            name = self.PAGE_CODE.replace('{lang}', lang_code) \
+                                 .replace('{page}', name)
+        return prefix + name
+
+    def _get_page_info(self, page_name, specified_name=None):
+        m = self.template_re.search(page_name)
+        if m:
+            page, lang = m.group('page'), m.group('lang')
+            prefix = m.start()
         else:
-            return self.PAGE_CODE.replace('{lang}',lang_code).replace('{page}', name)
+            page = specified_name or page_name[page_name.rfind('/') + 1:]
+            lang = self.BASE_LANG
+            prefix = page_name.rfind(page)
+        return (page_name[:prefix], page, lang)
 
-    def _get_page_info(self, page_name):
-        regstr = self.PAGE_CODE.replace('{lang}',self.LANG_REGEXP).replace('{page}', '(.+)')
-        regres = re.compile(regstr).search(page_name)
-        if regres == None:
-            return (page_name, self.BASE_LANG)
-        if self.PAGE_CODE.find('{page}') > self.PAGE_CODE.find('{lang}'):
-            return (regres.group(2), regres.group(1))
-        else:
-            return (regres.group(1), regres.group(2))
-
-    def _get_translations(self, base_page_name):
+    def _get_translations(self, prefix, base_page_name):
         for l in sorted(self.languages.keys()):
-            tr = self._get_translated_page(base_page_name, l);
+            tr = self._get_translated_page(prefix, base_page_name, l);
             for subpage in sorted(WikiSystem(self.env).get_pages(tr)):
                 if(subpage == tr):
                     yield l
 
-    def _get_lang_link(self, base_name, lang_code):
-        page_name = self._get_translated_page(base_name, lang_code)
-        return u"  * [wiki:%s %s]" % (page_name, self._get_language_name(lang_code))
+    def _get_lang_link(self, prefix, base_name, lang_code):
+        page_name = self._get_translated_page(prefix, base_name, lang_code)
+        return u"  * [wiki:%s %s]" % (page_name, 
+                                      self._get_language_name(lang_code))
 
-    def _get_current_lang_link(self, lang_code):
+    def _get_current_lang_entry(self, lang_code):
         return u"  * '''%s'''" % self._get_language_name(lang_code)
 
     def expand_macro(self, formatter, name, args):
@@ -134,14 +139,15 @@
         args, kw = parse_args(args)
 
         page_name = formatter.context.resource.id
-        (base_page_name, lang_code) = self._get_page_info(page_name)
+        prefix, base_page_name, lang_code = self._get_page_info(page_name)
 
         lang_link_list = []
-        for translation in self._get_translations(base_page_name):
+        for translation in self._get_translations(prefix, base_page_name):
             if translation != lang_code:
-                lang_link_list.append(self._get_lang_link(base_page_name, translation))
+                link = self._get_lang_link(prefix, base_page_name, translation)
             else:
-                lang_link_list.append(self._get_current_lang_link(lang_code))
+                link = self._get_current_lang_entry(lang_code)
+            lang_link_list.append(link)
 
         baselink=""
         if lang_code != self.BASE_LANG and 'revision' in kw:
