バケット
Lingo.dev CLIでのバケットの設定
はじめに
i18n.jsonファイルでは、bucketsプロパティが以下を定義します。
- ファイルからローカライズ可能なコンテンツを抽出するために使用されるパーサー
- ファイルシステム上のローカライズ可能なコンテンツの場所
- キーロックなどの特定のバケット固有機能
バケットの設定は、Lingo.dev CLIで翻訳パイプラインをセットアップする際の重要なステップです。
バケットタイプ
Lingo.dev CLIは、幅広い業界標準のファイル形式(および一部の非標準形式)に対応しています。これらの形式はそれぞれ、特定のタイプのバケットに関連付けられています。
バケットタイプは一般的にファイル形式と同義ですが、必ずしも1対1の対応ではありません。例えば、"json"バケットと"json-dictionary"バケットは、どちらもJSONファイル内のローカライズ可能なコンテンツを処理しますが、CLIはファイルの構造が異なることを想定しているため、バケットは別個のものとなります。
出力モード
コンテンツをローカライズする際、一部のバケットはソースコンテンツが存在するファイルを変更し、他のバケットは各ターゲットロケール用に個別のファイルを作成します。
この動作の違いは、バケットによってどちらかのオプションが最も適しているためです。すべてのバケットタイプに対応できる単一の正しいオプションは存在しません。
例えば、CSVバケットを使用する場合、.csvファイルは直接変更されます。これは、CSVファイルでは通常、各ロケールのローカライズされたコンテンツを同じファイル内の別々の列に格納するためです。
KEY,en,es
welcome_message,Welcome to our application,Bienvenido a nuestra aplicación
一方、Markdownバケットを使用する場合、ローカライズされたコンテンツは別々のファイルに出力されます。これは、すべてのローカライズされたバリエーションを単一のファイルに格納することが一般的ではないためです。
これを理解することは、いくつかの理由で重要です。
- 異なるバケットが異なる動作をすることは、すぐには明らかではありません。
- ファイルの出力方法に基づいて、
includeとexcludeのパターンを異なる方法で定義する必要があります。
バケットの作成
バケットを作成するには、i18n.jsonファイルのbucketsオブジェクトにエントリを追加します。
{
"buckets": {
"json": {}
}
}
各キーはサポートされているバケットタイプのいずれかに対応する必要があり、値はそのバケットの有効な設定を含むオブジェクトである必要があります。
bucketsプロパティには、少なくとも1つの有効なエントリが必要です。
ファイルの追加
最低限、バケットにはローカライズするコンテンツを定義するincludeプロパティが必要です。
{
"buckets": {
"json": {
"include": []
}
}
}
このプロパティは文字列の配列である必要があります。
各文字列は次のいずれかです。
- ファイルパス(例:
"some/dir/labels.json") - globパターン(例:
"some/dir/*.json")
これらの値は常にi18n.jsonファイルからの相対パスです。
[locale]プレースホルダー
バケットがローカライズされたコンテンツを別のファイルに出力する場合(つまり、既存のファイルを変更しない場合)、includeパターンには特別な[locale]プレースホルダーを含める必要があります。
{
"buckets": {
"json": {
"include": ["[locale]/*.mdx"]
}
}
}
このプレースホルダーは実行時に置き換えられ、CLIが次の処理を行う場所に影響します。
- ソースコンテンツを検索する
- ローカライズされたコンテンツを出力する
例えば、ソースロケールが"en"で、ターゲットロケールが"es"の場合、[locale]/*.mdxはen/ディレクトリ内のすべてのMDXファイルを検索し、ローカライズされたファイルをes/ディレクトリに出力します。
[locale]プレースホルダーの位置は重要ではなく、次のパターンはすべて有効です。
content/[locale]/*.mdx[locale]/*.mdx*.[locale].mdx
再帰的なglobパターン
Lingo.dev CLIは再帰的なglobパターンをサポートしていません。つまり、"**/*.json"のようなパターンは機能しません。再帰的なglobパターンを設定しようとすると、エラーが発生します。
ファイル拡張子
includeパターンでは、ファイル拡張子は重要ではありません。Lingo.dev CLIは、拡張子に関係なく、バケットタイプに基づいて指定されたファイルの解析を試みます。
ファイルの除外
includeパターンに加えて、バケットは、ローカライゼーションからファイルパスまたはglobパターンを除外するためのexcludeパターンもサポートしています。
{
"buckets": {
"json": {
"include": ["[locale]/*.mdx"],
"exclude": ["[locale]/ignored/*.mdx"],
}
}
}
これらのパターンは、includeパターンと同じルールに従います。
バケット固有の機能
一部のバケットには、他のバケットにはない特定の機能があります。これは通常、それらの機能がそれらのバケットのコンテキストでのみ論理的に意味を持つためです。
バケット固有の機能には、次のものが含まれます。
これらの機能の詳細については、リンクされたドキュメントを参照してください。