ヘブライ語クライアントロケールでのMF翻訳文字列の問題が致命的なサイトエラーを引き起こす

コンテナに入り、vimをインストールしてロケールを修復します。
壊れたヘブライ語ロケールを保存し、英語のロケールをコピーして上書きすることができます…

root@carrie-app:/var/www# for i in `find . -name *.he.yml` ; do cp ${i/he.yml/en.yml} $i ; done

かわいいアイデアですが、実際には機能しませんでした。ロケールを再びHEに切り替えると、エラーが発生します。とりあえず、ユーザーを反復処理してすべてを英語に設定し直すことにします。

ロケールを変更した後、ディスコースを再起動しましたか?

はい。あまり何もしていません。

image

古いRubyのスキルを披露した後、今は皆を英語に切り替えました。次にヘブライ語のロケールについてチケットを開きます。

移動していただきありがとうございます @JammyDodger Bug ですが、バグレポートを開くにはこれで十分ですか、それともバグトラッカーで正式なものを開くべきですか?

コピーされたenロケールでマージ中にエラーが発生します(翻訳されていないエントリが削除され、何も残っていない場合はエラーが発生するようです)。

ただし、config/locales/client.he.ymlを削除すると、テストサイトにログインできます。

それは完全にENにフォールバックするためです。それが期待される動作だと思います。

ヘブライ語ロケール config/locales/client.he.yml では、

    posts_likes_MF: |
      { count, plural,
          one {תגובה, }
          two {שתי תגובות, }
          many {# תגובות, }
        other {# תגובות, }
      }{ ratio, select,
          low { יחס גבוה בין פוסטים ללייקים, }
          med { יחס גבוה מאוד בין פוסטים ללייקים, }
         high { יחס גבוה במיוחד בין פוסטים ללייקים, }
        other {}
      } קפיצה לפוסט הראשון או האחרון…

の行

          many {# תגובות, }

を削除する必要があります。

ヘブライ語では many は許可されていません(Language Plural Rules を参照)。

この問題はユーザーインターフェースを通じて解決できます。これを達成するには、ヘブライ語の /admin/customize/site_texts/js.posts_likes_MF で修正された値を入力する必要があります。

{ count, plural,
    one {תגובה, }
    two {שתי תגובות, }
   other {# תגובות, }
}{ ratio, select,
    low { יחס גבוה בין פוסטים ללייקים, }
    med { יחס גבוה מאוד בין פוסטים ללייקים, }
   high { יחס גבוה במיוחד בין פוסטים ללייקים, }
  other {}
} קפיצה לפוסט הראשון או האחרון…

テキストカスタマイズに間違ったデータを入力しただけで、サイト全体が使用不能になる可能性があるのは少し奇妙だと感じます。

「いいね!」 2

ここに記録することがバグ報告の場です。:+1:

「いいね!」 2

誰がその行に責任があるのかを調べるためにgitで確認します。その変更をコミットできるのはcrowdinだけだと考えていました。
また、もしそうなら、ヘブライ語をコピーした後にユニコーンを再起動しても、これが修正されないのはなぜでしょうか?

許可されていないことと、サポートされていないことの間には、明確な区別があるはずです。

奇妙なことに、Discourseのコードでは、「plural two」でさえ、アラビア語と共有されている言語コードのどちらでもサポートされていません。問題はここで修正する必要があると思います。それについてはPRを作成しますが、「余分な」_many_フィールドでのハードフェイルを修正する必要があることは間違いありません。Crowdinはこのplurals.rbファイルに準拠していないようです。

もっと複雑だと思います。
フロントエンドの翻訳は、ノードモジュール @messageformat/core によって、messageformat-wrapper を使用して解釈されます。

問題は、複数形のルールが2か所で定義されていることです。もう一方は最近ライブラリを使用するように変更されました (DEV: Upgrade the MessageFormat library (JS) · discourse/discourse@301713e · GitHub)。

しかし、ライブラリで定義されている複数形は、Discourseが以前使用していたものと常に同じではなく、plurals.rb のものは変更されていません。Inconsistency in plural definition

しかし、それがCrowdinが多くのために別のバージョンを作成した理由を説明するものではありません。

「いいね!」 2

翻訳に必要なフィールドルールを追加しましたが、これはこのバグの解決策ではなく、Crowdinの出力との互換性のためだけです。

行末のルールも調整が必要だと思います。
現時点では、「one」と「other」しか言及されていません。
rule: lambda { |n| n == 1 ? :one : :other }

はい、やらかしました。amendで修正し、–forceなしでプッシュしたことに気づきませんでした。現在は修正済みです。

皆さん、ありがとうございます。このトピックでより広範な問題を追跡し続けましょう。

「いいね!」 2