Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"v8.9.004.05.2026
- "Добавить команду init"v7.5.930.12.2025
- "Инициализация истории"v5.5.1029.06.2025
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Переведите ваше приложение Expo и React Native | Интернационализация (i18n)
Смотрите Шаблон приложения на GitHub.
Почему Intlayer лучше альтернатив?
По сравнению с основными решениями, такими как «react-native-localize» или «i18next», Intlayer — это решение со встроенными оптимизациями, такими как:
Intlayer оптимизирован для идеальной работы с React Native и Expo, предлагая охват контента на уровне компонентов, поддержку TypeScript и все функции, необходимые для масштабирования интернационализации (i18n) в мобильных приложениях.
Определение области содержимого вашего приложения облегчает обслуживание крупномасштабных приложений. Вы можете дублировать или удалить отдельную папку функций, не утруждав себя мысленным бременем проверки всей кодовой базы контента. Кроме того, Intlayer полностью типизирован, что обеспечивает точность вашего контента.
Совместное размещение контента уменьшает контекст, необходимый для моделей большого языка (LLM). Intlayer также поставляется с набором инструментов, таких как CLI для проверки отсутствия переводов,LSP, MCP, и навыки агента, чтобы сделать работу разработчика (DX) еще более удобной для агентов ИИ.
Используйте автоматизацию для перевода в своем конвейере CI/CD, используя LLM по вашему выбору за счет вашего поставщика ИИ. Intlayer также предлагает компилятор для автоматизации извлечения контента, а также веб-платформу, которая помогает переводить в фоновом режиме.
Подключение больших файлов JSON к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента во время сборки (build time).
Intlayer — это больше, чем просто решение i18n. Он предоставляет автономный визуальный редактор и полный CMS, чтобы помочь вам управлять многоязычным контентом в реальном времени, упрощая сотрудничество с переводчиками, копирайтерами и другими членами команды. Контент может храниться локально и/или удаленно.
Вместо загрузки огромных файлов JSON на свои страницы загружайте только необходимый контент. Intlayer помогает уменьшить размеры пакетов и просмотров до 50%.
Шаг 1. Установите зависимости
См. Шаблон приложения на GitHub.
Из вашего проекта React Native установите следующие пакеты:
Копировать код в буфер обмена
npm установить intlayernpm install --save-dev реагирование-native-intlayerИнициализация промежуточного слоя npxПакеты
промежуточный слой
Базовый набор инструментов i18n для настройки, содержимого словаря, генерации типов и команд CLI.реакция-intlayer
Интеграция React, которая предоставляет поставщиков контекста и перехватчики React, которые вы будете использовать в React Native для получения и переключения локалей.реагировать-родной-intlayer
Интеграция React Native, предоставляющая плагин Metro для интеграции Intlayer с упаковщиком React Native.
Шаг 1: Установка зависимостей
В вашем проекте React Native установите следующие пакеты:
Копировать код в буфер обмена
npm install intlayer react-intlayernpm install --save-dev react-native-intlayernpx intlayer initПакеты
intlayer
Основной набор инструментов i18n для конфигурации, содержимого словарей, генерации типов и команд CLI.react-intlayer
Интеграция с React, предоставляющая провайдеры контекста и React-хуки, которые вы будете использовать в React Native для получения и переключения локалей.react-native-intlayer
Интеграция с React Native, предоставляющая плагин Metro для интеграции Intlayer с бандлером React Native.
Шаг 2: Создайте конфигурацию Intlayer
В корне вашего проекта (или в любом удобном месте) создайте файл конфигурации Intlayer. Он может выглядеть так:
Копировать код в буфер обмена
/**
* Если типы 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);})();Шаг 4: Добавьте провайдер Intlayer
Чтобы синхронизировать язык пользователя во всем приложении, необходимо обернуть корневой компонент в компонент IntlayerProvider из react-intlayer-native.
Убедитесь, что вы используете провайдер изreact-native-intlayer, а не изreact-intlayer. Экспорт изreact-native-intlayerвключает полифилы для веб-API.
Копировать код в буфер обмена
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({
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, чтобы получить фактическую строку.
Если ваше приложение уже существует, вы можете использовать Intlayer Compiler в сочетании с командой extract, чтобы преобразовать тысячи компонентов за одну секунду.
(Необязательно) Шаг 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",
},
});Это вызывает повторный рендер всех компонентов, использующих контент Intlayer, теперь отображая переводы для новой локали.
Подробнее смотрите в документации useLocale.
Настройка TypeScript (если вы используете TypeScript)
Intlayer генерирует определения типов в скрытой папке (по умолчанию .intlayer), чтобы улучшить автодополнение и выявлять ошибки перевода:
Копировать код в буфер обмена
// tsconfig.json{ // ... ваша существующая конфигурация TS "include": [ "src", // ваш исходный код ".intlayer/types/**/*.ts", // <-- убедитесь, что включены автоматически сгенерированные типы // ... всё остальное, что вы уже включаете ],}Это обеспечивает такие возможности, как:
- Автодополнение для ключей вашего словаря.
- Проверка типов, которая предупреждает, если вы обращаетесь к несуществующему ключу или тип не совпадает.
Конфигурация Git
Чтобы избежать коммита автоматически сгенерированных файлов Intlayer, добавьте следующее в ваш .gitignore:
Копировать код в буфер обмена
# Игнорировать файлы, сгенерированные Intlayer.intlayerРасширение VS Code
Чтобы улучшить опыт разработки с Intlayer, вы можете установить официальное Расширение Intlayer для VS Code.
Установить из VS Code Marketplace
Это расширение предоставляет:
- Автодополнение для ключей переводов.
- Обнаружение ошибок в реальном времени для отсутствующих переводов.
- Встроенный просмотр переведённого контента.
- Быстрые действия для удобного создания и обновления переводов.
Для получения дополнительной информации о том, как использовать расширение, обратитесь к документации расширения Intlayer для VS Code.
Продвинутые возможности
- Визуальный редактор: Используйте Визуальный редактор Intlayer для визуального управления переводами.
- Интеграция с CMS: Вы также можете вынести и получать содержимое вашего словаря из CMS.
- Команды CLI: Изучите Intlayer CLI для таких задач, как извлечение переводов или проверка отсутствующих ключей.
Наслаждайтесь созданием ваших приложений на React Native с полноценной поддержкой i18n через Intlayer!