pluralized (count) translation override の問題

こんにちは :wave:

最新のアップデートでは、カウントが1の場合に複数形文字列のoneバージョンが使用されていることに気づきました。問題は、これまで複数形文字列はカウントが1であっても常にotherバージョンを使用しており、/admin/customize/site_texts/では、例えばハンガリー語の文字列のoneバージョンを見つけるオプションがないことです。しかし、ハンガリー語では、両方のバージョン(oneとother)を使用する必要はありません。なぜなら、ほとんど同じになるからです。

再現手順:

  1. ロケールを変更します(例:ハンガリー語)。
  2. /admin/customize/site_texts/に移動します。
  3. 例えばjs.topic_count_latestを検索してテキストを変更します。
  4. 「新しいトピックまたは更新されたトピックを見る」バナーで確認します。
  5. 更新が1つしかない場合、編集した文字列はotherバージョンであるため、デフォルト値が使用されます。新しいまたは更新されたトピックが複数ある場合、テキストは以前追加したものに変更されます。

ありがとうございます :slightly_smiling_face:

「いいね!」 3

こんにちは、@Don さん

これは簡体字中国語でテストしましたが、この問題は再現できませんでした :thinking:

元の文字列に文字を1つ追加しました(ハイライト表示)。カウントが1のときに変更が発生しました。

「いいね!」 1

両方の言語で、plurals の定義には「other」しかありません。

しかし、ハンガリー語では「one」の翻訳がまだ別に存在します。

これは中国語にはありません。

Crowdin で「one」のバージョンが別に作成されている理由が気になります。

「いいね!」 2

ハンガリー語ロケールには2つのバージョン(oneとother)がありますが、管理者のテキストカスタマイズでも利用できないため、これまで one バージョンが使用されたことはないと思います。常に other にフォールバックしていました。

「いいね!」 1

ハンガリー語には複数形がありますか?もしそうなら、plurals.rb に :one の定義を追加すべきでしょうか。

「いいね!」 1

問題の原因を見つけました。Discourse の I18n は、外部ライブラリの複数形定義に依存しています。

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse-i18n/src/index.js#L7

しかし、このライブラリでは、ハンガリー語は a クラスの複数形を使用するように定義されており、1 つとそれ以外を区別します。

私はハンガリー語を全く理解していません。誰か、彼らの複数形定義が間違っているのか、それとも私たちの定義が間違っているのかを指摘していただけないでしょうか? :slightly_smiling_face:

「いいね!」 3

こんにちは :waving_hand:

ご確認ありがとうございます。:heart:

ハンガリー語には複数形がありますが、常にそうとは限らないため、少し難しくなります。しかし、簡単な例をいくつか説明させてください。

ハンガリー語の単語のほとんどには複数形があります。
数えられない場合。

グループ → グループ = Csoport → Csoportok
トピック → トピック = Téma → Témák

したがって、外部ライブラリが複数形があるという点で正しいと思います。

しかし、単語の前に数字(数)がある場合は複数形を使用しません。
数えられる場合。

1 グループ → 2 グループ = 1 csoport → 2 csoport
1 トピック → 2 トピック = 1 téma → 2 téma


ハンガリー語の言語ファイルを確認すると、複数形は常に同じであることがわかります。

しかし、countone の形式で使用していない文字列があります。

次のようなものです。

これは問題ありません。この場合、カウントは必要ありません。トピックが1つだけなので、明白です。しかし、もう1つの違いは、other に数字が現れることだけです。テキストは、数字があってもなくても同じです。


ですから、私に尋ねるなら、one の形式を削除するだけです。

しかし、外部ライブラリから来ている場合、ハンガリー語には複数形がありますが、Discourse が使用するほとんどの場合ではありません。したがって、おそらく one の形式を追加してカスタマイズできるようにすることが、問題を回避するための最も簡単な解決策でしょう。はい、ほとんど同じですが、少なくとも管理者でカスタマイズできます。

これは難しい質問です。ハンガリー語のフォーラムを運営していて、管理画面でカスタマイズを行った人は皆、other の形式のみを変更しました。なぜなら、常に one から other にフォールバックしていたからです。したがって、one の形式を追加すると、管理者はすべての複数形文字列を再度確認して、そのバージョンも other と同じになるように変更する必要があります。

ありがとうございます :slightly_smiling_face:

「いいね!」 2

詳細なご回答ありがとうございます!バグ修正がマージされました。

この修正により、ハンガリー語の :one フォームが追加されました。将来の Crowdin 翻訳者は、見た目を :other フォームと区別するために、単数形から %{count} を削除することを試みることができます。

「いいね!」 5

修正ありがとうございます :heart:

これは問題ないと思います。%{count} は英語のロケールにうまく従っています。英語のロケールでは、一部の複数形文字列の one 形式で %{count} を使用していません。今回変更されたのは、管理者側でも one 形式を編集できるようになったことだけで、このケースでは十分だと思います。正しく動作するなら、他の変更は不要だと思います。すぐにテストのために更新します :slightly_smiling_face:

すべて問題なく動作しているようです :slightly_smiling_face: これらすべてを変更するのは大変な時間でしたが、ほぼ完了しました :smile: 再度感謝します。また、この点を指摘してくれた @Moin にも感謝します :heart:

「いいね!」 4

このトピックは、最後の返信から2日後に自動的に閉じられました。新しい返信は許可されていません。

Inconsistency in plural definition でより広範な問題を追跡しています

「いいね!」 2