现代Cpp项目中的I18n

问题描述 投票:0回答:1

我正在开发一个现代的C ++项目,目前和仅在中期,但是在某些时候是FOSS项目。目前,我正要实现国际化功能。我研究了一下,发现口头语言是一团糟。因此,我自己无法实现类似i18n / l10n库的方法。总结为:使用gettext。 (就我而言,Boost.Locale包装器)

到目前为止还不错,但是库要求我直接在代码中编写原始/源文本。假定使用英语。您可能已经注意到,我不是英语本地人。我的英语太糟糕了,无法将其用作源语言-我不希望这样。例如,要进行微妙的幽默,需要对语言有很好的了解。

现在我看到3个选项:

  1. std::cout << gettext("Hallo Welt") << std::endl;
  2. std::cout << gettext("Hello World") << std::endl;
  3. std::cout << my_own_crappy_lib(HELLO_WORLD_ID) << std::endl;

1)意味着用代码编写本机语言,这使得非德语人士无法使用我的代码库进行开发。这也是丑陋的,因为我写的是英语源代码,英语代码文档,但是是德语语言环境字符串。

2)意味着写英语,希望有人会纠正我的错字并消除我的幽默。

3)我自己实现一些将速记标识符映射到翻译的东西。但我完全不确定如何执行此操作以及如何处理复数形式等。

您能给我一些提示,我将如何继续?

OT:请不要怪我懒惰学习正确的英语。我是电视连续剧Futurama的忠实拥护者,在那您会发现即使是专业翻译人员也无法翻译很多笑话或微妙的典故。

c++ localization internationalization gettext
1个回答
0
投票

您有两个选择:

1)将项目的基本语言更改为德语。英语具有与德语相同的复数规则,因此您的项目将“正常工作”。

2)将项目的基本语言更改为“断英语”。然后,您必须找到有人通过提供执行此映射的en.po来将原始英语字符串以破碎的英语转换为正确的英语。然后,您的任务是定期将更正的英语字符串写回到实际的源代码中。

选项1很简单,但是对于一个开源项目,如果基本语言不是英语,您将很难找到志愿者来翻译您的字符串。

选项2听起来比实际更可怕。 PO文件包含对源文件的引用,因此相对容易地将已更正的英语消息写回到您的代码库中。通常,只需在PO编辑器中单击鼠标即可。

© www.soinside.com 2019 - 2024. All rights reserved.