locale-utils.ts 1005 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import type { Locale } from 'date-fns/locale';
  2. import { enUS } from 'date-fns/locale/en-US';
  3. import { fr } from 'date-fns/locale/fr';
  4. import { ja } from 'date-fns/locale/ja';
  5. import { ko } from 'date-fns/locale/ko';
  6. import { zhCN } from 'date-fns/locale/zh-CN';
  7. const DATE_FNS_LOCALE_MAP: Record<string, Locale | undefined> = {
  8. en: enUS,
  9. 'en-US': enUS,
  10. en_US: enUS,
  11. ja: ja,
  12. 'ja-JP': ja,
  13. ja_JP: ja,
  14. fr: fr,
  15. 'fr-FR': fr,
  16. fr_FR: fr,
  17. ko: ko,
  18. 'ko-KR': ko,
  19. ko_KR: ko,
  20. zh: zhCN,
  21. 'zh-CN': zhCN,
  22. zh_CN: zhCN,
  23. };
  24. /**
  25. * Gets the corresponding date-fns Locale object from an i18next language code.
  26. * @param langCode The i18n language code (e.g., 'ja_JP').
  27. * @returns The date-fns Locale object, defaulting to enUS if not found.
  28. */
  29. export const getLocale = (langCode: string): Locale => {
  30. let locale = DATE_FNS_LOCALE_MAP[langCode];
  31. if (!locale) {
  32. const baseCode = langCode.split(/[-_]/)[0];
  33. locale = DATE_FNS_LOCALE_MAP[baseCode];
  34. }
  35. return locale ?? enUS;
  36. };