diff --git a/development/scons/SConstruct b/development/scons/SConstruct index c85370a83b..de9f578e07 100644 --- a/development/scons/SConstruct +++ b/development/scons/SConstruct @@ -2065,7 +2065,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, external_l10n + # build language_l10n.pot, ui_l10n.pot, layouts_l10n.pot, qt4_l10n.pot, external_l10n, formats_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', @@ -2083,6 +2083,8 @@ if update_po: '$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'), + env.Command('$BUILDDIR/po/formats_l10n.pot', '$TOP_SRCDIR/lib/configure.py', + '$LYX_POT -b $TOP_SRCDIR -t formats -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 f60c20b0d1..d1bcec40be 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -393,7 +393,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 external_l10n.pot +l10n_pots: qt4_l10n.pot layouts_l10n.pot languages_l10n.pot ui_l10n.pot external_l10n.pot formats_l10n.pot cat $^ | \ msguniq -o $(DOMAIN).po && rm -f $^ @@ -419,6 +419,9 @@ i18n.inc: $(POFILES) postats.py external_l10n.pot: $(top_srcdir)/lib/external_templates python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t external ${top_srcdir}/lib/external_templates +formats_l10n.pot: $(top_srcdir)/lib/configure.py + python $(srcdir)/lyx_pot.py -b $(top_srcdir) -o $@ -t formats ${top_srcdir}/lib/configure.py + 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 40cb9bc535..ef58b7da18 100755 --- a/po/lyx_pot.py +++ b/po/lyx_pot.py @@ -194,6 +194,36 @@ def external_l10n(input_files, output, base): output.close() +def formats_l10n(input_files, output, base): + '''Generate pot file from configure.py''' + output = open(output, 'w') + GuiName = re.compile(r'.*\Format\s+\S+\s+\S+\s+"([^"]*)"\s+(\S*)\s+.*') + GuiName2 = re.compile(r'.*\Format\s+\S+\s+\S+\s+([^"]\S+)\s+(\S*)\s+.*') + input = open(input_files[0]) + for lineno, line in enumerate(input.readlines()): + label = "" + labelsc = "" + if GuiName.match(line): + label = GuiName.match(line).group(1) + shortcut = GuiName.match(line).group(2).replace('"', '') + elif GuiName2.match(line): + label = GuiName2.match(line).group(1) + shortcut = GuiName2.match(line).group(2).replace('"', '') + else: + continue + label = label.replace('\\', '\\\\').replace('"', '') + if shortcut != "": + labelsc = label + "|" + shortcut + if label != "": + print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \ + (relativePath(input_files[0], base), lineno+1, label) + if labelsc != "": + print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \ + (relativePath(input_files[0], base), lineno+1, labelsc) + 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 @@ -208,6 +238,7 @@ where qt4: qt4 ui files languages: file lib/languages external: external templates file + formats: formats predefined in lib/configure.py ''' if __name__ == '__main__': @@ -227,7 +258,7 @@ if __name__ == '__main__': base = value elif opt in ['-t', '--type']: input_type = value - if input_type not in ['ui', 'layouts', 'qt4', 'languages', 'external'] or output is None: + if input_type not in ['ui', 'layouts', 'qt4', 'languages', 'external', 'formats'] or output is None: print 'Wrong input type or output filename.' sys.exit(1) if input_type == 'ui': @@ -238,6 +269,8 @@ if __name__ == '__main__': qt4_l10n(args, output, base) elif input_type == 'external': external_l10n(args, output, base) + elif input_type == 'formats': + formats_l10n(args, output, base) else: languages_l10n(args, output, base) diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index 9d094d0ca0..84658afb60 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -2117,7 +2117,7 @@ void LyXFunc::doImport(string const & argument) make_pair(_("Examples|#E#e"), from_utf8(addPath(package().system_support().absFilename(), "examples")))); - docstring filter = formats.prettyName(format); + docstring filter = translateIfPossible(formats.prettyName(format)); filter += " (*."; // FIXME UNICODE filter += from_utf8(formats.extension(format)); diff --git a/src/MenuBackend.cpp b/src/MenuBackend.cpp index e35403cdd3..eec7b8cf46 100644 --- a/src/MenuBackend.cpp +++ b/src/MenuBackend.cpp @@ -53,6 +53,7 @@ namespace lyx { using support::compare_ascii_no_case; using support::contains; using support::makeDisplayPath; +using support::split; using support::token; using boost::bind; @@ -534,16 +535,20 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, Buffer const * buf) if ((*fit)->dummy()) continue; docstring label = from_utf8((*fit)->prettyname()); - docstring const shortcut = from_utf8((*fit)->shortcut()); + docstring shortcut = from_utf8((*fit)->shortcut()); + + if (!shortcut.empty()) + label += char_type('|') + shortcut; + docstring label_i18n = translateIfPossible(label); + bool const untranslated = (label == label_i18n); + shortcut = split(label_i18n, label, '|'); + if (untranslated) + // this might happen if the shortcut + // has been redefined + label = translateIfPossible(label); switch (kind) { case MenuItem::ImportFormats: - // FIXME: This is a hack, we should rather solve - // FIXME: bug 2488 instead. - if ((*fit)->name() == "text") - label = _("Plain Text"); - else if ((*fit)->name() == "textparagraph") - label = _("Plain Text, Join Lines"); label += "..."; break; case MenuItem::ViewFormats: @@ -556,12 +561,7 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, Buffer const * buf) BOOST_ASSERT(false); break; } - // FIXME: if we had proper support for translating the - // format names defined in configure.py, there would - // not be a need to check whether the shortcut is - // correct. If we add it uncondiitonally, it would - // create useless warnings on bad shortcuts - if (!shortcut.empty() && contains(label, shortcut)) + if (!shortcut.empty()) label += char_type('|') + shortcut; if (buf) diff --git a/status.15x b/status.15x index 7216e1c018..25b5869984 100644 --- a/status.15x +++ b/status.15x @@ -46,12 +46,12 @@ What's new importing LaTeX files (bug 4867). -* WINDOWS INSTALLER: +* WINDOWS INSTALLER -* BUILD: +* BUILD @@ -64,16 +64,17 @@ What's new -* USER INTERFACE: +* USER INTERFACE - Fix display of filters such as "LaTeX (plain)" in the file dialog. -* DOCUMENTATION +* DOCUMENTATION AND LOCALIZATION + +- The dynamically generated file formats in the menus are now translatable + (bug 2488). - - -* BUILD/INSTALLATION: +* BUILD/INSTALLATION