<template>
|
<view>
|
<picker
|
range-key="label"
|
:range="langOptions"
|
:value="langIndex"
|
@change="handleLangChange"
|
>
|
<slot>
|
<view class="i-mdi-language" :style="langStyle" />
|
</slot>
|
</picker>
|
</view>
|
</template>
|
|
<script setup>
|
import { useI18n } from "vue-i18n";
|
|
const props = defineProps({
|
size: {
|
type: Number,
|
default: 40,
|
required: false,
|
},
|
});
|
const emit = defineEmits(["change"]);
|
const { locale, t } = useI18n();
|
const langStyle = {
|
fontSize: `${props.size}rpx`,
|
};
|
const langOptions = computed(() => {
|
return [
|
{ label: t("locale.en"), value: "en" },
|
{ label: t("locale.zh-hans"), value: "zh-Hans" },
|
];
|
});
|
const langIndex = computed(() => {
|
return langOptions.value.findIndex((item) => {
|
return item.value === locale.value;
|
});
|
});
|
|
function handleLangChange(event) {
|
const lang = langOptions.value[event.detail.value].value;
|
locale.value = lang;
|
uni.setLocale(lang);
|
emit("change", lang);
|
}
|
</script>
|
|
<style lang="scss" scoped></style>
|