gpt4 book ai didi

python - 如何生成 gettext 复数形式表达式的示例?用Python?

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:47 25 4
gpt4 key购买 nike

给定 gettext Plural-Forms 行,为每个 n 提供一些示例值。我希望我的网站翻译人员能够在网络界面上使用此功能,以便他们知道将哪种复数形式放在哪里。例如,给定:

"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"

...我希望第一个文本字段标记为“1, 21..”,然后是“2, 3, 4...”,然后是“5, 6...”(不确定这是否是完全正确,但你明白了。)

现在我能想到的最好的办法就是以某种方式解析表达式,然后将 x 从 0 迭代到 100,看看它会产生什么 n。这不能保证有效(如果某些语言的最低 x 超过 100 怎么办?),但它可能已经足够好了。有更好的想法或现有的 Python 代码吗?

最佳答案

既然已经晚了,那我就咬牙切齿吧。

以下解决方案很hacky,依赖于将复数形式转换为可以计算的Python代码(基本上将 x ? y : z 语句转换为Python x 和 y 或 z 等效项,并将 &&/|| 更改为和/或)

我不确定你的复数形式规则是否是一个人为的例子,我不明白你的第一个文本字段的意思,但我相信你会明白我的例子解决办法:

# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4

p = "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"

# extract rule
import re
matcher = re.compile('plural=(.*);')
match = matcher.search(p)
rule = match.expand("\\1")

# convert rule to python syntax
oldrule = None
while oldrule != rule:
oldrule = rule
rule = re.sub('(.*)\?(.*):(.*)', r'(\1) and (\2) or (\3)', oldrule)

rule = re.sub('&&', 'and', rule)
rule = re.sub('\|\|', 'or', rule)

for n in range(40):
code = "n = %d" % n
print n, eval(rule)

关于python - 如何生成 gettext 复数形式表达式的示例?用Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749170/

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