6

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

現在、最大 10 の言語と約 400 の翻訳文字列があります (製品のバリエーションによって異なります)。

私たちの現在のシステムはかなり扱いにくいので、gettext の方が優れたソリューションになると思います。

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

代わりにメモリから翻訳を読み取る方法はありますか? つまり、コンパイルされた *.mo ファイルをバイナリに含め、これらを使用するように gettext をセットアップしたいと考えています。あるいは、変換データは、ファイルシステムなしでデータ EEPROM に格納されます。

または、C インターフェイスを備えたマイクロコントローラ システム (16 ビットまたは 32 ビット、256 ~ 512 k バイトの ROM) で使用する別の変換システムを推奨できますか?

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

4

1 に答える 1

3

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

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

私はこれを試したことはありませんが、これはあなたの状況を考慮して試してみることです。難しそうに見えません。

于 2013-03-08T06:57:38.237 に答える