2013-01-22 62 views
5

對於具有GUI的嵌入式系統,我們正在使用我們的自定義翻譯系統。這些字符串存儲在微控制器的代碼ROM中。沒有文件系統的Gettext

目前我們有多達10種語言和大約400個翻譯字符串(根據產品類型而有所不同)。

我們目前的系統比較麻煩,我相信gettext會是更好的解決方案。

據我瞭解gettext,它需要使用bindtextdomain設置包含編譯的翻譯文件(* .mo)的目錄。

有沒有辦法從內存中讀取翻譯?那就是我想將編譯的* .mo文件包含在二進制文件中,並設置gettext來使用它們。或者,翻譯數據將存儲在沒有文件系統的數據EEPROM中。

或者您能否推薦一個不同的翻譯系統用於帶有C接口的微控制器系統(16或32位,256至512 KB ROM)?

編輯:我應該補充說,除了微控制器固件之外,能夠維持翻譯將是切換到gettext的理由。相應的翻譯數據將由用戶通過我們已經提供給我們的系統的配置軟件加載。

+2

也許gettext會在你的情況下過度?也許你會做[像這樣](http://code.google.com/p/bta-meteo-logger/source/browse/C/daemon/lang.h)? –

+0

您可以在二進制或僞文件I/O之上設置RAM磁盤。 –

回答

3

這是我會做的:我會在代碼中的常量變量中包含二進制「.mo」。你可以寫一個簡單的轉換器,從二進制文件到字符數組,並在程序中編譯該「.mo」文件。您將擁有一組「.mo」文件數據,每個文件都有不同的語言。

我會修改libintl源代碼來訪問這些數組之一。檢查文件loadmsgcat.c,函數_nl_load_domain。看看它是如何嘗試使用mmap()(所以它已準備好在內存中擁有所有內容)。只需在那裏添加一些代碼,根據請求的語言決定要使用「.mo」數組的哪個元素。

我還沒有嘗試過,但這是我想嘗試給你的情況。它看起來不太難。

相關問題