• このエントリーをはてなブックマークに追加

はじめに

ちょっとLog::Dispatch::*系の勉強がてら軽く試してみたLog::Dispatch::MacGrowlですが,日本語使用時にうまく表示されません.

ので,同モジュールが利用しているMac::Growlのソースコードを,アドホックに修正して,日本語表示できるようにしてみました.

Before

後で示すサンプルコードを実行すると,こんな感じになります.

ss-2010-02-14-01 on Flickr

「システム環境設定 / Growl」の「アプリケーション一覧」でも,名前が化けています.

ss-2010-02-14-02 on Flickr

After

とりあえず表示.このフレーズしか試していませんが.

ss-2010-02-14-02 on Flickr

設定の方もOKみたいです.

ss-2010-02-14-04 on Flickr

差分

ということで,オリジナルとの差分です.

--- 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__