Files
ragflow/web/src/constants/setting.ts
Jimmy Ben Klieve 1a4dee4313 refactor(ui): unify top level pages structure, use standard language codes and time zones (#13573)
### What problem does this PR solve?

- Unify top level pages structure
- Standardize locale language codes (BCP 47) and time zones (IANA tz)


> **Note:** 
> Newly created user info brings non-standard default values `timezone:
"UTC+8\tAsia/Shanghai"` and `language: "English"`.


### Type of change

- [x] Refactoring
2026-03-12 21:01:09 +08:00

61 lines
1.5 KiB
TypeScript

export const UserSettingBaseKey = 'user-setting';
export enum UserSettingRouteKey {
Profile = 'profile',
Password = 'password',
Model = 'model',
System = 'system',
Api = 'api',
Team = 'team',
MCP = 'mcp',
Logout = 'logout',
}
export const ProfileSettingBaseKey = 'profile-setting';
export enum ProfileSettingRouteKey {
Profile = 'profile',
Plan = 'plan',
Model = 'model',
System = 'system',
Api = 'api',
Team = 'team',
Prompt = 'prompt',
Chunk = 'chunk',
Logout = 'logout',
}
export const TimezoneList = Object.freeze(
Intl.supportedValuesOf('timeZone')
.map((tz) => {
const dtf = new Intl.DateTimeFormat('en-US', {
hourCycle: 'h24',
timeZone: tz,
timeZoneName: 'longOffset',
});
const offsetString = dtf.formatToParts(new Date()).at(-1)!.value;
const match = /^GMT(?<sign>\+|-)(?<hours>\d{2}):(?<minutes>\d{2})$/i.exec(
offsetString,
);
const hours = match?.groups?.hours ?? '00';
const minutes = match?.groups?.minutes ?? '00';
const sign = match?.groups?.sign;
return Object.freeze({
name: `${offsetString} ${tz}`,
id: tz,
offset:
(sign === '-' ? -1 : 1) * (Number(hours) * 60 + Number(minutes)),
offsetString,
});
})
.sort((a, b) => a.offset - b.offset),
);
const navigatorTz = new Intl.DateTimeFormat().resolvedOptions().timeZone;
export const DEFAULT_TIMEZONE = TimezoneList.find(
(tz) => tz.name === navigatorTz,
)!;