# gt: General Translation CLI tool: キーごとのメタデータ
URL: https://generaltranslation.com/ja/docs/cli/reference/keyed-metadata.mdx
---
title: キーごとのメタデータ
description: General Translation の JSON ファイルおよび YAML ファイルに、キーごとの翻訳指示を付与します。キーごとのメタデータの API リファレンス。
---
ソースファイルのキー構造を反映した補助メタデータファイルを用意し、各末端にメタデータオブジェクトを配置します。各オブジェクトには、そのキーの翻訳に関する指示が含まれます。
CLI は補助メタデータファイルを自動的に検出し、ソース構造に照らして検証したうえで、翻訳エンジンに送信します。
## フィールド [#fields]
| フィールド | 説明 | 型 | 任意 | デフォルト |
| ---------------------------- | ---------------------------- | -------- | -- | ----- |
| [`context`](#context) | 特定の文字列に対する翻訳指示。 | `string` | はい | — |
| [`maxChars`](#max-chars) | 翻訳後の出力の最大文字数。 | `number` | はい | — |
| [`sourceCode`](#source-code) | ファイルパスをキーとする周辺のソースコードコンテキスト。 | `object` | はい | — |
## ファイル構造 [#structure]
補助メタデータファイルは、ソースファイルと同じディレクトリに配置し、`{name}.metadata.{ext}` という命名規則に従い、各末端にメタデータオブジェクトを持つ形でソースファイルのキー構造を反映している必要があります。
```text
translations.json # ソース文字列
translations.metadata.json # キーごとのメタデータ
```
特定の翻訳指示が必要なキーに対してのみ、エントリを追加してください。エントリのないキーは通常どおり翻訳されます。
```json title="translations.json"
{
"nav": {
"home": "Home",
"bank": "Bank",
"save": "Save"
}
}
```
```json title="translations.metadata.json"
{
"nav": {
"bank": {
"context": "川岸 — 川の側面。金融機関ではない。"
},
"save": {
"context": "スポーツ用語 — ゴールキーパーがゴールを防ぐこと。データの保存ではない。",
"maxChars": 12
}
}
}
```
## `context` [#context]
**型** `string` · **任意** · **デフォルト** —
特定の文字列に対して適用する翻訳指示です。複数の意味を持つ語の曖昧さを解消したり、ドメイン固有の用語を指定したり、意図する解釈を明確にしたりするために使用します。
```json
{
"bank": {
"context": "Riverbank. The side of a river where land meets water, NOT a financial institution."
}
}
```
## `maxChars` [#max-chars]
**型** `number` · **任意** · **デフォルト** —
翻訳結果に対する最大文字数制限です。エンジンは制限内に収めるため、より短い同義語や略語、簡潔な言い回しを使用します。これはベストエフォートです。ソース内容に対してこの制限を満たすのが現実的でない場合は、完全な翻訳が返されます。
```json
{
"save": {
"maxChars": 10
}
}
```
## `sourceCode` [#source-code]
**型** `object` · **任意** · **デフォルト** —
文字列の周辺ソースコードコンテキスト。ファイルパスをキーとし、各エントリには `before` (対象行より上の行) 、`target` (文字列を含む行) 、`after` (対象行より下の行) が含まれます。同じ文字列が異なる場所に出現する場合は、1 つのファイルに複数のエントリを含められます。
```json
{
"new_lead": {
"sourceCode": {
"components/Dashboard.tsx": [
{
"before": "function NotificationBanner({ type }) {\n const gt = useGT();",
"target": " const msg = gt('You have a new lead!');",
"after": " return {msg};\n}"
}
]
}
}
}
```
### 組み合わせの例
1 つのキーに 3 つのフィールドをすべてまとめた例:
```json
{
"save_button": {
"context": "Sports term. A goalkeeper's save — preventing a goal from being scored. NOT saving data.",
"maxChars": 12,
"sourceCode": {
"components/MatchStats.tsx": [
{
"before": "const stats = useMatchStats();\nconst gt = useGT();",
"target": "const label = gt('セーブ');",
"after": "return }>{label}: {stats.saves};"
}
]
}
}
}
```
## YAML [#yaml]
Metadata は `.metadata.yaml` または `.metadata.yml` の補助ファイルでも同様に機能します。
```yaml title="translations.metadata.yaml"
ui:
buttons:
save:
context: "Sports term. A goalkeeper's save, NOT saving data."
maxChars: 12
labels:
date:
context: "The edible fruit of the date palm. NOT a calendar date."
```
## 検証 [#validation]
CLI はメタデータファイルをソース構造に照らして検証し、メタデータキーがソースに存在しない場合、値の型がソースと一致しない場合 (プリミティブかオブジェクトか、配列かオブジェクトか) 、ルートの型が一致しない場合、またはファイルを解析できない場合は、エラーを出して終了します。
## スキーマとマッチング [#schema]
キーごとのメタデータは、JSON スキーマ (`include` と `composite`) および YAML スキーマ (`include`) で使用できます。メタデータは同じスキーマパイプラインを通して変換されるため、翻訳時に key パスが一致します。companion ファイルは対応するソースファイルとマッチングされ、それ単体では翻訳されません — 対応するソースがない `.metadata.json` ファイルは通常のファイルとして扱われます。メタデータだけを変更しても再翻訳はトリガーされません。ソースコンテンツも変更されている必要があります。