Skip to content

Commit 6d6446e

Browse files
committed
feat: support automatic i18n detection for ConfigProvider
1 parent 4bfbc1d commit 6d6446e

3 files changed

Lines changed: 41 additions & 15 deletions

File tree

.changeset/warm-months-hide.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@modelscope-studio/antd': patch
3+
'modelscope_studio': patch
4+
---
5+
6+
feat: support automatic i18n detection for ConfigProvider

backend/modelscope_studio/utils/dev/component.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ def __init__(
2929
elem_id: Union[str, None] = None,
3030
elem_classes: Union[List[str], str, None] = None,
3131
elem_style: Union[dict, None] = None,
32-
render: bool = True):
32+
render: bool = True,
33+
**kwargs):
3334
super().__init__(visible=visible,
3435
elem_id=elem_id,
3536
elem_classes=elem_classes,
36-
render=render)
37+
render=render,
38+
**kwargs)
3739
AppContext.assert_app()
3840
self.as_item = as_item
3941
if self.parent:
@@ -68,7 +70,8 @@ def __init__(
6870
inputs: Union[Component, List[Component], Set[Component],
6971
None] = None,
7072
load_fn: Union[Callable, None] = None,
71-
render: bool = True):
73+
render: bool = True,
74+
**kwargs):
7275
super().__init__(visible=visible,
7376
value=value,
7477
elem_id=elem_id,
@@ -77,7 +80,8 @@ def __init__(
7780
every=every,
7881
inputs=inputs,
7982
load_fn=load_fn,
80-
render=render)
83+
render=render,
84+
**kwargs)
8185
AppContext.assert_app()
8286

8387
if self.parent:
@@ -130,7 +134,8 @@ def __init__(
130134
inputs: Union[Component, List[Component], Set[Component],
131135
None] = None,
132136
load_fn: Union[Callable, None] = None,
133-
render: bool = True):
137+
render: bool = True,
138+
**kwargs):
134139
super().__init__(
135140
visible=visible,
136141
value=value,
@@ -141,7 +146,8 @@ def __init__(
141146
inputs=inputs,
142147
load_fn=load_fn,
143148
# disable render twice
144-
render=False)
149+
render=False,
150+
**kwargs)
145151
BlockContext.__init__(self,
146152
visible=visible,
147153
elem_id=elem_id,

frontend/antd/config-provider/config-provider.tsx

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,23 @@ import { ConfigProvider as AConfigProvider, type GetProps, theme } from 'antd';
99
import type { Locale } from 'antd/es/locale';
1010
import dayjs from 'dayjs';
1111
import { produce } from 'immer';
12+
import { getLocaleFromNavigator } from 'svelte-i18n';
1213

1314
import { getDefaultLocale, locales } from './locales';
1415

16+
function formatLocale(locale: string | null) {
17+
if (!locale) {
18+
return 'en_US';
19+
}
20+
21+
const parts = locale.replace('-', '_').split('_');
22+
23+
if (parts.length === 2) {
24+
return `${parts[0].toLowerCase()}_${parts[1].toUpperCase()}`;
25+
}
26+
return 'en_US';
27+
}
28+
1529
const combinePropsAndSlots = (
1630
props: Record<string, any>,
1731
slots: Record<string, HTMLElement>
@@ -61,7 +75,7 @@ export const ConfigProvider = sveltify<
6175
id,
6276
className,
6377
style,
64-
locale: localeProp = 'en_US',
78+
locale: localeProp = formatLocale(getLocaleFromNavigator()),
6579
getTargetContainer,
6680
getPopupContainer,
6781
renderEmpty,
@@ -82,14 +96,14 @@ export const ConfigProvider = sveltify<
8296
const getTargetContainerFunction = useFunction(getTargetContainer);
8397
const renderEmptyFunction = useFunction(renderEmpty);
8498
useEffect(() => {
85-
if (localeProp && locales[localeProp]) {
86-
locales[localeProp]().then(
87-
({ antd: antdLocale, dayjs: dayjsLocale }) => {
88-
setLocale(antdLocale);
89-
dayjs.locale(dayjsLocale);
90-
}
91-
);
92-
}
99+
const getLocaleConfig =
100+
localeProp && locales[localeProp]
101+
? locales[localeProp]
102+
: locales['en_US'];
103+
getLocaleConfig().then(({ antd: antdLocale, dayjs: dayjsLocale }) => {
104+
setLocale(antdLocale);
105+
dayjs.locale(dayjsLocale);
106+
});
93107
}, [localeProp]);
94108
const ProviderComponent = component || AConfigProvider;
95109
return (

0 commit comments

Comments
 (0)