1


0

gettext複数形式の例を生成する方法は? Pythonで?

gettextのPlural-Forms行を考えて、それぞれの `n`にいくつかの値の例を一般化してください。 私は私のサイトの翻訳者のためのウェブインターフェースのためにこの機能が欲しいです、それで彼らはどの複数形をどこに置くべきか知っているように。 例えば、

"複数形:nplurals = 3;複数形= n%10 == 1 0:n%10> = 2 1:2; \ n "

  1. 最初のテキストフィールドに「1、21 ..」というラベルを付けてから、「2、3、 4 …​ "、そして" 5、6 …​ "(これが正確に正しいかどうかはわかりませんが、考えはわかります)

現時点で私が思いつくことができる最もよいことはどういうわけか表現を解析して、そして0から100までxを繰り返して、そしてそれが何を生み出すか見ることです。 これが機能することは保証されていません(ある言語で最小のxが100を超えた場合はどうなりますか?)。 より良いアイデアや既存のPythonコードはありますか?

1 Answer


1


遅れていることを考えると、私はかみます。

次の解決策はハックであり、あなたの複数形を評価できるPythonコードに変換することに頼っています(基本的にxを変換するのですか? y:zと同等のpython xおよびyまたはzへのzステートメント

あなたの複数形ルールが人為的な例であるかどうかわからないし、あなたが最初のテキストフィールドであなたが何を意味するのか理解していない、しかし私はあなたが私の例の解決策で行くところに行くと確信する:

# -  *  - モード:Python  -  *  - #vi:si:et:sw = 4:sts = 4:ts = 4

p = "複数形:n複数= 3;複数= n%10 == 1 0:n%10> = 2 1:2; \ n "

#ルールの抽出のインポートre matcher = re.compile( 'plural =(。*);')match = matcher.search(p)rule = match.expand( "\\ 1")

#ルールをPython構文に変換します。oldrule = None whilerule!= rule:oldrule =ルールrule = re.sub( '(。*)\?(。*):(。*)'、r '(\ 1)and( \ 2)または(\ 3) '、oldrule)

rule = re.sub( '

範囲(40)のnの場合:code = "n =%d"%n print n、eval(ルール)