# react-native: 分岐コンポーネント URL: https://generaltranslation.com/ja/docs/react-native/guides/branches.mdx --- title: 分岐コンポーネント description: 翻訳内の条件付きコンテンツに分岐コンポーネントを使う方法 --- {/* 自動生成: 直接編集しないでください。代わりに content/docs-templates/ 内の template を編集してください。 */} 分岐コンポーネントを使うと、[``](/docs/react-native/api/components/t) コンポーネント内で条件に応じてコンテンツをレンダリングできます。if/else 文や複数形ルールのような動的ロジックを扱いながら、あらゆるコンテンツのバリエーションを適切に翻訳できるようにします。 ## 利用可能なコンポーネント * [``](/docs/react-native/api/components/branch): 値または状態に応じてコンテンツを条件付きで表示 * [``](/docs/react-native/api/components/plural): ロケールごとのルールに基づく自動複数形処理 ## クイックスタート 分岐コンポーネントは、条件分岐を処理するために [``](/docs/react-native/api/components/t) 内で使用できます。 ```jsx import { T, Branch, Plural, Num, Var } from 'gt-react-native'; function NotificationPanel({ user, messageCount }) { return ( {user.name} is currently online

} away={

{user.name} is away

} >

{user.name} status unknown

You have {messageCount} message

} other={

You have {messageCount} messages

} />
); } ``` ## 分岐コンポーネントの仕組み 分岐コンポーネントは、翻訳内での条件付きレンダリングを次のように実現します。 1. [``](/docs/react-native/api/components/t) 内の**三項演算子**や条件分岐ロジックを**置き換える** 2. 条件が想定した値に一致しない場合に**フォールバックコンテンツ**を提供する 3. あり得るすべてのコンテンツのバリエーションを**翻訳できるようにする** 4. 複数形の扱いで**ロケールのルール**に自動的に従う ```jsx // ❌ これは機能しない - 内の条件ロジック

{isActive ? 'ユーザーはアクティブです' : 'ユーザーは非アクティブです'}

// ✅ これは機能する - branch を使った条件ロジック ユーザーはアクティブです

} false={

ユーザーは非アクティブです

} />
``` ## コンポーネントガイド ### Branch - 条件付きコンテンツ 値や状態に応じて条件付きでレンダリングする場合は、[``](/docs/react-native/api/components/branch) を使用します。 ```jsx // ユーザーステータスの表示 Administrator Dashboard

} user={

User Dashboard

} guest={

Guest Access

} >

Access level unknown

// 真偽値による条件分岐 Welcome back!

} false={

Please log in

} />
// サブスクリプションプラン Upgrade to unlock premium features

} premium={

Enjoy your premium experience

} enterprise={

Contact support for enterprise solutions

} >

Subscription status unavailable

``` ### 複数形 - スマートな複数形処理 数量に応じて文言が変わる場合は、[``](/docs/react-native/api/components/plural) を使用します。 ```jsx // 基本的な複数形処理 {itemCount} item in cart

} other={

{itemCount} items in cart

} />
// ゼロの処理 No new notifications

} one={

{notifications} notification

} other={

{notifications} notifications

} />
// 複雑な複数形処理(Unicode CLDRルールに従う) Due today

} one={

Due in {days} day

} few={

Due in {days} days

} many={

Due in {days} days

} other={

Due in {days} days

} />
``` ### 変数コンポーネントとの組み合わせ 分岐コンポーネントと変数コンポーネントは、自然に連携して動作します。 ```jsx Order {order.id} is pending. Total: {order.total}

} shipped={

Order {order.id} shipped on {order.shippedDate}

} delivered={

Order {order.id} was delivered successfully

} >

Order status unknown

``` ## 分岐コンポーネントを使う場面 ### 三項演算子を置き換える 条件分岐ロジックを [``](/docs/react-native/api/components/t) 内で使える形に変換します: ```jsx // ❌ 内では三項演算子を使用できません {isActive ?

Active user

:

Inactive user

}
// ✅ 代わりに Branch を使用してください Active user

} false={

Inactive user

} />
``` ### 複数の条件を処理する switch文や複数のif/else条件の代わりに使います: ```jsx // ❌ 複雑な条件分岐ロジック {status === 'loading' ?

Loading...

: status === 'error' ?

Error occurred

: status === 'success' ?

Success!

:

Unknown status

}
// ✅ すっきりした分岐ロジック Loading...

} error={

Error occurred

} success={

Success!

} >

Unknown status

``` ### 複数形の規則 手動の複数形処理は次のように置き換えます: ```jsx // ❌ 手動の複数形処理 {count === 1 ?

1 item

:

{count} items

}
// ✅ 自動の複数形処理 {count} item

} other={

{count} items

} />
``` ## スタンドアロンでの使用 分岐コンポーネントは、翻訳なしで純粋なロジックのために [``](/docs/react-native/api/components/t) の外でも使用できます。 ```jsx // 純粋な条件付きレンダリング } light={} > // 純粋な複数形処理 } other={} /> ``` ## よくある問題 ### branch キーの欠落 どの値にも一致しない場合に備えて、常にフォールバックコンテンツを指定してください: ```jsx // ❌ 予期しない値に対するフォールバックなし } user={} // userRole が "moderator" の場合はどうなる? /> // ✅ 常にフォールバックを含める } user={} > {/* その他の値に対するフォールバック */} ``` ### 複数形が不完全な場合 デフォルトのロケールに必要な複数形をすべて指定してください。 ```jsx // ❌ "other" 形式が不足しています 1 item

} // 0、2、3 などはどうなる? /> // ✅ 必要な形式を含める No items

} one={

1 item

} other={

{count} items

} /> ``` ### 複雑にネストしたロジック これは動作しますが、分岐ロジックはシンプルに保ち、深いネストは避けることをおすすめします。 ```jsx // ❌ 複雑なネストされた分岐 {/* 読みにくく、保守が困難 */} // ✅ ロジックをフラット化するか、複数のコンポーネントを使用する } active-offline={} inactive-online={} > ``` 複数形のルールについて詳しくは、[Unicode CLDR のドキュメント](https://cldr.unicode.org/index/cldr-spec/plural-rules)を参照してください。 ## 次のステップ * [文字列翻訳ガイド](/docs/react-native/guides/strings) - JSX を使わずにプレーンテキストを翻訳する * [動的コンテンツガイド](/docs/key-concepts/dynamic-content) - runtime での翻訳を扱う * API リファレンス: * [`` コンポーネント](/docs/react-native/api/components/branch)