Vue、Yup 和 i18n 的翻译问题
Problems with translations with Vue, Yup and i18n
我有一个 Vue.js 应用程序(带有 Vite),我在其中使用 Vee-validate 和 Yup 进行表单验证,并使用 i18n 进行消息翻译。但是,当用户设置 $i18n.locale='xx'
时,架构中的自定义错误不会实时更新
架构:
import { useI18n } from "vue-i18n"
const {t} = useI18n()
const schema = yup.object().shape({
username: yup
.string()
.required(t("field_required"))
.email(t("field_error_email")),
password: yup.string().required(t("field_required"))
})
使用 $t("message")
直接打印到模板的消息正常工作。
版本:
"dependencies": {
"vee-validate": "^4.5.11",
"vue": "^3.2.33",
"vue-i18n": "^9.1.9",
"yup": "^0.32.11"
}
t("field_required")
在组件设置期间作为字符串传递,它不能是反应式的。为了反应,应该在真正需要访问消息时对其进行评估,即在模式验证期间。预计 required
,等等模式方法接受一个函数来懒惰地评估消息,他们确实这样做了。
应该是:
const schema = yup.object().shape({
username: yup
.string()
.required(() => t("field_required"))
...
我有一个 Vue.js 应用程序(带有 Vite),我在其中使用 Vee-validate 和 Yup 进行表单验证,并使用 i18n 进行消息翻译。但是,当用户设置 $i18n.locale='xx'
架构:
import { useI18n } from "vue-i18n"
const {t} = useI18n()
const schema = yup.object().shape({
username: yup
.string()
.required(t("field_required"))
.email(t("field_error_email")),
password: yup.string().required(t("field_required"))
})
使用 $t("message")
直接打印到模板的消息正常工作。
版本:
"dependencies": {
"vee-validate": "^4.5.11",
"vue": "^3.2.33",
"vue-i18n": "^9.1.9",
"yup": "^0.32.11"
}
t("field_required")
在组件设置期间作为字符串传递,它不能是反应式的。为了反应,应该在真正需要访问消息时对其进行评估,即在模式验证期间。预计 required
,等等模式方法接受一个函数来懒惰地评估消息,他们确实这样做了。
应该是:
const schema = yup.object().shape({
username: yup
.string()
.required(() => t("field_required"))
...