[vdr] translation context handling in vdr >= 1.5.7
Klaus Schmidinger
Klaus.Schmidinger at cadsoft.de
Fri Aug 24 14:55:14 CEST 2007
On 08/23/07 13:48, Christian Wieninger wrote:
> Hi,
>
> I just noticed a small change in the context handling of translations
> since vdr-1.5.7. Till now it was possible to have e.g.
>
> const char AllowedChars[] = trNOOP("$
> abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&");
>
> Note the 2 '$'. The first one only helps to have the second one in the
> translation and not to be interpreted as context.
>
> Previous implementations of I18nTranslate did only cut the context of
> the english version. So the translation could look like this in i18n.c
> or the po-files:
>
> // The allowed characters in strings:
> { "$ abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&",
> " aäbcdefghijklmnoöpqrsßtuüvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&",
> " abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&",
> ...
>
> The current implementation cuts the translations too which results in
>
> "[]|()*+?{}/:%@&"
>
> Is this intended? If so, one could add the dummy '$' also at the
> beginning of the translation, but has to handle this again for backwards
> compatibility.
>
> If it's not intended the following patch should give the previous behaviour:
>
> --- vdr-1.5.8/i18n.c 2007-08-19 16:10:46.000000000 +0200
> +++ vdr-1.5.8-patched/i18n.c 2007-08-23 12:47:48.000000000 +0200
> @@ -208,10 +208,10 @@
> t = dgettext(Plugin, s);
> if (t == s)
> t = gettext(s);
> - s = t;
> + return t;
> }
> - const char *p = strchr(s, '$');
> - return p ? p + 1 : s;
> + else
> + return SkipContext(s);
> }
>
> const char *I18nLocale(int Language)
gettext() may or may not return the original string, so if no translation
is found, the context needs to be stripped.
Please try this:
--- i18n.c 2007/08/19 16:03:03 1.313
+++ i18n.c 2007/08/24 12:53:53
@@ -208,10 +208,10 @@
t = dgettext(Plugin, s);
if (t == s)
t = gettext(s);
- s = t;
+ if (t != s)
+ return t;
}
- const char *p = strchr(s, '$');
- return p ? p + 1 : s;
+ return SkipContext(s);
}
const char *I18nLocale(int Language)
Klaus
More information about the vdr
mailing list