2017年10月3日火曜日

Hegemony Rome: The Rise of Caesar 日本語化作業シート

和訳作業シートはこちらです。
イヤな目に会った前例により、匿名の方の直接の編集はお断りしております。編集権が欲しい方はシートへのコメント、またはこちらのコメント欄よりご請求ください。
どうしても編集したいけど匿名でいたい方はご自分のドライブにコピーする権限は付与してございますので、コピーなりダウンロードなりしたうえで利用ください。

まだ先日購入したバンドルのうち一作もやってないんですが、その一つのHegemony Rome: The Rise of Caesar、だれも手を付けていないけれど、日本語化できそうだネってな具合で手を付けてみたら極めて優秀な多言語対応ぶりで感動しました。

思わず作業シートと、作業シートからlanguage.strを再生成するスクリプトを作ってみたところ、結果は良好です。
例えば、ローディングスクリーンではこんな具合。ごめんね、機械翻訳でごめんね。
ナレーション画面だとこんな感じ。
デフォルトフォントだと中華系のフォントが入っていて日本語で使われる文字の収録数が少ないため、やたらと豆腐になるのですが、フォント設定(fontregistry.xnt)を変えるだけで上のサンプルのようにバッチリ日本語がきれいに表示されています。なお、上記のサンプルで使用したフォントはmeiryoです。
蟹行文字文化圏にありがちな文字間に(日本語では不自然な)空白を入れる必要もなく、極めて優秀、単純に翻訳するだけでおしまいなパターンなんてめったにありませんのでなんだかうれしくなっちゃいますねえ。

こんなに簡単に日本語化できるんならだれかやっててもよさそうなのに誰もやってない。
つまり・・・そういうことなんでしょうねえ。

なお、私自身もゲーム自体はやってないですしやるかどうかもわかりません。
やけにメモリ食うし動作も軽快とは見えないし、何よりマウスカーソルを奪ったらキーボード操作を介さないと放してくれないという、まるで20世紀に作られたかのようなプログラムなので、私の好みにまったくあいません。
ゲームの内容を理解する前に放棄するんじゃないかなあと思っています。そもそもバンドルについてきたってだけでのご縁ですので、いまだにどんなゲームかもまだ知らないですし。

余談ですが、google translateはローマ史が苦手みたいですね。
ガリアを正しくガリアと表記できたパターンがほとんどなくガウルだったりガールになってみたり、さらにはヴェルティンジェトリックスや小カトーなどは翻訳すらできないケースもちらほら散見されます。
まあ、アメリカだからいいのかな。ヨーロッパだったら許されない気もするけど。

ま、このまま機械翻訳を進めても、この調子じゃどうしようもないかもしれませんねぇ。

とりあえず、作業シートのTSVからlanguage.strを再生成するスクリプトは以下です。
注意点:
  • 以下の作業はHegemony Rome\Resources\Entitiesで行ってください。
  • オリジナルのlanguage.strはlanguage.str.orgにリネームする。
  • 作業シートの1行目および、全行のカラムA,B,C,Dは変更不可(下記のE,F列にある翻訳結果をlanguage.strに反映するために使用するためです)
  • カラムEに機械翻訳(必須。英文のままでも構いません)、カラムFに手動翻訳(空欄可)があること
  • 上記の点に留意なさって、作業シートを開いてコピペしてa.tsvというファイルとして保存。ダウンロードではない点に注意。
そのうえで以下のスクリプトを実行した結果をlanguage.strにリダイレクトして保存します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env perl -w
#
# Hegemony Rome: The Rise of Caesar用
#  日本語化language.str生成スクリプト
#
# 引数: 日本語化済tsvファイル名
#   ハイフン: 標準入力
#   省略時  : a.tsv
#   ※tsvの内容は以下のシート内容をCtrl+Aで全コピーした内容を保存したファイル
#     https://docs.google.com/spreadsheets/d/1ZxyFLIHI7GFTSxWfHxfhY601CNAkSZZdEaymD6WYeAU/
# 必要データファイル(実行ディレクトリにあること):
#   language.str.org (オリジナルのlanguage.strをリネームしたもの)
# 出力先: STDOUT (language.strにリダイレクトして使用)
#
our $LANGUAGESTRMADEDATE=`LANG=C date`;
sub conbined_text_decode
{
  my $str =$_[0];
  my @arr = split( /\t/m, $str );
  my $text = $arr[4];
  if( defined( $arr[5] ) && $arr[5] ne "" && $arr[5] ne "\n" && $arr[5] ne "\r\n"){
    $text = $arr[5];
  }
  $text  =~ s/"//mg;
  $text  =~ s/"/\"/mg;
  $text  =~ s/\\t;/\t/mg;
  $text  =~ s/\n\n$/\n/mg;
   
 
  $text =~ s/%%%LANGUAGESTRMADEDATE%%%/$LANGUAGESTRMADEDATE/;
  return $text;
}
sub tag_check
{
  my ($indexno,$line) = (@_);
  my $str = $line;
 
  my $pre  = $str =~ s/<//g;
  my $post = $str =~ s/>//g;
   
  if( $pre != $post ){
    print STDERR "$line $pre vs $post TAG ERROR index=$indexno\n";
  }
}
my @TSV=();
my $combinedline="";
my $mode = 0;
my $translate_indexno = 0;
my $lineno = 0;
my $isfirst = 0;
my $INPUTFNAME=$ARGV[0];
my $FH = *STDIN;
if(!defined($INPUTFNAME)){
  $INPUTFNAME="a.tsv";
}
if( $INPUTFNAME ne "-" ){
  open (FIN_TSV, "<$INPUTFNAME") or die "can't open tsv $INPUTFNAME";
  $FH = *FIN_TSV;
}
while(<$FH>){
  my $line = $_;
  my @arr = split( /\t/,$line);
  if( $arr[0] eq "#lineno" ){
    next;
  }
  if($isfirst ==0){
    $combinedline = $line;
    $isfirst  = 1;
    next;
  }
 
  if( $#arr >= 2 && $arr[0] =~ m/^\d+$/ && $arr[1] =~ m/^\d+$/ ){
    @arr = split( /\t/,$combinedline);
    $translate_indexno = $arr[1];
    $TSV[ $translate_indexno ] = conbined_text_decode( $combinedline );
    $combinedline = $line;
  }
  else{
    $combinedline .= $line;
  }
}
my @arr = split( /\t/,$combinedline);
$translate_indexno = $arr[1];
$TSV[ $translate_indexno ] = conbined_text_decode( $combinedline );
if( $INPUTFNAME ne "-" ){
  close(FIN_TSV);
}
 
 
$combinedline="";
$mode = 0;
$translate_indexno = 0;
$lineno = 0;
open (FIN, "<language.str.org") or die "can't open language.str.org";
while(<FIN>){
  my $line = $_;
  $lineno++;
  if( $line =~ m/^%%LANGUAGE=en[\r\n]+/ ){
    $mode  = 1;
    print $line;
    next;
  }
  if( $mode  == 1 && $line =~ m/^%%STRING=<<HEREDOC[\r\n]/ ){
    $mode  = 2;
    $combinedline="";
    print $line;
    next;
  }
  if( $mode == 2 ){
    $translate_indexno++;
    $mode = 3;
    $combinedline = "";
  }
  if( $mode == 3 ){
    if( $line =~ m/^HEREDOC[\r\n]/ ){
      if(defined( $TSV[ $translate_indexno ])){
        tag_check( $translate_indexno, $TSV[ $translate_indexno ] );
        print $TSV[ $translate_indexno ];
        if( $TSV[ $translate_indexno ] !~ m/\n$/ ){
          print "\n";
        }
      }
      print $line;
      $mode = 0;
    }
    else{
      $combinedline .= $line;
    }
    next;
  }
  elsif( $mode == 0 ){
    print $line;
  }
}
close(FIN);
使い方はスクリプトの井桁(#)が並んでいる冒頭部分にあります。同じものがシートの備忘録にもありますので、そちらのほうが分かりやすいかもしれませんのでご覧ください。
いやあ、どんなOS(Windowsですら)でもperlがのってないOSはない時代になったので説明が楽でいいですわ。

結果だけ欲しい?
私もです。
まあ、翻訳元文が3,648文もあるんで、暇を見つけて機械翻訳にかけていきたいと思ってはいます。
そしてゆくゆくは機械翻訳版language.strを直接ダウンロードできるようにはしたいと、まあ・・・どうかなぁ。やらない気がするゲームなのでモチベーションは正直申し上げてかなり低いです。特に原文を機械翻訳にかけて結果をシートにペーストするような単純作業といった場合、モチベーションの低さが作業量に直結することは率直に認めます。

我こそは訳出するゾ、という方がおいでであればぜひよろしくお願いいたします。
ま。過去の例で一人も出てきたことはないうえにCapitalism Labでは古い古いと苦情ばっかりみたいなので申し訳ないです。そのために作業シート、変換ツール、ノウハウまで公開してんだろ。自分でやれよ

0 件のコメント:

コメントを投稿