fnando / i18n-js

It's a small library to provide the I18n translations on the Javascript. It comes with Rails support.
MIT License
3.75k stars 519 forks source link

Bug: Lint Translations ignoring app config and translations config #707

Open Crisfole opened 1 year ago

Crisfole commented 1 year ago

Lint Translations is showing every single translation, even after builds work correctly and app is correctly configured.

Description

Every single locale defined by rails is being compared with my default locale, even though my translation file only lists 3 locales, and my available_locales are listed explicitly in my app config.

How to reproduce

  1. Install I18n-js gem
  2. Create a translation file.
  3. Create config/locales/en.yml config/locales/es.yml and config/locales/pl.yml files. In each create a single key: "frontend: { index: "Hello" }"
  4. Run i18n export notice that it works fine, exporting the default rails datetime/time content as well as your custom frontend: key. In the English (or your default locale in this app) translation add an extra key so that it's missing from spanish and polish.
  5. Run i18n lint:translations > missing_i18n.txt Be sure to redirect because otherwise you lose the history unless your terminal has a lot more lines than mine.
  6. Notice how it lists everything:

Translation File Contents

---
translations:
  - file: app/frontend/:locale.i18n.json
    patterns:
      - "{en,es,pl}.*"
      - "!*.faker"
      - "!*.administrate"
      - "!*.devise"
      - "!*.flash"
      - "!*.good_job"
      - "!*.helpers"
      - "!*.i18n_tasks"
      - "!*.stringex"
      - "!*.views"
      - "!*.activerecord"
      - "!*.errors"

What do you expect

I expect only en, es, and pl to be compared, and further that the ignored patterns from my translations also get ignored in the linter.

What happened instead

130166 line "missing_translations.txt" file with every single locale built into rails listed, and even the pattern keys listed.

Software:

Full backtrace

N/A

fnando commented 1 year ago

The lint configuration is unaware of patterns used by translations, as they're essentially two different plugins. The official way of doing what you want is by using the lint_translations.ignore config. It currently doesn't accept glob patterns, but given how you're planning to use it, I think it makes sense adding support for it. I'll work on that.

falsefalse commented 5 months ago

having patterns support in lint_translations.ignore would be useful, e.g. ignore all *.active_admin.* things

how would you approach the task? ruby is not my strongest suit, appreciate a pointer in the right direction šŸ™

Josyann commented 3 weeks ago

Hey! #724 fixes this issue, could it be possible to merge this? šŸ™