对于带GUI的嵌入式系统,我们使用自定义翻译系统。字符串存储在微控制器的代码ROM中。
目前,我们最多有10种语言和约400种翻译字符串(视产品型号而定)。
我们当前的系统相当繁琐,我相信gettext将是一个更好的解决方案。
据我了解gettext,它需要使用bindtextdomain
来设置包含已编译翻译文件的目录(* .mo)。
有没有办法从内存中读取翻译?那就是我想在二进制文件中包含已编译的* .mo文件,并设置gettext来使用它们。或者,翻译数据将存储在没有文件系统的数据EEPROM中。
或者你能推荐一个不同的翻译系统用于带C接口的微控制器系统(16或32位,256到512 KB ROM)吗?
编辑:我应该补充说,除了微控制器固件之外,能够保持翻译是切换到gettext的原因。用户将使用我们已经提供给我们系统的配置软件加载适当的翻译数据。
答案 0 :(得分:3)
这就是我要做的:我会在代码中的常量变量中包含二进制“.mo”。您可以编写一个从二进制到char数组的简单转换器,并在程序中编译“.mo”文件。您将拥有一组“.mo”文件数据,每个数据都使用不同的语言。
我会修改libintl源代码以访问其中一个数组。检查文件loadmsgcat.c,函数_nl_load_domain
。看看它是如何尝试使用mmap()
的(所以它准备将所有东西都放在内存中)。只需在那里添加一些代码,根据所请求的语言决定使用“.mo”数组的哪个元素。
我没试过这个,但这是我会根据你的情况尝试的。看起来并不太难。