gpt4 book ai didi

c++ - I18n C++ Hello World 与复数

转载 作者:搜寻专家 更新时间:2023-10-31 00:49:35 25 4
gpt4 key购买 nike

Complete C++ i18n gettext() “hello world” example具有适用于简单固定字符串的 C++ 代码。我现在正在寻找一个适用于复数的示例程序。此示例代码显示六行。只有一个是正确的英文。它不能正确处理复数。

cat >helloplurals.cxx <<EOF
// hellopurals.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
#include <stdio.h>
int main (){
setlocale(LC_ALL, "");
bindtextdomain("helloplurals", ".");
textdomain( "helloplurals");
for (int ii=0; ii<5; ii++)
printf (gettext("Hello world with %d moon.\n"), ii);
}
EOF
g++ -o helloplurals helloplurals.cxx
./helloplurals

GNU gettext() for plural forms描述了语言处理复数的各种方式,例如:

  • 韩语 - 无复数
  • 英语 - 两种形式,单数仅用于一种
  • 法语 - 两种形式,单数用于零和一
  • 波兰语 - 三种形式,1 和一些以 2、3 或 4 结尾的数字的特殊情况

我的期望是代码将能够(给定消息目录)专门用于上述所有情况以及此处未列出的其他几个变体。用英语执行时的正确输出是:

Hello world with 0 moons.
Hello world with 1 moon.
Hello world with 2 moons.
Hello world with 3 moons.
Hello world with 4 moons.

最佳答案

我不确定你想要什么。如果对您的示例稍作修改即可提供您想要的输出,只需将 printf 行替换为

printf(ngettext("Hello world with %d moon\n", "Hello world with %d moons\n", ii), ii);

但由于它是对 unwind 答案的微不足道的修改,并且 gettext 文档有非常相似的示例,

printf (ngettext ("%d file removed", "%d files removed", n), n);

我不知道这是否真的是你想要的。如果您想使用更多 C++ 语法的 gettext,则必须寻找像 Boost::Format 这样的库。

关于c++ - I18n C++ Hello World 与复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com