mirror of
https://github.com/element-plus/element-plus.git
synced 2024-12-27 03:01:14 +08:00
358 lines
10 KiB
Markdown
358 lines
10 KiB
Markdown
## Internacionalización
|
||
|
||
El idioma predeterminado de Element Plus es el inglés. Si se desea utilizar otro idioma, será necesario realizar alguna configuración de i18n. En su fichero de entrada:
|
||
|
||
The default locale of Element Plus is English. If you want to use another language, you'll need to do some i18n configuration. In your entry file:
|
||
|
||
:::warning
|
||
We have made breaking changes after **1.0.2-beta.59(included)**, please keep reading for more information,this documentation **does not apply to version before 1.0.2-beta.58(included)**
|
||
:::
|
||
|
||
### 1.0.2-beta.59(included):
|
||
|
||
After `1.0.2-beta.59(included)`, we reorganized the code, making sure i18n functionalities can be applied seamlessly for both full bundle & on demand usage.
|
||
|
||
#### 1. Via ConfigProvider
|
||
|
||
If your project is still using `Options API`, then we suggest you to use it this way, to reduce the mind burden. If you are using `Composition API` throughout your project, we still suggest you to use it this way since this allows you to write less code.
|
||
|
||
```html
|
||
<template>
|
||
<el-config-provider :locale="locale">
|
||
<App />
|
||
</el-config-provider>
|
||
</template>
|
||
|
||
<script>
|
||
import { ElConfigProvider } from 'element-plus'
|
||
|
||
import es from 'element-plus/lib/locale/lang/es'
|
||
|
||
defineComponent({
|
||
components: {
|
||
[ElConfigProvider.name]: ElConfigProvider,
|
||
},
|
||
data() {
|
||
return {
|
||
locale: es,
|
||
}
|
||
},
|
||
})
|
||
</script>
|
||
```
|
||
|
||
#### Useful links:
|
||
- [Supported languages](https://github.com/element-plus/element-plus/tree/dev/packages/locale/lang)
|
||
|
||
- [ConfigProvider Documentation](#/es/component/config-provider)
|
||
|
||
#### 2. Via Composable hook
|
||
Using this way is basically implementing a [ConfigProvider](https://element-plus.org/#/en-US/component/config-provider) on your own to inject configurations.
|
||
|
||
```ts
|
||
import { useLocale, useLocaleProps } from 'element-plus'
|
||
// Locale Wrapper entry
|
||
const Provider = defineComponent({
|
||
props: {
|
||
// If you want language switching feature, you need to add these props
|
||
// into your Provider
|
||
...useLocaleProps,
|
||
},
|
||
setup() {
|
||
// No parameters needed, but the props above is required
|
||
// ` { locale?: Language, i18n?: (...args: any[]) => string }`
|
||
useLocale()
|
||
}
|
||
})
|
||
|
||
|
||
createApp(
|
||
{
|
||
// ...
|
||
template: `
|
||
<provider :locale="locale" :i18n="i18n">
|
||
<App />
|
||
</provider>
|
||
`
|
||
}
|
||
)
|
||
|
||
```
|
||
|
||
### Set Day.js locale
|
||
|
||
Element Plus use date time locale (month name, first day of the week ...) from [Day.js](https://day.js.org/) directlly. And will set the global Day.js locale automaticatlly after the locale file is loaded.
|
||
|
||
```typescript
|
||
import locale from 'element-plus/lib/locale/lang/es'
|
||
import 'dayjs/locale/es'
|
||
|
||
// will auto set Day.js locale to 'es'
|
||
app.use(ElementPlus, { locale })
|
||
```
|
||
|
||
However, you can use another Day.js locale if needed.
|
||
|
||
```typescript
|
||
import 'dayjs/locale/fr'
|
||
dayjs.locale('fr')
|
||
```
|
||
|
||
El paquete de idioma inglés se importa por defecto, incluso si se esta usando otro idioma. Pero con `NormalModuleReplacementPlugin` proporcionado por el webpack puede reemplazar la localización predeterminada:
|
||
|
||
webpack.config.js
|
||
|
||
```typescript
|
||
{
|
||
plugins: [
|
||
new webpack.NormalModuleReplacementPlugin(
|
||
/element-plus[\/\\]lib[\/\\]locale[\/\\]lang[\/\\]en/,
|
||
'element-plus/lib/locale/lang/es',
|
||
),
|
||
]
|
||
}
|
||
```
|
||
|
||
### Compatible con `vue-i18n@9.x`
|
||
Need translation
|
||
|
||
If you need to check out [VueI18n documentation](https://vue-i18n-next.intlify.dev/guide/#html), please click this link to check it out.
|
||
|
||
```typescript
|
||
import { createApp } from 'vue'
|
||
import { createI18n } from 'vue-i18n'
|
||
import ElementPlus from 'element-plus'
|
||
import enLocale from 'element-plus/lib/locale/lang/en'
|
||
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
|
||
import App from './App.vue'
|
||
|
||
const messages = {
|
||
[enLocale.name]: {
|
||
// el property is critical, set this in order for ElementPlus translate strings correctly.
|
||
el: enLocale.el,
|
||
// Define your own dictionary with your own namespace, but DO NOT use the namespace `el`,
|
||
// Because that makes the ElementPlus internal translation invalid.
|
||
message: {
|
||
hello: 'hello world',
|
||
},
|
||
},
|
||
[zhLocale.name]: {
|
||
el: zhLocale.el,
|
||
// Define your own dictionary with your own namespace, but DO NOT use the namespace `el`,
|
||
// Because that makes the ElementPlus internal translation invalid.
|
||
message: {
|
||
hello: '你好,世界',
|
||
},
|
||
},
|
||
testLocale: {
|
||
el: {},
|
||
// No message translations, it will fallback to en lang, the definition of fallbackLocale is below 👇
|
||
},
|
||
}
|
||
|
||
const i18n = createI18n({
|
||
locale: zhLocale.name,
|
||
fallbackLocale: enLocale.name,
|
||
messages,
|
||
})
|
||
|
||
const app = createApp(App)
|
||
|
||
app.use(ElementPlus, {
|
||
i18n: i18n.global.t,
|
||
})
|
||
|
||
// Remember to use this plugin.
|
||
app.use(i18n)
|
||
```
|
||
|
||
### Compatible con otros plugins i18n
|
||
Es posible que Element Plus no sea compatible con otros plugins i18n que no sean vue-i18n, pero puede personalizar la forma en que Element Plus procesa i18n.
|
||
|
||
Need translation
|
||
|
||
:::tip
|
||
Once you set this method, the internal translation function will be invalid, only the customized translation method will be used, be sure that your custom translation method can translate format like `el.scope.subName`, other wise the internal translation string will be raw string.
|
||
:::
|
||
|
||
```typescript
|
||
import Vue from 'vue'
|
||
import ElementPlus from 'element-plus'
|
||
import enLocale from 'element-plus/lib/locale/lang/en'
|
||
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
|
||
|
||
// The is the signature of i18n method.
|
||
type i18n = (...args: any[]) => string
|
||
Vue.use(Element, {
|
||
i18n: function(path, options) {
|
||
// ...
|
||
},
|
||
// others.
|
||
})
|
||
```
|
||
### Personalización de i18n en componentes bajo petición
|
||
|
||
Need translation
|
||
|
||
If you need to know how to lazy loading translation strings, please check this out[Lazy loading](https://vue-i18n-next.intlify.dev/guide/advanced/lazy.html)
|
||
|
||
```typescript
|
||
import { createApp } from 'vue'
|
||
import { createI18n } from 'vue-i18n'
|
||
import ElementPlus from 'element-plus'
|
||
import enLocale from 'element-plus/lib/locale/lang/en'
|
||
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
|
||
import ElementLocale from 'element-plus/lib/locale'
|
||
import App from './App.vue'
|
||
|
||
const messages = {
|
||
[enLocale.name]: {
|
||
// el property is critical, set this in order for ElementPlus translate strings correctly.
|
||
el: enLocale.el,
|
||
// Define your own dictionary with your own namespace, but DO NOT use the namespace `el`,
|
||
// Because that makes the ElementPlus internal translation invalid.
|
||
message: {
|
||
hello: 'hello world',
|
||
},
|
||
},
|
||
[zhLocale.name]: {
|
||
el: zhLocale.el,
|
||
// Define your own dictionary with your own namespace, but DO NOT use the namespace `el`,
|
||
// Because that makes the ElementPlus internal translation invalid.
|
||
message: {
|
||
hello: '你好,世界',
|
||
},
|
||
},
|
||
testLocale: {
|
||
el: {},
|
||
// No message translations, it will fallback to en lang, the definition of fallbackLocale is below 👇
|
||
},
|
||
}
|
||
|
||
const i18n = createI18n({
|
||
locale: zhLocale.name,
|
||
fallbackLocale: enLocale.name,
|
||
messages,
|
||
})
|
||
|
||
ElementLocale.i18n(i18n.global.t)
|
||
|
||
const app = createApp(App)
|
||
app.use(i18n)
|
||
```
|
||
|
||
### Importar via CDN
|
||
|
||
```html
|
||
<script src="//unpkg.com/vue@next"></script>
|
||
<script src="//unpkg.com/element-plus/lib/index.full.js"></script>
|
||
<script src="//unpkg.com/element-plus/lib/umd/locale/es.js"></script>
|
||
<script src="//unpkg.com/dayjs/locale/es.js"></script>
|
||
|
||
<script>
|
||
ElementPlus.locale(ElementPlus.lang.es)
|
||
</script>
|
||
```
|
||
|
||
Compatible con `vue-i18n`
|
||
|
||
```html
|
||
<script src="//unpkg.com/vue@next"></script>
|
||
<script src="//unpkg.com/vue-i18n/dist/vue-i18n.js"></script>
|
||
<script src="//unpkg.com/element-plus/lib/index.full.js"></script>
|
||
<script src="//unpkg.com/element-plus/lib/umd/locale/zh-cn.js"></script>
|
||
<script src="//unpkg.com/element-plus/lib/umd/locale/en.js"></script>
|
||
|
||
<script>
|
||
// Need translation
|
||
const i18n = Vue18n.createI18n({
|
||
locale: ElementPlus.lang.zhCN.name,
|
||
fallbackLocale: ElementPlus.lang.en.name,
|
||
messages: {
|
||
[ElementPlus.lang.en.name]: {
|
||
// el property is critical, set this in order for ElementPlus translate strings correctly.
|
||
el: ElementPlus.lang.en.el,
|
||
// Define your own dictionary with your own namespace, but DO NOT use the namespace `el`,
|
||
// Because that makes the ElementPlus internal translation invalid.
|
||
message: {
|
||
hello: 'hello world',
|
||
},
|
||
},
|
||
[ElementPlus.lang.zhCN.name]: {
|
||
el: ElementPlus.lang.zhCN.el,
|
||
// Define your own dictionary with your own namespace, but DO NOT use the namespace `el`,
|
||
// Because that makes the ElementPlus internal translation invalid.
|
||
message: {
|
||
hello: '你好,世界',
|
||
},
|
||
},
|
||
testLocale: {
|
||
el: {},
|
||
// No message translations, it will fallback to en lang.
|
||
},
|
||
},
|
||
})
|
||
|
||
const app = Vue.createApp()
|
||
app.use(i18n)
|
||
</script>
|
||
```
|
||
|
||
Actualmente Element Plus está disponible en los siguientes idiomas:
|
||
|
||
<ul class="language-list">
|
||
<li>Simplified Chinese (zh-cn)</li>
|
||
<li>English (en)</li>
|
||
<li>German (de)</li>
|
||
<li>Portuguese (pt)</li>
|
||
<li>Spanish (es)</li>
|
||
<li>Danish (da)</li>
|
||
<li>French (fr)</li>
|
||
<li>Norwegian (nb-NO)</li>
|
||
<li>Traditional Chinese (zh-tw)</li>
|
||
<li>Italian (it)</li>
|
||
<li>Korean (ko)</li>
|
||
<li>Japanese (ja)</li>
|
||
<li>Dutch (nl)</li>
|
||
<li>Vietnamese (vi)</li>
|
||
<li>Russian (ru)</li>
|
||
<li>Turkish (tr)</li>
|
||
<li>Brazilian Portuguese (pt-br)</li>
|
||
<li>Farsi (fa)</li>
|
||
<li>Thai (th)</li>
|
||
<li>Indonesian (id)</li>
|
||
<li>Bulgarian (bg)</li>
|
||
<li>Polish (pl)</li>
|
||
<li>Finnish (fi)</li>
|
||
<li>Swedish (sv)</li>
|
||
<li>Greek (el)</li>
|
||
<li>Slovak (sk)</li>
|
||
<li>Catalunya (ca)</li>
|
||
<li>Czech (cs)</li>
|
||
<li>Ukrainian (uk)</li>
|
||
<li>Turkmen (tk)</li>
|
||
<li>Tamil (ta)</li>
|
||
<li>Latvian (lv)</li>
|
||
<li>Afrikaans (af)</li>
|
||
<li>Estonian (et)</li>
|
||
<li>Slovenian (sl)</li>
|
||
<li>Arabic (ar)</li>
|
||
<li>Hebrew (he)</li>
|
||
<li>Lithuanian (lt)</li>
|
||
<li>Mongolian (mn)</li>
|
||
<li>Kazakh (kk)</li>
|
||
<li>Hungarian (hu)</li>
|
||
<li>Romanian (ro)</li>
|
||
<li>Kurdish (ku)</li>
|
||
<li>Uighur (ug-cn)</li>
|
||
<li>Khmer (km)</li>
|
||
<li>Serbian (sr)</li>
|
||
<li>Basque (eu)</li>
|
||
<li>Kyrgyz (ky)</li>
|
||
<li>Armenian (hy-am)</li>
|
||
<li>Croatian (hr)</li>
|
||
<li>Esperanto (eo)</li>
|
||
</ul>
|
||
|
||
Si su idioma de destino no está incluido, puede contribuir: simplemente añada [aqui](https://github.com/element-plus/element-plus/tree/dev/packages/locale/lang) otra configuración de idioma y cree un pull request.
|