python - 是否支持序数后缀本地化?
问题描述
例如,如果我有第 n 个苹果(第一个苹果,第二个苹果,第三个苹果),这将如何在 django 中翻译?是否有一些函数可以获取给定 n 的后缀?看起来这取决于单词的性别:
1re pomme, 2e pomme
1r homme 2e homme
解决方案
对于这种事情,您通常会使用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"
这将需要正确设置nplurals
PO 文件的选项,并且它可以在此处考虑任意数量的语法规则。请参阅本优秀指南的第 2.4 节复数形式以进行深入了解。
但是,gettext 主要用于翻译,这有点笨拙。
如果“pomme”本身是一个变量,例如vegetable_name = 'pomme'; print(f'{num} {vegetable}')
,那么显然您首先需要知道变量的性别,并且需要以某种方式将其作为元数据传输,以便能够进行适当的变形。到那时,无论哪种方式,它都变成了很多定制开发。
推荐阅读
- sql - 在 where 子句中使用一个表中的日期和另一个表中的列
- coredns - 由于属性 max_concurrent,k8s coredns pod 显示 CrashLoopBackOff
- variables - 如何创建一个帐户/标签类型的变量来存储我的用户输入?
- android-studio - 如何将图像添加到具有背景的形状按钮?
- python - np.linalg.eig 为同一矩阵给出不同的特征向量
- java - 为什么将值放在 Entry 而不是 ThreadLocal 中?
- data-visualization - 如何用图像替换行值?
- php - 如何在 Laravel 中同时使用“分页()”和清单?
- swift - Swift 生成奇数数组问题
- google-api - SDM API 调用返回 Enterprise not found