Author:
    Creation:2026-07-30Last update:2026-07-30

    рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА (Select) / Intlayer

    Select рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

    Intlayer рдореЗрдВ, рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ select рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдордирдорд╛рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдореИрдк рдХрд░рддрд╛ рд╣реИред рдпрд╣ ICU рд╕рдВрджреЗрд╢ {value, select, тАж} рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдпрд╛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ switch рдХрдерди рдХреЗ рд╕рдорд╛рди рд╣реИред

    select рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд░реЗрдВ рдЬрдм рд╡рд┐рд╡реЗрдЪрдХ (discriminant) рдПрдХ рдореБрдХреНрдд-рд╕реНрд╡рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ: рдПрдХ рд╕реНрдерд┐рддрд┐ (status), рдПрдХ рдпреЛрдЬрдирд╛ (plan), рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (platform), рдПрдХ рднреВрдорд┐рдХрд╛ (role)ред рдЕрдиреНрдп рд╡рд┐рд╡реЗрдЪрдХреЛрдВ рдХреЗ рд▓рд┐рдП, Intlayer рд╕рдорд░реНрдкрд┐рдд рдиреЛрдбреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

    рд╡рд┐рд╡реЗрдЪрдХ (Discriminant)рдиреЛрдб
    рдорд╛рддреНрд░рд╛ (Quantity)enu()
    рдмреВрд▓рд┐рдпрди (Boolean)cond()
    рд▓рд┐рдВрдЧ (Gender)gender()
    рдХреЛрдИ рдЕрдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧselect()

    рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

    рдЕрдкрдиреЗ Intlayer рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдордЧреНрд░реА рдореЙрдбреНрдпреВрд▓ (content module) рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рдЪрдпрди рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред рдиреАрдЪреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВред

    **/*.content.ts
    import { select, type Dictionary } from "intlayer";
    
    const myPostContent = {
      key: "my_key",
      content: {
        publishStatus: select({
          draft: "This post is a draft",
          published: "This post is live",
          scheduled: "This post is scheduled",
          fallback: "Unknown status", // рд╡реИрдХрд▓реНрдкрд┐рдХ (Optional)
        }),
      },
    } satisfies Dictionary;
    
    export default myPostContent;
    
    рдпрджрд┐ рдХреЛрдИ fallback рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдХрд┐рд╕реА рднреА рдШреЛрд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рдореЗрд▓ рди рдЦрд╛рдиреЗ рдкрд░ рдЕрдВрддрд┐рдо рдШреЛрд╖рд┐рдд рдХреБрдВрдЬреА (key) рдХреЛ рдлрд╝реЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: рдареАрдХ cond() рдФрд░ gender() рдЕрдиреБрдмрдВрдз (contract) рдХреА рддрд░рд╣ред

    рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ (Type Safety)

    рд╕реНрд╡реАрдХреГрдд рддрд░реНрдХ (argument) рдШреЛрд╖рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ (cases) рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:

    • fallback рдХреЗ рдмрд┐рдирд╛, рдХреЗрд╡рд▓ рдШреЛрд╖рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╣реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЯрд╛рдЗрдкреЛ рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐ (type error) рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
    • fallback рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдлрд╝реЙрд▓рдмреИрдХ рдмреЗрдореЗрд▓ рдорд╛рдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ) рдЬрдмрдХрд┐ рдШреЛрд╖рд┐рдд рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЕрднреА рднреА рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛ (autocompletion) рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред

    рд╕рд╛рдзрд╛рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ (Plain Object) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

    рд╕рд╛рдзрд╛рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕рдореЗрдВ рдЕрдиреБрдХреНрд░рдордг (indexing) рдХрд░рдирд╛ рдЖрдХрд░реНрд╖рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

    tsx
    // тЭМ рдРрд╕рд╛ рди рдХрд░реЗрдВ
    const { publishStatus } = useIntlayer("my_key");
    
    return <p>{publishStatus[publishType]}</p>;
    

    Intlayer рдХрдВрдкрд╛рдЗрд▓рд░ (compiler) рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб (source code) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╢реЗрд╖ рдХреБрдВрдЬрд┐рдпреЛрдВ (keys) рдХреЛ рдЫреЛрдЯрд╛ (minify) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЧрддрд┐рд╢реАрд▓ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдкрд╣реБрдВрдЪ (dynamic computed access) (obj[expr]) рдХреЛ рд╕реНрдерд┐рд░ (statically) рд░реВрдк рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реЗ рд╢рд╛рдЦрд╛ рдХреЛ рдЕрдкрд╛рд░рджрд░реНрд╢реА (opaque) рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдпрд╣ рдмрдВрдбрд▓ рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

    select() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рдзрд╛рди (case resolution) рдкреНрд░реЙрдкрд░реНрдЯреА рдПрдХреНрд╕реЗрд╕ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдПрдХрд▓ рд╕реНрдерд┐рд░ рдлрд╝реАрд▓реНрдб рдкрд╣реБрдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реЗ рд╣реА рдЕрдиреБрдХреВрд▓рд┐рдд (optimize) рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡рд╣ enu(), cond(), рдпрд╛ gender() рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ:

    tsx
    // тЬЕ рдРрд╕рд╛ рдХрд░реЗрдВ
    const { publishStatus } = useIntlayer("my_key");
    
    return <p>{publishStatus(publishType)}</p>;
    

    рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

    React рдШрдЯрдХ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, react-intlayer рдкреИрдХреЗрдЬ рд╕реЗ useIntlayer рд╣реБрдХ рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╣реБрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрдЪрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

    **/*.tsx
    import type { FC } from "react";
    import { useIntlayer } from "react-intlayer";
    
    const PostStatus: FC = () => {
      const { publishStatus } = useIntlayer("my_key");
    
      return (
        <div>
          <p>
            {
              /* рдЖрдЙрдЯрдкреБрдЯ: This post is a draft */
              publishStatus("draft")
            }
          </p>
          <p>
            {
              /* рдЖрдЙрдЯрдкреБрдЯ: This post is live */
              publishStatus("published")
            }
          </p>
          <p>
            {
              /* рдЖрдЙрдЯрдкреБрдЯ: Unknown status */
              publishStatus("Archived")
            }
          </p>
        </div>
      );
    };
    
    export default PostStatus;
    

    Next.js рдХреНрд▓рд╛рдЗрдВрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    **/*.tsx
    "use client";
    
    import type { FC } from "react";
    import { useIntlayer } from "next-intlayer";
    
    const PostStatus: FC = () => {
      const { publishStatus } = useIntlayer("my_key");
    
      return (
        <div>
          <p>{publishStatus("draft")}</p>
          <p>{publishStatus("published")}</p>
        </div>
      );
    };
    
    export default PostStatus;
    

    Vue рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    **/*.vue
    <script setup lang="ts">
    import { useIntlayer } from "vue-intlayer";
    
    const { publishStatus } = useIntlayer("my_key");
    </script>
    
    <template>
      <div>
        <p>{{ publishStatus("draft") }}</p>
        <p>{{ publishStatus("published") }}</p>
      </div>
    </template>
    

    Svelte рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕реНрдЯреЛрд░ рдХреЛ $ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    **/*.svelte
    <script lang="ts">
    import { useIntlayer } from "svelte-intlayer";
    
    const content = useIntlayer("my_key");
    </script>
    
    <div>
      <p>{$content.publishStatus("draft")}</p>
      <p>{$content.publishStatus("published")}</p>
    </div>
    

    Preact рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    **/*.tsx
    import type { FC } from "preact";
    import { useIntlayer } from "preact-intlayer";
    
    const PostStatus: FC = () => {
      const { publishStatus } = useIntlayer("my_key");
    
      return (
        <div>
          <p>{publishStatus("draft")}</p>
          <p>{publishStatus("published")}</p>
        </div>
      );
    };
    
    export default PostStatus;
    

    SolidJS рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    **/*.tsx
    import type { Component } from "solid-js";
    import { useIntlayer } from "solid-intlayer";
    
    const PostStatus: Component = () => {
      const { publishStatus } = useIntlayer("my_key");
    
      return (
        <div>
          <p>{publishStatus("draft")}</p>
          <p>{publishStatus("published")}</p>
        </div>
      );
    };
    
    export default PostStatus;
    

    Angular рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    app.component.ts
    import { Component } from "@angular/core";
    import { useIntlayer } from "angular-intlayer";
    
    @Component({
      selector: "app-post-status",
      template: `
        <div>
          <p>{{ content().publishStatus("draft") }}</p>
          <p>{{ content().publishStatus("published") }}</p>
        </div>
      `,
    })
    export class PostStatusComponent {
      content = useIntlayer("my_key");
    }
    

    vanilla-intlayer рдХреЗ рд╕рд╛рде рдЪрдпрди-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ useIntlayer рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

    **/*.ts
    import { installIntlayer, useIntlayer } from "vanilla-intlayer";
    
    installIntlayer();
    
    const content = useIntlayer("my_key").onChange((newContent) => {
      document.getElementById("status")!.textContent =
        newContent.publishStatus("draft");
    });
    
    // рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрди
    document.getElementById("status")!.textContent = content.publishStatus("draft");
    

    рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде Select рдХрд╛ рд╕рдВрдпреЛрдЬрди

    рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ (case) рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдиреЛрдб (content node) рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП select рдХреЛ t(), insert(), md() рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    **/*.content.ts
    import { insert, select, t, type Dictionary } from "intlayer";
    
    const myPostContent = {
      key: "my_key",
      content: {
        publishStatus: select({
          draft: insert(
            t({
              en: "{{name}} saved a draft",
              fr: "{{name}} a enregistr├й un brouillon",
              hi: "{{name}} рдиреЗ рдПрдХ рдорд╕реМрджрд╛ рд╕рд╣реЗрдЬрд╛",
            })
          ),
          published: insert(
            t({
              en: "{{name}} published the post",
              fr: "{{name}} a publi├й lтАЩarticle",
              hi: "{{name}} рдиреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА",
            })
          ),
          fallback: insert(
            t({
              en: "{{name}} updated the post",
              fr: "{{name}} a mis ├а jour lтАЩarticle",
              hi: "{{name}} рдиреЗ рдкреЛрд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдХреА",
            })
          ),
        }),
      },
    } satisfies Dictionary;
    
    export default myPostContent;
    
    tsx
    publishStatus("draft")({ name: "Alice" }); // рдЖрдЙрдЯрдкреБрдЯ: Alice рдиреЗ рдПрдХ рдорд╕реМрджрд╛ рд╕рд╣реЗрдЬрд╛
    

    ICU select рд╕реЗ рдкреНрд░рд╡рд╛рд╕рди (Migration)

    рд╡реЗ рд╕рдВрджреЗрд╢ рдЬреЛ ICU select рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ select рдиреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

    text
    {publishType, select, draft {draft} published {published} other {Unknown}}
    

    рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛:

    typescript
    select(
      {
        draft: "draft",
        published: "published",
        fallback: "Unknown",
      },
      "publishType"
    );
    

    ICU рдХреА other рд╕реНрдерд┐рддрд┐ рдХреЛ fallback рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Intlayer рдореЗрдВ рд╕рднреА рдХреИрдЪ-рдСрд▓ (catch-all) рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╣рд┐рдд (canonical) рдирд╛рдо рд╣реИред рджреВрд╕рд░рд╛ рддрд░реНрдХ ICU рдЪрд░ рдирд╛рдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдирд┐рд░реНрдпрд╛рдд (export) рдХреЗ рд╕рдордп рд╕рдВрджреЗрд╢ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА ICU рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреЗред

    рдзреНрдпрд╛рди рджреЗрдВ, ICU select рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд▓рд┐рдВрдЧ рдорд╛рди (male / female / other) рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп gender рдиреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди

    рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (configuration) рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

    рдпреЗ рд╕рдВрд╕рд╛рдзрди рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ (frameworks) рдХреЗ рднреАрддрд░ Intlayer рдХреЛ рд╕реЗрдЯ рдЕрдк рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред