给定的gettext复数窗体线,对于每个n一般几个示例值。我想这个功能的Web界面为我的网站的翻译,让他们知道把其复数形式哪里。例如,给定:

"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 ...”(不知道这是否是完全正确,但你的想法。)

现在,我能想出的最好的事情就是以某种方式解析表达式,然后从0迭代x到100,看看ñ它产生。这是不能保证工作(如果有什么最低x是超过100对于某一国语言?),但它可能不够好。更好的想法或现有Python代码?

有帮助吗?

解决方案

由于它的晚,我会咬。

下面的解决方案是哈克,并依赖于你的复数形式转换为可以评估(基本上变换x和y Python代码: - Z语句到蟒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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top