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

[debian-users:42760] Re: [gettext] ja.po の msgid に non-ASCII 文字は使える?



In article <050202020421.M0105065@xxxxxxxxxxxxxxxxx> (at Wed, 2 Feb 2005 02:04:21 +0900), hma@xxxxxxxxxxxxx says:

> [debian-users:42596] で質問した、
> 「UTF-8 で書いた ja.po の中で、 msgid に non-ASCII 文字は使用できるのか」
> という問題について、
> 条件付きで使えることがわかりました。
> 
> 試しかた:
> 
>     添付の g.c の中の文字列を変換するため、
>     添付した ja.po を使用してメッセージカタログを作ります。
>     このとき、
>      msgfmt -o g.mo ja.po
>     で生成した g.mo では変換に失敗し、
> 
>      msgfmt --no-hash -o g.mo ja.po
>     で生成した g.mo では変換に成功しました。
:
>     non-ASCII を含む msgid を変換する時には、
>     intl/dcigettext.c: 705 行め付近の、nctr の計算結果が 0 になり、
>     707 行目の判定で該当する msgid なしということにされてしまいます。
:
>     domain->hash_tab[idx] が 0 になるのは、ハッシュの計算に
>     ミスがあるためではないかと思い、msgfmt の man を見直して 
>     --no-hash オプションを見つけました。これを試したら
>     うまくいったというわけです。

ちらっと見た感じ、gettextとglibcでhash_string()が微妙に違い、
実際、得られる値が異なります。

これでうまくいきますか?

diff -ru gettext-0.14.1/gettext-runtime/intl/hash-string.h gettext-0.14.1-fix/gettext-runtime/intl/hash-string.h
--- gettext-0.14.1/gettext-runtime/intl/hash-string.h	2003-10-24 19:23:03.000000000 +0900
+++ gettext-0.14.1-fix/gettext-runtime/intl/hash-string.h	2005-02-02 05:16:17.000000000 +0900
@@ -36,7 +36,7 @@
   while (*str != '\0')
     {
       hval <<= 4;
-      hval += (unsigned char) *str++;
+      hval += (unsigned long int) *str++;
       g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
       if (g != 0)
 	{

-- 
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@xxxxxxxxxxxxxx>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF  80D8 4807 F894 E062 0EEA