내 주요 app.js
import Vue from 'vue' import language from './language' import VueI18n from 'vue-i18n' Vue.use(VueI18n) const i18n = new VueI18n({ locale: 'en', messages: language.messages, }) import router from './router' new Vue({ el: '#app', i18n, router, template: '<App/>', components: { App } })
language.js은
export default { messages : { en: { hello: 'hello!' }, ja: { hello: 'こんにちは!' }, zh: { hello: '你好!' } } }
내 문제는 내가
this.$i18n.t('hello')
를 사용할 수 없습니다 route.js 코드를 다음입니다 사용 불가.import Vue from 'vue' import Router from 'vue-router' export const myRouteMap = [ { path: '/', component: MyComponent, redirect: '/myHome', //name: 'Home', name: this.$i18n.t('hello') // can't use $i18n here. } ]
0
A
답변
1
예제에서 this.i18n
은 해당 파일의 컨텍스트에서 Vue 인스턴스가 아니기 때문에 정의되지 않습니다.
루트 문제는 디스플레이 데이터를 route
의 정의에 넣으려고하는 것입니다. 이것은 일반적으로 나쁜 관행이며, 실행 한 것과 같은 문제가 발생합니다.
route
의 속성은 고유 한 경로 식별자 여야하며 정의 된 후에 변경해서는 안됩니다.
Vue 인스턴스의 속성을 경로의 번역 된 이름 (내 취향에 맞지 않는 커플 링 인 경우)을 기반으로 만들려면 경로에 지정한 Vue 구성 요소에서 수행 할 수 있습니다.
computed: {
title() {
return this.$i18n.t(this.$route.name);
}
}
정말,하지만 당신은 route
객체에 디스플레이 데이터를 기반으로해서는 안된다.
computed: {
title() {
return this.$i18n.t('hello');
}
}
+0
감사합니다. 지금은 이해합니다. Vue 인스턴스는 해당 경로 파일에서 사용할 수 없습니다. 귀하의 메시지를보기 전에 내 번역 코드를 탐색 요소로 옮겼습니다. 그것은 당신이 묘사하고있는 것과 같습니다. 그래서 경로 객체에 다른 속성 이름을 추가합니다. 그래서'{path : '/', name = 'こ ん に ち は', text_code = 'hello'}', 그래서 내 탐색 코드는'
{{$t(route_item.text_code)}}
'입니다. –
user2650480
는'this' 해당 파일의 뷰의 인스턴스가 아닌 : 그것처럼 보인다는 그와 관련된 속성에 대한 정의에
this.$i18n.t
에 전달하려는 번역 메시지 키를 지정하는 명확하고 적은 작업이 될 것입니다. 경로 이름을 번역 된 변수에 바인딩하려는 이유는 무엇입니까? 이름은 절대 변경되지 않아야합니다. – thanksdUI에 표시하고 다른 언어로 변경하려면'route.name'을 사용하고 있습니다. – user2650480