我有一个带Flash的嵌入式系统和一个非常低端的CPU和更少的RAM。我想知道使用.MO文件的gettext语言翻译效率如何。
为了进行语言环境语言字符串获取,每次gettext从flash中读取MO文件时,首先将完整的MO二进制文件加载到RAM中,然后从那里进行语言环境字符串获取?
如果MO文件(因为有很多字符串会很大~1Mb)总是加载到RAM中,它会占用我的RAM。
答案 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/找到我道歉,我无法提供更多帮助。