北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

TTと日本語

Appleが頑張っている今日この頃でも、サーバはUNIX系、クライアントはWindows系であることは未だに多い。そのためにTTで日本語を扱うときに、大抵はDB〜スクリプト内部ではEUC、TTから吐き出すのはsjisであることが多くなる。

そんなときに頑張ってくれるのがTemplate::Plugin::Jcodeなんだけど、例えば、

package hoge;
use overload '""' => 'as_string';

なんて環境では、[% hoge %]で済んでいたものが、[% hoge.as_string.jcode.sjis %]と長くなって、あまり美味しくない。そんなわけで、自作。

package Hiratara::Template::Plugin::EucToSjis;

use Template::Plugin::Filter;
use Jcode;
use base qw( Template::Plugin::Filter );

sub init {
my $self = shift;
$self->install_filter('e2s');
return $self;
}

sub filter {
my ($self, $text) = @_;
return jcode($text, 'euc')->sjis();
}

これでテンプレート側には、[% USE EucToSjis %]、[% hoge | e2s %] と書ける。

さらにUSEをテンプレートに毎回書くのが嫌な時は、Template->new()時(フレームワーク等によって一カ所にまとめられていることを期待する)に、

my $tt = Template->new({ コンフィグ });
$tt->context()->plugin('EucToSjis');

とする。