*** fix bug 2488 (make dynamic formats in menus translatable) ***

* po/lyx_pot.py:
	- new method formats_l10n that parses configure.py for file formats and shortcuts
* po/Makefile.in.in:
* development/scons/SConstruct:
	- call formats_l10n on po update

* src/MenuBackend.cpp:
	- handle translated formats
* src/LyXFunc.cpp:
	- use translated string for file filter


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_5_X@24831 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Spitzmüller 2008-05-19 09:05:59 +00:00
parent a805a50fd9
commit 8896987c68
6 changed files with 63 additions and 24 deletions

View File

@ -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} \

View File

@ -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.

View File

@ -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)

View File

@ -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));

View File

@ -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)

View File

@ -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