UIKitProvider

最近更新时间:2025-09-12 18:14:52

我的收藏

介绍

UIKitProvider 是为整个应用提供主题、多语言支持的容器层。用于为容器内的所有组件提供颜色主题、国际化等全局状态管理,必须包裹在聊天组件的最外层。
主题管理:支持明暗主题切换和自定义主题色。
国际化支持:内置多语言支持,可扩展自定义语言包。

UIKitProvider 组件

Props 参数

参数
类型
默认值
描述
language
'zh-CN' | 'en-US'
'zh-CN'
初始语言
theme
'light' | 'dark'
'light'
初始主题颜色
languageResources
LanguageResource[]
[]
自定义语言词条
languageResources 定义:
interface LanguageResource {
lng: string;
translation: Record<string, any>;
}

使用示例:

<template>
<UIKitProvider language="zh-CN" theme="light">
<YourCode />
</UIKitProvider>
</template>

<script setup lang="ts">
import YourCode from './YourCode.vue';
</script>

useUIKit Hook

useUIKit 是一个获取当前主题、语言等信息的 Hook 函数,建议在 UIKitProvider 内部使用。

返回值

字段
类型
描述
language
string
当前语言
t
i18n['t']
国际化翻译函数
i18n
i18n
i18next 实例
theme
ThemeType
当前主题
setTheme
(theme: 'light' | 'dark') => void
设置主题方法

使用示例

最简单的使用方式,为应用提供基础的主题和语言支持:
<script>
import { UIKitProvider, useUIKit } from '@tencentcloud/chat-uikit-vue3';

const { language, theme, setTheme } = useUIKit();
</script>

<template>
<UIKitProvider theme="light" language="zh-CN">
<div>
current language: {{ language }}
current theme: {{ theme }}
</div>
<button @click="() => setTheme("dark")"> 切换主题 </button>
</UIKitProvider>
</template>

修改语言词条/新增语言

下面的示例代码展示如何使用多语言功能:
<script lang="ts" setup>
import { UIKitProvider, useUIKit } from '@tencentcloud/chat-uikit-vue3';
import YourApp from './YourApp.vue';

const customLanguageResources = [
// 替换现有词条
{
lng: 'zh-CN',
translation: {
MessageInput: {
send: '我要发送', // 默认是"发送"
},
},
},
// 新增一种语言
{
lng: 'fr',
translation: {
MessageInput: {
send: 'Je veux envoyer',
},
},
},
];
</script>

<template>
<UIKitProvider language="fr" theme="light" :languageResources="customLanguageResources">
<YourApp />
</UIKitProvider>
</template>

实践案例

案例1:主题颜色的持久化

<template>
<UIKitProvider :theme="theme">
<YourApp />
</UIKitProvider>
</template>

<script setup lang="ts">
import { ref, watch } from 'vue';
import { UIKitProvider } from 'uikit-component-vue3';
import YourApp from './YourApp.vue';

// 从 localStorage 初始化主题
const theme = ref<'light' | 'dark'>(() => {
return (localStorage.getItem('theme') as 'light' | 'dark') || 'light';
});

// 监听主题变化并持久化
watch(theme, (newTheme) => {
localStorage.setItem('theme', newTheme);
}, { immediate: true });
</script>

案例2:语言检测与持久化

<template>
<UIKitProvider
:language="language"
:language-resources="customResources"
>
<YourApp />
</UIKitProvider>
</template>

<script setup lang="ts">
import { ref, watch } from 'vue';
import { UIKitProvider } from '@tencentcloud/chat-uikit-vue3';
import YourApp from './YourApp.vue';

type SupportedLanguage = 'en-US' | 'zh-CN';

// 智能语言检测函数
const detectLanguage = (): SupportedLanguage => {
// 1. 优先使用保存的语言设置
const saved = localStorage.getItem('language') as SupportedLanguage;
if (saved) return saved;
// 2. 自动检测浏览器语言
const browserLang = navigator.language;
if (browserLang.startsWith('zh')) return 'zh-CN';
else return 'en-US';
// 3. 默认回退
return 'auto';
};

// 初始化语言
const language = ref<SupportedLanguage>(detectLanguage());

// 监听语言变化并持久化
watch(language, (newLang) => {
localStorage.setItem('language', newLang);
console.log(`语言已切换为: ${newLang}`);
}, { immediate: true });
</script>

相关文档

交流与反馈

如遇任何问题,可联系 官网售后 反馈,享有专业工程师的支持,解决您的难题。