PaPeRo i をScratch3.0で制御する-その4-ひらがな対応

 PaPeRo i をScratch3.0で制御する-その3-音声認識、センサーなどの続きです。今回は多言語対応について調べ、日本語のひらがな表示(「にほんご」選択時)に対応しました。

多言語対応

 今回PaPeRo i 拡張機能用に追加しているコードでは表示したい文字列そのままではなくformatMessageを使って記述する方法を取っていました。

text: formatMessage({
    id: 'paperoi.buttonsMenu.L',
    default: '左',
    description: 'PaPeRo iの左ボタン'
}),

こうしてあれば、あとは言語ごとにformatMessageのidに対応する文字列の記述を追加すれば、Scratchの画面左上Scratchロゴの隣にある地球マークから言語を変更したときに、ブロックに表示される文字列が変わるようになるはずです。
 この言語ごとの記述ですが、現在公開されてるScratch 3.0 Extensionsのドキュメントにあるtranslation_mapによる記述は、注意書きにもありますが現在は提案段階で実装はされていない様です。そのため、現在ある公式拡張機能と同じやり方で対応するしか方法がありません。これは調べた結果、scratch-l10nパッケージで行われていることがわかりました。そこで、scratch-l10nをgit cloneし、scratch-guiから参照する様にします。

$ cd ~/scratch
$ git clone --depth 1 https://github.com/llk/scratch-l10n.git
$ cd scratch-l10n/
$ npm install --save-dev
$ npm audit fix
$ npm link
$ npm audit fix
$ cd ../scratch-gui
$ npm link scratch-l10n

scratch-l10nを修正してscratch-guiのデバッグ実行またはビルドをする場合には、その前に

$ cd scratch-l10n/
$ npm run build

とする必要がある様です。

ひらがな記述の追加

 拡張機能の多言語化のソースファイルはscratch-l10n/editor/extensions下にあり、ひらがなはja-Hira.jsonです。

{
    "boost.color.any": "どれかのいろ",
    "boost.color.black": "くろ",
    "boost.color.blue": "あお",
    "boost.color.green": "みどり",
    ...
    "wedo2.tiltDirection.left": "ひだり",
    "wedo2.tiltDirection.right": "みぎ",
    "wedo2.tiltDirection.up": "うえ",
    "wedo2.whenDistance": "きょり[OP][REFERENCE]のとき",
    "wedo2.whenTilted": "[TILT_DIRECTION_ANY]にかたむいたとき"
}

末尾にPaPeRo i 拡張機能用の記述を追加します。

    ...
    "wedo2.tiltDirection.left": "ひだり",
    "wedo2.tiltDirection.right": "みぎ",
    "wedo2.tiltDirection.up": "うえ",
    "wedo2.whenDistance": "きょり[OP][REFERENCE]のとき",
    "wedo2.whenTilted": "[TILT_DIRECTION_ANY]にかたむいたとき",
    "paperoi.connectId": "パペロ [ID] URL: [URL] シミュレータID: [SIMID] : [SIMNAME] にせつぞくする",
    "paperoi.connectIdReal": "パペロ [ID] URL: [URL] にせつぞくする",
    "paperoi.whenEvent": "パペロ [ID] で [EVENT] とき",
    "paperoi.ifEvent": "パペロ [ID] で [EVENT]",
    "paperoi.speech": "パペロ [ID] で [TEXT] としゃべる",
    ...

動作確認

 IBM Cloudのアプリを更新しましたのでお試しください。順次機能追加を行う予定なので、もし記事内容と異なる場合にはご容赦ください。