ウオロェデョイ埠頭

lo vrici selciska be la .xopukas.

マイクラのイスクイル3版が見たい・第1報

 Attál!

 マイクラこと Minecraft は多言語対応がやたらと充実しています。多くの自然言語のほか、エスペラント・トキポナ・ロジバンを含むいくつかの人工言語にも対応しています。それも非公式の MOD ではなく、公式が出しているのがまた凄い。

 しかし、残念ながらイスクイル版はありません!悲しいですね。「ロジバンはあるのにどうして……」と謎のライバル意識由来の悔しさすら覚えると言っても過言ではない。*1

 ならば私の手で作……ることはできなくとも、作ろうと試みることくらいはしておきたいものです。

 このシリーズ(第2報が出ればの話ですが)では、1人のよわよわイスクイル3学習者が手探りで Minecraft のイスクイル3の言語ファイルを作ろうと試みる過程を、備忘録も兼ねてゆるゆると綴っていきます。もしかしたら、イスクイル3学習者の方や、自身の好きな言語でマイクラをやってみたいというマイナー自然言語人工言語学習者・人工言語作者の方のお役に立てるかもしれません。

1  翻訳の準備

1.1  日本語版のファイルを探す

 私の母語であり私が最も長い時間マイクラの表示言語にしていた日本語版をもとにイスクイル版を作るのが簡単そうなので、日本語版のファイルを探すところから始まります。

 PCのシステムに慣れている人ならしないような、エクスプローラー内での情けない右往左往の後、とりあえずそれらしきものを発見。

日本語版のファイル。6539行目までずっとこんな感じ

 メッセージや警告表示、ブロック・アイテム名、設定項目名など、マイクラで現れるあらゆる言語表示のIDと値がずらーっと同じ形で並んでいます。全部で6538項目ありました。バージョン情報は探しても見つかりませんでしたが「竹ブロック」などがあるところから考えるとおそらく 1.20 でしょう(雑)。

 ディレクトリ上でくねくねしていたらロジバン版も見つけました。

こちらはロジバン版

 ロジバン版は日本語版より少なく3700項目しかありません。実際にロジバンでプレイしているときに訳されていない(英語の)テキストがちらほら見つかったので、1.20には完全対応していないようです。

1.2  作業用スプシを整える

 日本語版を見ながらイスクイルに訳していくわけですが、このまま VSCode で書き換えるよりも、表計算ツールのスプシこと Google Sheets (Google スプレッドシート) を使う方が早そうなので、そちらで草案を生やしていきます。

 まずは VSCode 上で全てを選択してコピーし、新しいシートの A1 セルに Ctrl+Shift+V で値のみペーストすると、文字列がずらずらーっと入ります。このシートはこれ以上編集せず原典としてとっておきたいので「シートを保護」しておきます。現時点で「原典」シートはこんな感じになっています。

「原典」シート。A6539 セルまでずっとこの調子で書かれています

 さて、実際に翻訳作業をするためのシート、「作業」シートを作りましょう。

 新しいシートを作成して、A列はラベルとして固定します。

 次に、A2 セルに「='原典'!$A2」と書きます。するとそこに「原典」の A2 の中身である「accessibility.onboarding.accessibility.button: "アクセシビリティ設定…",」が出てきます。

 ……が、どうせならもっと見やすい形にしましょう。

 「原典」のデータは全て「ID: "日本語訳",」の形で書かれています。コロンやクォーテーションを取り払って、ID と日本語訳の部分だけを A 列と B 列に分けて表示できれば、もう少し見やすくなりそうです。

ID・名前を左右で分けたいの図

 このような場面では 正規表現(Regurar Explession) が役に立ちます!*2

 正規表現で検索して置換する関数 regexreplace さんがここにいます。かれの理解できる呪文にして頼んでみましょう。まずは ID を抜き出すほうから。先ほど式を入れた A2 セルを、

  =regexreplace('原典'!$A2,"^(.*)\:.*$","$1")

と書き換えてみます。*3 *4

 そこには「accessibility.onboarding.accessibility.button」と表示されます。無事に ID を抜き出すことができました。右の日本語訳のほうも B2 セルに「=regexreplace('原典'!$A2,"^.*\:\s.(.*).,$","$1")」と打ち込むと出ます。

 

 さて。これを下まで伸ばすと全てのセルに表示できますが、面倒なので A2, B2 の指揮をそれぞれ「=arrayformula(regexreplace('原典'!$A2:A6539,"^(.*)\:.*$","$1"))」と「=arrayformula(regexreplace('原典'!$A2:A6539,"^.*\:\s.(.*).,$","$1"))」にします。これで同様の表示を得ることができます。*5

 あと、「アカシアのフェンス」とか「赤色の羊毛」みたいな「N1の N2」という形のブロック名が大量にあります。後のことを考えるとこれらを「N1の」と「N2」に分けたものを表示しておきたいですね。

 ブロック名の部分は468~2179行目なので、C468 セルに「=arrayformula(regexreplace(B468:B2179,"^(.*)の?"&D468:D2179&"$","$1"))」、D468 セルに「=arrayformula(regexreplace(B468:B2179,"^.+の([^の]+)$","$1"))」と入れれば分けることができます(「の」がない場合は D 列にすべて表示されます)。*6

「N1のN2」を分けるとこうなる

 最後に出てきた "の" のところで二分するだけの簡易的なものですから、常に正しく分析されるわけではありません。例えば 2004 行目の「壁に付けられたトウヒの-吊り看板」は構文的には正確な分け方ではありませんし、平仮名の "の" が助詞以外でも使われる可能性もあります。しかし、少数の例外は後で処理すればいいので、今はこれで視覚的に単純化できたことを喜びましょう。

1.3  ちょっとだけ造語

 これで当面の間作業できそうな環境は整ったので、小手調べに適当なブロックの名前をイスクイルに訳してみましょうか。

  block.minecraft.oak_button
  「オークのボタン」
       ↓
  ošpalirčiupš orţniól
  P2S1/IFL/STA-'šp'-(OBL)-NRM/DEL/M/CSL/UNI-TPD₁/1-UTE₂/1
  P2S1/FML/STA-'rţn'-CPS-NRM/DEL/M/CSL/UNI
  オーク材からなる数秒間陽性切り替え装置

 レバーも同じ語根 -šp-「二極の切り替え」を使って表せそうです。「永続的二極切り替え装置」とかでしょうか。

 この調子で気の向いたものを訳します。シートでの行番号を # で表すことにします。

#5  heixtàwîl「完了」addServer.add
#501  ňčʰwapʰaló「竹」block.minecraft.bamboo *7
#502  ct'al ňčʰwapʰioló「竹ブロック」block.minecraft.bamboo_block
#1245  umxhál ulté'šk「本棚」block.minecraft.bookshelf
#1466  amtʰal「土」block.minecraft.dirt
#1467  ekas amtʰiasülf「土の道」block.minecraft.dirt_path *8 *9
#1499  ek'ás「炎」block.minecraft.fire *10
#1512  âčp'al「ガラス」block.minecraft.glass *11
#1606  špalíupš「レバー」block.minecraft.lever
#1722  ošpalirčiupš orţniól「オークのボタン」block.minecraft.oak_button

 とりあえず10語できました。まだ推敲が必要なものがいくつかあるけど。

 にしても長い。時間がかかりすぎる。小手調べとはなんだったのか……

 

 まあいいや。ところで、既に「オークの」と「ボタン」というパーツが翻訳されているわけです。これらを別のシートに書いておいたら、自動で「オークの感圧板」や「石のボタン」などのブロックの名前の欄にも表示されるような仕組みがあったら便利ですね。それの話は次回としましょうか(次回があったらの話です)。

 とりあえず今回の報告はここで終わりです。お疲れさまでした。

 Attàlûk!

 2024.1.8  

 

 以下、脚注

*1:「謎のライバル意識」…… ロジバンとイスクイルはどちらも「古典的な工学言語」として有名(人工言語界隈基準)。しかし、組織で研究開発され情報技術と密接に関わっているロジバンと、ひとりによって作られた半分芸術言語みたいで趣味色の強いイスクイルでは、公的な扱いには大きな差があるのだ。ロジバンは固有のISO言語コード "jbo" を与えられてるけどイスクイルはそうじゃないとかね。

*2:正規表現」…… 文字列を「どれかの数字」「なんでもいいから3文字」「母音字で終わる」みたいな緩い条件で検索する時に便利な仕組みです。スプシ勢のみんな、正規表現で遊ぼう!

*3:私はスプシの関数を基本的に小文字で打っています。動作に影響はありません。

*4:「=regexreplace('原典'!$A2,"^(.*)\:.*$","$1")」の訳: 原典シートの A2 の中身から「先頭から順番に『0文字以上の何か(これを$1と呼ぶ)』『: (コロン)』『0文字以上の何か』が来て文字列が終わる」ような部分を検出して、その部分を先ほど得た $1 で置換してください。

*5:「arrayformula」…… 1つで1次元配列のそれぞれの要素を演算したり、配列データを返して下のセルを焼き払ったりできる、圧倒的火力を持つ関数です。スプシ関数最強議論によく登場します(いいえ)。畏敬を込めて "荒焔(あれほむら)" と呼ばれています(いいえ)。

*6:このように列を成した同じ種類のセル(イスクイル3で言えば açtalkt’é でしょうか) に値や式がある部分とない部分を混在させるやり方は、あまり構造的に美しくはありませんし、複数人で管理する場合には特に推奨できません。しかし、個人でやっていてどこにどの式があるか把握できている分には構わないでしょう。

*7:イスクイルは何故か竹を食べ物としか思っていないようなので、仕方なく -pʰ- に複合語根として埋め込むことで建材の意味に近づけています。

*8:「ekas」…… 通常1個だけでは使われず、長く伸ばすことで道を示すものだ、ということで proximal です。delimitive+(EXN₁/7 or MET₁/1)とかで「部分」と言った方が良いかもしれない。

*9:「amtʰiasülf」…… シャベルを使って作るものなので、風化したり見えなくなったりしないように土を固くしてあるのかな、と思って ülf にしたっぽいです(よく覚えていない)。たぶん後で変えます。

*10:「ek'ás」…… 2秒で訳せました。こういうのは簡単すぎて逆に不安になります。

*11:「âčp'al」…… 簡単すぎて逆に不安になります2。