2017-10-06 60 views
0
  1. 내 주요 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 } 
         }) 
    
  2. language.js은

     export default { 
          messages : { 
          en: { 
           hello: 'hello!' 
           }, 
           ja: { 
           hello: 'こんにちは!' 
           }, 
           zh: { 
           hello: '你好!' 
           } 
          } 
         } 
    
  3. 내 문제는 내가 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. 
          } 
         ] 
    

사람은 VUE-경로에서 국제화를 사용하려는 문제를 해결, 비슷한 상황이 가지고 있습니까?

+0

는'this' 해당 파일의 뷰의 인스턴스가 아닌 : 그것처럼 보인다는 그와 관련된 속성에 대한 정의에 this.$i18n.t에 전달하려는 번역 메시지 키를 지정하는 명확하고 적은 작업이 될 것입니다. 경로 이름을 번역 된 변수에 바인딩하려는 이유는 무엇입니까? 이름은 절대 변경되지 않아야합니다. – thanksd

+0

UI에 표시하고 다른 언어로 변경하려면'route.name'을 사용하고 있습니다. – user2650480

답변

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