Re: translation context handling in vdr >= 1.5.7

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux