【问题标题】:Gettext without a filesystem没有文件系统的 Gettext
【发布时间】:2013-01-22 09:36:45
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 也许 gettext 在你的情况下会过分?也许你会做类似this的事情?
  • 您可以在二进制文件或假文件 I/O 上设置 RAM 磁盘。

标签: c localization internationalization embedded gettext


【解决方案1】:

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

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

我还没有尝试过,但考虑到您的情况,我会尝试这样做。看起来不太难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 2012-08-20
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2021-11-15
    相关资源
    最近更新 更多