Skip to content

i18next を使った国際化(i18n)対応を追加し、CLI のメッセージを日本語・英語の両方で表示できるようにしました。#39

Open
D-ske104 wants to merge 5 commits into
ShuntaToda:mainfrom
D-ske104:feature/i18n
Open

i18next を使った国際化(i18n)対応を追加し、CLI のメッセージを日本語・英語の両方で表示できるようにしました。#39
D-ske104 wants to merge 5 commits into
ShuntaToda:mainfrom
D-ske104:feature/i18n

Conversation

@D-ske104
Copy link
Copy Markdown

@D-ske104 D-ske104 commented Mar 27, 2026

@ShuntaToda

概要

i18next を使った国際化(i18n)対応を追加し、CLI のメッセージを日本語・英語の両方で表示できるようにしました。

モチベーション

backlog-exporter は Backlog のデータをMarkdownとしてエクスポートできる非常に便利なツールですが、現状ではすべてのCLIメッセージ・説明文・ラベルが日本語にハードコードされています。

Backlog は海外のチームでも利用されているケースがあり、このツールを日本語話者以外にも薦めたいと考えました。しかし、CLIの出力がすべて日本語では英語話者にとって使いづらいため、国際化対応が必要だと感じています。

既存の Issue はありませんが、ツールの利用者層を広げることでプロジェクトの価値がさらに高まると考え、今回 PR を作成しました。方針や実装について気になる点があれば、お気軽にフィードバックいただけると幸いです。

主な変更点

新規ファイル

  • src/utils/i18n.ts — i18next の初期化・ロケール検出ロジック
  • src/locales/ja.json / src/locales/en.json — 日本語・英語の翻訳リソース
  • src/i18next.d.ts — 翻訳キーの型安全性を担保する型定義
  • src/locales/README.md — 新しい言語を追加する際の手順ガイド
  • .vscode/settings.json — エディタで表示言語を容易に確認できるようにするため i18n-ally のインストールを推奨するようにしています

既存ファイルの変更

  • 全コマンド(all, issue, wiki, document, update)およびユーティリティファイルで、ハードコードされた日本語文字列を t() 翻訳関数に置き換え

ロケール検出の仕組み

  • 環境変数 LC_ALLLC_MESSAGESLANG の順に参照し、ユーザーのロケールを自動検出
  • 未対応のロケールの場合は英語(en)にフォールバック
  • i18next のフォールバック言語は日本語(ja)に設定し、翻訳キーが未定義の場合でも既存の日本語メッセージが表示されるようにしています

依存関係

  • i18next を追加

設計上の判断

  • 既存の動作への影響を最小限に: 日本語環境(LANG=ja_JP.*)では従来と同じ日本語メッセージが表示されるため、既存ユーザーへの影響はありません
  • 新しい言語の追加が容易: src/locales/ に JSON ファイルを追加するだけで新しい言語をサポートできます
  • 型安全: TypeScript の型定義により、存在しない翻訳キーの参照をコンパイル時に検出できます

テスト計画

  • LANG=en_US.UTF-8 で実行し、英語で出力されることを確認
  • LANG=ja_JP.UTF-8 で実行し、日本語で出力されることを確認
  • 未対応ロケールで実行し、英語にフォールバックされることを確認
  • 全コマンドで翻訳メッセージが正しく表示されることを確認
  • 既存テストを実行し、リグレッションがないことを確認

D-ske104 and others added 5 commits March 25, 2026 14:38
…tion

Add multi-language support using i18next. Default language is English,
switching to Japanese when terminal locale (LC_ALL/LC_MESSAGES/LANG)
starts with "ja". All hardcoded strings in commands, utilities, and
Markdown output are now translated via translation keys.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded Japanese labels added in upstream merge with i18n t() calls

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
開発第一言語がjaのため、jaロケールファイルには必ず全キーが存在する前提で
i18nextのfallbackLngをjaに設定。一方、環境変数からロケールを検出できない
場合はenにフォールバックし、日本語話者以外には英語を表示する。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant