OLPC EToysでひらがなロケール

OLPC版もベースは Squeakland2005(J)と同じコードベースですから、蜂須賀さんのhttp://www.smalltalk.jp/pipermail/squeak-ja/2006-June/002998.html の方法が適用できるはずです。調べてみると、その他に動的なロケール追加の機能があることがわかりましたので試してみます。

Squeakが持つ動的ロケール追加機能

prefs/locale/%language% または prefs/locale/%language%/%country% の下に *.translationファイルを置いておくと、Squeak起動時に NaturalLanguageTranslator(class)>>startup: から起動される処理で、それが読み込まれます。その際、元々存在しなかったロケールであっても、言語名・国名からロケールIDを復元し、そのロケールを作ってから読み込んでくれます。つまり、規則にしたがって*.translationを置いておけば、ロケール・翻訳を追加できます。
当然読み込み処理は時間がかかりますから、あらかじめ読み込ませてイメージを保存しておくほうが実用的です。また、LanguageEnvironmentとの紐付けなどにも制限があります。

動的追加機能についてのバグ修正

上のように書きましたが、#directoryForLanguage:country:create: と #loadAvailableExternalLocalesにはバグがあり、うまく動かないので修正が必要です(ここでは内容は省略します)

ひらがなロケールの組み込み方

Squeakの今のコードでは、ロケールIDは "language" または "language-country" という書式であると定義されています。蜂須賀さんの手順では、ロケールIDを ja-hiragana としています。この場合、language=ja, country=hiragana と解釈されますから、それに合わせて翻訳データを置けば処理できるはずです。
ただし、country=hiraganaというのは気持ちが悪いですし、もしlibintl.a (GNU gettext) などを使うようになったらうまく動くか不安があります。ロケールIDの書式を "language_variant-country" みたいな表現(ひらがなのロケールID="ja_hiragana")ができるように拡張するのがよいのだと思います。

実際の手順と期待される動作

  • etoys 2.2のイメージとVM環境を用意する。前述のメソッドを修正しておく。
  • imageがあるフォルダに prefs/locale/ja/hiragana フォルダを作成し、その中にja-hiragana.translationを置く
  • etoys 2.2を起動する →ja-hiragana.translationが読み込まれる
  • 言語のメニューを開く → ja (ひらがな)が追加されている ※日本語フォントロード前であれば化ける

課題

当然ながら、これだけだとペイントの際のイメージボタンの翻訳はされないので、別途登録するする必要があります(後述のMOでも同様)。これもMOと同様に外部から渡す方法が欲しくなると思います。