Batocera.linux: ジャンル(雑な)日本語化
Batocera.linux ってなんじゃらほい?
…って人には無用な記事なのですが、
とりあえずどんなものかはGitHubでまとめてあるのでそっちで。
興味なかったらお帰りよろしう。
今回の課題
Batocera(というかEmulationStation)は日本語にも対応しておりますが、
ジャンルは非対応で英語版定義が使われているので、
これを日本語に対応させていきます。
言語切り替え
ジャンルの言語切り替えはEmulationStation自体とは別実装で、
まず resources/genres.xml の内容を一括で読み込んでから
EmulationStationの設定に合わせた言語が選択されます。
というわけで、まずジャンルの構造部分
es-app/src/Genres.h
GameGenreに nom_en や nom_fr といった言語毎のメンバがあるので
日本語用の nom_ja を追加します。
(ほんとは追加言語をいくらでも増やせるようstd::mapとかに
まとめなおすべきではあるんですが、そこまではやる気なし)
つづいて、Genres.cppの方もnom_*から選択している部分あるので
それぞれnom_jaの選択も加えていきます。
因みに
日本語の言語コードはja
日本国の国コードがJP
なのであしからず。
ジャンル定義
NullPopPoCustomではいろいろと独自定義もあるのですが、
今回あくまで公式仕様の日本語版というだけにとどめておきます。
(互換性なくなるのまずいし、解釈間違ってるのもあるし)
なお、ここでいうジャンルとは日本のゲームでいうところの
ジャンルとはだいぶ趣旨の違うもので、分類細かめの上
複数選択もできて、どちらかというと属性といった扱いになってます。
さらに、親ジャンル/子ジャンルといった構成になっていて
親ジャンルの括りのなかに細分化された子ジャンルが含まれています。
(孫ジャンルとか定義できそうですが、EmulationStationでは2階層限定)
それはさておき、まずそのジャンルが定義されている
resources/genres.xml をみてみましょう。
基本的には、ここに <nom_ja></nom_ja> で追加していくだけなのですが
いくつか注意が要るところもあります。
親ジャンル
たとえばid=3566はAdventureとなっていますが、
これは単なるアドベンチャーゲームではなくて、
<parent>10</parent>という親ジャンルが設定されています。
id=10はActionなので、つまりそれに属するid=3566は
アクションアドベンチャーということになります。
レーシング系
ひとまず1st Pers.と3rd Pers.はそれぞれ主観と俯瞰でいいとして、
Motorcycleついてるのとついてないのがそれぞれ用意されてて
ついてないのは自動車って解釈でいいのか?
あと Motorcycle だけのやつが謎。
Beat'em up って何やねん
一般的にはベルトスクロールものって呼ばれてるけど、
どちらかというと敵の群れに突っ込んでの乱闘が主題なところありまして
たとえばがんばれゴエモンなんかは別物だろうな
というわけで、とりあえず「喧嘩上等」にしといた。
Shoot'em up って何やねん
殲滅で次のステージに行く系かと思ってたんですが、
Shooter/Space Invaders Likeなんてのもありまして
解釈に困っているところ。
ついでに、Shooter Smallってのも謎。
Team-as-one って何やねん
ぐぐるとまずJリーグが出てくるのだが、これは絶対関係ないだろう。
親ジャンルがRPGだし。
パーティー編成のあるやつ?
なんだかよくわかんないので保留。
Run and 何か
Run and Shoot と Run and Gun の違いが謎。
Print Club ってぇと…
アレか、プリクラでいいのか。
でもレトロゲームだぞ。関係あるんか。
今回の成果
日本のゲームでいうジャンルといろいろ差がありまして
今一つ馴染めないところではありますが、ひとまずこれで。
__Add_37_JapaneseGenres
解釈怪しいところの修正については緩募ということで。
なお、親子関係怪しいところについては元からあるバグだし、
(たぶん親ジャンルより先に子ジャンル定義あるあたり怪しげ)
勝手に直すわけにもいかないので保留。
これについてはひとまず、拙作のBatoceraProxyについてる
Webフロントエンドで見れば多少は改善されるかもしれない。
今後の予定
さて、おまちかね。
本家へのプルリクを試みるでぇ~あります。