没有进程区域设置的Gettext

时间:2010-02-17 09:36:58

标签: c linux internationalization

我想为i18n使用gettext。但我需要将消息翻译成不同的语言。是否可以为一个gettext调用指定区域设置?

3 个答案:

答案 0 :(得分:1)

如果您使用多个线程,那么如果您使用POSIX.1-2008中指定的与语言环境相关的设施(并在GLIBC 2.3中实现),则可以使用gettext。您将使用的关键函数是uselocale,它有点像setlocale但仅适用于当前线程。

如果您正在使用Windows,那么您运气不佳 - MSVCRT没有提供与uselocale等效的内容,我相信该平台上的libintl模仿setlocale本身,非线程 - 安全的方式IIRC。

答案 1 :(得分:0)

Replacements for gettext可以看到 我遇到了类似的问题,只有在你需要支持更多平台时才会变得更糟。

基本上,gettext仅适用于单线程交互式程序。

如果你有机会,那么另一个翻译系统(ICU看起来很不错)。

否则,有一些库直接读取.mo文件,可以根据需要提供翻译:

http://art-blog.no-ip.info/cppcms/blog/post/16

答案 2 :(得分:0)

  

我想为i18n使用gettext。但我需要将messeges翻译成不同的语言。

如果您的应用程序是单线程,您可以切换区域设置,否则您无法使用 用于此目的的gettext库。

  

是否可以为一个gettext调用指定区域设置?

您可以使用支持gettext消息目录的Unofficial Boost库Boost.Locale。但它只是C++