2
0
mirror of https://github.com/tenrok/vue-select.git synced 2026-06-04 06:32:23 +03:00

add docs, update API

This commit is contained in:
Jeff Sagal
2021-08-01 19:37:31 -07:00
parent c54c398c56
commit 5957a4ef1a
13 changed files with 188 additions and 66 deletions
@@ -12,5 +12,3 @@ export default {
}),
}
</script>
<style scoped></style>
@@ -0,0 +1,18 @@
<template>
<v-select
:locale="locale"
:options="['un', 'deux', 'trois', 'quatre']"
></v-select>
</template>
<script>
import { locale as french } from 'vue-select/locales/fr.js'
export default {
computed: {
locale() {
return () => french
},
},
}
</script>
@@ -0,0 +1,16 @@
<template>
<v-select :locale="locale" :option="['one', 'two', 'three']" />
</template>
<script>
export default {
computed: {
locale() {
return (text) => ({
...text,
noOptions: { text: 'No Options found!!' },
})
},
},
}
</script>
@@ -0,0 +1,17 @@
<template>
<SpanishSelect :options="['uno', 'dos', 'tres', 'cuatro']" />
</template>
<script>
import SpanishSelect from 'vue-select'
import { locale as spanish } from 'vue-select/locales/es.js'
SpanishSelect.props.locale = {
type: Function,
default: () => spanish,
}
export default {
components: { SpanishSelect },
}
</script>
+4
View File
@@ -2,6 +2,7 @@ const { description } = require('./config/meta')
const head = require('./config/head')
const plugins = require('./config/plugins')
const themeConfig = require('./config/themeConfig')
const { resolve } = require('path')
module.exports = {
title: 'Vue Select',
@@ -9,4 +10,7 @@ module.exports = {
head,
plugins,
themeConfig,
alias: {
'vue-select': resolve(__dirname, '../../src'),
},
}
+1 -1
View File
@@ -37,7 +37,7 @@ module.exports = {
collapsable: false,
children: [
['guide/accessibility', 'WAI-ARIA Spec'],
['guide/localization', 'Localization'],
['guide/localization', 'Localization / i18n'],
],
},
{
+1 -1
View File
@@ -1,4 +1,4 @@
import vSelect from '../../src/components/Select'
import vSelect from 'vue-select/components/Select'
export default ({ Vue, options, router, siteData }) => {
Vue.component('v-select', vSelect)
+68 -35
View File
@@ -1,45 +1,78 @@
# Translations <Badge text="v3.13.0+" />
There are a number of strings used within the component that can all be translated. Out of the box,
Vue Select has translations for the following languages/locales that can be found
in [`src/locales`](https://github.com/sagalbot/vue-select/tree/master/src/locales):
- [English (default)](https://github.com/sagalbot/vue-select/tree/master/src/locales/en.js)
- [French](https://github.com/sagalbot/vue-select/tree/master/src/locales/fr.js)
- [Spanish](https://github.com/sagalbot/vue-select/tree/master/src/locales/es.js)
Translations can be set on for each component instance, or globally for all instances in your app.
Both methods will use the `locale` prop to determine the text to be used throughout the component.
**Locale Prop**
The `locale` prop accepts a function and should return an object of translated strings. The function
receives the default english translations for the component. This allows you to override the whole
object, or change just the values you need. The structure of the returned `locale` object is
described below.
**Locale Object**
The object returned from the locale prop requires specific keys to be set. Below is an example from
the english locale that ships with Vue Select:
<<< @/../src/locales/en.js
# Examples
---
## Translate a Single Instance
Translating a single instance of Vue Select can be accomplished by setting the `locale` function to
return an object with the translations you need. In the example below, we use the french `locale`
object that ships with Vue Select.
<TranslationFrench />
<<< @/.vuepress/components/TranslationFrench.vue
**Modifying Specific Text**
You can also use the `locale` prop to override just the text that you'd like to change. In this
example, the text in the `no-options` slot is updated to say 'No Options found!!'.
<TranslationSingleKey />
<<< @/.vuepress/components/TranslationSingleKey.vue
## Translate all Instances
If you'd like to translate the text for **all** Vue Select instances in your app, you can override
the default prop when registering the component. In the example below, all instances of Vue Select
will be translated to Spanish.
<TranslationSpanish />
<<< @/.vuepress/components/TranslationSpanish.vue
## Right to Left
Vue Select supports RTL using the standard HTML API using the `dir` prop.
```html
```vue
<v-select dir="rtl"></v-select>
```
The `dir` prop accepts the same values as the [HTML spec](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir):
The `dir` prop accepts the same values as
the [HTML spec](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir):
- `rtl`
- `ltr`
- `auto`
- `rtl`
- `ltr`
- `auto`
## Component Text
## Contributing Languages
All of the text within the component has been wrapped within [slots](https://vuejs.org/v2/guide/components.html#Content-Distribution-with-Slots) and can be replaced in your app.
### Loading Spinner
*Slot Definition:*
```html
<slot name="spinner">
<div class="spinner" v-show="mutableLoading">Loading...</div>
</slot>
```
*Implementation:*
```html
<v-select>
<i slot="spinner" class="icon icon-spinner"></i>
</v-select>
```
### No Options Text
*Slot Definition:*
```html
<slot name="no-options">Sorry, no matching options.</slot>
```
*Implementation:*
```html
<v-select>
<div slot="no-options">No Options Here!</div>
</v-select>
```
For a full list of component slots, view the [slots API docs](../api/slots.md).
If you'd like to see Vue Select translated to a new language, submit a PR with a new
`locale` file in the `src/locales` folder. The file name should match
the [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for the language, and
export a `locale` object.
+2 -2
View File
@@ -64,8 +64,8 @@
:disabled="disabled"
type="button"
class="vs__clear"
title="Clear Selected"
aria-label="Clear Selected"
:title="i18n.clearButton.title"
:aria-label="i18n.clearButton.ariaLabel"
@click="clearSelection"
>
<component :is="childComponents.Deselect" />
+19
View File
@@ -0,0 +1,19 @@
export const locale = {
spinner: {
text: 'Loading...',
},
noOptions: {
text: 'Sorry, no matching options.',
},
search: {
ariaLabel: 'Search for options',
},
deselectButton: {
ariaLabel: (label) => `Deselect ${label}`,
title: (label) => `Deselect ${label}`,
},
clearButton: {
ariaLabel: 'Clear Selection',
title: 'Clear Selection',
},
}
+19
View File
@@ -0,0 +1,19 @@
export const locale = {
spinner: {
text: 'Cargando...',
},
noOptions: {
text: 'Lo sentimos, no hay opciones que coincidan.',
},
search: {
ariaLabel: 'Buscar opciones',
},
deselectButton: {
ariaLabel: (label) => `Deseleccionar ${label}`,
title: (label) => `Deseleccionar ${label}`,
},
clearButton: {
ariaLabel: 'Eliminar selección',
title: 'Eliminar selección',
},
}
+19
View File
@@ -0,0 +1,19 @@
export const locale = {
spinner: {
text: 'Chargement...',
},
noOptions: {
text: 'Désolé, aucune option correspondante.',
},
search: {
ariaLabel: 'Rechercher des options',
},
deselectButton: {
ariaLabel: (label) => `Désélectionner ${label}`,
title: (label) => `Désélectionner ${label}`,
},
clearButton: {
ariaLabel: 'Effacer la sélection',
title: 'Effacer la sélection',
},
}
+4 -25
View File
@@ -1,25 +1,4 @@
const deselectLabel = (label) => `Deselect ${label}`
export const text = {
spinner: {
text: 'Loading...',
},
noOptions: {
text: 'Sorry, no matching options.',
},
search: {
ariaLabel: 'Search for options',
},
selectedOption: {},
deselectButton: {
ariaLabel: deselectLabel,
title: deselectLabel,
},
clearButton: {
ariaLabel: 'Clear Selection',
title: 'Clear Selection',
},
}
import { locale as english } from '../locales/en.js'
/**
* @this VueSelect
@@ -27,18 +6,18 @@ export const text = {
*/
export default {
props: {
text: {
locale: {
type: Function,
/**
* @param text {Object}
* @return {*}
* @return {Object}
*/
default: (text) => text,
},
},
computed: {
i18n() {
return this.text(text)
return this.locale(english)
},
},
}