Overview

Bimble Chat Vue provides comprehensive internationalization support with Vue I18n, enabling multi-language functionality and RTL (Right-to-Left) layout support for Arabic and Urdu languages.

10 Languages Supported

English, French, Spanish, Russian, Chinese, Japanese, Portuguese, Hindi, Arabic, and Urdu

RTL Support

Complete Right-to-Left layout support for Arabic and Urdu languages

Dynamic Switching

Real-time language switching without page reload using Vue I18n

Flag Icons

Country flag icons for easy language identification and selection

Supported Languages

The application supports 10 languages with proper locale configuration and flag representation.

🇺🇸
English
en
Default
🇫🇷
Français
fr
Supported
🇪🇸
Español
es
Supported
🇷🇺
Русский
ru
Supported
🇨🇳
中文
zh
Supported
🇯🇵
日本語
ja
Supported
🇵🇹
Português
pt
Supported
🇮🇳
हिन्दी
hi
Supported
🇦🇪
العربية
ar
RTL Support
🇵🇰
اردو
ur
RTL Support

I18n Configuration

The Vue I18n configuration is set up in src/utils/i18n.ts with message files organized in the locales directory.

Vue I18n Setup
src/utils/i18n.ts
import { createI18n } from 'vue-i18n';
import messages from '@/utils/locales/messages';

const i18n = createI18n({
    legacy: false,              // Use Composition API
    locale: 'en',              // Default language
    fallbackLocale: 'en',      // Fallback language
    messages: messages,        // Language messages
    silentTranslationWarn: true,
    silentFallbackWarn: true
});

export default i18n;
Message Files Structure
src/utils/locales/messages.ts
import en from './en.json';
import fr from './fr.json';
// Import additional language files as they're added

const messages = {
    en: en,
    fr: fr,
    // Add more language imports here
};

export default messages;
Language File Example
src/utils/locales/en.json
{
  "save": "Save",
  "cancel": "Cancel",
  "delete": "Delete",
  "edit": "Edit",
  "search": "Search",
  "loading": "Loading...",
  "chats": "Chats",
  "calls": "Calls",
  "contacts": "Contacts",
  "settings": "Settings",
  "profile": "Profile",
  "appearance": "Appearance",
  "language": "Language",
  "themeMode": "Theme Mode",
  "colorScheme": "Color Scheme"
}

RTL (Right-to-Left) Support

Complete RTL layout support is provided for Arabic and Urdu languages using Vuetify's RTL functionality.

Layout Implementation
src/layouts/full/FullLayout.vue
<template>
  <!-- RTL Layout -->
  <v-locale-provider v-if="settings.setRTLLayout" rtl>
    <v-app :theme="settings.activeTheme">
      <SidebarNav v-if="!mobile"></SidebarNav>
      <v-main>
        <RouterView />
      </v-main>
    </v-app>
  </v-locale-provider>

  <!-- LTR Layout -->
  <v-locale-provider v-else>
    <v-app :theme="settings.activeTheme">
      <SidebarNav v-if="!mobile"></SidebarNav>
      <v-main>
        <RouterView />
      </v-main>
    </v-app>
  </v-locale-provider>
</template>
RTL Settings Toggle
src/views/main/settings/Appearance.vue
<template>
  <v-btn-toggle v-model="rtlLayoutModel" 
                color="primary" 
                mandatory>
    <v-btn :value="false" variant="outlined">
      <template #prepend>
        <IconTextDirectionLtr size="21" />
      </template>
      {{ t('leftToRight') }}
    </v-btn>
    
    <v-btn :value="true" variant="outlined">
      <template #prepend>
        <IconTextDirectionRtl size="21" />
      </template>
      {{ t('rightToLeft') }}
    </v-btn>
  </v-btn-toggle>
</template>

<script setup>
// RTL layout computed property
const rtlLayoutModel = computed({
  get: () => settings.setRTLLayout,
  set: (value: boolean) => settings.setRTLLayout = value
})
</script>

Usage in Components

Use the $t() function or useI18n composable to display translated text in your Vue components.

Template Usage
<template>
  <!-- Using $t() in templates -->
  <v-btn>{{ $t('save') }}</v-btn>
  <h1>{{ $t('settings') }}</h1>
  <p>{{ $t('welcome_message') }}</p>
  
  <!-- With parameters -->
  <p>{{ $t('user_greeting', { name: userName }) }}</p>
  
  <!-- Navigation items -->
  <v-list-item-title>{{ $t(item.title) }}</v-list-item-title>
</template>
Composition API Usage
<script setup>
import { useI18n } from 'vue-i18n'

const { t, locale } = useI18n()

// Using t() function
const buttonText = t('save')
const pageTitle = t('settings')

// Change language programmatically
const changeLanguage = (newLocale: string) => {
  locale.value = newLocale
}

// Get current locale
const currentLanguage = locale.value
</script>
Settings Store Integration
// Language switching with settings store
const settings = useSettingsStore()

const changeLanguage = (code: string) => {
  locale.value = code
  settings.SET_LANGUAGE(code)  // Persist language preference
}

How to Setup Language

Simple steps to configure and change languages in the application.

1
Language Files Location

Language files are located in src/utils/locales/ directory. Each language has its own JSON file.

src/utils/locales/
├── en.json (English - Default)
├── fr.json (French)
├── messages.ts (Import configuration)
2
Change Language in Application

Users can change language through the sidebar dropdown or in Settings → Appearance.

// Using the language dropdown component
<LanguageDropdown />

// Or programmatically
import { useI18n } from 'vue-i18n'
const { locale } = useI18n()
locale.value = 'fr' // Change to French
3
Using Translations

Use $t() in templates or t() in script to display translated text.

<template>
  <h1>{{ $t('settings') }}</h1>
  <v-btn>{{ $t('save') }}</v-btn>
</template>
RTL Language Support

For RTL languages like Arabic or Urdu, the layout automatically switches to right-to-left direction.