Nothing checks the message catalogs, or catches new hard-coded text
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
- issue の種類
- 機能追加
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- eslint, javascript, json, typescript
調査の方向性
Start by reviewing the catalog setup and local ESLint plugin introduced in issue #620, then inspect src/messages/*.json, SHIPPED, and the pnpm test and lint configuration. Add fixture coverage for missing keys, ICU syntax, placeholders, unused keys, JSX text, and text bearing props; done means the listed lint, typecheck, knip, and test commands pass. This is step 0.4 of the owner's plan and depends on #620.
索引モデルが issue の本文から書いたものです。
説明
Needs your OK: this adds checks on the translation catalogs and lint rules against hard-coded text. Nothing anyone sees changes. Swap pipeline:proposed for pipeline:ready to have it built.
What happens
Once text lives in src/messages/*.json (#620), nothing stops a translation from missing keys, breaking ICU syntax or dropping a {name}. Nothing stops new English being typed straight into a component either.
Fix, in outline
- A catalog check that
pnpm testruns (a unit test oversrc/messages/, so CI covers it with no workflow change). It checks that:- every catalog's completeness is known per namespace against
en.json, and each language inSHIPPEDis complete for its audience (participant:participant,email,common; organizer:organizer,auth,common; site:site,common); - every message compiles with
icu-minify, which uses the same ICU parser as use-intl's full formatter; - placeholders and tags match the English source;
- no key is unused.
- every catalog's completeness is known per namespace against
- Keys are literal, so the unused-key check can see them. Map enum values to keys through a typed table (
const STATUS_KEY = { open: 'status.open', … } as const), nevert(`status.${s}`). - Lint for hard-coded text:
react/jsx-no-literalswithnoStrings: true, ignoreProps: truefor JSX text;- a small custom rule, in the local ESLint plugin from #620, that reports a string literal on text-bearing props:
aria-label,aria-description,title,placeholder,altandlabel. - Both are turned on per directory as each area moves to the catalog, starting with none.
Watch for
noAttributeStringsdoesn't work here. It flags everyclassNameandhref, and eslint-plugin-react 7.37.5 (what the lockfile resolves) has no per-attribute option.- Pin
icu-minifyas a devDependency at the exact version next-intl resolves, so the check runs the parser production runs.
Order
After #620, because the catalogs, SHIPPED and the local ESLint plugin come from it.
Done when
- The check fails on a missing key, broken ICU, a dropped placeholder and an unused key (tests with fixture catalogs).
- The lint rules fail on a fixture with JSX text and one with
aria-label="…". pnpm lint && pnpm typecheck && pnpm knip && pnpm testpass.
Planned with the owner in https://claude.ai/code/session_01EFKmj716ZY3b3SwR8TV8Y2 and checked against the code on main at 35288fa. The full plan is private to the owner's account: https://claude.ai/artifact/VgQH6U2s2EVx3LX991fJi8 (a Claude session on that account can open it with the Artifact tool's read action). This is step 0.4 there.
- 主要言語
- TypeScript
- スター
- 19
- フォーク
- 4
- 平均マージ
- 19時間 34分
- マージ済み PR(30日)
- 165
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
richshaw/OpenSignup のほかの issue
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
richshaw/OpenSignup#654 ·
メンテナーはふだん 1 日以内に返信
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
richshaw/OpenSignup#653 ·
メンテナーはふだん 1 日以内に返信
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
richshaw/OpenSignup#652 ·
メンテナーはふだん 1 日以内に返信
-
SMTP timeout notes in smtp.ts and the changelog describe nodemailer 10.0, not 10.1対応中かも @agammann が 1 日前に担当しました。 オープンenhancement good first issue pipeline:ready
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
richshaw/OpenSignup#645 ·
メンテナーはふだん 1 日以内に返信
-
A signup page's first Tab skips the header and lands on the next tab対応中かも @richshaw が今日担当しました。 オープンbug good first issue pipeline:building pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
richshaw/OpenSignup#644 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
richshaw/OpenSignup の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
Clouditera/VulnHunter#57 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
bug bug:behavior clawsweeper:bulk-filed clawsweeper:fix-shape-clear clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:auth-provider issue-rating: 🦞 diamond lobster P2
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
openclaw/openclaw#185297 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
-
bug needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
apex-dev-tools/apex-log-parser#199 ·
メンテナーはふだん 1 日以内に返信