Lingo.dev CLI は、さまざまなファイル形式を解析・翻訳するためにバケットタイプを使用します。各バケットタイプは、特定の形式に対応した専用パーサーです。CLI が翻訳対象とするファイルを定義するには、i18n.json で 1 つ以上のバケットを設定します。
バケットタイプ#
| バケットタイプ | フォーマット | 出力モード | [locale] 必須 |
|---|---|---|---|
json | JSON ファイル | ロケールごとに別ファイル | はい |
json5 | JSON5 ファイル | ロケールごとに別ファイル | はい |
jsonc | JSONC ファイル(コメント付き) | ロケールごとに別ファイル | はい |
json-dictionary | JSON 辞書(フラットなキー・バリュー) | ロケールごとに別ファイル | はい |
yaml | YAML ファイル | ロケールごとに別ファイル | はい |
yaml-root-key | ロケールをルートキーに持つ YAML | ソースファイルを更新 | いいえ |
markdown | Markdown ファイル | ロケールごとに別ファイル | はい |
mdx | MDX ファイル | ロケールごとに別ファイル | はい |
markdoc | Markdoc ファイル | ロケールごとに別ファイル | はい |
html | HTML ファイル | ロケールごとに別ファイル | はい |
mjml | MJML メールテンプレート | ロケールごとに別ファイル | はい |
android | Android XML リソース | ロケールごとに別ファイル | はい |
xcode-strings | Xcode .strings ファイル | ロケールごとに別ファイル | はい |
xcode-stringsdict | Xcode .stringsdict ファイル | ロケールごとに別ファイル | はい |
xcode-xcstrings | Xcode .xcstrings カタログ | ソースファイルを更新 | いいえ |
flutter | Flutter ARB ファイル | ロケールごとに別ファイル | はい |
po | GNU gettext PO ファイル | ロケールごとに別ファイル | はい |
properties | Java .properties ファイル | ロケールごとに別ファイル | はい |
csv | CSV ファイル | ソースファイルを更新 | いいえ |
csv-per-locale | CSV ファイル(ロケールごとに 1 ファイル) | ロケールごとに別ファイル | はい |
xml | 汎用 XML ファイル | ロケールごとに別ファイル | はい |
xliff | XLIFF ファイル | ロケールごとに別ファイル | はい |
srt | SRT 字幕ファイル | ロケールごとに別ファイル | はい |
vtt | VTT 字幕ファイル | ロケールごとに別ファイル | はい |
php | PHP ローカライゼーション配列 | ロケールごとに別ファイル | はい |
typescript | TypeScript ファイル | ロケールごとに別ファイル | はい |
vue-json | Vue i18n JSON ブロック | ロケールごとに別ファイル | はい |
txt | プレーンテキストファイル | ロケールごとに別ファイル | はい |
出力モード#
バケットは、次の 2 つの出力モードのいずれかで動作します。
ロケールごとに別ファイル - CLI はターゲット言語ごとに個別のファイルを生成します。include パターンには [locale] プレースホルダーを含める必要があります。
json
{
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}これにより、locales/en.json、locales/es.json、locales/fr.json などのファイルが生成されます。
ソースファイルを更新 - CLI は、ソースコンテンツを含む同じファイルに翻訳を書き戻します。[locale] プレースホルダーは使いません。
json
{
"buckets": {
"csv": {
"include": ["translations.csv"]
}
}
}CSV ファイルは通常、1 つのファイル内の列にすべてのロケールを格納します。Xcode .xcstrings カタログや、ルートキーを持つ YAML も同様です。
設定例#
JSON を使った Web アプリ#
json
{
"buckets": {
"json": {
"include": ["src/locales/[locale].json"],
"lockedKeys": ["brand/name"]
}
}
}Markdown を使ったドキュメントサイト#
json
{
"buckets": {
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}モバイルアプリ(iOS + Android)#
json
{
"buckets": {
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/app/src/main/res/values-[locale]/strings.xml"]
}
}
}複数フォーマットを含むモノレポ#
json
{
"buckets": {
"json": {
"include": ["apps/web/locales/[locale].json"]
},
"mdx": {
"include": ["packages/docs/content/[locale]/*.mdx"]
},
"flutter": {
"include": ["apps/mobile/lib/l10n/app_[locale].arb"]
}
}
}バケット固有の機能#
一部のバケットでは、include / exclude パターンに加えて、追加機能も利用できます。
| 機能 | 対応バケット | 説明 |
|---|---|---|
| Key Locking | キー・バリュー形式(JSON、YAML など) | 翻訳せずにソースの値をコピー |
| Key Ignoring | キー・バリュー形式 | キーをターゲットファイルから完全に除外 |
| Key Preserving | キー・バリュー形式 | 一度初期化したら、その後の更新から保護 |
| Translator Notes | JSONC、XCStrings | コメントで文脈を補足し、翻訳品質を向上 |
include パターンのルール#
- パターンは
i18n.jsonファイルの場所からの相対パスです - ロケールコードのプレースホルダーとして
[locale]を使います(「ロケールごとに別ファイル」バケットでは必須) - アスタリスク(
*)は任意のファイル名に一致します:locales/[locale]/*.json - 再帰パターン(
**)は、任意の深さにあるファイルに一致します:src/**/[locale].json、config/locales/**/[locale].yml。パターンで**を使う場合、node_modules、.git、dist、build、.next、.turboはデフォルトで除外されます。必要に応じて、独自のexcludeエントリを追加してください(CLI 0.135.0+ が必要です) - ファイル拡張子は解析に影響しません。どのパーサーを使うかはバケットタイプで決まります
