我想添加允许用户在应用程序中设置特定语言的选项。我正在使用i18n
和react-native-localize
库来检测设备语言。
import * as RNLocalize from "react-native-localize"
import i18n from "i18n-js"
const en = require("./en")
const pl = require("./pl")
const ru = require("./ru")
const de = require("./de")
const fr = require("./fr")
const nl = require("./nl")
const uk = require("./uk")
const vi = require("./vi")
i18n.fallbacks = true
i18n.translations = { en, pl, ru, de, fr, nl, uk, vi }
const fallback = { languageTag: "en", isRTL: false }
const { languageTag } =
RNLocalize.findBestAvailableLanguage(Object.keys(i18n.translations)) || fallback
i18n.locale = languageTag
它确实有效 - 如果我更改我的设备语言,静态内容会被翻译成检测到的语言,但我也有存储在数据库中的内容被翻译成django-modeltranslation
. 这里有些麻烦来了。在我的语言视图(移动)中,我有:
changeLanguage = async (language) => {
console.log(language)
const error = await this.props.userStore.updateUserDetails({
attrs: {
preferredLang: toJS(language)
}
})
if (error != null) this.showModal(error)
else this.hideModal()
this.refresh()
}
在这种方法中,我将选择的首选语言添加到我的用户配置文件中。在后端,我返回翻译的语言。它也有效。但这仅适用于数据库。例如:如果用户选择语言“de”且设备语言为“fr”,则静态内容为法语,数据库中的内容为德语。在移动视图中选择语言期间,我想更新i18n.locale
. 我正在尝试类似的东西:
changeLanguage = async (language) => {
console.log(language)
i18n.locale = language
const error = await this.props.userStore.updateUserDetails({
attrs: {
preferredLang: toJS(language)
}
})
if (error != null) this.showModal(error)
else this.hideModal()
this.refresh()
}
但不知何故,它正在重新启动到我的 django 默认语言。有人可以帮我找到解决方案或提供一些提示吗?