对于带有GUI的嵌入式系统,我们使用我们的自定义翻译系统。这些字符串存储在微控制器的代码ROM中。
目前我们有多达10种语言和大约400个已翻译的字符串(根据产品变体的不同而有所不同)。
我们目前的系统相当繁琐,我相信gettext会是一个更好的解决方案。
据我所知,gettext需要使用bindtextdomain
来设置包含编译的翻译文件(*.mo)的目录。
有没有一种方法可以从记忆中读取翻译?也就是说,我希望在二进制文件中包含已编译的*.mo文件,并设置gettext以使用这些文件。或者,翻译数据将被存储在没有文件系统的数据EEPROM中。
或者,您是否可以推荐一种不同的转换系统,用于具有C接口的微控制器系统(16或32位,256到512 kbyte ROM)?
编辑:我应该补充说,除了微控制器固件之外,能够维护翻译将是切换到gettext的一个原因。适当的翻译数据将由用户使用我们已经随系统提供的配置软件加载。
发布于 2013-03-08 06:57:38
我会这样做:我会在代码的常量变量中包含二进制".mo“。您可以编写一个简单的从二进制到字符数组的转换器,并在您的程序中编译".mo“文件。您将拥有一个".mo“文件数据数组,每个数据具有不同的语言。
我会修改libintl sourcecode来访问其中的一个数组。检查文件loadmsgcat.c,函数_nl_load_domain
。在这里可以看到它是如何尝试使用mmap()
的(所以它已经准备好将所有东西都放在内存中)。只需在其中添加一些代码,根据所请求的语言决定使用".mo“数组中的哪个元素。
我还没有试过,但考虑到你的情况,我会试一试。这看起来并不太难。
https://stackoverflow.com/questions/14455401
复制相似问题