Иногда требуется быстрый вариант реализации нескольких языков в Вашем приложении. Еще ни в одном проекте это не было так просто и беспроблемно. Это Vue Multilanguage!
Начать — легко
Как правило, сделать мультиязычность на сайте — это всегда головная боль: подбор инструмента, интеграция его в проект, заполнение и вывод языковых пакетов. Подобного рода задачи заставляют хвататься за голову. Но, к счастью, все эти проблемы не ощущаются остро в проектах на VueJS. При использовании плагина Vue Multilanguage, разумеется.
Итак, устанавливаем пакеты:
# yarn yarn add vue-multilanguage # npm npm install vue-multilanguage --save
Создайте файл ml.js для определения многоязычных настроек и языков:
import Vue from 'vue' import { MLInstaller, MLCreate, MLanguage } from 'vue-multilanguage' Vue.use(MLInstaller) export default new MLCreate({ initial: 'english', save: process.env.NODE_ENV === 'production', languages: [ new MLanguage('english').create({ title: 'Hello {0}!', msg: 'You have {f} friends and {l} likes' }), new MLanguage('portuguese').create({ title: 'Oi {0}!', msg: 'Você tem {f} amigos e {l} curtidas' }) ] })
Некоторые подробности
- MLInstaller: класс плагинов для установки в
VueсVue.use - MLCreate: класс для определения параметров
- initial: первый язык для запуска приложения
- save: сохранение текущего языка в локальном хранилище
- languages: массив с поддерживаемыми языками
- MLanguage: класс с генератором языка, создайте свой язык с ним
- create: метод создания языка на основе объектного параметра
Вы можете определить промежуточное программное обеспечение для выполнения перед вызовом get. Например:
export default new MLCreate({ ... middleware: (component, path) => { const newPath = `${component.$options.name}.${path}` // you should return newPath return newPath } })
PS: в Примере все $ml.get вызовы будут сконкатенированы с именем компонента.
И теперь вызываем в нашем main.js наш файл ml:
import Vue from 'vue' import App from './App.vue' import router from './router' import './ml' Vue.config.productionTip = false new Vue({ router, render: h => h(App) }).$mount('#app')
Использование в компонентах
Вы можете определять сообщения внутри компонента, использовать вычисляемые свойства с префиксом ml:
<template> <div id="app"> <p v-text="$ml.get('myMessage')" /> </div> </template> <script> import { MLBuilder } from 'vue-multilanguage' export default { name: 'app', data () { return { friends: 5 } }, computed: { mlmyMessage () { return new MLBuilder('msg').with('f', this.friends).with('l', 406) } } } </script>
Также, можно использовать в шаблоне напрямую:
<h1 v-text="$ml.with('VueJS').get('title')" />
Выведет Hello VueJS.
Переключение языков
Для создания тумблера с переключателями, используйте следующий код:
<button v-for="lang in $ml.list" :key="lang" @click="$ml.change(lang)" v-text="lang" />
На этом все. Проще придумать сложно. При работе с плагином косяков обнаружено не было. Единственное, что может огорчить — это множественное заполнение языковыми константами. Но без этого никуда. Удачи.