{"id":22699,"library":"vite-plugin-i18n","title":"vite-plugin-i18n","description":"A Vite plugin for internationalization (i18n) that integrates seamlessly with Vite's build process. Version 1.0.2 provides a simple way to manage translation files, auto-generate type-safe i18n functions, and optimize bundle size by tree-shaking unused translations. It supports JSON, YAML, and TypeScript translation files with hot-reload in development. Compared to alternatives like i18next or vue-i18n, it offers a lower overhead and tighter Vite integration. Release cadence is irregular with limited community adoption.","status":"active","version":"1.0.2","language":"javascript","source_language":"en","source_url":null,"tags":["javascript"],"install":[{"cmd":"npm install vite-plugin-i18n","lang":"bash","label":"npm"},{"cmd":"yarn add vite-plugin-i18n","lang":"bash","label":"yarn"},{"cmd":"pnpm add vite-plugin-i18n","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency required as it's a Vite plugin","package":"vite","optional":true}],"imports":[{"note":"ESM-only; CommonJS require will fail. Use import.","wrong":"const i18nPlugin = require('vite-plugin-i18n')","symbol":"i18nPlugin","correct":"import i18nPlugin from 'vite-plugin-i18n'"},{"note":"defineI18n is a named export, not default. Check docs for correct usage.","wrong":"import defineI18n from 'vite-plugin-i18n'","symbol":"defineI18n","correct":"import { defineI18n } from 'vite-plugin-i18n'"},{"note":"Named export for runtime usage.","wrong":"import useI18n from 'vite-plugin-i18n'","symbol":"useI18n","correct":"import { useI18n } from 'vite-plugin-i18n'"}],"quickstart":{"code":"import i18nPlugin from 'vite-plugin-i18n';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    i18nPlugin({\n      locales: ['en', 'fr', 'de'],\n      defaultLocale: 'en',\n      messagesDir: 'src/locales',\n      typesOutput: 'src/types/i18n.d.ts'\n    })\n  ]\n});\n\n// In a component:\nimport { defineI18n } from 'vite-plugin-i18n';\nconst { t } = defineI18n();\nconsole.log(t('hello'));","lang":"typescript","description":"Configures the plugin in vite.config.ts, then defines and uses i18n functions in a component."},"warnings":[{"fix":"Check compatibility with your Vite version; consider using an alternative like @intlify/vite-plugin-vue-i18n for newer Vite.","message":"The plugin requires Vite >= 2.0 and may not work with Vite 3+ without adjustments.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Use 'localesDir' instead of 'messagesDir'.","message":"Some older configuration options like 'messagesDir' are deprecated in favor of 'localesDir'.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Set 'typesOutput' to a file path to enable auto-generated types.","message":"The plugin generates type definitions only if 'typesOutput' is specified; otherwise, no types are emitted.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Save locale files as UTF-8 with BOM or use Unicode escape sequences.","message":"Non-ASCII characters in locale files may cause encoding issues on Windows.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Run 'npm install vite-plugin-i18n' and ensure 'tsconfig.json' includes 'node_modules/@types'.","cause":"Package not installed or TypeScript cannot locate types.","error":"Cannot find module 'vite-plugin-i18n' or its corresponding type declarations."},{"fix":"Change 'const i18nPlugin = require(...)' to 'import i18nPlugin from ...'.","cause":"Using CommonJS require instead of ESM import.","error":"TypeError: i18nPlugin is not a function"},{"fix":"Check that 'locales' array and 'defaultLocale' are provided in plugin options.","cause":"Configuration mismatch or missing required options.","error":"[vite] Internal server error: Plugin 'vite-plugin-i18n' failed to load"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}