Re: Odd encoding issue with UTF-8 + gettext yields ? on non-ASCII
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Aug 30, 2010, 14:33 UTC
- Message-ID
- <AANLkTik-7FCm-WLOKOKd5uA9astMXtdZZLTT=0euX5RL@mail.gmail.com>
- In-Reply-To
- <20100830140958.GE2315@burratino>
On Mon, Aug 30, 2010 at 14:09, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 13 quoted lines
> Marcin Cieslak wrote: > >> Well, in this case everybody will be force to have UTF-8 in output >> on-screen, not useful for people using ISO8859-*, KOI8-R and similar >> things... > > Can't we do: > > setlocale(LC_CTYPE, ""); > charset = nl_langinfo(CODESET); > setlocale(LC_CTYPE, "C"); > > to allow an arbitrary character set?
Yes, it seems so! With this patch:
--- a/gettext.c
+++ b/gettext.c
@@ -3,2 +3,3 @@
#include <libintl.h>
+#include <langinfo.h>
#include <stdlib.h>
@@ -8,2 +9,3 @@ extern void git_setup_gettext(void) {
char *envdir = getenv("GIT_TEXTDOMAINDIR");
+ char *charset; @@ -19,2 +21,6 @@ extern void git_setup_gettext(void) {
(void)setlocale(LC_MESSAGES, "");
+ (void)setlocale(LC_CTYPE, "");
+ charset = nl_langinfo(CODESET);
+ (void)bind_textdomain_codeset("git", charset);
+ (void)setlocale(LC_CTYPE, "C");
(void)textdomain("git");The sanity test still passes:
./t0201-gettext-fallbacks.sh ......... ok
./t0200-gettext-basic.sh ............. ok
./t0203-gettext-setlocale-sanity.sh .. ok
./t0202-gettext-perl.sh .............. ok
All tests successful.And the resulting git binary can emit both UTF-8 and ISO-8859-1 text from its *.po files, respectively:
Bjó til tóma Git lind í /tmp/meh/.git/
Bj� til t�ma Git lind � /tmp/meh/.git/