2010
02-14
15:27
はじめに
ちょっとLog::Dispatch::*系の勉強がてら軽く試してみたLog::Dispatch::MacGrowlですが,日本語使用時にうまく表示されません.
ので,同モジュールが利用しているMac::Growlのソースコードを,アドホックに修正して,日本語表示できるようにしてみました.
Before
後で示すサンプルコードを実行すると,こんな感じになります.
「システム環境設定 / Growl」の「アプリケーション一覧」でも,名前が化けています.
After
とりあえず表示.このフレーズしか試していませんが.
設定の方もOKみたいです.
差分
ということで,オリジナルとの差分です.
--- Growl.orig.pm 2010-02-14 14:28:08.000000000 +0900 +++ Growl.mod.pm 2010-02-14 14:47:48.000000000 +0900 @@ -287,7 +287,7 @@ sub AppleScript_RegisterNotifications($$$;$) { my($appName, $allNotes, $defaultNotes, $iconOfApp) = @_; - _Fix_Encode($_, 'MacRoman') for ($appName); + _Fix_Encode($_, 'sjis') for ($appName); # protect quotes and slashes for ($appName, $iconOfApp) { @@ -318,7 +318,7 @@ for ($appName, $noteName, $noteTitle, $noteDescription) { next unless defined; _Fix_AppleScript_String($_); - _Fix_Encode($_, 'MacRoman'); # can't get to work with UTF8, so this will do + _Fix_Encode($_, 'sjis'); # can't get to work with UTF8, so this will do } my $script = qq'tell application "$helper" to notify ' .
おわりに
あくまでアドホックなので,他の部分の動作に影響が出る可能性も十分あるかもしれません.
参考
サンプルコード
#!/usr/bin/env perl use strict; use warnings; use utf8; use Log::Dispatch::MacGrowl; use Encode; sub en { encode_utf8($_[0]); } my $note1 = Log::Dispatch::MacGrowl->new( name => 'sample1', min_level => 'debug', app_name => 'sample1', title => 'sample1', sticky => 1, priority => 0, ); my $note2 = Log::Dispatch::MacGrowl->new( name => 'sample2', min_level => 'debug', app_name => en('サンプル2'), #app_name => 'sample2', title => en('サンプル2'), sticky => 1, priority => 2, ); $note1->log(level => 'debug', message => 'Hello!'); $note2->log(level => 'debug', message => en('こんにちは!')); __END__







