v-i18n
v-i18n
是VueDir中的工具类指令之一。与市面上其他i18n
方案不同的是,v-i18n
通过指令的实行实现了国际化方案,几乎不需要额外的配置,开箱即用,省去78%
的繁琐步骤。
使用方法
两个步骤的简单配置:
- 只需要在修改内容的时候引入
useLanguage
钩子,它会向外暴露currentLanguage
和setLanguage
用于查看当前使用的语言和设置目标语言。 - 在全局,无论是组件还是,原始标签,你只需要打上
v-i18n="{ en: 'aaa', zh: '一一一', ...others }"
的指令内容。
vue
<script setup lang="ts">
import { useLanguage } from '@cp-vuedir/core'
const { currentLanguage, setLanguage } = useLanguage()
const toggleLanguage = () => {
setLanguage(currentLanguage.value === 'en' ? 'zh' : 'en') // 也可以是很多其他自定义的语言
}
</script>
<template>
<button @click="toggleLanguage">切换语言</button>
<p v-i18n="{ en: 'Hello', zh: '你好' }"></p>
<p v-i18n="{ en: 'Welcome', zh: '欢迎' }"></p>
<TestP />
</template>
配置多种语言
v-i18n
支持配置多种语言。
当前语言:en
查看代码
vue
<script setup lang="ts">
import { useLanguage } from '@cp-vuedir/core'
const { currentLanguage, setLanguage } = useLanguage()
</script>
<template>
<div class="book-container">
<h1 v-i18n="{ en: 'The Little Prince', zh: '小王子', fr: 'Le Petit Prince' }"></h1>
<p
class="author"
v-i18n="{
en: 'By Antoine de Saint-Exupéry',
zh: '作者:安托万·德·圣-埃克苏佩里',
fr: 'Par Antoine de Saint-Exupéry'
}"
></p>
<div class="book-content">
<p
v-i18n="{
en: 'Once upon a time, there was a little prince.',
zh: '从前,有一个小王子。',
fr: 'Il était une fois un petit prince.'
}"
></p>
<p
v-i18n="{
en: 'He lived on a planet that was barely any bigger than himself.',
zh: '他住在一个几乎和他一样大的星球上。',
fr: 'Il vivait sur une planète à peine plus grande que lui.'
}"
></p>
</div>
<div class="language-switcher">
<button @click="setLanguage('en')">English</button>
<button @click="setLanguage('zh')">中文</button>
<button @click="setLanguage('fr')">Français</button>
<span>当前语言:{{ currentLanguage }}</span>
</div>
</div>
</template>
<style scoped>
.book-container {
max-width: 600px;
margin: 50px auto;
padding: 20px;
background: #f9f5e7;
border: 2px solid #d4af37;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
font-family: 'Georgia', serif;
text-align: center;
color: #8b4513;
}
h1 {
font-size: 2rem;
}
.author {
font-style: italic;
}
.book-content {
margin-top: 20px;
text-align: left;
line-height: 1.6;
}
.language-switcher {
margin-top: 20px;
padding: 5px;
background-color: #b8860b;
}
button {
margin: 0 5px;
padding: 10px 20px;
background: #d4af37;
border: none;
border-radius: 5px;
color: white;
font-weight: bold;
cursor: pointer;
transition: background 0.3s;
}
button:hover {
background: #b8860b;
}
</style>