次にメニューを日本語化しようとして、Garminのサイトに行き、日本語版ファームを解凍し、
Japanese.gttを入手。
gttはxmlでグロッサリが記述されている。
utf-8でBOMつき、改行コードはCRLF、しかもなぜかアトリビュートは777だった。
喜び勇んで、そのままetrex 30に入れたのだが、動かなかった。
やっぱ日本語版 etrex 30J とは何か違うのか?
etrex30内部のSpanish.gttを見ると、項目が増えているように見える。
これらも入れてやらないと動かないってことだろうか?
こういうときに自分が使うのはperlだ。(Python でもいいと思うけど)
今回はxmlを使うので、cpan使ってXML::DOMとかXML::XPathを入れた。
(ちなみにmacでやってる。)
etrex 30に入っていたSpanish.gtt(別にGerman.gttでもいいんだけど)に対して、
etrex 30J用のファームを解凍して手に入れたJapanese.gttを当てていこうと、
以下のようにコーディング
【使い方】
入手したJapanese.gttはJapanese.gtt.orgへ変更しておく
./conv.pl > Japanese.gtt
とやってリダイレクトする
【注意】
お約束だけど、個人責任でよろしく
できあがったものはutf-8だけど、BOMなし、改行コードはLFのみになる。
アトリビュートは手動で変更したが、必要かどうかわからない。
--- conv.pl ---
#!/usr/bin/perl
use utf8;
use XML::DOM;
use XML::DOM::XPath;
my $parser = new XML::DOM::Parser;
my $jDoc = $parser->parsefile("Japanese.gtt.org");
my $sDoc = $parser->parsefile("Spanish.gtt");
my $jTags;
#日本語からtagとstrの組を覚える
foreach $node($jDoc->findnodes("//gtt/str/*")){
$tag = $node->getTagName;
if($tag =~ /tag/){
$tagvalue = $node->getFirstChild->getNodeValue();
# print "$tagvalue\n";
}
# Garmin さん、XMLなのに順番に依存する作りは良くないよ
if($tag =~ /txt/){
$txtvalue = $node->getFirstChild->getNodeValue();
$jTags{$tagvalue} = $txtvalue;
# print "$txtvalue\n";
}
}
#スパニッシュのヘッダを書き換える
foreach $node($sDoc->findnodes("//gtt/hdr/*")){
$tag = $node->getTagName;
if ($tag =~ /lang/){
$node->getFirstChild->setNodeValue("Japanese");
}
if ($tag =~ /desc/){
$node->getFirstChild->setNodeValue("Japanese");
}
if ($tag =~ /cpage/){
$node->getFirstChild->setNodeValue("Japanese");
}
}
#スパニッシュのtagを読んで、Japaneseのstrを吐き出す
foreach $node($sDoc->findnodes("//gtt/str/*")){
$tag = $node->getTagName;
if ($tag =~/tag/){
$tagvalue = $node->getFirstChild->getNodeValue();
# print "$tagvalue\n";
}
if ($tag =~/txt/){
$txtvalue = $node->getFirstChild->getNodeValue();
if($jTags{$tagvalue} ne ""){
$txtvalue = $jTags{$tagvalue};
}
$node->getFirstChild->setNodeValue($txtvalue);
# print "$txtvalue\n";
}
}
print $sDoc->toString();
---- end ----
【ぼやき】
なんか巷のサイトを見ると、xmlをファイルから読み込むのに面倒くさい事してたり、
getElementsByTagNameでXPathも使わずに読み込んでたり、
どうも自分の感性と違う使い方をしてらっしゃる。
今回入手したGarmin のXMLもひどいもんだ。
こんな感じになってるんだけど
<str>
<tag>TXT_NANTARA</tag>
<txt>なんたら</txt>
</str>
<str>
<tag>TXT_KANTARA</tag>
<txt>かんたら</txt>
</str>
自分ならこうする
<str id="TXT_NANTARA">なんたら</str>
<str id="TXT_KANTARA">かんたら</str>
理由は上記スクリプトの中の文句を見れば、わかってもらえると思う。
1 件のコメント:
突然の投稿失礼致します。
今度初めてetrex30を購入しようと考えているんですが、私もmacにて日本語化しようとしています。
記事を参考に見させて頂いてるんですが、ただPCの知識があまりなく記事を読んでみてもどう進めていくのか、まだ分からずに悩んでいます。
どうか日本語化の順序等教えて頂けないでしょうか。
よろしくお願い致します。
コメントを投稿