你需要做一些事情。
(1)。设置一些函数,根据该语言的数量和规则返回不同的翻译。
除了您的客户名称替换之外,10 customers 的部分还需要一些替换,并且需要使用看起来更像的函数调用来构建:
ngettext( 'customer', 'customers', 10 )
这与Gettext works 的方式类似。
(2)。设置您的翻译源字符串,使其了解复数规则。
您还没有说您正在使用什么技术,但 Gettext 已内置此功能,包括 PHP 在内的许多语言都可以与您的系统 Gettext 交互。
(3)。将您的文本替换组织成两个阶段。可能使用 sprintf 代替您的令牌替换,但这部分取决于您。
因为您正在使用存储的翻译以及您自己的客户名称替换,所以我会这样做:
使用每种语言的完整模板设置翻译字符串,可能像在 Gettext PO 文件中这样:
# ....
msgid "%1$s has one customer"
msgid_plural "%1$s has %2$u customers"
msgstr[0] "%1$s a un client"
msgstr[1] "%2$u clients pour %1$s"
然后,您将根据数量获取所需的模板,然后执行替换。例如在 PHP 中:
$n = 10;
$name = "Pierre";
$template = ngettext( '%1$s has one customer', '%1$s has %2$u customers', $n );
$rendered = sprintf( $template, $name, $n );
这里有很多陷阱,并不是所有的语言包格式都支持复数。如果您无法在系统中使用 Gettext,请查看 Loco 作为管理复数规则并导出为您可以使用的文件格式的方法。