首页 > 解决方案 > 是否支持序数后缀本地化?

问题描述

例如,如果我有第 n 个苹果(第一个苹果,第二个苹果,第三个苹果),这将如何在 django 中翻译?是否有一些函数可以获取给定 n 的后缀?看起来这取决于单词的性别:

1re pomme, 2e pomme
1r homme 2e homme

标签: pythondjango

解决方案


对于这种事情,您通常会使用gettext 的复数功能:

ngettext('%(num)dre pomme', '%(num)de pomme', n) % {'num': n}

当然,在这种情况下,您对字符串的本地化并不真正感兴趣,而只是对复数形式感兴趣,因此这与:

'1re pomme' if n == 1 else f'{n}e pomme'

事实上,如果规则比这更复杂(我不知道法语,但对于英语,你会有 4 种不同的情况),那么ngettext就会变得有点杂乱无章。您可以创建如下所示的 PO 文件:

msgid "%(num)dst potato"
msgid_plural "%(num)dth potato"
msgstr[0] "%(num)dre pomme"
msgstr[1] "%(num)de pomme"
msgstr[2] "%(num)d... pomme"

这将需要正确设置npluralsPO 文件的选项,并且它可以在此处考虑任意数量的语法规则。请参阅本优秀指南的第 2.4 节复数形式以进行深入了解。

但是,gettext 主要用于翻译,这有点笨拙。

如果“pomme”本身是一个变量,例如vegetable_name = 'pomme'; print(f'{num} {vegetable}'),那么显然您首先需要知道变量的性别,并且需要以某种方式将其作为元数据传输,以便能够进行适当的变形。到那时,无论哪种方式,它都变成了很多定制开发。


推荐阅读