Anonymous committed 143f65d

[i18n] support reference line.

From "3 The Format of PO Files" at ::

Comment lines starting with #: contain references to the program's
source code.

The reference comment is useful to jump to the source position.
GNU gettext tools support the reference comment. e.g.: po-mode.el binds
"s" key to "po-cycle-source-reference" that opens a source position in
a new buffer.

Comments (0)

Files changed (1)


         for node, msg in extract_messages(doctree):
             if not msg in catalog:
                 catalog[msg] = []
-            catalog[msg].append(node.uid)
+            if node.source and node.line:
+                position = {"source": node.source,
+                            "line": node.line}
+                catalog[msg].append(position)
 class MessageCatalogBuilder(I18nBuilder):
             pofile = open(pofn, 'w', encoding='utf-8')
                 pofile.write(POHEADER % data)
-                for message, uids in messages.iteritems():
+                for message, positions in messages.iteritems():
                     # message contains *one* line of text ready for translation
                     message = message.replace(u'\\', ur'\\'). \
                                       replace(u'"', ur'\"')
-                    for uid in uids:
-                        pofile.write(u'# %s\n' % uid)
+                    for position in positions:
+                        source = path.relpath(position["source"], self.outdir)
+                        line = position["line"]
+                        pofile.write(u'#: %s:%d\n' % (source, line))
                     pofile.write(u'msgid "%s"\nmsgstr ""\n\n' % message)