Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/vuetifyjs/vuetify/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The useLocale() composable provides access to Vuetify’s localization system, including translation functions, current locale management, and RTL (right-to-left) support.

Import

import { useLocale } from 'vuetify'

Signature

function useLocale(): LocaleInstance & RtlInstance

Return Value

Returns a combined LocaleInstance and RtlInstance object:

Locale Properties

name
string
The adapter name identifier
current
Ref<string>
Currently active locale code (e.g., ‘en’, ‘es’, ‘fr’)
fallback
Ref<string>
Fallback locale code when translation is not found
messages
Ref<LocaleMessages>
All available translation messages
interface LocaleMessages {
  [key: string]: LocaleMessages | string
}
decimalSeparator
ShallowRef<string>
Decimal separator character for the current locale

Translation Methods

t
(key: string, ...params: unknown[]) => string
Translate a message keyParameters:
  • key - Translation key (e.g., ‘close’, ‘dataIterator.rowsPerPageText’)
  • ...params - Optional parameters to interpolate into the translation
Returns: Translated string or the key if translation not found
n
(value: number) => string
Format a number according to current localeParameters:
  • value - Number to format
Returns: Formatted number string
provide
(props: LocaleOptions) => LocaleInstance
Create a scoped locale instance with custom options

RTL Properties

isRtl
Ref<boolean>
Whether the current locale uses right-to-left text direction
rtl
Ref<Record<string, boolean>>
RTL configuration for all locales
rtlClasses
Ref<string>
CSS class for current text direction (e.g., ‘v-locale—is-ltr’)

Locale Options

interface LocaleOptions {
  decimalSeparator?: string
  messages?: LocaleMessages
  locale?: string
  fallback?: string
  adapter?: LocaleInstance
}

RTL Languages

The following locales default to RTL:
  • ar - Arabic
  • fa - Persian/Farsi
  • he - Hebrew

Usage Examples

Basic Translation

<script setup>
import { useLocale } from 'vuetify'

const { t, current } = useLocale()
</script>

<template>
  <div>
    <h1>{{ t('welcome') }}</h1>
    <p>Current locale: {{ current }}</p>
    
    <v-btn>{{ t('close') }}</v-btn>
    <v-btn>{{ t('save') }}</v-btn>
  </div>
</template>

Change Locale

<script setup>
import { useLocale } from 'vuetify'

const { current, t } = useLocale()

function switchToSpanish() {
  current.value = 'es'
}

function switchToEnglish() {
  current.value = 'en'
}
</script>

<template>
  <div>
    <v-btn @click="switchToEnglish">English</v-btn>
    <v-btn @click="switchToSpanish">Español</v-btn>
    
    <h1>{{ t('greeting') }}</h1>
  </div>
</template>

RTL Support

<script setup>
import { useLocale } from 'vuetify'

const { isRtl, rtlClasses, current } = useLocale()

function toggleRtl() {
  current.value = isRtl.value ? 'en' : 'ar'
}
</script>

<template>
  <div :class="rtlClasses">
    <p>Is RTL: {{ isRtl }}</p>
    <v-btn @click="toggleRtl">
      Switch to {{ isRtl ? 'LTR' : 'RTL' }}
    </v-btn>
  </div>
</template>

Number Formatting

<script setup>
import { useLocale } from 'vuetify'

const { n, current } = useLocale()

const price = 1234.56
</script>

<template>
  <div>
    <p>Price: {{ n(price) }}</p>
    <p>Locale: {{ current }}</p>
  </div>
</template>

Custom Messages

<script setup>
import { useLocale } from 'vuetify'

const locale = useLocale()

// Add custom translations
locale.messages.value = {
  en: {
    welcome: 'Welcome',
    goodbye: 'Goodbye',
    greeting: 'Hello, {name}!'
  },
  es: {
    welcome: 'Bienvenido',
    goodbye: 'Adiós',
    greeting: '¡Hola, {name}!'
  }
}
</script>

<template>
  <div>
    <h1>{{ locale.t('welcome') }}</h1>
    <p>{{ locale.t('greeting', 'John') }}</p>
  </div>
</template>

Locale Selector

<script setup>
import { useLocale } from 'vuetify'
import { ref } from 'vue'

const { current, t } = useLocale()

const locales = [
  { code: 'en', label: 'English' },
  { code: 'es', label: 'Español' },
  { code: 'fr', label: 'Français' },
  { code: 'de', label: 'Deutsch' },
  { code: 'ar', label: 'العربية' },
]
</script>

<template>
  <v-select
    v-model="current"
    :items="locales"
    item-title="label"
    item-value="code"
    :label="t('selectLanguage')"
  />
</template>

Fallback Locale

<script setup>
import { useLocale } from 'vuetify'

const { t, fallback } = useLocale()

// Set fallback to English
fallback.value = 'en'

// If a translation isn't found in current locale,
// it will fall back to English
</script>

<template>
  <div>
    <p>{{ t('someKey') }}</p>
  </div>
</template>

Built-in Translation Keys

Vuetify components use these translation keys:
  • close - Close button text
  • dataIterator.rowsPerPageText - Data table rows per page
  • dataIterator.pageText - Data table page text
  • noDataText - No data available message
  • carousel.prev - Carousel previous button
  • carousel.next - Carousel next button
  • calendar.today - Calendar today button
  • And many more…

Notes

  • Must be called within a component setup function or composable
  • Throws an error if the Vuetify locale provider is not found
  • Locale changes are reactive and will update all dependent components
  • RTL is automatically applied based on current locale
  • Custom locale adapters can be provided for integration with i18n libraries

See Also

Build docs developers (and LLMs) love