sepia-search-motore-di-rice.../client/src/components/InterfaceLanguageDropdown.vue

129 lines
2.6 KiB
Vue

<template>
<div class="interface-language-dropdown">
<img
:title="imgTitle"
class="interface-language"
src="/img/interface-languages.svg"
alt="Change interface language"
@click="toggleShow()"
>
<div
v-if="showMenu"
class="menu"
>
<a
v-for="(lang, locale) in availableLanguages"
:key="locale"
:href="buildLanguageRoute(locale)"
class="menu-item"
>
{{ lang }}
</a>
<hr>
<a
class="menu-item add-your-language"
target="_blank"
href="https://weblate.framasoft.org/projects/peertube-search-index/client/"
>
Translate
</a>
</div>
</div>
</template>
<script lang="ts">
import { useGettext } from 'vue3-gettext'
import { defineComponent } from 'vue'
export default defineComponent({
data () {
return {
showMenu: false
}
},
computed: {
imgTitle () {
return this.$gettext('Change interface language')
},
availableLanguages (): { [id: string]: string } {
const { available } = useGettext()
return available
}
},
methods: {
toggleShow () {
this.showMenu = !this.showMenu;
},
buildLanguageRoute(locale: string | number) {
const paths = this.$route.fullPath.split('/')
if (paths.length > 0 && Object.prototype.hasOwnProperty.call(this.availableLanguages, paths[0])) {
return '/' + locale + '/' + paths.slice(1).join('/')
}
return '/' + locale + this.$route.fullPath
}
}
})
</script>
<style lang="scss">
@import '../scss/_variables';
.interface-language-dropdown {
img {
cursor: pointer;
opacity: .7;
}
.menu {
background-color: #fff;
background-clip: padding-box;
border: 1px solid rgba(0,0,0,.15);
border-radius: .25rem;
color: #212529;
cursor: pointer;
display: flex;
flex-direction: column;
padding: .5rem 0;
position: absolute;
text-align: left;
font-size: 0.875rem;
a {
text-decoration: none;
}
hr {
border: 0;
border-top: 1px solid $grey;
width: calc(100% - 20px);
margin: 10px;
}
.add-your-language {
font-weight: bold;
}
}
.menu-item {
color: #212529;
padding: .25rem 1.5rem;
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
.menu-item:hover {
background-color: #F4F6F6;
cursor: pointer;
}
}
</style>