Quasar Framework предоставляет мощные средства для локализации и интернационализации приложений на Vue.js, включая поддержку плюрализации. Плюрализация — это процесс выбора правильной формы слова в зависимости от числового значения. В языках с богатой морфологией, таких как русский, английский или французский, это особенно важно для корректного отображения интерфейса.
Quasar использует пакет @quasar/locale для работы с переводами и форматированием чисел и дат. Для поддержки плюрализации необходимо подключить соответствующий язык. Например, для русского языка:
import { Quasar } from 'quasar'
import ru from 'quasar/lang/ru'
Quasar.lang.set(ru)
После установки языка все компоненты Quasar будут использовать его настройки, включая правила плюрализации.
$tcДля работы с плюрализацией в Quasar применяется функция
$tc (translate & choose). Она позволяет передавать
число и выбирать правильную форму слова:
export default {
methods: {
messages(count) {
return this.$tc('item', count)
}
}
}
В шаблоне Vue это будет выглядеть так:
<p>{{ messages(1) }}</p> <!-- 1 предмет -->
<p>{{ messages(3) }}</p> <!-- 3 предмета -->
<p>{{ messages(5) }}</p> <!-- 5 предметов -->
Словарь переводов в Quasar представляет собой объект с ключами и
строками, где каждая строка может содержать несколько форм слова,
разделенных символом |. Пример для русского:
export default {
item: 'предмет | предмета | предметов'
}
предмет) используется для числа 1.предмета) — для чисел 2, 3, 4.предметов) — для чисел 0, 5 и выше.Quasar автоматически применяет алгоритм выбора формы в зависимости от числа и языка.
Для русского языка используется следующий алгоритм:
Примеры:
this.$tc('item', 1) // предмет
this.$tc('item', 2) // предмета
this.$tc('item', 5) // предметов
this.$tc('item', 21) // предмет
this.$tc('item', 14) // предметов
Многие компоненты Quasar поддерживают локализацию и $tc
напрямую. Например, QTable,
QPagination и уведомления QNotify:
this.$q.notify({
message: this.$tc('item', itemsCount),
color: 'primary'
})
В таблицах можно использовать $tc для заголовков
столбцов с числом элементов:
<q-table
:rows="rows"
:columns="columns"
:title="$tc('item', rows.length)"
></q-table>
Можно создавать динамические ключи для более сложных случаев:
computed: {
cartMessage() {
const count = this.cart.length
return this.$tc(count === 0 ? 'cart.empty' : 'cart.items', count)
}
}
Словарь может быть структурирован так:
export default {
cart: {
empty: 'Корзина пуста',
items: 'товар | товара | товаров'
}
}
В Quasar на Vue 3 рекомендуется использовать Composition
API с useQuasar:
import { useQuasar } from 'quasar'
export default {
setup() {
const $q = useQuasar()
const message = (count) => $q.lang.tc('item', count)
return { message }
}
}
Это позволяет безопасно использовать плюрализацию в любых реактивных вычислениях и компонентах.
cart.items, notifications.messages).$tc при больших числах и
нулях, чтобы избежать ошибок отображения.Quasar поставляется с готовыми локализациями для большинства популярных языков. Алгоритмы плюрализации встроены для каждого языка:
item | items).Подключение осуществляется аналогично русскому примеру:
import fr from 'quasar/lang/fr'
Quasar.lang.set(fr)
После этого $tc будет автоматически использовать
французские правила.
Плюрализация в Quasar обеспечивает точное и корректное отображение текста с числами, снижает вероятность ошибок в локализации и упрощает поддержку многоязычных интерфейсов, делая приложения удобными для пользователей любых языков.