Слияние кода завершено, страница обновится автоматически
import { action, observable, runInAction } from 'mobx';
import moment from 'moment';
import defaultTo from 'lodash/defaultTo';
import { Lang } from './enum';
import defaultLocale, { Locale } from './locale';
import defaultSupports, { Supports } from './supports';
import { normalizeLanguage } from '../utils';
import { mobxGet } from '../mobx-helper';
function setMomentLocale(locale: Locale) {
moment.locale(normalizeLanguage(locale ? locale.lang : defaultLocale.lang));
}
export class LocaleContext {
@observable locale: Locale;
// 数字格式化使用的国际化语言编码, 未设置时使用 locale.lang
@observable numberFormatLanguage: Lang;
@observable supports: Supports;
constructor() {
runInAction(() => {
this.locale = defaultLocale;
this.supports = defaultSupports;
});
}
@action
setLocale(locale: Locale) {
setMomentLocale(locale);
this.locale = locale;
}
@action
setNumberFormatLanguage(numberFormatLanguage: Lang) {
this.numberFormatLanguage = numberFormatLanguage;
}
@action
setSupports(supports: Supports) {
this.supports = supports;
}
getCmp(component: string): object | undefined {
return mobxGet(this.locale, component);
}
get<L extends Locale, T extends keyof Omit<L, 'lang'>>(component: T, key: keyof L[T], defaults?: L): string {
const componentString = String(component);
const cmp: object | undefined = mobxGet(this.locale, componentString) || (defaults && mobxGet(defaults, componentString));
if (key) {
return defaultTo(cmp && mobxGet(cmp, String(key)), `${componentString}.${key}`);
}
return componentString;
}
}
export default new LocaleContext();
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )