Jürgen Spitzmüller wrote: > This is indeed not necessary. We can safely assume that babel and > polyglossia translate the builtin floats and thus skip them in > getTClassI18nPreamble. > > The attached patch does this.
The attached patch goes one step further. It only puts translations into the preamble if translateIfPossible returned something different to the source. This way, we prevent what seems to have happened in the case of the OP: a back-translation to English in cases where a po file does not contain a translation. The (English) source expression would be used nevertheless if babel/polyglossia did not know a translation, so we lose nothing. But now, it can happen that we force babel/polyglossia to use the English term even if they contain a proper translation. Jürgen
Index: src/LaTeXFeatures.cpp =================================================================== --- src/LaTeXFeatures.cpp (Revision 37971) +++ src/LaTeXFeatures.cpp (Arbeitskopie) @@ -1197,26 +1197,31 @@ UsedFloats::const_iterator fend = usedFloats_.end(); for (; fit != fend; ++fit) { Floating const & fl = floats.getType(fit->first); + // we assume builtin floats are translated + if (fl.isPredefined()) + continue; docstring const type = from_ascii(fl.floattype()); docstring const flname = from_utf8(fl.name()); docstring name = translateIfPossible(flname, buffer().language()->code()); - if (use_polyglossia) + // only request translation if we have a real translation + // (that differs from the source) + if (use_polyglossia && flname != name) snippets.insert(getFloatI18nPreamble( type, name, from_ascii(buffer().language()->polyglossia()))); - else + else if (flname != name) snippets.insert(getFloatI18nPreamble( type, name, from_ascii(buffer().language()->babel()))); for (lang_it lit = lbeg; lit != lend; ++lit) { name = translateIfPossible(flname, (*lit)->code()); - if (use_polyglossia) + if (use_polyglossia && flname != name) snippets.insert(getFloatI18nPreamble( type, name, from_ascii((*lit)->polyglossia()))); - else + else if (flname != name) snippets.insert(getFloatI18nPreamble( type, name, from_ascii((*lit)->babel())));