React Native (Expo)
使用 Lingo.dev CLI 为 React Native 提供 AI 翻译
什么是 Expo?
Expo 是一个用于创建 React Native 应用的框架和平台。它提供了工具和服务,可以从同一个 JavaScript 代码库构建、部署和迭代 iOS、Android 和 Web 应用。
什么是 Lingo.dev CLI?
Lingo.dev 是一个由 AI 驱动的翻译平台。Lingo.dev CLI 读取源文件,将可翻译内容发送到大型语言模型,并将翻译后的文件写回到您的项目中。
关于本指南
本指南解释了如何在使用 Expo 的 React Native 项目中设置 Lingo.dev CLI。您将学习如何使用 Expo 搭建项目、配置翻译管道以及查看结果。
第 1 步:设置一个 Expo 项目
-
创建一个新的 Expo 应用:
npx create-expo-app@latest my-app
-
进入项目目录:
cd my-app
-
安装本地化依赖:
npx expo install expo-localization npx expo install i18n-js
第 2 步:创建源内容
-
创建一个目录来存储可本地化的内容:
mkdir -p app/i18n
-
创建一个包含一些可本地化内容的文件(例如,
app/i18n/en.json
):{ "home": { "title": "Welcome", "subtitle": "This text is translated by Lingo.dev" }, "cta": "Get started" }
第 3 步:配置 CLI
在项目根目录中创建一个 i18n.json
文件:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": 1.8,
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"json": {
"include": ["app/i18n/[locale].json"]
}
}
}
此文件定义了:
- Lingo.dev CLI 应该翻译的文件
- 翻译的语言
在此配置中,JSON 文件将从英语翻译为西班牙语。
需要注意的是:
[locale]
是一个占位符,在运行时会被替换。它确保内容从一个位置读取(例如,app/i18n/en.json
),并写入到另一个位置(例如,app/i18n/es.json
)。- Lingo.dev CLI 支持多种文件格式,包括 JSON、MDX 等。
要了解更多,请参阅 i18n.json 配置。
第 4 步. 翻译内容
-
通过 CLI 登录到 Lingo.dev:
npx lingo.dev@latest login
-
运行翻译管道:
npx lingo.dev@latest run
CLI 将创建一个
app/i18n/es.json
文件用于存储翻译内容,以及一个i18n.lock
文件用于跟踪已翻译的内容(以防止不必要的重复翻译)。
第 5 步. 使用翻译内容
-
在
tsconfig.json
文件中启用 JSON 导入:{ "extends": "expo/tsconfig.base", "compilerOptions": { "resolveJsonModule": true } }
-
创建一个函数,用于加载特定语言环境的翻译内容:
// app/lib/i18n.ts import { getLocales } from "expo-localization"; import { I18n } from "i18n-js"; import en from "../i18n/en.json"; import es from "../i18n/es.json"; const i18n = new I18n({ en, es }); i18n.defaultLocale = "en"; i18n.enableFallback = true; i18n.locale = getLocales()[0]?.languageCode ?? "en"; export default i18n;
-
使用该函数显示翻译内容:
// App.tsx import { useState } from "react"; import { View, Text, Pressable } from "react-native"; import i18n from "./app/lib/i18n"; export default function App() { const [locale, setLocale] = useState(i18n.locale); const toggleLocale = () => { const next = locale === "en" ? "es" : "en"; i18n.locale = next; setLocale(next); }; return ( <View> <Text>{i18n.t("home.title")}</Text> <Text>{i18n.t("home.subtitle")}</Text> <Pressable onPress={toggleLocale}> <Text> {locale === "en" ? "Switch to Español" : "Cambiar a English"} </Text> </Pressable> </View> ); }
-
启动开发服务器:
npx expo start
-
在可用语言之间切换。