http://bugzilla.lyx.org/show_bug.cgi?id=2520

The attached patch does this (I think it's the last remaining non-translatable 
ui part).

Kudos to Neil Muller for his Python help. Remaining clumsyness is obviously my 
own, since I implemented it somewhat differently.

Opinions?

Jürgen
Index: src/insets/InsetExternal.cpp
===================================================================
--- src/insets/InsetExternal.cpp	(Revision 18821)
+++ src/insets/InsetExternal.cpp	(Arbeitskopie)
@@ -577,8 +577,9 @@
 		return support::bformat((_("External template %1$s is not installed")),
 					from_utf8(params.templatename()));
 	// FIXME UNICODE
+	docstring gui = _(ptr->guiName);
 	return from_utf8(external::doSubstitution(params, buffer,
-				ptr->guiName, false));
+				to_utf8(gui), false));
 }
 
 void add_preview_and_start_loading(RenderMonitoredPreview &,
Index: src/frontends/qt4/QExternal.cpp
===================================================================
--- src/frontends/qt4/QExternal.cpp	(Revision 18821)
+++ src/frontends/qt4/QExternal.cpp	(Arbeitskopie)
@@ -544,7 +544,7 @@
 
 	for (std::vector<string>::const_iterator cit = templates.begin();
 		cit != templates.end(); ++cit) {
-		dialog_->externalCO->addItem(toqstr(*cit));
+		dialog_->externalCO->addItem(qt_(*cit));
 	}
 
 	// Fill the origins combo
@@ -604,7 +604,7 @@
 {
 	external::Template templ =
 		controller().getTemplate(dialog_->externalCO->currentIndex());
-	dialog_->externalTB->setPlainText(toqstr(templ.helpText));
+	dialog_->externalTB->setPlainText(qt_(templ.helpText));
 
 	// Ascertain which (if any) transformations the template supports
 	// and disable tabs hosting unsupported transforms.
Index: po/Makefile.in.in
===================================================================
--- po/Makefile.in.in	(Revision 18821)
+++ po/Makefile.in.in	(Arbeitskopie)
@@ -376,7 +376,7 @@
 	     sort | uniq ) > [EMAIL PROTECTED] \
 	&& mv [EMAIL PROTECTED] $@
 
-l10n_pots: qt4_l10n.pot layouts_l10n.pot languages_l10n.pot ui_l10n.pot
+l10n_pots: qt4_l10n.pot layouts_l10n.pot languages_l10n.pot ui_l10n.pot external_l10n.pot
 	cat $^ | \
 	msguniq -o $(DOMAIN).po && rm -f  $^
 
@@ -399,6 +399,9 @@
 i18n.php: $(POFILES) postats.sh
 	(cd $(srcdir) ; ./postats.sh $(POFILES)) >$@
 
+external_l10n.pot: $(top_srcdir)/lib/external_templates
+	python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t external ${top_srcdir}/lib/external_templates
+
 force:
 
 # Tell versions [3.59,3.63) of GNU make not to export all variables.
Index: po/lyx_pot.py
===================================================================
--- po/lyx_pot.py	(Revision 18821)
+++ po/lyx_pot.py	(Arbeitskopie)
@@ -145,6 +145,55 @@
     output.close()
 
 
+def external_l10n(input_files, output, base):
+    '''Generate pot file from lib/external_templates'''
+    output = open(output, 'w')
+    Template = re.compile(r'^Template\s+(.*)')
+    GuiName = re.compile(r'\s*GuiName\s+(.*)')
+    HelpTextStart = re.compile(r'\s*HelpText\s')
+    HelpTextSection = re.compile(r'\s*(\S.*)\s*$')
+    HelpTextEnd = re.compile(r'\s*HelpTextEnd\s')
+    i = -1
+    for src in input_files:
+        input = open(src)
+        inHelp = False
+        hadHelp = False
+        prev_help_string = ''
+        for lineno, line in enumerate(input.readlines()):
+            if Template.match(line):
+                (string,) = Template.match(line).groups()
+            elif GuiName.match(line):
+                (string,) = GuiName.match(line).groups()
+            elif inHelp:
+                if HelpTextEnd.match(line):
+                    if hadHelp:
+                        print >> output, '\nmsgstr ""\n'
+                    inHelp = False
+                    hadHelp = False
+                    prev_help_string = ''
+                elif HelpTextSection.match(line):
+                    (help_string,) = HelpTextSection.match(line).groups()
+                    help_string = help_string.replace('"', '')
+                    if help_string != "" and prev_help_string == '':
+                        print >> output, '#: %s:%d\nmsgid ""\n"%s\\n"' % \
+                            (relativePath(src, base), lineno+1, help_string)
+                        hadHelp = True
+                    elif help_string != "":
+                        print >> output, '"%s\\n"' % help_string
+                    prev_help_string = help_string
+            elif HelpTextStart.match(line):
+                inHelp = True
+                prev_help_string = ''
+            else:
+                continue
+            string = string.replace('"', '')
+            if string != "" and not inHelp:
+                print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \
+                    (relativePath(src, base), lineno+1, string)
+        input.close()
+    output.close()
+
+
 Usage = '''
 lyx_pot.py [-b|--base top_src_dir] [-o|--output output_file] [-h|--help] -t|--type input_type input_files
 
@@ -158,6 +207,7 @@
         layouts: lib/layouts/*
         qt4: qt4 ui files
         languages: file lib/languages
+        external: external templates file
 '''
 
 if __name__ == '__main__':
@@ -177,7 +227,7 @@
             base = value
         elif opt in ['-t', '--type']:
             input_type = value
-    if input_type not in ['ui', 'layouts', 'qt4', 'languages'] or output is None:
+    if input_type not in ['ui', 'layouts', 'qt4', 'languages', 'external'] or output is None:
         print 'Wrong input type or output filename.'
         sys.exit(1)
     if input_type == 'ui':
@@ -186,6 +236,8 @@
         layouts_l10n(args, output, base)
     elif input_type == 'qt4':
         qt4_l10n(args, output, base)
+    elif input_type == 'external':
+        external_l10n(args, output, base)
     else:
         languages_l10n(args, output, base)
 
Index: development/scons/SConstruct
===================================================================
--- development/scons/SConstruct	(Revision 18821)
+++ development/scons/SConstruct	(Arbeitskopie)
@@ -2043,7 +2043,7 @@
         ['$TOP_SRCDIR/src/tex2lyx/%s' % x for x in src_tex2lyx_header_files + src_tex2lyx_files ]
     )
     Alias('update_po', POTFILES_in)
-    # build language_l10n.pot, ui_l10n.pot, layouts_l10n.pot, qt4_l10n.pot
+    # build language_l10n.pot, ui_l10n.pot, layouts_l10n.pot, qt4_l10n.pot, external_l10n
     # and combine them to lyx.po
     env['LYX_POT'] = 'python $TOP_SRCDIR/po/lyx_pot.py'
     lyx_po = env.Command('$BUILDDIR/po/lyx.po',
@@ -2054,11 +2054,13 @@
              env.Command('$BUILDDIR/po/layouts_l10n.pot', 
                 ['$TOP_SRCDIR/lib/layouts/%s' % x for x in lib_layouts_files + lib_layouts_inc_files],
                 '$LYX_POT -b $TOP_SRCDIR -t layouts -o $TARGET $SOURCES'),
-             env.Command('$BUILDDIR/po/languages_l10n.pot', '$TOP_SRCDIR/lib/languages', 
+             env.Command('$BUILDDIR/po/languages_l10n.pot', '$TOP_SRCDIR/lib/languages',
                 '$LYX_POT -b $TOP_SRCDIR -t languages -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/ui_l10n.pot', 
                 ['$TOP_SRCDIR/lib/ui/%s' % x for x in lib_ui_files],
                 '$LYX_POT -b $TOP_SRCDIR -t ui -o $TARGET $SOURCES'),
+             env.Command('$BUILDDIR/po/external_l10n.pot', '$TOP_SRCDIR/lib/external_templates',
+                '$LYX_POT -b $TOP_SRCDIR -t external -o $TARGET $SOURCES'),
              ], utils.env_cat),
             ['$MSGUNIQ -o $TARGET $SOURCE',
              '''$XGETTEXT --default-domain=${TARGET.base} \

Reply via email to