mirror of
https://github.com/apache/superset.git
synced 2026-04-27 12:05:24 +00:00
89 lines
3.0 KiB
TypeScript
89 lines
3.0 KiB
TypeScript
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
import { extendedDayjs as dayjs } from '@superset-ui/core/utils/dates';
|
|
import { useEffect, useState } from 'react';
|
|
import { useSelector } from 'react-redux';
|
|
import { ExplorePageState } from 'src/explore/types';
|
|
import 'dayjs/locale/en';
|
|
import 'dayjs/locale/fr';
|
|
import 'dayjs/locale/es';
|
|
import 'dayjs/locale/it';
|
|
import 'dayjs/locale/zh-cn';
|
|
import 'dayjs/locale/ja';
|
|
import 'dayjs/locale/de';
|
|
import 'dayjs/locale/pt';
|
|
import 'dayjs/locale/pt-br';
|
|
import 'dayjs/locale/ru';
|
|
import 'dayjs/locale/ko';
|
|
import 'dayjs/locale/sk';
|
|
import 'dayjs/locale/sl';
|
|
import 'dayjs/locale/nl';
|
|
|
|
/* eslint-disable no-restricted-imports */
|
|
import { Locale } from 'antd/es/locale';
|
|
|
|
export const LOCALE_MAPPING = {
|
|
en: () => import('antd/locale/en_US'),
|
|
fr: () => import('antd/locale/fr_FR'),
|
|
es: () => import('antd/locale/es_ES'),
|
|
it: () => import('antd/locale/it_IT'),
|
|
zh: () => import('antd/locale/zh_CN'),
|
|
ja: () => import('antd/locale/ja_JP'),
|
|
de: () => import('antd/locale/de_DE'),
|
|
pt: () => import('antd/locale/pt_PT'),
|
|
pt_BR: () => import('antd/locale/pt_BR'),
|
|
ru: () => import('antd/locale/ru_RU'),
|
|
ko: () => import('antd/locale/ko_KR'),
|
|
sk: () => import('antd/locale/sk_SK'),
|
|
sl: () => import('antd/locale/sl_SI'),
|
|
nl: () => import('antd/locale/nl_NL'),
|
|
};
|
|
/* eslint-enable no-restricted-imports */
|
|
|
|
export const useLocale = (): Locale | undefined | null => {
|
|
const [datePickerLocale, setDatePickerLocale] = useState<
|
|
Locale | undefined | null
|
|
>(null);
|
|
|
|
// Retrieve the locale from Redux store
|
|
const localFromFlaskBabel = useSelector(
|
|
(state: ExplorePageState) => state?.common?.locale,
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (datePickerLocale === null) {
|
|
if (
|
|
localFromFlaskBabel &&
|
|
LOCALE_MAPPING[localFromFlaskBabel as keyof typeof LOCALE_MAPPING]
|
|
) {
|
|
LOCALE_MAPPING[localFromFlaskBabel as keyof typeof LOCALE_MAPPING]()
|
|
.then((locale: { default: Locale }) => {
|
|
setDatePickerLocale(locale.default);
|
|
dayjs.locale(localFromFlaskBabel);
|
|
})
|
|
.catch(() => setDatePickerLocale(undefined));
|
|
} else {
|
|
setDatePickerLocale(undefined);
|
|
}
|
|
}
|
|
}, [datePickerLocale, localFromFlaskBabel]);
|
|
|
|
return datePickerLocale;
|
|
};
|