问题描述
我想将整个应用程序翻译成任何其他语言,而不使用 JSON 文件,例如 ar.json , en.json ,就像使用 google translation 在网站中一样。
我想知道在 React Native 中是可行的。如果可能的话,那么如何像没有在网站中那样准备Prepar语言 JSON 文件,将整个应用语言翻译成其他任何语言。
我是新来的响应本机开发的人员,并且想知道这一点。我为此进行了很多搜索,但发现没有帮助。
谢谢
解决方法
没有专门制作语言文件(JSON)的自动翻译应用程序的方法。 React i18Next是一个非常好的库。
,我建议您不要使用库,但可以使用简单的上下文提供程序。
import React from 'react';
const lang = {
// in this way,you could dynamically add lang
// later on which worrying about if-elses in your component
en: {
hello: 'hello'
},fr: {
hello: 'bonjour',},}
const langDict = (key) => lang[key]
const LanguageContext = React.createContext(null);
function LanguageProvider({ initialState = 'en',children }) {
const [lang,setLang] = React.useState(initialState);
return (
<LanguageContext.Provider value={[langDict(lang),setLang]}>
{children}
</LanguageContext.Provider>
)
}
function useLanguage() {
return React.useContext(LanguageContext);
}
export default function AppWrapper() {
return (
<LanguageProvider>
<App />
</LanguageProvider>
)
}
function App() {
const [lang,setLang] = useLanguage();
return (
<View>
<Text>{lang.hello}</Text>
<Button onPress={() => setLang('fr')}>French</Button>
<Button onPress={() => setLang('en')}>English</Button>
</VIew>
)
}
,
很好的问题。答案取决于您所讨论的翻译类型。这是自由流动的对话文本,是可变的吗?如果是这样,翻译将是可变的,可能不会说出您想说的话。或者,如果这只是一系列应用程序标签,帮助信息或上下文信息?如果是这样,您最好还是像其他人所说的那样切换单独的文件或json开关。需要更多的澄清。