Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Інтегрувавши Intlayer MCP Server у свого улюбленого AI-помічника, ви зможете отримувати всю документацію безпосередньо через ChatGPT, DeepSeek, Cursor, VSCode тощо.
Переглянути документацію MCP ServerІсторія версій
- Додано команду initv7.5.930.12.2025
- Додано розділ debugv6.1.602.10.2025
- Ініціалізація історіїv5.5.1029.06.2025
Вміст цієї сторінки перекладено за допомогою штучного інтелекту.
Переглянути останню версію оригінального вмісту англійськоюЯкщо у вас є ідея щодо покращення цієї документації, будь ласка, долучіться, надіславши pull request на GitHub.
Посилання на документацію на GitHubСкопіювати документацію у форматі Markdown в буфер обміну
Перекладіть ваш додаток React Native та Expo за допомогою Intlayer | Інтернаціоналізація (i18n)
Зміст
Що таке Intlayer?
Intlayer — це інноваційна, відкрита бібліотека для інтернаціоналізації (i18n), яка спрощує підтримку кількох мов у сучасних додатках. Вона працює у багатьох JavaScript/TypeScript середовищах, включно з React Native (через пакет react-intlayer).
За допомогою Intlayer ви можете:
- Легко керувати перекладами за допомогою декларативних словників на рівні компонентів.
- Забезпечити підтримку TypeScript з автогенерованими типами.
- Динамічно локалізувати контент, включно з текстами інтерфейсу (а в React для web — також HTML-метадані тощо).
- Отримати переваги розширених можливостей, таких як динамічне визначення локалі та її перемикання.
///
Крок 1: Встановіть залежності
Перегляньте шаблон застосунку на GitHub.
У вашому проекті React Native встановіть такі пакети:
Скопіюйте код у буфер обміну
npm install intlayer react-intlayernpm install --save-dev react-native-intlayernpx intlayer initПакети
intlayer
Основний i18n-набір інструментів для конфігурації, вмісту словників, генерації типів та команд CLI.react-intlayer
Інтеграція для React, яка надає провайдери контексту та React hooks, які ви використовуватимете в React Native для отримання та перемикання локалей.react-native-intlayer
Інтеграція для React Native, яка забезпечує плагін Metro для інтеграції Intlayer з бандлером React Native.
Крок 2: Створіть конфігурацію Intlayer
У корені вашого проєкту (або в будь-якому зручному місці) створіть файл Intlayer config. Він може виглядати так:
Скопіюйте код у буфер обміну
/** * Якщо типи Locales недоступні, спробуйте встановити moduleResolution у "bundler" у вашому tsconfig.json */import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // ... Додайте будь-які інші локалі, які вам потрібні ], defaultLocale: Locales.ENGLISH, },};export default config;У цій конфігурації ви можете:
- Налаштувати ваш список підтримуваних локалей.
- Встановіть локаль за замовчуванням.
- Пізніше ви зможете додати більш просунуті опції (наприклад, логи, користувацькі директорії контенту тощо).
- Див. документацію конфігурації Intlayer для детальнішої інформації.
Крок 3: Додайте плагін Metro
Metro — це бандлер для React Native. Він є бандлером за замовчуванням для проєктів React Native, створених за допомогою команди react-native init. Щоб використовувати Intlayer з Metro, потрібно додати плагін у файл metro.config.js:
Скопіюйте код у буфер обміну
const { getDefaultConfig } = require("expo/metro-config");const { configMetroIntlayer } = require("react-native-intlayer/metro");module.exports = (async () => { const defaultConfig = getDefaultConfig(__dirname); return await configMetroIntlayer(defaultConfig);})();Примітка: configMetroIntlayer — це функція, яка повертає проміс. Використовуйте configMetroIntlayerSync, якщо хочете виконувати це синхронно, або уникайте IFFE (Immediately Invoked Function Expression). Примітка: configMetroIntlayerSync не дозволяє будувати словники intlayer під час запуску сервера
Крок 4: Додайте провайдер Intlayer
Щоб синхронізувати мову користувача по всьому застосунку, потрібно обгорнути кореневий компонент компонентом IntlayerProvider з react-intlayer-native.
Переконайтеся, що використовуєте провайдер з react-native-intlayer, а не з react-intlayer. Експорт з react-native-intlayer включає поліфіли для Web API.
Також потрібно додати функцію intlayerPolyfill у ваш файл index.js, щоб забезпечити правильну роботу Intlayer.
Скопіюйте код у буфер обміну
import { Stack } from "expo-router";import { getLocales } from "expo-localization";import { IntlayerProvider } from "react-native-intlayer";import { type FC } from "react";const getDeviceLocale = () => getLocales()[0]?.languageTag;const RootLayout: FC = () => { return ( <IntlayerProvider defaultLocale={getDeviceLocale()}> <Stack> <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> </Stack> </IntlayerProvider> );};export default RootLayout;Крок 5: Оголосіть свій контент
Створіть файли декларації контенту у будь-якому місці вашого проєкту (зазвичай у src/), використовуючи будь-який з форматів розширень, які підтримує Intlayer:
- .content.json
- .content.ts
- .content.tsx
- .content.js
- .content.jsx
- .content.mjs
- .content.mjx
- .content.cjs
- .content.cjx
- тощо.
Приклад (TypeScript із TSX-нодами для React Native):
Скопіюйте код у буфер обміну
import { t, type Dictionary } from "intlayer";import type { ReactNode } from "react";/** * Словник контенту для нашого домену "app" */import { t, type Dictionary } from "intlayer";const homeScreenContent = { key: "home-screen", content: { title: t({ uk: "Ласкаво просимо!", en: "Welcome!", fr: "Bienvenue!", es: "¡Bienvenido!", }), },} satisfies Dictionary;export default homeScreenContent;Для детальної інформації про декларації контенту див. документацію Intlayer щодо контенту.
Крок 4: Використання Intlayer у ваших компонентах
Використовуйте хук useIntlayer у дочірніх компонентах, щоб отримувати локалізований контент.
Приклад
Скопіюйте код у буфер обміну
import { Image, StyleSheet, Platform } from "react-native";import { useIntlayer } from "react-intlayer";import { HelloWave } from "@/components/HelloWave";import ParallaxScrollView from "@/components/ParallaxScrollView";import { ThemedText } from "@/components/ThemedText";import { ThemedView } from "@/components/ThemedView";import { type FC } from "react";const HomeScreen = (): FC => { const { title, steps } = useIntlayer("home-screen"); return ( <ParallaxScrollView headerBackgroundColor={{ light: "#A1CEDC", dark: "#1D3D47" }} headerImage={ <Image source={require("@/assets/images/partial-react-logo.png")} style={styles.reactLogo} /> } > <ThemedView style={styles.titleContainer}> <ThemedText type="title">{title}</ThemedText> <HelloWave /> </ThemedView> </ParallaxScrollView> );};const styles = StyleSheet.create({ titleContainer: { flexDirection: "row", alignItems: "center", gap: 8, },});export default HomeScreen;Коли ви використовуєте content.someKey у властивостях, які очікують рядок (наприклад, title кнопки або children компонента Text), викликайте content.someKey.value, щоб отримати фактичний рядок.
(Необов'язково) Крок 5: Змінити локаль додатку
Щоб перемикати локалі зсередини ваших компонентів, ви можете використовувати метод setLocale хука useLocale:
Скопіюйте код у буфер обміну
import { type FC } from "react";import { View, Text, TouchableOpacity, StyleSheet } from "react-native";import { getLocaleName } from "intlayer";import { useLocale } from "react-intlayer";export const LocaleSwitcher: FC = () => { const { setLocale, availableLocales } = useLocale(); return ( <View style={styles.container}> {availableLocales.map((locale) => ( <TouchableOpacity key={locale} style={styles.button} onPress={() => setLocale(locale)} > <Text style={styles.text}>{getLocaleName(locale)}</Text> </TouchableOpacity> ))} </View> );};const styles = StyleSheet.create({ container: { flexDirection: "row", justifyContent: "center", alignItems: "center", gap: 8, }, button: { paddingVertical: 6, paddingHorizontal: 12, borderRadius: 6, backgroundColor: "#ddd", }, text: { fontSize: 14, fontWeight: "500", color: "#333", },});Це спричиняє повторний рендер (re-render) усіх компонентів, що використовують контент Intlayer — тепер вони відображають переклади для нової локалі.
Див. документацію по useLocale для докладніших відомостей.
Налаштування TypeScript (якщо ви використовуєте TypeScript)
Intlayer генерує визначення типів у прихованій теці (за замовчуванням .intlayer), щоб покращити автодоповнення та виявляти помилки перекладів:
// tsconfig.json{ // ... ваша існуюча конфігурація TS "include": [ "src", // ваш вихідний код ".intlayer/types/**/*.ts", // <-- переконайтеся, що згенеровані типи включені // ... все інше, що ви вже включаєте ],}Це дозволяє такі можливості, як:
- Autocompletion для ключів вашого словника.
- Type checking, що попереджає, якщо ви звертаєтеся до неіснуючого ключа або є невідповідність типів.
Git Configuration
Щоб уникнути коміту автоматично згенерованих Intlayer файлів, додайте наступне до вашого .gitignore:
# Ігнорувати файли, згенеровані Intlayer.intlayerРозширення для VS Code
Щоб покращити досвід розробки з Intlayer, ви можете встановити офіційне Intlayer VS Code Extension.
Встановити з VS Code Marketplace
Це розширення надає:
- Autocompletion для ключів перекладу.
- Real-time error detection для відсутніх перекладів.
- Inline previews перекладеного вмісту.
- Quick actions для простого створення та оновлення перекладів.
Для детальнішого опису використання розширення зверніться до документації Intlayer VS Code Extension.
Додаткові ресурси
- Visual Editor: Використовуйте Intlayer Visual Editor для візуального керування перекладами.
- CMS Integration: Ви також можете винести та отримувати вміст вашого словника з CMS.
- CLI Commands: Ознайомтеся з Intlayer CLI для завдань, таких як extracting translations або checking missing keys.
Насолоджуйтесь створенням ваших додатків на React Native з повноцінною i18n за допомогою Intlayer!
Налагодження
React Native може бути менш стабільним, ніж React для Web, тому приділяйте особливу увагу узгодженню версій.
Intlayer в першу чергу орієнтований на Web Intl API; на React Native потрібно підключити відповідні polyfills.
Контрольний список:
- Використовуйте останні версії intlayer, react-intlayer та react-native-intlayer.
- Увімкніть Intlayer polyfill.
- Якщо ви використовуєте getLocaleName або інші утиліти на базі Intl API, імпортуйте ці polyfills на ранньому етапі (наприклад, в index.js або App.tsx):
import "intl";import "@formatjs/intl-getcanonicallocales/polyfill";import "@formatjs/intl-locale/polyfill";import "@formatjs/intl-pluralrules/polyfill";import "@formatjs/intl-displaynames/polyfill";import "@formatjs/intl-listformat/polyfill";import "@formatjs/intl-numberformat/polyfill";import "@formatjs/intl-relativetimeformat/polyfill";import "@formatjs/intl-datetimeformat/polyfill";- Перевірте вашу конфігурацію Metro (resolver aliases, asset plugins, tsconfig paths), якщо модулі не вдається розв'язати.