рдореИрдВ Intlayer рдХреЗ рд╕рд╛рде /[locale]/ рдкрдереЛрдВ рдХреЗ рдмрдЬрд╛рдп рдбреЛрдореЗрди-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реВрдВ?

    рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░

    рдбреЛрдореЗрди-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдкрде-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ (example.com/[locale]/) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рднреА рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдЕрдкрдиреЗ рдРрдк рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдбреЛрдореЗрди рдкрд░ рддреИрдирд╛рдд рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

    рдЪрд░рдг-рджрд░-рдЪрд░рдг

    1. рдкреНрд░рддреНрдпреЗрдХ рдбреЛрдореЗрди рдкрд░ рдПрдХ рдмрд╛рд░ рддреИрдирд╛рдд рдХрд░реЗрдВ (example.com, exemple.fr, ejemplo.es, тАж)ред
    2. рдкреНрд░рддреНрдпреЗрдХ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП, LOCALE (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп Intlayer рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░) рдХреЛ рдЙрд╕ рд▓реЛрдХреЗрд▓ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдбреЛрдореЗрди рд╕реЗрд╡рд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
    3. рдЙрд╕ рдЪрд░ рдХреЛ рдЕрдкрдиреЗ intlayer.config.[ts|js] рдореЗрдВ defaultLocale рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВред
    ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
        defaultLocale: process.env.LOCALE, // ЁЯСИ рдбреЛрдореЗрди рд▓реЛрдХреЗрд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
      },
      // ... рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХрд╛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕рд╛
    };
    
    export default config;
    

    рдмрд╕ рдЗрддрдирд╛ рд╣реА-рдпрд╣ Next.js, Vite + React, Vite + Vue, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

    рдЕрдЧрд░ рд╣рд░ рдбреЛрдореЗрди рдПрдХ рд╣реА рддреИрдирд╛рддреА рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

    рдпрджрд┐ рд╕рднреА рдбреЛрдореЗрди рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдбрд▓ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдХреЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

    Next.js рдХреЗ рд▓рд┐рдП

    tsx
    // src/IntlayerProvider.tsx
    import {
      IntlayerClientProvider,
      type IntlayerClientProviderProps,
    } from "next-intlayer";
    import { IntlayerServerProvider } from "next-intlayer/server";
    import type { FC } from "react";
    
    export const IntlayerProvider: FC<IntlayerClientProviderProps> = ({
      children,
      locale,
    }) => {
      const resolvedLocale = locale ?? getLocaleFromHostname(); // рдпрджрд┐ locale рдирд╣реАрдВ рд╣реИ рддреЛ рд╣реЛрд╕реНрдЯрдирд╛рдо рд╕реЗ рд▓реЛрдХреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
      return (
        <IntlayerServerProvider locale={resolvedLocale}>
          <IntlayerClientProvider locale={resolvedLocale}>
            {children}
          </IntlayerClientProvider>
        </IntlayerServerProvider>
      );
    };
    

    Vue рдХреЗ рд▓рд┐рдП

    ts
    ts;
    import { createApp } from "vue";
    import { installIntlayer } from "vue-intlayer";
    import App from "./App.vue";
    import { router } from "./routes";
    
    const app = createApp(App);
    app.use(router);
    installIntlayer(app, getLocaleFromHostname()); // getLocaleFromHostname() рдХреЛ рдЕрдкрдиреА рдЦреБрдж рдХреА рдЦреЛрдЬ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдмрджрд▓реЗрдВ
    app.mount("#app");
    

    getLocaleFromHostname() рдХреЛ рдЕрдкрдиреА рдЦреБрдж рдХреА рдЦреЛрдЬ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдмрджрд▓реЗрдВред

    рдЕрдкрдиреЗ рд▓реЛрдХреЗрд▓ рд╕реНрд╡рд┐рдЪрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

    рдбреЛрдореЗрди-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрджрд▓рдирд╛ рджреВрд╕рд░реЗ рдбреЛрдореЗрди рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИ:

    ts
    const { locale } = useLocale();
    
    function changeLanguage(target: Locale) {
      window.location.href = domainForLocale[target];
    }
    

    рдбреЛрдореЗрди-рдЖрдзрд╛рд░рд┐рдд рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд╛рдн

    1. рд╕рд░рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: intlayerProxy, generateStaticParams, react-router, рдпрд╛ vue-router рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ
    2. рдмреЗрд╣рддрд░ SEO: рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХрд╛ рдЕрдкрдирд╛ рдбреЛрдореЗрди рд╣реЛрддрд╛ рд╣реИ
    3. рд╕рд╛рдл-рд╕реБрдерд░реЗ URL: рдкрде рдореЗрдВ рдХреЛрдИ рд▓реЛрдХреЗрд▓ рдЙрдкрд╕рд░реНрдЧ рдирд╣реАрдВ рд╣реЛрддрд╛
    4. рдЖрд╕рд╛рди рд░рдЦрд░рдЦрд╛рд╡: рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреА рддреИрдирд╛рддреА рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреА рд╣реИ