{translation1} {translation2} {translation3}
; } ``` ### 断片的な文 関数呼び出しを含む断片的な文の処理には、`derive` を使用できます。 ```jsx copy import { derive, gt } from 'gt-react-native'; 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-native'; 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-native'; 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-react-native'; 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-native'; 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-native'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return{message}
; } ``` *** ## 注意事項 * `derive` は翻訳エントリを指数関数的に増やす可能性があるため、使用は慎重に行ってください * 想定されるすべての結果は、ビルド時に静的に解析可能である必要があります * 静的関数内の変数は `declareVar` でラップする必要があります ## 次のステップ * 静的関数内の動的コンテンツをマークする方法については、[`declareVar`](/docs/react-native/api/strings/declare-var)を参照してください * 宣言された変数から元の値を抽出する方法については、[`decodeVars`](/docs/react-native/api/strings/decode-vars)を参照してください * JSXで同等の機能を使う場合は、[`