**[[質問箱/247]] [#h6c86815]
|RIGHT:70|LEFT:410|c
|~サマリ|メニューが日本語になりません|
|~バージョン|1.4.7plus-u2-i18n|
|~投稿者|[[alen]]|
|~状態|完了|
|~投稿日|&new{2007-06-18 (月) 23:08:20};|
***質問 [#hfb69def]
debian etch~
apache2.2.3-4~
PHP 5.2.0-8+etch4~
~
~
# locale
LANG=ja_JP.UTF-8~
LC_CTYPE="ja_JP.UTF-8"~
LC_NUMERIC="ja_JP.UTF-8"~
LC_TIME="ja_JP.UTF-8"~
LC_COLLATE="ja_JP.UTF-8"~
LC_MONETARY="ja_JP.UTF-8"~
LC_MESSAGES="ja_JP.UTF-8"~
LC_PAPER="ja_JP.UTF-8"~
LC_NAME="ja_JP.UTF-8"~
LC_ADDRESS="ja_JP.UTF-8"~
LC_TELEPHONE="ja_JP.UTF-8"~
LC_MEASUREMENT="ja_JP.UTF-8"~
LC_IDENTIFICATION="ja_JP.UTF-8"~
~
別のサーバで動かしていたときは日本語になって
いたのですが、このたびサーバを新調して新規インストール
するとメニューやらメッセージが英語のままになってしまいます。~
~
SELinuxは無効にしています。~
[[質問箱/82]]にのっていた強制的に日本語にする
方法も通用しませんでした。~
一体何が悪いのでしょうか? (T-T~
~
***回答 [#bcee7237]
- 一番に考えられる事がlocaleディレクトリが参照できない事でしょうかねぇ…。パーミッションは適切に設定していますか?。 -- [[taru]] &new{2007-06-18 (月) 23:39:23};
-とりあえず、gettextに関するロジックを切り出してみました。実行したらどうなりますか?
#code(php){{
<?php
$locale='ja_JP';
putenv( 'LC_ALL=' . $locale);
$setlocale = setlocale(LC_ALL, $locale);
echo 'setlocale='.$setlocale."\n";
$domain = 'pukiwiki';
$bindtextdomain = bindtextdomain($domain, './locale');
echo 'bindtextdomain='.$bindtextdomain."\n";
$textdomain = textdomain($domain);
echo 'textdomain='.$textdomain."\n";
$bind_textdomain_codeset = bind_textdomain_codeset($domain, 'UTF-8');
echo 'bind_textdomain_codeset='.$bind_textdomain_codeset."\n";
echo _("Others")."\n";
?>
}}
これを、i18n.php などというファイルにして、pukiwiki を入れたディレクトリに保存して実行してみて下さい。そこには、locale や wiki や lib などのディレクトリがあるところです。問題ない環境だと、
setlocale=ja_JP
bindtextdomain=/var/www/html/pukiwiki/locale
textdomain=pukiwiki
bind_textdomain_codeset=UTF-8
その他
のように表示されるんですけどねぇ。-- [[upk]] &new{2007-06-18 (月) 23:42:54};
- 実行してみました。
setlocale=
bindtextdomain=/var/www/html/pukiwiki/locale
textdomain=pukiwiki
bind_textdomain_codeset=UTF-8
Others
setlocaleが空です。 -- [[alen]] &new{2007-06-19 (火) 12:39:24};
- 忘れてました (^^; localeのパーミッションは777です。 -- [[alen]] &new{2007-06-19 (火) 12:52:24};
-それでは、
#code(php){{
<?php
// $locale='ja_JP';
// putenv( 'LC_ALL=' . $locale);
// $setlocale = setlocale(LC_ALL, $locale);
$setlocale = setlocale(LC_ALL, NULL);
echo 'setlocale='.$setlocale."\n";
$domain = 'pukiwiki';
$bindtextdomain = bindtextdomain($domain, './locale');
echo 'bindtextdomain='.$bindtextdomain."\n";
$textdomain = textdomain($domain);
echo 'textdomain='.$textdomain."\n";
$bind_textdomain_codeset = bind_textdomain_codeset($domain, 'UTF-8');
echo 'bind_textdomain_codeset='.$bind_textdomain_codeset."\n";
echo _("Others")."\n";
?>
}}
では、どうなりますか? -- [[upk]] &new{2007-06-19 (火) 19:35:43};
- 実行してみました。
setlocale=C
bindtextdomain=/var/www/html/pukiwiki/locale
textdomain=pukiwiki
bind_textdomain_codeset=UTF-8
Others
setlocaleがCになりました。-- [[alen]] &new{2007-06-19 (火) 20:21:23};
-では、
#code(php){{
<?php
$locale='ja_JP';
putenv( 'LANG=' . $locale);
// $setlocale = setlocale(LC_ALL, $locale);
$setlocale = setlocale(LC_ALL, NULL);
echo 'setlocale='.$setlocale."\n";
$domain = 'pukiwiki';
$bindtextdomain = bindtextdomain($domain, './locale');
echo 'bindtextdomain='.$bindtextdomain."\n";
$textdomain = textdomain($domain);
echo 'textdomain='.$textdomain."\n";
$bind_textdomain_codeset = bind_textdomain_codeset($domain, 'UTF-8');
echo 'bind_textdomain_codeset='.$bind_textdomain_codeset."\n";
echo _("Others")."\n";
?>
}}
の場合は、どうなりますか? -- [[upk]] &new{2007-06-19 (火) 20:45:57};
-いずれにしても、setlocale は、PHP標準の関数を利用していて、gettextのみ、PHPに組み込まれていないような場合は、エミュレートする仕様なので、PHPによる locale の設定がうまくできない環境という認識です。-- [[upk]] &new{2007-06-19 (火) 20:55:44};
- 実行してみました。
setlocale=
bindtextdomain=/var/www/html/pukiwiki/locale
textdomain=pukiwiki
bind_textdomain_codeset=UTF-8
Others
またもや空に (..; -- [[alen]] &new{2007-06-19 (火) 21:14:44};
- 確信に近づいてきたような (^-^
#code(php){{
<?php
$locale='ja_JP.UTF-8';
putenv( 'LC_ALL=' . $locale);
$setlocale = setlocale(LC_ALL, $locale);
echo 'setlocale='.$setlocale."\n";
$domain = 'pukiwiki';
$bindtextdomain = bindtextdomain($domain, './locale');
echo 'bindtextdomain='.$bindtextdomain."\n";
$textdomain = textdomain($domain);
echo 'textdomain='.$textdomain."\n";
$bind_textdomain_codeset = bind_textdomain_codeset($domain, 'UTF-8');
echo 'bind_textdomain_codeset='.$bind_textdomain_codeset."\n";
echo _("Others")."\n";
?>
}}
ja_JPをja_JP.UTF-8これだと上手くいきます。~
あとはなぜja_JPで上手くいかないかを調べるだけ (..; -- [[alen]] &new{2007-06-19 (火) 21:37:30};
- いけましたーー (^_- locale.aliasのja_JPがja_JP.eucJPになってたんですが、ja_JP.utf8にすると日本語に (T-T ←感涙。 upk様長々とお付き合いくださりありがとうございました。。。おかげで少しスキルアップできました<(_ _)> -- [[alen]] &new{2007-06-19 (火) 21:49:55};
- おぉ、良かったですね。locale.alias ね。昔、a.out の当時、libc6 で locale の実装が入るということで、喜んでいたのを思い出しました。 -- [[upk]] &new{2007-06-19 (火) 21:58:33};
#comment
//#comment