Просмотр исходного кода

Export language locale method to util

arvid-e 4 месяцев назад
Родитель
Сommit
08d5d575b5

+ 2 - 37
apps/app/src/client/components/RecentActivity/ActivityListItem.tsx

@@ -1,9 +1,7 @@
 import { formatDistanceToNow } from 'date-fns';
 import { useTranslation } from 'next-i18next';
-import {
-  enUS, ja, fr, ko, zhCN, Locale,
-} from 'date-fns/locale';
-
+import { type Locale } from 'date-fns/locale';
+import { getLocale } from '~/client/util/date-local';
 import type { ActivityHasUserId, SupportedActivityActionType } from '~/interfaces/activity';
 import { ActivityLogActions } from '~/interfaces/activity';
 
@@ -38,39 +36,6 @@ export const IconActivityTranslationMap: Record<
   [ActivityLogActions.ACTION_COMMENT_CREATE]: 'comment',
 };
 
-const localeMap: Record<string, Locale | undefined> = {
-  en: enUS,
-  'en-US': enUS,
-  en_US: enUS,
-
-  ja,
-  'ja-JP': ja,
-  ja_JP: ja,
-
-  fr,
-  'fr-FR': fr,
-  fr_FR: fr,
-
-  ko,
-  'ko-KR': ko,
-  ko_KR: ko,
-
-  zh: zhCN,
-  'zh-CN': zhCN,
-  zh_CN: zhCN,
-};
-
-const getLocale = (langCode: string): Locale => {
-  let locale = localeMap[langCode];
-
-  if (!locale) {
-    const baseCode = langCode.split('-')[0];
-    locale = localeMap[baseCode];
-  }
-
-  return locale ?? enUS;
-};
-
 const translateAction = (action: SupportedActivityActionType): string => {
   return ActivityActionTranslationMap[action] || 'unknown_action';
 };

+ 28 - 0
apps/app/src/client/util/date-local.ts

@@ -0,0 +1,28 @@
+import { type Locale } from 'date-fns/locale';
+import {
+  enUS, ja, fr, ko, zhCN,
+} from 'date-fns/locale';
+
+const DATE_FNS_LOCALE_MAP: Record<string, Locale | undefined> = {
+  'en': enUS, 'en-US': enUS, 'en_US': enUS,
+  'ja': ja, 'ja-JP': ja, 'ja_JP': ja,
+  'fr': fr, 'fr-FR': fr, 'fr_FR': fr,
+  'ko': ko, 'ko-KR': ko, 'ko_KR': ko,
+  'zh': zhCN, 'zh-CN': zhCN, 'zh_CN': zhCN,
+};
+
+/**
+ * Gets the corresponding date-fns Locale object from an i18next language code.
+ * @param langCode The i18n language code (e.g., 'ja_JP').
+ * @returns The date-fns Locale object, defaulting to enUS if not found.
+ */
+export const getLocale = (langCode: string): Locale => {
+  let locale = DATE_FNS_LOCALE_MAP[langCode];
+
+  if (!locale) {
+    const baseCode = langCode.split(/[-_]/)[0];
+    locale = DATE_FNS_LOCALE_MAP[baseCode];
+  }
+
+  return locale ?? enUS;
+};