Đặt câu hỏi và nhận tóm tắt tài liệu bằng cách tham chiếu trang này và nhà cung cấp AI bạn chọn
Lịch sử phiên bản
- "Cập nhật cách sử dụng API useIntlayer của Solid sang truy cập thuộc tính trực tiếp"v8.9.04/5/2026
- "Thêm lệnh init"v7.5.930/12/2025
- "Thêm phần debug"v6.1.62/10/2025
- "Khởi tạo lịch sử"v5.5.1029/6/2025
Nội dung của trang này đã được dịch bằng AI.
Xem phiên bản mới nhất của nội dung gốc bằng tiếng AnhIf 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
Dịch ứng dụng Expo và React Native của bạn | Quốc tế hóa (i18n)
Mục lục
Tại sao Intlayer thay thế các lựa chọn thay thế?
So với các giải pháp chính như react-native-localize hay i18next, Intlayer là giải pháp đi kèm với các tính năng tối ưu hóa tích hợp như:
Intlayer được tối ưu hóa để hoạt động hoàn hảo với React Native và Expo bằng cách cung cấp phạm vi nội dung cấp thành phần, hỗ trợ TypeScript và tất cả các tính năng cần thiết để mở rộng quy mô quốc tế hóa (i18n) trong ứng dụng di động.
Xác định phạm vi nội dung ứng dụng của bạn tạo điều kiện bảo trì cho các ứng dụng quy mô lớn. Bạn có thể sao chép hoặc xóa một thư mục tính năng mà không phải lo lắng về việc xem lại toàn bộ cơ sở mã nội dung của mình. Ngoài ra, Intlayer được nhập đầy đủ để đảm bảo tính chính xác cho nội dung của bạn.
Nội dung cùng định vị giảm ngữ cảnh cần thiết của Mô hình ngôn ngữ lớn (LLM). Intlayer cũng đi kèm một bộ công cụ, chẳng hạn như CLI để kiểm tra các bản dịch bị thiếu,LSP, MCP và agent Skills, để giúp trải nghiệm của nhà phát triển (DX) trở nên mượt mà hơn nữa đối với các tác nhân AI.
Sử dụng tính năng tự động hóa để dịch trong quy trình CI/CD của bạn bằng cách sử dụng LLM mà bạn chọn với chi phí do nhà cung cấp AI của bạn chi trả. Intlayer cũng cung cấp trình biên dịch để tự động trích xuất nội dung cũng như nền tảng web để giúp dịch ở chế độ nền.
Việc kết nối các tệp JSON lớn với các thành phần có thể dẫn đến các vấn đề về hiệu suất và khả năng phản hồi. Intlayer tối ưu hóa việc tải nội dung của bạn tại thời điểm build.
Không chỉ là giải pháp i18n, Intlayer còn cung cấp trình chỉnh sửa trực quan và CMS đầy đủ để giúp bạn quản lý nội dung đa ngôn ngữ của mình trong thời gian thực, giúp việc cộng tác với người dịch, người viết quảng cáo và các thành viên khác trong nhóm trở nên liền mạch. Nội dung có thể được lưu trữ cục bộ và/hoặc từ xa.
Thay vì tải các tệp JSON lớn vào trang của bạn, hãy chỉ tải nội dung cần thiết. Intlayer giúp giảm kích thước bundle và chế độ xem của bạn lên tới 50%.
Bước 1: Cài đặt phụ thuộc
Xem Mẫu ứng dụng trên GitHub.
Từ dự án React Native của bạn, hãy cài đặt các gói sau:
Sao chép mã vào clipboard
npm cài đặt intlayer phản ứng-intlayercài đặt npm --save-dev Reac -igen-intlayerinit nội bộ npxGói
người xen vào
Bộ công cụ i18n cốt lõi để cấu hình, nội dung từ điển, tạo kiểu và lệnh CLI.người tham gia phản ứng
Tích hợp React cung cấp các nhà cung cấp ngữ cảnh và móc nối React mà bạn sẽ sử dụng trong React Native để lấy và chuyển đổi ngôn ngữ.Reac-bản địa-intlayer
Tích hợp React Native cung cấp plugin Metro để tích hợp Intlayer với bộ đóng gói React Native.
Bước 1: Cài đặt các phụ thuộc
Xem Mẫu Ứng Dụng trên GitHub.
Từ dự án React Native của bạn, cài đặt các gói sau:
Sao chép mã vào clipboard
npm install intlayer react-intlayernpm install --save-dev react-native-intlayernpx intlayer initCác gói
intlayer
Bộ công cụ i18n cốt lõi dùng để cấu hình, nội dung từ điển, tạo kiểu, và các lệnh CLI.react-intlayer
Tích hợp React cung cấp các context provider và React hook mà bạn sẽ dùng trong React Native để lấy và chuyển đổi ngôn ngữ.react-native-intlayer
Tích hợp React Native cung cấp plugin Metro để tích hợp Intlayer với bundler của React Native.
Bước 2: Tạo cấu hình Intlayer
Trong thư mục gốc dự án của bạn (hoặc bất cứ nơi nào thuận tiện), tạo một file cấu hình Intlayer. Nó có thể trông như sau:
Sao chép mã vào clipboard
/**
* Nếu kiểu Locales không khả dụng, hãy thử đặt moduleResolution thành "bundler" trong tsconfig.json của bạn
*/
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH,
// ... Thêm bất kỳ ngôn ngữ nào bạn cần
],
defaultLocale: Locales.ENGLISH,
},
};
export default config;Trong cấu hình này, bạn có thể:
- Cấu hình danh sách các ngôn ngữ được hỗ trợ.
- Đặt một ngôn ngữ mặc định.
- Sau này, bạn có thể thêm các tùy chọn nâng cao hơn (ví dụ: ghi log, thư mục nội dung tùy chỉnh, v.v.).
- Xem thêm tại tài liệu cấu hình Intlayer.
Bước 3: Thêm plugin Metro
Metro là một trình đóng gói (bundler) cho React Native. Đây là trình đóng gói mặc định cho các dự án React Native được tạo bằng lệnh react-native init. Để sử dụng Intlayer với Metro, bạn cần thêm plugin vào file metro.config.js của bạn:
Sao chép mã vào clipboard
const { getDefaultConfig } = require("expo/metro-config");const { configMetroIntlayer } = require("react-native-intlayer/metro");module.exports = (async () => { const defaultConfig = getDefaultConfig(__dirname); return await configMetroIntlayer(defaultConfig);})();Lưu ý:
configMetroIntlayerlà một hàm trả về promise. Sử dụngconfigMetroIntlayerSyncnếu bạn muốn sử dụng nó đồng bộ, hoặc tránh dùng IFFE (Immediately Invoked Function Expression). Lưu ý:configMetroIntlayerSynckhông cho phép xây dựng các từ điển intlayer khi khởi động server
Bước 4: Thêm Intlayer provider
Để giữ đồng bộ ngôn ngữ người dùng trên toàn bộ ứng dụng của bạn, bạn cần bao bọc component gốc của bạn với component IntlayerProvider từ react-native-intlayer.
Hãy chắc chắn sử dụng provider từreact-native-intlayerthay vìreact-intlayer. Export từreact-native-intlayerbao gồm các polyfill cho web API.
Ngoài ra, bạn cần thêm hàm intlayerPolyfill vào file index.js của bạn để đảm bảo Intlayer hoạt động đúng.
Sao chép mã vào clipboard
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;Bước 5: Khai báo Nội dung của Bạn
Tạo các tệp khai báo nội dung ở bất kỳ đâu trong dự án của bạn (thường là trong thư mục src/), sử dụng bất kỳ định dạng phần mở rộng nào mà Intlayer hỗ trợ:
.content.json.content.ts.content.tsx.content.js.content.jsx.content.mjs.content.mjx.content.cjs.content.cjx- v.v.
Ví dụ (TypeScript với các node TSX cho React Native):
Sao chép mã vào clipboard
import { t, type Dictionary } from "intlayer";
import type { ReactNode } from "react";
/**
* Từ điển nội dung cho miền "app" của chúng ta
*/
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;Để biết chi tiết về khai báo nội dung, xem tài liệu nội dung của Intlayer.
Bước 4: Sử dụng Intlayer trong các Component của bạn
Sử dụng hook useIntlayer trong các component con để lấy nội dung đã được bản địa hóa.
Ví dụ
Sao chép mã vào clipboard
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;Khi sử dụngcontent.someKeytrong các props dạng chuỗi (ví dụ,titlecủa một nút hoặcchildrencủa một componentText), hãy gọicontent.someKey.valueđể lấy chuỗi thực tế.
Nếu ứng dụng của bạn đã tồn tại, bạn có thể sử dụng Intlayer Compiler kết hợp với lệnh extract để chuyển đổi hàng nghìn component chỉ trong một giây.
(Tùy chọn) Bước 5: Thay đổi Ngôn ngữ Ứng dụng
Để chuyển đổi ngôn ngữ từ bên trong các component của bạn, bạn có thể sử dụng phương thức setLocale của hook useLocale:
Sao chép mã vào clipboard
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",
},
});Điều này kích hoạt việc render lại tất cả các component sử dụng nội dung Intlayer, giờ đây hiển thị bản dịch cho locale mới.
Xem thêm tài liệu useLocale để biết chi tiết.
Cấu hình TypeScript (nếu bạn sử dụng TypeScript)
Intlayer tạo ra các định nghĩa kiểu trong một thư mục ẩn (mặc định là .intlayer) để cải thiện tính năng tự động hoàn thành và phát hiện lỗi dịch:
Sao chép mã vào clipboard
// tsconfig.json{ // ... cấu hình TS hiện có của bạn "include": [ "src", // mã nguồn của bạn ".intlayer/types/**/*.ts", // <-- đảm bảo các kiểu tự động tạo được bao gồm // ... bất cứ thứ gì khác bạn đã bao gồm ],}Điều này cho phép các tính năng như:
- Tự động hoàn thành cho các khóa từ điển của bạn.
- Kiểm tra kiểu cảnh báo nếu bạn truy cập khóa không tồn tại hoặc sai kiểu.
Cấu hình Git
Để tránh commit các file được Intlayer tự động tạo, hãy thêm đoạn sau vào .gitignore của bạn:
Sao chép mã vào clipboard
# Bỏ qua các file do Intlayer tạo ra.intlayerTiện ích mở rộng VS Code
Để cải thiện trải nghiệm phát triển với Intlayer, bạn có thể cài đặt Tiện ích mở rộng Intlayer cho VS Code chính thức.
Install from the VS Code Marketplace
Tiện ích mở rộng này cung cấp:
- Tự động hoàn thành cho các khóa dịch.
- Phát hiện lỗi theo thời gian thực cho các bản dịch bị thiếu.
- Xem trước nội dung dịch ngay trong dòng.
- Hành động nhanh để dễ dàng tạo và cập nhật bản dịch.
Để biết thêm chi tiết về cách sử dụng tiện ích mở rộng, tham khảo Tài liệu Tiện ích mở rộng Intlayer cho VS Code.
Đi xa hơn
- Trình chỉnh sửa trực quan: Sử dụng Trình chỉnh sửa trực quan Intlayer để quản lý bản dịch một cách trực quan.
- Tích hợp CMS: Bạn cũng có thể tách riêng và lấy nội dung từ từ điển của mình từ một CMS.
- Lệnh CLI: Khám phá Intlayer CLI cho các tác vụ như trích xuất bản dịch hoặc kiểm tra các khóa bị thiếu.
Chúc bạn xây dựng các ứng dụng React Native với i18n đầy đủ sức mạnh thông qua Intlayer!
Gỡ lỗi
React Native có thể kém ổn định hơn so với React Web, vì vậy hãy chú ý đặc biệt đến việc đồng bộ phiên bản.
Intlayer chủ yếu hướng đến Web Intl API; trên React Native bạn phải bao gồm các polyfill phù hợp.
Danh sách kiểm tra:
- Sử dụng các phiên bản mới nhất của
intlayer,react-intlayer, vàreact-native-intlayer. - Kích hoạt polyfill của Intlayer.
- Nếu bạn sử dụng
getLocaleNamehoặc các tiện ích dựa trên Intl-API khác, hãy nhập các polyfill này sớm (ví dụ trongindex.jshoặcApp.tsx):
Sao chép mã vào clipboard
import "intl";// Nhập polyfill để hỗ trợ các tính năng Intl khác nhauimport "@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";- Kiểm tra cấu hình Metro của bạn (bí danh resolver, plugin tài sản, đường dẫn
tsconfig) nếu các module không thể được giải quyết.