制作React App International时,建议使用哪种技术?
我正在考虑编写以下代码:
1.创建React上下文"语言"
1.创建不同的模块,导出一个Map,其中包含每种语言的所有字符串"pt","en","fr","sp","it"...
1.尝试使用语言上下文提供程序提供的方法从启动画面中的AsyncStorage加载默认语言。
1.如果没有找到,则根据用户的位置获取用户语言。
对我来说,这是有意义的,但可能有其他更容易的方法来实现同样的目标,感觉更专业。
// This is my Languages Context
import React, { createContext, useState } from "react";
import * as Localization from "expo-localization";
import { VALID_LANGUAGES } from "../../utils/languages/constants"; // "English", "Spanish", "Portuguese"...
import languages from "../../languages"; // en, sp, pt, ... modules with all texts (key, value)
import AsyncStorage from "../../lib/async-storage/AsyncStorage";
const LanguagesContext = createContext(null);
export default LanguagesContext;
export function LanguagesProvider({ children }) {
const [language, setLanguage] = useState(undefined);
const loadLanguage = async () => {
// Get the default language from async storage
const language = await AsyncStorage.getData("language");
// TODO - if undefined -> get user location and use the corresponding lang
// TODO - if not supported, use english
if (!language) {
setLanguage(VALID_LANGUAGES[0]);
}
};
const changeLanguage = async (language) => {
// Update state
setLanguage(language);
// Save language in async storage
await AsyncStorage.storeData("language", language);
};
return (
<LanguagesContext.Provider
value={{ language, loadLanguage, changeLanguage }}
>
{children}
</LanguagesContext.Provider>
);
}
export { LanguagesProvider };
- 我正在我的闪屏组件中使用方法"loadLanguage",它可以确保应用在呈现任何内容之前就可以使用。您如何看待这种技术?**
- 如何使用应用程序中的文本?**我想在Context提供程序中创建另一个方法getAppTexts(),只是为了从我的语言模块("en","it","pt",...)返回正确的Map
- 任何库和示例?**
谢谢你。
3条答案
按热度按时间2o7dmzc51#
首先,您只需初始化一个新的React原生项目
我更喜欢创建一个src文件夹来放置我们所有的JS代码,所以我们修改index.js在项目根目录如下:
管理翻译
我们将使用“i18 n-js”模块翻译应用程序,因此我们安装它:
然后创建一个文件“i18n.js”,其中包含:
然后创建如下空翻译文件:
现在我们可以翻译应用程序JS字符串在法语和英语,就像下面:
切换应用程序中的区域设置
现在我们将设置一个react context来保持当前用户语言,并设置一个switch来给用户给予更改语言的选项。翻译字符串很酷,但翻译后的字符串必须与用户语言相匹配。
为了使当前用户语言与应用程序保持一致,我们需要在上下文文件夹中创建一个文件“LocalisationContext.js”,其中包含:
现在在App.js中
并创建“HomeScreen.js”文件:
这里我们可以把字符串翻译成js。
处理本地化系统变更
现在我们必须安装本地化模块:
然后将app.js修改为
然后像这样的'i18n.js'文件:
生成翻译
为了生成语言文件你可以使用i18 next-scanner.我们需要到安装它全局
使用以下命令在项目根目录下创建“i18next-scanner.config.js”文件:
这里我们可以使用命令:
现在它将生成预填充转换文件
我们只需要通过正确的翻译来修改这些文件
现在运行应用程序;
它将成功运行。
mnowg1ta2#
如果你想切换语言,那么这是最好的解决方案。试试这个。
bvhaajcl3#
首先安装以下两个软件包:
然后打开.jsx文件并键入: