gettext的效率:内存翻译

时间:2012-03-22 10:22:00

标签: c linux internationalization locale gettext

我有一个带Flash的嵌入式系统和一个非常低端的CPU和更少的RAM。我想知道使用.MO文件的gettext语言翻译效率如何。

为了进行语言环境语言字符串获取,每次gettext从flash中读取MO文件时,首先将完整的MO二进制文件加载到RAM中,然后从那里进行语言环境字符串获取?

如果MO文件(因为有很多字符串会很大~1Mb)总是加载到RAM中,它会占用我的RAM。

1 个答案:

答案 0 :(得分:1)

正如MSalters所说它是开源的,所以你可以调整它。

如果您对系统给出更全面的定义(根据我的评论),我们可能会提供更多帮助。

如果这是一个深度嵌入式系统(我做的那种事情),没有操作系统,也没有任何类型的外部文件系统,那么字符串必须都在内存中。很可能有一种机制可以将这些字符串存储在闪存中,这样它们就不会消耗RAM。

例如,在ARM上,数据结构可以轻松存储在闪存中。要做到这一点,你需要告诉编译器程序的哪个部分要存储它们,例如:

const char mesg1[] __attribute__((section (".USER_FLASH"))) 
             = "Ciao a tutti";
const char mesg2[] __attribute__((section (".USER_FLASH"))) 
             = "Riesco a sentire la mia mente va Dave";

当链接程序时,需要编写链接描述文件以将字符串放入Flash中,并且不会将它们复制到RAM中。

您可以将大约多少空间用于邮件?他们需要多少空间?

你可能正在打一个研究得很好的问题;随着资源限制的接近,编程工作量呈指数增长。将内容放入最后几个百分比的内存中可能需要付出巨大的努力。

一旦明显' tweak是尝试一些简单的压缩技术。一个可能应用于原始消息,并在打印消息时解压缩。

编辑:我认为你的问题看起来如此简单和自然,我认为答案很容易找到。

我查看了gettext文档,但未能在那里找到它。我下载了源代码。 10分钟后,老实说,我无法告诉你它是如何工作的。我可以告诉你,很多比我预期的要复杂得多。我查看了大量文档。关于如何最好地组织翻译,如何准备程序,以及可能导致问题的事情的大量文档。非常有用的见解。然而,我找不到任何文档来解释其整体运行时架构。没有。没有。

我最好的建议是转到GNU gettext邮件列表,搜索/查看并在必要时询问。邮件列表档案可以在http://savannah.gnu.org/projects/gettext/找到我道歉,我无法提供更多帮助。