一个很神奇的问题,请大老帮忙解答
VUE3.0 定义一个语言字符串,其中包含@符号,如const publicLang = {'str' : '123@456'}
因为涉及多语言,用到$t,let footerItem = this.$t('str')
打印footerItem,发现@及后面的字符被截取了,只得到‘123’
可能是由于 $t 方法识别 @ 符号作为格式化字符串的一部分而导致的。您可以使用双大括号 {{ }} 将字符串包裹起来,以确保 $t 方法正确解析。
const publicLang = { 'str': '123{{atSymbol}}456' }
在使用 $t 方法时,传入一个对象,包含一个名为 atSymbol 的属性:
let footerItem = this.$t('str', { atSymbol: '@' })
这样,$t 方法将正确解析 123{{atSymbol}}456,并将 {{atSymbol}} 替换为 @ 符号。您将获得正确的翻译结果。
如果您只是需要显示原始的字符串,而不需要通过 $t 进行翻译,可以使用双大括号绑定表达式 {{ ... }} 来显示该字符串,而不需要使用 $t 方法。
【以下回答由 GPT 生成】
答案:
这个问题是因为在Vue的国际化插件中,默认会将 "@" 符号解析为语言占位符,因此会导致字符串中的 "@" 符号及其后面的字符被截取掉。
要解决这个问题,可以使用 Vue I18n 提供的 raw 属性来指示不解析特殊字符。以下是具体的解决方案:
import { createApp } from 'vue'
import { createI18n } from 'vue-i18n'
import App from './App.vue'
const i18n = createI18n({
// 在这里设置其他 Vue I18n 配置
legacy: false, // 建议将此项设置为 false,以支持 Vue 3.0
})
createApp(App).use(i18n).mount('#app')
const messages = {
en: {
str: { raw: '123@456' }
},
// 其他语言的翻译...
}
export default messages
let footerItem = this.$t('str', { raw: true })
这样就可以正确地获取到整个字符串 "123@456" 了。
希望这个解决方案对你有帮助!如果还有其他问题,请随时提问。