我想为i18n使用gettext。但我需要将消息翻译成不同的语言。是否可以为一个gettext调用指定区域设置?
答案 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文件,可以根据需要提供翻译:
答案 2 :(得分:0)
我想为i18n使用gettext。但我需要将messeges翻译成不同的语言。
如果您的应用程序是单线程,您可以切换区域设置,否则您无法使用 用于此目的的gettext库。
是否可以为一个gettext调用指定区域设置?
您可以使用支持gettext消息目录的Unofficial Boost库Boost.Locale。但它只是C++
。