実行時のMOアクセス
gettextをエミュレートするコードを書きかけたのですが、立ち止まってすこし調べてみました。
GNU gettextでの実装
Ruby-GetText Packageでの実装
Squeakでの検討事項
- 今のOLPC Etoysでは約4000のフレーズが約60個のPOに分割されています。これをそのまま同じ数のMOにするのでしょうか、それとももっと少ない数にまとめるのでしょうか?POを分割した背景は、一つのPOTだとあまりにもたくさんのフレーズが入っていて翻訳者が圧倒されるということで、同じフレーズに対する翻訳を文脈ごとに別にしたいとかの要件はなかったと思います(現実に、今は全てのPOをNaturalLangageTranslatorにインポートしてしまっています)。
- 初期化時の処理時間と、実行中占有されるリソースとのトレードオフ。GNU gettextのようにMOファイルを開きっぱなしにして処理するとすると、起動時や言語切り替えでの遅延はないでしょうが、60個のMOファイルを開いたままになります。これはXOでは問題にならないのでしょうか?私は古い人間なのでしょうか。逆にRuby-GetTextのような方式だと起動・言語切り替えにすこし待たされるかもしれません。これは実験するつもり。
- Squeakland OLPCとして配布する場合、従来どおりSecurityPluginはONの状態になるのですよね?そのときMOファイルはSqueakletsフォルダに置くことになり、インストール方法が問題になると思います(言語別にサブフォルダを持つという置き方もやりにくい)。今のSecurityPluginの仕組みは本当に副作用が大きくて困りますね。
- MOを分割した場合、#translated実行時にtextdomainを確実に決定できるのか?特に#translatedNoopのsenderと#translatedのsenderが同じtextdomainになることは保障できないと思います。本当はコンパイル後のリテラルが自分のtextdomainを覚えておいてくれたら助かるのですがね。