Lingo.dev + Vue.js Single-File Components

Lingo.dev CLI supports Vue I18n single-file components, allowing you to keep translations inside your .vue files.

Note: If your Vue.js application uses JSON locale files, use the .json format for frontend.

Quick Setup

Create an i18n.json configuration file in your project root:

{
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "vue-json": {
      "include": ["src/components/*.vue", "src/views/*.vue"]
    }
  }
}

This configuration sets English as the source language, targets Spanish, French, and German, and processes .vue files in the src/components and src/views directories.

Find Supported Languages

List available source and target languages:

npx lingo.dev@latest show locale sources
npx lingo.dev@latest show locale targets

Translate Everything

Run the following command to translate all Vue components:

npx lingo.dev@latest run

The CLI scans your components for <i18n> blocks, translates new or changed content, and updates translations in place.

How It Works with Vue Components

Lingo.dev works directly with Vue's standard i18n structure:

<template>
  <div>
    <h1>{{ $t("welcome") }}</h1>
    <p>{{ $t("description") }}</p>
  </div>
</template>

<i18n>
{
  "en": {
    "welcome": "Welcome",
    "description": "This is a Vue component"
  }
}
</i18n>

After translation, your component will contain all target languages:

<i18n>
{
  "en": {
    "welcome": "Welcome",
    "description": "This is a Vue component"
  },
  "es": {
    "welcome": "Bienvenido",
    "description": "Este es un componente Vue"
  },
  "fr": {
    "welcome": "Bienvenue",
    "description": "Ceci est un composant Vue"
  }
}
</i18n>

Advanced Configuration

Exclude Files

Exclude specific components from translation:

"vue-json": {
  "include": ["src/components/*.vue", "src/views/*.vue"],
  "exclude": ["src/components/NoTranslate.vue"]
}

Hybrid Translation

Combine component-based and file-based translations:

"buckets": {
  "vue-json": {
    "include": ["src/components/*.vue", "src/views/*.vue"]
  },
  "json": {
    "include": ["src/locales/[locale].json"]
  }
}

This setup keeps component-specific translations within components and stores global translations in separate JSON files.

Why Use This Approach

  • Keeps translations with the components that use them
  • No need to extract strings to separate files
  • AI understands component context for better translations
  • Only translates what's changed
  • Works with Vue I18n's recommended patterns

Lingo.dev provides AI-driven translations while maintaining Vue's component-based architecture.