From 91c6d03678d8246b727f60bb3f6c8a5ae28cee14 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Sat, 23 Jun 2007 07:50:13 +0000 Subject: [PATCH] Fix bug 2520: Make InsetExternal translateable * po/lyx_pot.py: - new function external_l10n: parse external_templates and extract the relevant parts for translation. * development/scons/SConstruct: * po/Makefile.in.in: - use external_l10n * src/insets/InsetExternal.cpp: * src/frontends/qt4/QExternal.cpp: - make eveything translatable git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18866 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/scons/SConstruct | 6 ++-- po/Makefile.in.in | 5 ++- po/lyx_pot.py | 54 ++++++++++++++++++++++++++++++++- src/frontends/qt4/QExternal.cpp | 4 +-- src/insets/InsetExternal.cpp | 3 +- 5 files changed, 65 insertions(+), 7 deletions(-) diff --git a/development/scons/SConstruct b/development/scons/SConstruct index c964e437b0..c35e110094 100644 --- a/development/scons/SConstruct +++ b/development/scons/SConstruct @@ -2043,7 +2043,7 @@ if update_po: ['$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 @@ if update_po: 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} \ diff --git a/po/Makefile.in.in b/po/Makefile.in.in index b53e0241e5..2f0bc2c73c 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -376,7 +376,7 @@ ${srcdir}/POTFILES.in: $(POTFILE_IN_DEPS) sort | uniq ) > $@-t \ && mv $@-t $@ -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 @@ ui_l10n.pot: $(top_srcdir)/lib/ui/*.ui $(top_srcdir)/lib/ui/*.inc 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. diff --git a/po/lyx_pot.py b/po/lyx_pot.py index fb7578d026..40cb9bc535 100755 --- a/po/lyx_pot.py +++ b/po/lyx_pot.py @@ -145,6 +145,55 @@ def languages_l10n(input_files, output, base): 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 @@ where layouts: lib/layouts/* qt4: qt4 ui files languages: file lib/languages + external: external templates file ''' if __name__ == '__main__': @@ -177,7 +227,7 @@ if __name__ == '__main__': 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 @@ if __name__ == '__main__': 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) diff --git a/src/frontends/qt4/QExternal.cpp b/src/frontends/qt4/QExternal.cpp index 83f009368f..ec6f9705c9 100644 --- a/src/frontends/qt4/QExternal.cpp +++ b/src/frontends/qt4/QExternal.cpp @@ -544,7 +544,7 @@ void QExternal::build_dialog() for (std::vector::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 @@ void QExternal::updateTemplate() { 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. diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index d3a6cb3a25..091b6149b8 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -577,8 +577,9 @@ docstring const getScreenLabel(InsetExternalParams const & params, 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 &, -- 2.39.2