Vue.js — это прогрессивный JavaScript-фреймворк для построения пользовательских интерфейсов. Его ключевая особенность — реактивность данных и компонентная архитектура. В отличие от традиционных подходов, Vue использует виртуальный DOM, который обеспечивает эффективное обновление интерфейса при изменении состояния приложения.
Реактивность и привязка данных Vue реализует
реактивность через объект reactive и функцию
ref. Любые изменения в реактивных данных автоматически
отражаются в DOM. Привязка данных осуществляется с помощью директив,
таких как v-bind для атрибутов и v-model для
двусторонней привязки:
<template>
<input v-model="message" />
<p>{{ message }}</p>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const message = ref('Привет, Vue!');
return { message };
}
};
</script>
Компонентная структура Vue строится вокруг компонентов — независимых блоков интерфейса, которые можно многократно использовать. Каждый компонент содержит шаблон, логику и стили:
<template>
<button @click="increment">{{ count }}</button>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
};
</script>
Компоненты могут быть родительскими и дочерними. Передача данных
между ними осуществляется через props и события с помощью
emit.
В больших приложениях часто возникает необходимость поддержки нескольких языков. Vue совместим с библиотекой Vue I18n, которая обеспечивает перевод текста и управление локалями. Плюрализация — это особая часть локализации, позволяющая правильно отображать слова в зависимости от числового контекста.
Настройка Vue I18n Для начала необходимо создать объект переводов и подключить его к приложению:
import { createApp } from 'vue';
import { createI18n } from 'vue-i18n';
import App from './App.vue';
const messages = {
ru: {
cart: 'У вас {count} товар | У вас {count} товара | У вас {count} товаров'
},
en: {
cart: 'You have {count} item | You have {count} items'
}
};
const i18n = createI18n({
locale: 'ru',
messages
});
createApp(App).use(i18n).mount('#app');
Использование плюрализации в шаблонах Vue I18n
позволяет автоматически выбирать правильную форму слова через функцию
$tc:
<template>
<p>{{ $tc('cart', itemCount, { count: itemCount }) }}</p>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const itemCount = ref(5);
return { itemCount };
}
};
</script>
В этом примере функция $tc принимает ключ перевода,
число для определения формы слова и объект с параметрами. Для русского
языка определяются три формы: 1, 2–4 и 5 и более.
Особенности плюрализации для разных языков Каждый
язык имеет собственные правила. Английский использует две формы:
единственное и множественное число. Русский и многие другие славянские
языки — три формы. Vue I18n поддерживает сложные правила через объект
pluralizationRules, который можно расширять:
import { createI18n } from 'vue-i18n';
const i18n = createI18n({
locale: 'ru',
messages,
pluralizationRules: {
ru: function(choice, choicesLength) {
if (choice % 10 === 1 && choice % 100 !== 11) return 0;
if ([2,3,4].includes(choice % 10) && ![12,13,14].includes(choice % 100)) return 1;
return 2;
}
}
});
Динамическая смена языка Изменение локали в
приложении производится через свойство locale:
i18n.global.locale = 'en';
После смены локали все шаблоны автоматически обновляются, отображая тексты на новом языке с учетом плюрализации.
Компоненты Vue могут использовать реактивные данные для динамической генерации текста с правильной формой слова:
<template>
<div>
<label for="count">Количество:</label>
<input id="count" type="number" v-model="itemCount" />
<p>{{ $tc('cart', itemCount, { count: itemCount }) }}</p>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const itemCount = ref(1);
return { itemCount };
}
};
</script>
С помощью реактивной переменной itemCount текст
автоматически обновляется при изменении числа, корректно отображая формы
слова.
Vue I18n позволяет создавать кастомные функции форматирования, например для валюты или дат. Плюрализация можно комбинировать с форматированием чисел, что особенно важно в приложениях электронной коммерции и финансовых сервисах. Также возможна динамическая загрузка языковых пакетов для оптимизации производительности больших проектов.
Пример кастомного форматирования с плюрализацией:
const messages = {
ru: {
balance: 'У вас {amount} {amount, plural, =1 {рубль} one {рубля} few {рублей} other {рублей}}'
}
};
Это позволяет точно управлять локализацией сложных фраз с учётом правил языка.
Для крупных приложений можно интегрировать локализацию с состоянием через Vuex или Composition API. Состояние локали и выбранного языка хранится централизованно, что позволяет менять язык в любом компоненте без дополнительных действий.
// store.js
import { reactive } from 'vue';
export const store = reactive({
locale: 'ru'
});
// App.vue
watch(() => store.locale, (newLocale) => {
i18n.global.locale = newLocale;
});
Такой подход обеспечивает единый источник правды и упрощает управление множеством компонентов с локализованным контентом.