{translation1} {translation2} {translation3}
; } ``` ### 断片化された文 関数呼び出しを使った断片化された文の処理には、`derive` を使用できます。 ```jsx copy import { derive, gt } from 'gt-react'; 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-react'; 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-react'; 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 つの取りうる結果があることを判別し、それぞれの結果に対応する翻訳エントリを作成します。 これにより、文法的一致も自動的に処理されます。 * "その男の子は遊んでいます" -> "*El* niño está jugando" * "その女の子は遊んでいます" -> "*La* niña está jugando" ### 変数を使う場合 動的なコンテンツでは、`derive` と `declareVar` を組み合わせて使えます。 ```jsx copy import { derive, declareVar, gt } from 'gt-react'; 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-react'; 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-react'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return{message}
; } ``` *** ## 注意事項 * `derive` は翻訳エントリを指数関数的に増やす可能性があるため、使用は慎重に行ってください * 取りうるすべての結果は、ビルド時に静的に解析できなければなりません * 静的関数内の変数は `declareVar` でラップする必要があります ## 次のステップ * 静的関数内で動的コンテンツをマークする方法については、[`declareVar`](/docs/react/api/strings/declare-var)を参照してください * 宣言された変数から元の値を取り出す方法については、[`decodeVars`](/docs/react/api/strings/decode-vars)を参照してください * JSXでの相当機能については、[`