6

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

目前我们有多达 10 种语言和大约 400 个翻译字符串(因产品变体而异)。

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

据我了解gettext,它需要使用bindtextdomain来设置包含已编译翻译文件(*.mo)的目录。

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

或者您能否推荐一个不同的翻译系统用于具有 C 接口的微控制器系统(16 位或 32 位,256 至 512 kbyte ROM)?

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

4

1 回答 1

3

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

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

我还没有尝试过,但是鉴于您的情况,这是我会尝试的。看起来不太难。

于 2013-03-08T06:57:38.237 回答