{translation1} {translation2} {translation3}
; } ``` ### 断片的な文 関数呼び出しを含む断片的な文を扱うには、`derive` を使用できます。 ```jsx copy import { derive, gt } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return{translation}
; } ``` ### 一致 `derive` を使わない場合、一致を翻訳で扱うには構文が煩雑になります。 一致 (数や性など) に対応するには、select 文を追加する必要があります。 さらに、あり得る結果をそれぞれ列挙しなければなりません。 ```jsx copy import { gt } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt( '{gender, select, boy {The boy is playing.} girl {The girl is playing.} other {}}', { gender: getSubject(gender) , }, ); return{translation}
; } ``` `derive` を使えば、一致の処理は簡単になります。 select 文は不要で、考えられるすべての結果を指定する必要もありません。 ```jsx copy import { derive, declareVar, gt } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return{translation}
; } ``` `derive` を使うと、CLI ツールは `getSubject` に 2 つの可能な結果があることを判別し、それぞれの結果に対応する翻訳エントリを作成します。 これにより、文法上の一致は自動的に処理されます。 * "The boy is playing" -> "*El* niño está jugando" * "The girl is playing" -> "*La* niña está jugando" ### 変数を使う 動的なコンテンツを扱うには、`derive` と `declareVar` を組み合わせて使えます。 ```jsx copy import { derive, declareVar, gt } from 'gt-next'; function getGreeting(name) { return name ? `Hello, ${declareVar(name)}` : 'Hello, stranger'; } function Component({ name }) { const translation = gt(`${derive(getGreeting(name))}! How are you?`); return{translation}
; } ``` ### 複雑な関数 関数には、複数の条件分岐や`return`文を含められます。 ```jsx copy import { derive, gt } from 'gt-next'; function getStatusMessage(status, priority) { if (status === 'complete') { return priority === 'high' ? 'Urgent task completed' : 'Task completed'; } else if (status === 'pending') { return priority === 'high' ? 'Urgent task pending' : 'Task pending'; } return 'Task status unknown'; } function Component({ status, priority }) { const message = gt(`${derive(getStatusMessage(status, priority))}.`); return{message}
; } ``` ### インライン式とロジック `derive` の呼び出し内にロジックを直接埋め込めます。 ```jsx copy import { derive, gt } from 'gt-next'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return{message}
; } ``` *** ## 注意点 * `derive` は翻訳エントリを指数関数的に増やす可能性があるため、使用は慎重に行ってください * 想定されるすべての結果は、ビルド時に静的解析できなければなりません * 静的関数内の変数は `declareVar` でラップする必要があります ## 次のステップ * 静的関数内の動的コンテンツをマークするには [`declareVar`](/docs/next/api/strings/declare-var) を参照してください * 宣言された変数から元の値を抽出するには [`decodeVars`](/docs/next/api/strings/decode-vars) を参照してください * JSX での対応機能については [`