2013-01-22 12 views
5

GUIを使用した組み込みシステムでは、カスタム翻訳システムを使用しています。文字列は、マイクロコントローラのコードROMに格納されます。ファイルシステムなしのGettext

現在、最大10の言語と約400の翻訳された文字列があります(製品の種類によって異なります)。

私たちの現在のシステムはやや面倒です。私はgettextがより良い解決策であると信じています。

私がgettextを理解する限り、コンパイル済みの翻訳ファイル(* .mo)を含むディレクトリを設定するには、bindtextdomainを使用する必要があります。

代わりにメモリから翻訳を読み取る方法はありますか?コンパイルされた* .moファイルをバイナリにインクルードし、これらを使用するgettextを設定したいと思います。あるいは、変換データは、ファイルシステムなしでデータEEPROMに格納されます。

Cインタフェースを備えたマイクロコントローラシステム(16または32ビット、256〜512 KBのROM)で使用するために、別の翻訳システムを使用することをお勧めしますか?

編集:私は、マイクロコントローラのファームウェアとは別に翻訳を維持できることは、gettextに切り替える理由であると付け加えておきます。適切な翻訳データは、当社のシステムで既に提供されている構成ソフトウェアを使用してユーザーにロードされます。

+2

あなたの場合、gettextが過剰である可能性がありますか?多分あなたは[this](http://code.google.com/p/bta-meteo-logger/source/browse/C/daemon/lang.h)のようなことをしますか? –

+0

バイナリファイルまたは偽ファイルI/Oの上にRAMディスクを設定することができます。 –

答えて

3

これは私がやることです:コードに定数変数にバイナリ ".mo"を含めます。単純なコンバータをバイナリからchar配列に書き出し、その ".mo"ファイルをプログラム内にコンパイルすることができます。それぞれが異なる言語の ".mo"ファイルデータの配列を持つことになります。

libintl sourcecodeを変更して、それらの配列の1つにアクセスします。 loadmsgcat.cというファイル、機能_nl_load_domainを確認してください。それがどのようにmmap()を使用しようとしているかを見てください(それで、すべてをメモリに用意する準備ができています)。要求された言語に基づいて使用する ".mo"配列の要素を決定するために、そこにいくつかのコードを追加してください。

私はこれを試していませんが、これは私があなたの状況を考えて試したものです。それはあまりにも難しくはありません。