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

Reply via email to