Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

日本語にするとI18n::MissingTranslationDataエラーで落ちることがある #54

Closed
takahashim opened this issue Oct 25, 2020 · 11 comments
Labels
bug Something isn't working

Comments

@takahashim
Copy link
Collaborator

対象ドメイン/ The domain

  • ローカルの開発環境、バージョンはdecidim-cfjのgithub masterブランチです

起こっている問題 / The Problem

locale=jaでアクセスすると、下記スクリーンショットの通り、I18n::MissingTranslationData in Decidim::XXXというエラーが表示されて死ぬことがあります。
特定の画面だけではなさそうです。

スクリーンショット / Screenshot

i18n-error

期待する見せ方・挙動 / Expected Behavior

  • エラーで死なない

起こっている問題の再現手段 / Steps to Reproduce

具体的な手順はないのですが、ログインせずにアクセスすると、ちょくちょく発生するようです。

動作環境・ブラウザ / Environment

  • macOS
  • Chrome

原因 / Why

原因はconfig/locales/ja.ymlの不備で、ja.forms.length_validator.minimum.oneがないことなのですが、本家のYAMLは直接いじれないので、crowdinとの連携を何か変更しないといけないのかもしれません。

回避方法 / Workaround

とりあえずローカルのconfig/locales/ja.ymlに上記項目を追加すると起きなくなります。

@takahashim takahashim added the bug Something isn't working label Oct 25, 2020
@halsk
Copy link
Member

halsk commented Oct 25, 2020

うーん。謎ですね。crowdin からは、yml ファイルが定期的に本家の Decidim に push されるみたいなので、こちらのリポジトリへの影響は無いはずなのですが。

@takahashim
Copy link
Collaborator Author

takahashim commented Oct 26, 2020

本家のcrowdinが生成するYAMLファイルで、単数複数の違いがない言語について、oneotherの両方を生成せずにotherしか生成しないのが原因かと思います。

https://github.com/decidim/decidim/blob/8e237fb075418a840b94275f5dafba7b374dc828/decidim-core/config/locales/en.yml#L1487-L1489

      minimum:
        one: at least %{count} character
        other: at least %{count} characters

https://github.com/decidim/decidim/blob/8e237fb075418a840b94275f5dafba7b374dc828/decidim-core/config/locales/ja.yml#L1469-L1470

      minimum:
        other: 少なくとも %{count} 文字

の違いですね。

@doyaaaaaken
Copy link
Contributor

crowdin側にログインして直そうとしてみたんですが、以下画像のようなUIで、色々触って直し方ががわからなかったので、Gitterにて質問してみました。
image

@MaySoMusician
Copy link

おそらくですがCrowdinが other しか生成してないのは、 Unicode 共通ロケールデータリポジトリにおいて、日本語の Language Plural Rule が other しか規定されていないからだと思われます
cf. https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_plural_rules.html#ja
なのでどちらかというと core 側のコードで one が存在してなくてもエラーを吐かないように変更してもらうのがよいです

@takahashim
Copy link
Collaborator Author

なんと、そんなオチなんですね…。
これはRails標準のTranslationHelper#translateメソッドの挙動なので、根本的な修正は難しそうです。
でも、現状.oneを陽に使っているのはdecidim-core/app/views/layouts/decidim/_js_configuration.html.erbだけのようなので、ここだけ修正する…とかでしょうか。

@takahashim
Copy link
Collaborator Author

takahashim commented Oct 28, 2020

いや、単純に使い方が悪いだけかも…?
(あとで見てみますが、js.erbファイルのcount:オプションを修正すれば良い気がしてきました)

@takahashim
Copy link
Collaborator Author

takahashim/decidim@4133e28 おそらくこんな感じの対応になりそうです。
現状でも回避はできているので、落ち着いたらpull request作ってみます

@takahashim
Copy link
Collaborator Author

その後少し見直して、 decidim/decidim#6865 という修正にしてpull requestを送ったところ、無事マージされました!
というわけで本家の次期バージョンでは修正されそうです。

@halsk halsk closed this as completed Feb 2, 2021
@halsk
Copy link
Member

halsk commented Feb 2, 2021

本当に修正するには現インスタンスで使っているバージョンを上げる必要がある。

@takahashim
Copy link
Collaborator Author

これはv0.24.0以降までupdateできると解決する予定です

@ayuki-joto
Copy link
Collaborator

v0.24.0以降にupdate済みなのでcloseします

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

5 participants