8

アプリに gettext のようなローカリゼーション システムを組み込みましたが、翻訳関数は次のようになります。

 t($category, $string, [$plural_string, $number, $vprintf_arguments])

私の PoEdit キーワード:

t:2
t:2,3
  • t:2 は PoEdit に parse を指示し$string、明らかに動作します
  • t:2,3 は PoEdit に$string$plural_string- の両方を解析するように指示する必要がありますが、そうではありません :(

しか見え$stringないので、複数形が解析されません...どうすれば修正できますか? 私はこれが好きなので、関数を別の引数形式に切り替えたくありません:(

また、この関数は sprintf の置き換えのように機能します。

  • 3 番目の引数 ($plural_string) が配列の場合、関数は配列の値を vsprintf への引数と見なします。
  • 3 番目の引数が文字列で $number が指定されている場合、関数は $vprintf_arguments を vsprintf への引数 (指定されている場合) と見なし、$plural_string を $string の複数形と見なします。

とにかく、PoEdit は引用符で囲まれていない引数に干渉すべきではありませんよね? $plural_string が次のように見える場合にのみ、文字列として解析することを意味します'abc abc'

4

2 に答える 2

6

gettext は、一度に 1 つの文字列のみを処理します。あなたが求めているのは ngettext です。(構文を調べてください)

そこに、単数形のテキスト、複数形のテキスト、さらに数字を入力します。

これの賢い点は、多くの言語が英語とはまったく異なる複数形の構造を持っていることです。たとえば、ロシア語は 3 つの異なる形式を使用します。1 つはカウントが 1、21、31、41 などの発音で終わる場合です。2 番目の形式は、2、3、または 4 で終わるカウント用です。 .

そして、ngettext を使用すると、これを行うことができます。ええ、poedit では、ターゲット言語の複数形構造を正しく定義する必要がありますが、それでうまくいきます。

http://www.gnu.org/s/hello/manual/gettext/Plural-forms.html

于 2011-12-15T01:01:05.330 に答える
1

Tor-Bjorn Fjellnerが答えたように、これは実際にはうまくいくはずです.

その言語に実際には複数形があることを poedit に伝え ( Poedit で複数形を翻訳する)、キーワードを考慮に入れると、poedit はそれらを翻訳用に提供します。

複数形: nplurals=2; plural=n != 1;

キーワード:

  • t:2
  • t:2,3

PHP コード:

<?php

t("cat", "strA");

t("cat", "strB1", "strB2", 2, array());

t("cat", "strC1", "strC2", 3, array());

Poedit UI:

Poedit複数形

あなたの質問で私が理解できなかったのは、配列などに関するポイントでした。poedit/gettext ドメインで何を意図しているのかを解読できませんでした。具体的なコード例と、それらの結果がどのようになるかを追加すると、質問が役立つと思います。

于 2011-12-15T16:20:13.400 に答える