Data::Localize
→http://mt.endeworks.jp/d-6/2009/02/culmination-of-i18n.html
ちょうど今作成中のアプリケーションでC::P::I18Nを使ってたので、試してみました。嘘つきました。テストしかしてないです><
(id:lestrratさん、ありがとうございます!)
[taiyoh@taiyoh-laptop] $ make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t t/01_basic...........1/2 # Failed test at t/01_basic.t line 18. Wide character in print at /media/data/perl/lib/Test/Builder.pm line 1351. # got: 'John Doeさん、こんにちは!' # expected: 'Hello, John Doe!' # Looks like you failed 1 test of 2. t/01_basic........... Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests t/02_namespace.......ok t/03_gettext.........1/5 Wide character in print at t/03_gettext.t line 37. t/03_gettext.........ok t/04_auto............ok t/99_pod-coverage....skipped: Enable TEST_POD environment variable to test POD t/99_pod.............skipped: Enable TEST_POD environment variable to test POD Test Summary Report ------------------- t/01_basic (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 Files=6, Tests=17, 2 wallclock secs ( 0.02 usr 0.03 sys + 1.46 cusr 0.12 csys = 1.63 CPU) Result: FAIL Failed 1/6 test programs. 1/17 subtests failed. make: *** [test_dynamic] エラー 255
デバッグオプションをつけて、t/01_basic.tだけ走らせてみると…
[taiyoh@taiyoh-laptop] $ DATA_LOCALIZE_DEBUG=1 perl -Ilib t/01_basic.t 1..2 ok 1 - use Data::Localize; [Data::Localize]: add_localizer_map ja -> Data::Localize::Namespace=HASH(0x2338148) [Data::Localize]: add_localizer_map en -> Data::Localize::Namespace=HASH(0x2338148) [Data::Localize]: add_localizer_map * -> Data::Localize::Namespace=HASH(0x2338148) [Data::Localize]: detect_languages auto-detected 'ja' [Data::Localize]: localize - looking up ja [Data::Localize::Namespace]: lexicon_get - Trying Test::Data::Localize::Namespace::ja [Data::Localize::Namespace]: lexicon_get - class already loaded [Data::Localize::Namespace]: lexicon_get - setting Test::Data::Localize::Namespace::ja to already loaded [Data::Localize::Namespace]: returning lexicon from Test::Data::Localize::Namespace::ja $VAR1 = { 'Hello, stranger!' => "[_1]\x{3055}\x{3093}\x{3001}\x{3053}\x{3093}\x{306b}\x{3061}\x{306f}!" }; [Data::Localize::Localizer]: localize_for - Hello, stranger! -> Wide character in print at lib/Data/Localize/Localizer.pm line 26. [_1]さん、こんにちは! Wide character in print at lib/Data/Localize/Localizer.pm line 37. Data::Localize::Namespace=HASH(0x2338148) -> localizing '[_1]さん、こんにちは!' with (John Doe), style is maketext not ok 2 # Failed test at t/01_basic.t line 16. Wide character in print at /media/data/perl/lib/Test/Builder.pm line 1351. # got: 'John Doeさん、こんにちは!' # expected: 'Hello, John Doe!' # Looks like you failed 1 test of 2.
ああ…、
[taiyoh@taiyoh-laptop] $ echo $LANG ja_JP.UTF-8
これのことか…orz
なので、I18N::LangTags::Detectのambient_langprefs関数内のLANG関連で一番最初にみる変数を変えてみると…
[taiyoh@taiyoh-laptop] $ LANGUAGE=en make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t t/01_basic...........ok t/02_namespace.......ok t/03_gettext.........1/5 Wide character in print at t/03_gettext.t line 37. t/03_gettext.........ok t/04_auto............ok t/99_pod-coverage....skipped: Enable TEST_POD environment variable to test POD t/99_pod.............skipped: Enable TEST_POD environment variable to test POD All tests successful. Files=6, Tests=17, 2 wallclock secs ( 0.04 usr 0.00 sys + 1.52 cusr 0.08 csys = 1.64 CPU) Result: PASS
この辺は、どうするのが正しいのかは分かりません。ぱっと見でパッチなんか書けない><
まあ、僕が日本語locale使ってる軟弱者だからかもしれませんが…。一番手っ取り早いのは、テストスクリプトの冒頭に
$ENV{LANGUAGE} = 'en';
を入れてしまえば解決なのか。
(追記)
もちろん
モダンPerl入門 (CodeZine BOOKS) | |
牧 大輔 Amazonで詳しく見る by G-Tools |
(追記:2009-02-27)
→http://mt.endeworks.jp/d-6/2009/02/data-localize-fixes.html
ありがとうございます><ばっちりでした!