- vừa được xem lúc

Đa ngôn ngữ với vue, nuxt i18n cho dự án Vue, Nuxt

0 0 8

Người đăng: Bùi Huy Hoàng

Theo Viblo Asia

Mở Đầu

Hello các bạn xin chào các bạn mình đã trở lại rồi đây :v lâu quá rồi mình cũng chưa viết bài rồi nhân dịp Viblo đang có sự kiện Mayfest mà mình cũng đã hoàn thành được các thử thách khác trên Viblo code với ctf rồi nên phải quyết tâm hoàn thành 2 bài viết để còn nhận quà chứ 😄. Thôi không lan man nữa vào việc luôn nhé hôm nay mình sẽ nói đến việc tích hợp đa ngôn ngữ cho dự án vue và nuxtjs bằng vue-i18n và nuxt-i18n. Quá quen thuộc rồi đúng không :v bắt đầu luôn nhé.

Tích hợp vue-i18n cho project vue

tích hợp cho project vue thì đầu tiên phải tạo project đã đúng không. Mình tạo project với lệnh

vue create vue-i18n

với "vue-i18n" là tên project, mình chọn default là Vue2 và eslint, rồi để nó tạo project thôi 😄, sau khi tạo xong thì cd vào "vue-i18n" vì mình dùng yarn lên sẽ chạy yarn serve để xem project có hoạt động không nào :v, ok vậy là đã tạo xong project rồi. Tiếp theo là cài "vue-i18n" các bạn chỉ cần chạy

yarn add vue-i18n

Sau khi add xong vue-i18n thì chúng ta tiến hành thêm một folder "locale" bên trong folder "src" của dự án, bên trong "locale" lại tạo thêm 3 file vi.js, en.js, index.js như hình bên dưới đây.

Trong file vi.js, en.js sẽ chứa data theo ngôn ngữ tương ứng và chúng ta cần export nó ra, nội dung file như sau:

const vi = { welcome: 'Chào mừng bạn đến với ứng dụng Vue.js',
} export default vi;

tương tự với file en.js. Tiếp theo ở file index.js mình sẽ gọi đến 2 file trên và cũng export nó ra (phần sau sẽ gọi đến nó 😄) như sau:

import en from './en';
import vi from './vi'; export default { en, vi,
};

Tiếp theo là sẽ gọi nó ở main.js. Mình cần import vue-i18n và messages của ngôn ngữ tương ứng vào, khởi tạo nó kèm ngôn ngữ mặc định và cuối cùng là render ra, file main.js của mình sẽ như thế này:

import Vue from 'vue'
import App from './App.vue'
import VueI18n from 'vue-i18n';
import messages from '../src/locale/index'; Vue.use(VueI18n) const i18n = new VueI18n({ locale: 'vi', // locale mặc định messages,
}); Vue.config.productionTip = false const app = new Vue({ i18n, render: h => h(App),
}); app.$mount('#app');

Tiếp theo là cần có 1 component để có thể chuyển đổi qua lại giữa các ngôn ngữ, mình có component như sau:

 <div> <select v-model="$i18n.locale" class="switch-locale"> <option v-for="lang in langs" :key="lang.key" :value="lang.key" > {{ lang.lable }} </option> </select> </div>

với phần data

data() { return { langs: [ { key: 'vi', lable: 'Tiếng việt', }, { key: 'en', lable: 'English', }, ], }; }

và thêm 1 chút css 😄

.switch-locale { width: 130px; height: 35px; outline: 0; border-radius: 4px; border: 1px solid #909399d9; background: white;
}

các bạn cũng có thể style thêm cờ cho từng ngôn ngữ chẳng hạn. Và cuối cùng là thay những đoạn text cần đã ngôn ngữ bằng { $t('welcome') }} với welcome là cái mà chúng ta đã khai báo trong file vi.js và en.js đó. Cùng xem kết quả nhé 😄

Peek 2022-05-27 22-02.gif

oke vậy là đã xong phần tích hợp vue-i18n cho project vue, bây giờ chúng ta cùng chuyển sang tích hợp nuxt-i18n cho project nuxt nhé gét gô ✌️

Tích hợp nuxt-i18n cho project nuxtjs

Cũng như project vue thôi đầu tiên chúng ta cũng tạo một project nuxtjs mình dùng yarn nên câu lệnh tạo sẽ là

yarn create nuxt-app nuxt-i18n

với nuxt-i18n là tên project, mình cũng có 1 bài giới thiệu mọi người có thể xem lại kỹ hơn về một project nuxtjs ở đây. Tiếp theo sẽ là cài nuxt-i18n cũng tương tự như vue-i18n mình chạy câu lệnh

yarn add nuxt-i18n

Sau khi cài xong chúng ta cũng cần tạo 1 folder "lang" để chứa ngôn ngữ trong folder mình có 2 file là vi.js và en.js như hình bên dưới với nội dung file vi.js như sau

export default { hi: 'xin chào'
}

Tương tự với file en.js. Tiếp theo bạn vào file "nuxt.config.js" ở phần "modules" để import nuxt i18n với nội dung như sau:

[ 'nuxt-i18n', { locales: [ { code: 'vi', file: 'vi.js', name: 'Tiếng Việt', }, { code: 'en', file: 'en.js', name: 'english', }, ], detectBrowserLanguage: { useCookie: true, cookieKey: 'i18n_redirected', }, langDir: 'lang/', vueI18nLoader: true, defaultLocale: 'vi', vueI18n: { fallbackLocale: 'vi', }, }, ],

như vậy là đã gần hoàn thành rồi đó :v, chúng ta cũng cần thêm một component để chuyển giữa các ngôn ngữ với nhau:

<select v-model="locale" class="language"> <option value="en"> English </option> <option value="vi"> Tiếng Việt </option>
</select>

với Data là

 data() { const lang = 'vi' this.$i18n.locale = lang return { locale: 'vi' } },

mình sử dụng watch để phát hiện sự thay đổi ngôn ngữ và cập nhật theo đúng sự thay đổi đó

 watch: { locale(val) { this.$i18n.locale = val }, },

cũng thay các đoạn text cần đa ngôn ngữ tương tự với vue-i18n `{{ $t('text') }}, oke vậy là đã xong cùng chạy thử nhé 😄

Peek 2022-05-27 23-21.gif

Kết Luận

Như vậy là mình đã giới thiệu về đa ngôn ngữ cho dự án vue, và nuxt dùng vue, nuxt-i18n, nếu mọi người thấy bài viết hưu ích thì hãy cho mình một upvote nhé, biết là muộn nhưng biết đâu nhờ các bạn mà mình lại có thể đua vào top 10 của Mayfest 😄. Có thắc mắc hay góp ý gì thì mọi người hay commnent xuống dưới bài viết nhé, cảm ơn các bạn đã đọc

Bình luận

Bài viết tương tự

- vừa được xem lúc

Được rồi, đi thôi!!! VPS free nè (^.^) [P1]

Bạn là sinh viên, bạn là lập trình viên khó khăn về mặt tài chính, bạn không có xiền thuê VPS, được rồi hãy đến đây!!!. Hôm nay mình sẽ hướng dẫn cho các bạn cách tạo VPS free bằng Github Workflow & N

0 0 59

- vừa được xem lúc

[Linux] Iptables trong hệ thống Linux

IPtables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng

0 0 44

- vừa được xem lúc

Từ bug format sai chuỗi số khi nhập bằng bàn phím tiếng Nhật, tới IME và các sự kiện composition trong JS

"Tự nhiên tui thấy hiện tượng lạ”. Khi nhập liệu một chuỗi các kí tự vào thẻ input, thông thường chúng ta nhập thế nào thì hiển thị thế ấy, không làm phép biến đổi gì cả.

0 0 48

- vừa được xem lúc

Tạo Rijndael S-box sử dụng trong AES

I. Rijndael S-box là gì .

0 0 37

- vừa được xem lúc

Giới thiệu về lỗ hổng tràn bộ đệm (Buffer Overflow) và cách khai thác

Khái niệm. Lỗ hổng tràn bộ đệm (Buffer Overflow) là lỗ hổng trong lập trình, cho phép dữ liệu được ghi vào một buffer có thể tràn ra ngoài buffer đó, ghi đè lên dữ liệu khác và dẫn tới hoạt động bất t

0 0 42

- vừa được xem lúc

Share Libraries Hijacking trên Linux

1. Cách thức hoạt động của Share Libraries.

0 0 28