{"_id":"@cimom/vben-locales","_rev":"8-8e0fc423750e78774adfe5ab5c935124","name":"@cimom/vben-locales","dist-tags":{"latest":"5.6.4"},"versions":{"5.5.9":{"name":"@cimom/vben-locales","version":"5.5.9","author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","_id":"@cimom/vben-locales@5.5.9","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"3e1bda7dc6575535db2b38b090fcf97c05d19ec5","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.5.9.tgz","fileCount":5,"integrity":"sha512-D2YItc3e/OFRozPxIYj7j3MgLmc4f2rn/LHEuZ64qsru+U1nCwXSsAPOyKxR+GoGoVXmQfvVVaO2ObK2xcqd6w==","signatures":[{"sig":"MEYCIQC9o7YKG2YLIoScYssQzlxCTsIbvgHYLWndc6se0HMLzwIhAIPFf9u+h5WFxZbqvnPm5aZRqWLPq72vUBWWyUsQWPGz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16349},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"private":false,"scripts":{"build":"pnpm unbuild"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^9.10.0","@intlify/core-base":"^9.10.0","@cimom/vben-core-composables":"^5.5.9"},"publishConfig":{"access":"public","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"}}},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.5.9_1748417934952_0.4965906879248174","host":"s3://npm-registry-packages-npm-production"}},"5.5.12":{"name":"@cimom/vben-locales","version":"5.5.12","author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","_id":"@cimom/vben-locales@5.5.12","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"ecbfc22ec20ec725beeed742769b0d7843f0c83a","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.5.12.tgz","fileCount":16,"integrity":"sha512-4r8YH1WlR5qSeEC9q4+C1bYS86KEi7bp3oTOJikvRcwpQynORrqtfU8v8kLQw/NLxUZZmXH7DnnP3h1VNpwshQ==","signatures":[{"sig":"MEYCIQCLROFU+sL2hk0awOcUTxe1Ia2AYyRYaMgueYaGTXzPpAIhAPzXFz9CLJmZHQfDLOc0AyIO79oTwRpZRf7uMi8vqHOb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41150},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"}},"private":false,"scripts":{"build":"pnpm unbuild"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^11.1.3","@intlify/core-base":"^11.1.3","@cimom/vben-core-composables":"^5.5.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.5.12_1748516845436_0.026828415581894305","host":"s3://npm-registry-packages-npm-production"}},"5.5.13":{"name":"@cimom/vben-locales","version":"5.5.13","author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","_id":"@cimom/vben-locales@5.5.13","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"a8f7623190568c2a80642723354414ba33a2299a","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.5.13.tgz","fileCount":13,"integrity":"sha512-Q/KrW9qZRCuGlOSgBNJU4ehJHK2U8pEXSx0jLQZx6XnJ5FTy8+PYx3L2jKxhgOtVPD2y54rkFtEelMjxX2vGnw==","signatures":[{"sig":"MEQCIGWYW3wJiMD50L/91nYrZp+KCZqdEYXyJ/Qj5OyEKbcqAiBHdP+oPAxxnTrwxbeB8DSoEj0Iyk7QlYmEEw4vIejG9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40643},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"private":false,"scripts":{"build":"pnpm unbuild"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css","**/*.json"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^11.1.3","@intlify/core-base":"^11.1.3","@cimom/vben-core-composables":"^5.5.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.5.13_1749085430513_0.6930534566037321","host":"s3://npm-registry-packages-npm-production"}},"5.6.0":{"name":"@cimom/vben-locales","version":"5.6.0","license":"MIT","_id":"@cimom/vben-locales@5.6.0","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"2282573e6b91ef22b3881b59a4fa93f751e8c9a1","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.6.0.tgz","fileCount":11,"integrity":"sha512-hULXNY11dqI9WmLDzeXFMphRv6GQDPGzDtA//RvTfcMaW7nXa35CDiHbjhZKh/Y1luSqUuVzfQzWtA7Nk54Jyg==","signatures":[{"sig":"MEYCIQCflI2uydJerEw3XH0xmH0S07y6KriJxWfsvVL2nrW1iQIhAIOsqnQ27R57JpioYZaXNWWEIIFrw5S23QcMEylFnPL7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42095},"main":"./dist/index.mjs","type":"module","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"}},"gitHead":"24e92c6254ccf3ebf0a31fecdee560339ed47e46","scripts":{"build":"pnpm vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^11.1.3","@intlify/core-base":"^11.1.3","@cimom/vben-core-composables":"^5.6.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.6.0_1749437529722_0.4724013017446125","host":"s3://npm-registry-packages-npm-production"}},"5.6.2":{"name":"@cimom/vben-locales","version":"5.6.2","author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","_id":"@cimom/vben-locales@5.6.2","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"fc0c6220e3eb63b2b0e2b5ffc03b27bebf150109","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.6.2.tgz","fileCount":11,"integrity":"sha512-FIMZyUWPF2Eh/HJNdNzIosgoLxGDYDUKE5UWUlGnlmiWDOZOk/ZIxcelo651HcRbQwVkd8LZSz6GDGe3TTeaiA==","signatures":[{"sig":"MEUCIQCk7Ww3Q7GVlxvmmTsGgay6veUHb5fzYhbEVk7egH91IwIgCAqot/k0zRxQO1Afj/ZePGvISI3nWDNJsKfvzR7HI4I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42240},"main":"./dist/index.mjs","type":"module","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"}},"gitHead":"24e92c6254ccf3ebf0a31fecdee560339ed47e46","private":false,"scripts":{"build":"pnpm vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^11.1.3","@intlify/core-base":"^11.1.3","@cimom/vben-core-composables":"^5.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.6.2_1749438616632_0.4317410039673202","host":"s3://npm-registry-packages-npm-production"}},"5.6.3":{"name":"@cimom/vben-locales","version":"5.6.3","author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","_id":"@cimom/vben-locales@5.6.3","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"5d43b9b2da6a8a68c45115ec1c8fa26a21f02ed7","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.6.3.tgz","fileCount":11,"integrity":"sha512-KiSNwY7TfRInub/CPu8pluKkoHoCjMtf34agvdwSgM7ZpSDk71cR/YIS39JbCNI/QVXRpdaJJzRKAN3gEeXzQA==","signatures":[{"sig":"MEUCIFOcfLzXZ8VYbZiJ1jEQgccPlojzpsjuok8KvHP44GVFAiEA/rjA5OWsLtHBVVFPL3uPXN8phqdFcBAhy7+7T9ULLRc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42235},"main":"./dist/index.mjs","type":"module","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"}},"gitHead":"24e92c6254ccf3ebf0a31fecdee560339ed47e46","private":false,"scripts":{"build":"pnpm vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^11.1.3","@intlify/core-base":"^11.1.3","@cimom/vben-core-composables":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.6.3_1749458082030_0.6120797466578725","host":"s3://npm-registry-packages-npm-production"}},"5.6.4":{"name":"@cimom/vben-locales","version":"5.6.4","author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","_id":"@cimom/vben-locales@5.6.4","maintainers":[{"name":"hdeqi2005","email":"57237184@qq.com"},{"name":"xxcazzy","email":"6983376@qq.com"}],"homepage":"https://github.com/vbenjs/vue-vben-admin","bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"dist":{"shasum":"5fbec95c6710593e1f6d54ee097f8fc8d552dcd5","tarball":"https://registry.npmjs.org/@cimom/vben-locales/-/vben-locales-5.6.4.tgz","fileCount":22,"integrity":"sha512-IqrIhbCnWPbo4gH4uMFogPlj8sUqhESCrlAn6bBVCDWDmUv9v/thUWX396uNxkmHqG7VMSCIoGNcL+0Z0/bdHw==","signatures":[{"sig":"MEYCIQDXV/4gxeQyolNrIfxQ6eOBxpZZB2eLz2/qNwd9TNmMKAIhAIY4R+88108NR6O2yF/EzRSr/uKx1Sgvr95EB5Dq2e+s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72488},"main":"./dist/index.mjs","type":"module","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"}},"gitHead":"4658e451554fb07b03bcd870c1694010f7362c31","private":false,"scripts":{"build":"pnpm vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"hdeqi2005","email":"57237184@qq.com"},"repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"_npmVersion":"10.5.1","description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.0.0","dependencies":{"vue":"^3.5.13","vue-i18n":"^11.1.3","@intlify/core-base":"^11.1.3","@cimom/vben-core-composables":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vben-locales_5.6.4_1749567281722_0.2707492541456089","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-05-28T07:38:54.882Z","modified":"2026-01-14T01:37:32.848Z","5.5.9":"2025-05-28T07:38:55.149Z","5.5.12":"2025-05-29T11:07:25.627Z","5.5.13":"2025-06-05T01:03:50.736Z","5.6.0":"2025-06-09T02:52:09.901Z","5.6.2":"2025-06-09T03:10:16.805Z","5.6.3":"2025-06-09T08:34:42.231Z","5.6.4":"2025-06-10T14:54:41.897Z"},"bugs":{"url":"https://github.com/vbenjs/vue-vben-admin/issues"},"author":{"name":"Andy Huang","email":"57237184@qq.com"},"license":"MIT","homepage":"https://github.com/vbenjs/vue-vben-admin","repository":{"url":"git+https://github.com/vbenjs/vue-vben-admin.git","type":"git","directory":"packages/locales"},"description":"国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。","maintainers":[{"email":"msj1370380114@gmail.com","name":"moushangjie"},{"email":"57237184@qq.com","name":"hdeqi2005"},{"email":"6983376@qq.com","name":"xxcazzy"}],"readme":"# @cimom/vben-locales\n\n国际化（i18n）工具包，提供了多语言支持功能，基于 vue-i18n 实现，支持动态加载语言包和语言切换。\n\n## 安装\n\n```bash\nnpm install @cimom/vben-locales\n```\n\n## 基本使用\n\n### 初始化国际化\n\n```ts\nimport { setupI18n } from '@cimom/vben-locales';\nimport type { App } from 'vue';\n\n// 在应用启动时初始化\nexport async function setupApp(app: App) {\n  // 初始化国际化\n  await setupI18n(app, {\n    locale: 'zh-CN',\n    fallbackLocale: 'en-US',\n    availableLocales: ['zh-CN', 'en-US'],\n  });\n\n  // ... 其他初始化\n}\n```\n\n### 使用翻译函数\n\n```ts\nimport { $t, $te } from '@cimom/vben-locales';\n\n// 翻译文本\nconst welcomeText = $t('common.welcome');\n\n// 检查翻译键是否存在\nif ($te('common.welcome')) {\n  console.log('欢迎文本已定义');\n}\n```\n\n### 在组件中使用\n\n```vue\n<template>\n  <div>\n    <h1>{{ $t('common.welcome') }}</h1>\n    <p>{{ $t('common.description') }}</p>\n\n    <select v-model=\"currentLocale\" @change=\"changeLocale\">\n      <option value=\"zh-CN\">简体中文</option>\n      <option value=\"en-US\">English</option>\n    </select>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { useI18n, loadLocaleMessages } from '@cimom/vben-locales';\n\nconst { locale } = useI18n();\nconst currentLocale = ref(locale.value);\n\nasync function changeLocale() {\n  // 加载语言包\n  await loadLocaleMessages(currentLocale.value);\n  // 设置当前语言\n  locale.value = currentLocale.value;\n}\n</script>\n```\n\n## API 参考\n\n### 核心函数\n\n| 函数名 | 参数 | 返回值 | 说明 |\n| --- | --- | --- | --- |\n| `setupI18n` | `app: App, options: LocaleSetupOptions` | `Promise<void>` | 初始化国际化配置 |\n| `loadLocaleMessages` | `lang: SupportedLanguagesType` | `Promise<void>` | 加载指定语言的语言包 |\n| `loadLocalesMap` | `modules: Record<string, () => Promise<unknown>>` | `Record<Locale, ImportLocaleFn>` | 加载语言模块映射 |\n| `loadLocalesMapFromDir` | `regexp: RegExp, modules: Record<string, () => Promise<unknown>>` | `Record<Locale, ImportLocaleFn>` | 从目录结构加载语言模块映射 |\n| `$t` | `key: string, ...args` | `string` | 全局翻译函数 |\n| `$te` | `key: string` | `boolean` | 检查翻译键是否存在 |\n\n### 类型定义\n\n```ts\n// 支持的语言类型\ntype SupportedLanguagesType = 'zh-CN' | 'en-US' | string;\n\n// 语言包导入函数\ntype ImportLocaleFn = () => Promise<{ default: Record<string, any> }>;\n\n// 国际化设置选项\ninterface LocaleSetupOptions {\n  // 当前语言\n  locale: SupportedLanguagesType;\n  // 备用语言\n  fallbackLocale?: SupportedLanguagesType;\n  // 可用语言列表\n  availableLocales?: SupportedLanguagesType[];\n  // 语言包加载函数\n  loadLocale?: LoadMessageFn;\n}\n```\n\n## 目录结构\n\n语言包应按照以下目录结构组织：\n\n```\nsrc/\n  langs/\n    zh-CN/\n      common.json\n      login.json\n      dashboard.json\n      ...\n    en-US/\n      common.json\n      login.json\n      dashboard.json\n      ...\n```\n\n每个语言包文件应该是一个 JSON 文件，包含相应模块的翻译键值对：\n\n```json\n// zh-CN/common.json\n{\n  \"welcome\": \"欢迎使用\",\n  \"description\": \"这是一个示例描述\",\n  \"buttons\": {\n    \"submit\": \"提交\",\n    \"cancel\": \"取消\",\n    \"confirm\": \"确认\"\n  }\n}\n```\n\n```json\n// en-US/common.json\n{\n  \"welcome\": \"Welcome\",\n  \"description\": \"This is a sample description\",\n  \"buttons\": {\n    \"submit\": \"Submit\",\n    \"cancel\": \"Cancel\",\n    \"confirm\": \"Confirm\"\n  }\n}\n```\n\n## 高级用法\n\n### 动态加载语言包\n\n```ts\nimport { loadLocaleMessages } from '@cimom/vben-locales';\n\n// 异步加载语言包\nasync function loadLanguage(lang: string) {\n  try {\n    await loadLocaleMessages(lang);\n    console.log(`语言 ${lang} 加载成功`);\n  } catch (error) {\n    console.error(`加载语言 ${lang} 失败:`, error);\n  }\n}\n```\n\n### 自定义语言包加载器\n\n```ts\nimport { setupI18n } from '@cimom/vben-locales';\nimport type { App } from 'vue';\n\n// 自定义语言包加载函数\nasync function customLoadLocale(lang: string) {\n  // 从自定义API加载语言包\n  const response = await fetch(`/api/locales/${lang}`);\n  const messages = await response.json();\n  return messages;\n}\n\n// 在应用启动时初始化\nexport async function setupApp(app: App) {\n  // 初始化国际化，使用自定义加载器\n  await setupI18n(app, {\n    locale: 'zh-CN',\n    fallbackLocale: 'en-US',\n    availableLocales: ['zh-CN', 'en-US'],\n    loadLocale: customLoadLocale,\n  });\n}\n```\n\n### 使用组合式 API\n\n```vue\n<template>\n  <div>\n    <h1>{{ t('common.welcome') }}</h1>\n    <p>{{ t('common.description') }}</p>\n\n    <div>\n      <button\n        v-for=\"lang in availableLocales\"\n        :key=\"lang\"\n        @click=\"changeLocale(lang)\"\n        :class=\"{ active: locale === lang }\"\n      >\n        {{ lang === 'zh-CN' ? '中文' : 'English' }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n, loadLocaleMessages } from '@cimom/vben-locales';\n\nconst { t, locale, availableLocales } = useI18n();\n\nasync function changeLocale(lang: string) {\n  // 加载语言包\n  await loadLocaleMessages(lang);\n  // 设置当前语言\n  locale.value = lang;\n}\n</script>\n```\n\n### 处理日期和数字格式化\n\n```vue\n<template>\n  <div>\n    <p>{{ t('common.currentDate', { date: d(new Date()) }) }}</p>\n    <p>{{ t('common.price', { price: n(1234.56) }) }}</p>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from '@cimom/vben-locales';\n\nconst { t, d, n } = useI18n();\n</script>\n```\n\n## 示例\n\n### 语言切换组件\n\n```vue\n<template>\n  <div class=\"language-switcher\">\n    <button\n      v-for=\"lang in availableLocales\"\n      :key=\"lang\"\n      @click=\"changeLocale(lang)\"\n      :class=\"{ active: currentLocale === lang }\"\n      class=\"lang-button\"\n    >\n      <span v-if=\"lang === 'zh-CN'\">🇨🇳 中文</span>\n      <span v-else-if=\"lang === 'en-US'\">🇺🇸 English</span>\n      <span v-else>{{ lang }}</span>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { useI18n, loadLocaleMessages } from '@cimom/vben-locales';\n\nconst { locale, availableLocales } = useI18n();\nconst currentLocale = ref(locale.value);\n\nasync function changeLocale(lang: string) {\n  try {\n    // 加载语言包\n    await loadLocaleMessages(lang);\n    // 设置当前语言\n    locale.value = lang;\n    currentLocale.value = lang;\n  } catch (error) {\n    console.error(`切换语言失败:`, error);\n  }\n}\n</script>\n\n<style scoped>\n.language-switcher {\n  display: flex;\n  gap: 8px;\n}\n\n.lang-button {\n  padding: 6px 12px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  background: white;\n  cursor: pointer;\n  transition: all 0.2s;\n}\n\n.lang-button.active {\n  background: #1677ff;\n  color: white;\n  border-color: #1677ff;\n}\n</style>\n```\n\n### 国际化表单验证\n\n```vue\n<template>\n  <form @submit.prevent=\"submitForm\">\n    <div class=\"form-item\">\n      <label>{{ t('form.username') }}</label>\n      <input v-model=\"form.username\" type=\"text\" />\n      <div v-if=\"errors.username\" class=\"error\">\n        {{ t(`validation.${errors.username}`) }}\n      </div>\n    </div>\n\n    <div class=\"form-item\">\n      <label>{{ t('form.email') }}</label>\n      <input v-model=\"form.email\" type=\"email\" />\n      <div v-if=\"errors.email\" class=\"error\">\n        {{ t(`validation.${errors.email}`) }}\n      </div>\n    </div>\n\n    <button type=\"submit\">{{ t('form.submit') }}</button>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue';\nimport { useI18n } from '@cimom/vben-locales';\n\nconst { t } = useI18n();\n\nconst form = reactive({\n  username: '',\n  email: '',\n});\n\nconst errors = reactive({\n  username: '',\n  email: '',\n});\n\nfunction validateForm() {\n  let isValid = true;\n\n  // 验证用户名\n  if (!form.username) {\n    errors.username = 'required';\n    isValid = false;\n  } else if (form.username.length < 3) {\n    errors.username = 'minLength';\n    isValid = false;\n  } else {\n    errors.username = '';\n  }\n\n  // 验证邮箱\n  if (!form.email) {\n    errors.email = 'required';\n    isValid = false;\n  } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(form.email)) {\n    errors.email = 'invalidEmail';\n    isValid = false;\n  } else {\n    errors.email = '';\n  }\n\n  return isValid;\n}\n\nfunction submitForm() {\n  if (validateForm()) {\n    console.log('表单提交:', form);\n    // 提交表单逻辑...\n  }\n}\n</script>\n\n<style scoped>\n.form-item {\n  margin-bottom: 16px;\n}\n\nlabel {\n  display: block;\n  margin-bottom: 4px;\n}\n\ninput {\n  width: 100%;\n  padding: 8px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n}\n\n.error {\n  color: red;\n  font-size: 12px;\n  margin-top: 4px;\n}\n\nbutton {\n  padding: 8px 16px;\n  background: #1677ff;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n}\n</style>\n```\n\n语言包示例：\n\n```json\n// zh-CN/form.json\n{\n  \"username\": \"用户名\",\n  \"email\": \"电子邮箱\",\n  \"submit\": \"提交\"\n}\n\n// zh-CN/validation.json\n{\n  \"required\": \"此字段为必填项\",\n  \"minLength\": \"长度不能少于3个字符\",\n  \"invalidEmail\": \"请输入有效的电子邮箱地址\"\n}\n\n// en-US/form.json\n{\n  \"username\": \"Username\",\n  \"email\": \"Email\",\n  \"submit\": \"Submit\"\n}\n\n// en-US/validation.json\n{\n  \"required\": \"This field is required\",\n  \"minLength\": \"Length must be at least 3 characters\",\n  \"invalidEmail\": \"Please enter a valid email address\"\n}\n```\n","readmeFilename":"README.md"}