没有文件系统的Gettext

Ste*_*ter 6 c embedded localization gettext internationalization

对于带GUI的嵌入式系统,我们使用自定义翻译系统.字符串存储在微控制器的代码ROM中.

目前,我们有多达10种语言和大约400个翻译字符串(根据产品型号而有所不同).

我们当前的系统相当繁琐,我相信gettext将是一个更好的解决方案.

据我所知,gettext需要使用bindtextdomain设置包含已编译翻译文件(*.mo)的目录.

有没有办法从内存中读取翻译?那就是我想在二进制文件中包含已编译的*.mo文件,并设置gettext来使用它们.或者,翻译数据将存储在没有文件系统的数据EEPROM中.

或者你能推荐一个不同的翻译系统用于带C接口的微控制器系统(16或32位,256到512 KB ROM)吗?

编辑:我应该补充说,能够维持除微控制器固件之外的翻译是切换到gettext的原因.用户将使用我们已经提供给我们系统的配置软件加载适当的翻译数据.

niq*_*eco 3

这就是我要做的:我将在代码中的常量变量中包含二进制“.mo”。您可以编写一个从二进制到字符数组的简单转换器,并在程序中编译该“.mo”文件。您将有一个“.mo”文件数据数组,每个文件数据都有不同的语言。

我会修改 libintl 源代码来访问这些数组之一。检查文件loadmsgcat.c,函数_nl_load_domain。看看它如何尝试使用mmap()(所以它准备将所有内容都存储在内存中)。只需在其中添加一些代码即可根据请求的语言决定使用“.mo”数组中的哪个元素。

我还没有尝试过,但考虑到你的情况,我会尝试这样做。看起来不太难。