rayyy-vue-table-components 1.3.19 → 1.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ import { default as TitleTable } from './components/tables/TitleTable.vue';
8
8
  import { default as SearchBar } from './components/items/SearchBar.vue';
9
9
  export * from './types';
10
10
  export * from './utils/tableHelper';
11
- export { switchLanguage, getCurrentLocale, availableLocales, getLanguageName, initLanguageSwitcher, type LocaleCode } from './utils/languageSwitcher';
11
+ export { switchLanguage, getCurrentLocale, availableLocales, getLanguageName, initLanguageSwitcher, configureLanguageSwitcher, type LocaleCode, type LanguageConfig, type ExternalI18nHandler } from './utils/languageSwitcher';
12
12
  export { BaseTable, BaseBtn, BaseInput, BaseDialog, SortTable, TitleTable, SearchBar };
13
13
  export type { BaseTableProps, BaseTableEmits, BaseTableInstance, BaseBtnProps, BaseBtnEmits, BaseBtnInstance, BaseDialogProps, BaseDialogEmits, BaseDialogInstance, PluginOptions, VueTableComponentsPlugin, } from './types/components';
14
14
  export * from './components';
@@ -73,7 +73,7 @@ export declare const i18n: import('vue-i18n').I18n<{
73
73
  export declare const switchLanguage: (locale: "zh-TW" | "en-US") => void;
74
74
  export declare const getCurrentLocale: () => "zh-TW" | "en-US";
75
75
  export declare const availableLocales: {
76
- code: string;
77
- name: string;
76
+ value: string;
77
+ label: string;
78
78
  }[];
79
79
  export declare const initLocale: () => void;
@@ -2,15 +2,39 @@
2
2
  * 語言切換工具
3
3
  * 供外部專案使用的語言切換功能
4
4
  */
5
- export declare const availableLocales: readonly [{
6
- readonly code: "zh-TW";
7
- readonly name: "繁體中文";
5
+ declare const defaultLocales: readonly [{
6
+ readonly value: "zh-TW";
7
+ readonly label: "繁體中文";
8
8
  }, {
9
- readonly code: "en-US";
10
- readonly name: "English";
9
+ readonly value: "en-US";
10
+ readonly label: "English";
11
11
  }];
12
- export type LocaleCode = typeof availableLocales[number]['code'];
13
- export declare const switchLanguage: (locale: LocaleCode) => void;
14
- export declare const getCurrentLocale: () => LocaleCode;
15
- export declare const getLanguageName: (locale: LocaleCode) => string;
16
- export declare const initLanguageSwitcher: () => "zh-TW" | "en-US";
12
+ export type LocaleCode = typeof defaultLocales[number]['value'];
13
+ export interface ExternalI18nHandler {
14
+ switchLanguage: (locale: string) => void;
15
+ getCurrentLocale: () => string;
16
+ availableLocales: () => Array<{
17
+ value: string;
18
+ label: string;
19
+ }>;
20
+ getLanguageName?: (locale: string) => string;
21
+ }
22
+ export interface LanguageConfig {
23
+ locales: Array<{
24
+ value: string;
25
+ label: string;
26
+ }>;
27
+ defaultLocale: string;
28
+ storageKey?: string;
29
+ externalHandler?: ExternalI18nHandler;
30
+ }
31
+ export declare const availableLocales: () => {
32
+ value: string;
33
+ label: string;
34
+ }[];
35
+ export declare const configureLanguageSwitcher: (config: Partial<LanguageConfig>) => void;
36
+ export declare const switchLanguage: (locale: string) => void;
37
+ export declare const getCurrentLocale: () => string;
38
+ export declare const getLanguageName: (locale: string) => string;
39
+ export declare const initLanguageSwitcher: () => string;
40
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rayyy-vue-table-components",
3
- "version": "1.3.19",
3
+ "version": "1.3.21",
4
4
  "description": "Vue 3 + Element Plus 表格組件庫",
5
5
  "type": "module",
6
6
  "main": "./dist/index.umd.js",
@@ -12,8 +12,8 @@ const handleLanguageChange = (newLocale: "zh-TW" | "en-US") => {
12
12
 
13
13
  // 當前語言顯示名稱
14
14
  const currentLanguageName = computed(() => {
15
- const currentLocale = availableLocales.find(l => l.code === locale.value)
16
- return currentLocale?.name || '繁體中文'
15
+ const currentLocale = availableLocales.find(l => l.value === locale.value)
16
+ return currentLocale?.label || '繁體中文'
17
17
  })
18
18
  </script>
19
19
 
@@ -38,10 +38,10 @@ const currentLanguageName = computed(() => {
38
38
  <el-dropdown-menu>
39
39
  <el-dropdown-item
40
40
  v-for="item in availableLocales"
41
- :key="item.code"
42
- :command="item.code"
41
+ :key="item.value"
42
+ :command="item.value"
43
43
  >
44
- {{ item.name }}
44
+ {{ item.label }}
45
45
  </el-dropdown-item>
46
46
  </el-dropdown-menu>
47
47
  </template>
@@ -3,18 +3,71 @@
3
3
  * 供外部專案使用的語言切換功能
4
4
  */
5
5
 
6
- // 可用的語言列表
7
- export const availableLocales = [
8
- { code: 'zh-TW', name: '繁體中文' },
9
- { code: 'en-US', name: 'English' },
6
+ // 預設語言列表
7
+ const defaultLocales = [
8
+ { value: 'zh-TW', label: '繁體中文' },
9
+ { value: 'en-US', label: 'English' },
10
10
  ] as const
11
11
 
12
- export type LocaleCode = typeof availableLocales[number]['code']
12
+ export type LocaleCode = typeof defaultLocales[number]['value']
13
+
14
+ // 外部 i18n 切換函數接口
15
+ export interface ExternalI18nHandler {
16
+ switchLanguage: (locale: string) => void
17
+ getCurrentLocale: () => string
18
+ availableLocales: () => Array<{ value: string; label: string }>
19
+ getLanguageName?: (locale: string) => string
20
+ }
21
+
22
+ // 語言配置接口
23
+ export interface LanguageConfig {
24
+ locales: Array<{ value: string; label: string }>
25
+ defaultLocale: string
26
+ storageKey?: string
27
+ externalHandler?: ExternalI18nHandler
28
+ }
29
+
30
+ // 全域語言配置
31
+ let languageConfig: LanguageConfig = {
32
+ locales: [...defaultLocales],
33
+ defaultLocale: 'zh-TW',
34
+ storageKey: 'locale'
35
+ }
36
+
37
+ // 可用的語言列表(動態)
38
+ export const availableLocales = () => {
39
+ // 如果有外部處理器,使用外部處理器
40
+ if (languageConfig.externalHandler) {
41
+ return languageConfig.externalHandler.availableLocales()
42
+ }
43
+
44
+ return languageConfig.locales
45
+ }
46
+
47
+ // 配置語言切換器
48
+ export const configureLanguageSwitcher = (config: Partial<LanguageConfig>) => {
49
+ languageConfig = {
50
+ ...languageConfig,
51
+ ...config
52
+ }
53
+ }
13
54
 
14
55
  // 語言切換功能
15
- export const switchLanguage = (locale: LocaleCode) => {
56
+ export const switchLanguage = (locale: string) => {
57
+ // 如果有外部處理器,使用外部處理器
58
+ if (languageConfig.externalHandler) {
59
+ languageConfig.externalHandler.switchLanguage(locale)
60
+ return
61
+ }
62
+
63
+ // 檢查語言是否在配置中
64
+ if (!languageConfig.locales.some(l => l.value === locale)) {
65
+ console.warn(`Language ${locale} is not configured`)
66
+ return
67
+ }
68
+
16
69
  // 保存到 localStorage
17
- localStorage.setItem('locale', locale)
70
+ localStorage.setItem(languageConfig.storageKey!, locale)
18
71
 
19
72
  // 觸發自定義事件,讓外部專案監聽
20
73
  window.dispatchEvent(new CustomEvent('languageChanged', {
@@ -23,17 +76,27 @@ export const switchLanguage = (locale: LocaleCode) => {
23
76
  }
24
77
 
25
78
  // 獲取當前語言
26
- export const getCurrentLocale = (): LocaleCode => {
27
- const savedLocale = localStorage.getItem('locale') as LocaleCode
28
- return savedLocale && availableLocales.some(l => l.code === savedLocale)
79
+ export const getCurrentLocale = (): string => {
80
+ // 如果有外部處理器,使用外部處理器
81
+ if (languageConfig.externalHandler) {
82
+ return languageConfig.externalHandler.getCurrentLocale()
83
+ }
84
+
85
+ const savedLocale = localStorage.getItem(languageConfig.storageKey!)
86
+ return savedLocale && languageConfig.locales.some(l => l.value === savedLocale)
29
87
  ? savedLocale
30
- : 'zh-TW'
88
+ : languageConfig.defaultLocale
31
89
  }
32
90
 
33
91
  // 獲取語言顯示名稱
34
- export const getLanguageName = (locale: LocaleCode): string => {
35
- const language = availableLocales.find(l => l.code === locale)
36
- return language?.name || '繁體中文'
92
+ export const getLanguageName = (locale: string): string => {
93
+ // 如果有外部處理器且提供此功能
94
+ if (languageConfig.externalHandler?.getLanguageName) {
95
+ return languageConfig.externalHandler.getLanguageName(locale)
96
+ }
97
+
98
+ const language = languageConfig.locales.find(l => l.value === locale)
99
+ return language?.label || languageConfig.locales[0]?.label || 'Unknown'
37
100
  }
38
101
 
39
102
  // 初始化語言設定(供外部專案調用)