header로 페이지의 언어를 변경하려고 한다. 기본으로 한국어, 서브로 영어를 사용한다. 코드는 아래와 같다.

 

 

Header.vue

<template>
    <div id = "title-toolbar">
        <select id="select-language" v-model="selectedLanguage" @change="changeLanguage">
            <option value="ko">한국어</option>
            <option value="en">English</option>
        </select>
    </div>
</template>

<script>
export default {
    name: 'Header',
    data() {
        return {
            selectedLanguage: 'ko' // 초기 언어 설정
        };
    },
    methods: {
        changeLanguage() {
            // 선택된 언어에 따라 작업 수행
            if (this.selectedLanguage == 'ko') {
                // 한국어로 변경하는 작업 수행
                alert('한국어로 변경');
            } else if (this.selectedLanguage === 'en') {
                // 영어로 변경하는 작업 수행
                alert('Change to English');
            }
        }
    }
};
</script>

<style scoped>
/* Header component styles */
</style>

 

후 App.vue에 추가해주면 된다.

App.vue

<template>
  <div id="app">
      <Header></Header>    // 추가된 부분
      <div id="content" class="content">
          <router-view></router-view>
      </div>
  </div>
</template>

<script>
import Header from './components/layout/Header.vue' // 추가된 부분

export default {
  name: 'App',
  components: {
    Header	// 추가된 부분
  }
}
</script>

 

테스트

제대로 select 박스가 생겼다.

 

English를 선택했을 때

 

한국어로 선택했을 때

 

 

이제 홈페이지의 언어를 바꿔보자.

이벤트에 따라서 다른 컴포넌트를 동적으로 바꾸는 방법은 다양하게 있다. event-bus, provide 및 inject 등등.. vue.js 3.x 버전에서는 provide 및 inject 방식을 권장한다고 한다. 하지만, 그냥 부모 컴포넌트에서 이벤트를 통해 데이터를 전달하는 방식이 더 코드가 깔끔할 것 같아서 해당 방식을 사용했다.

 

Header.vue

<template>
    <div id="title-toolbar">
        <select id="select-language" v-model="selectedLanguage" @change="changeLanguage">
            <option value="ko">한국어</option>
            <option value="en">English</option>
        </select>
    </div>
</template>

<script>
export default {
    name: 'Header',
    data() {
        return {
            selectedLanguage: 'ko' // 초기 언어 설정
        };
    },
    methods: {
        changeLanguage() {
            // 선택된 언어에 따라 작업 수행
            if (this.selectedLanguage === 'ko') {
                // 한국어로 변경하는 작업 수행
                document.documentElement.lang = 'ko'; // 페이지의 언어 설정
            } else if (this.selectedLanguage === 'en') {
                // 영어로 변경하는 작업 수행
                document.documentElement.lang = 'en'; // 페이지의 언어 설정
            }
            <!--추가된 부분-->
            this.$emit('languageChanged', this.selectedLanguage); // 선택된 언어를 이벤트로 발생
        }
    }
};
</script>

App.vue

<template>
  <div id="app">
      <!--변경된 부분-->
      <Header @languageChanged="handleLanguageChanged"></Header>
      <h1>{{ test }}</h1>
      <div id="content" class="content">
          <router-view></router-view>
      </div>
  </div>
</template>


<script>
import Header from './components/layout/Header.vue'

export default {
  name: 'App',
  components: {
    Header
  },
    <!--추가된 부분-->
    data() {
        return {
            test: '테스트' // 초기 페이지 제목
        };
    },
    methods: {
        handleLanguageChanged(language) {
            if (language === 'ko') {
                this.test = '테스트';
            } else if (language === 'en') {
                this.test = 'Test';
            }
        }
    }
}
</script>

 

 

테스트

테스트는 h1을 하나 추가해서 변경이 되는지 확인해주었다.

기본은 한국어로 '테스트'가 출력된다. english로 바꾸는 경우 'Test'로 변경이 잘 된다.

 

+ Recent posts