2
0
arvid-e 4 сар өмнө
parent
commit
2675595f2e

+ 46 - 4
apps/app/src/client/components/RecentActivity/ActivityListItem.tsx

@@ -1,5 +1,8 @@
 import { formatDistanceToNow } from 'date-fns';
 import { formatDistanceToNow } from 'date-fns';
 import { useTranslation } from 'next-i18next';
 import { useTranslation } from 'next-i18next';
+import {
+  enUS, ja, fr, ko, zhCN, Locale
+} from 'date-fns/locale';
 
 
 import type { ActivityHasUserId, SupportedActivityActionType } from '~/interfaces/activity';
 import type { ActivityHasUserId, SupportedActivityActionType } from '~/interfaces/activity';
 import { ActivityLogActions } from '~/interfaces/activity';
 import { ActivityLogActions } from '~/interfaces/activity';
@@ -35,6 +38,39 @@ export const IconActivityTranslationMap: Record<
   [ActivityLogActions.ACTION_COMMENT_CREATE]: 'comment',
   [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 => {
 const translateAction = (action: SupportedActivityActionType): string => {
   return ActivityActionTranslationMap[action] || 'unknown_action';
   return ActivityActionTranslationMap[action] || 'unknown_action';
 };
 };
@@ -43,15 +79,21 @@ const setIcon = (action: SupportedActivityActionType): string => {
   return IconActivityTranslationMap[action] || 'question_mark';
   return IconActivityTranslationMap[action] || 'question_mark';
 };
 };
 
 
-const calculateTimePassed = (date: Date): string => {
-  const timePassed = formatDistanceToNow(date, { addSuffix: true });
+const calculateTimePassed = (date: Date, locale: Locale): string => {
+  const timePassed = formatDistanceToNow(date, {
+    addSuffix: true,
+    locale
+  });
 
 
   return timePassed;
   return timePassed;
 };
 };
 
 
 
 
 export const ActivityListItem = ({ activity }: { activity: ActivityHasUserId }): JSX.Element => {
 export const ActivityListItem = ({ activity }: { activity: ActivityHasUserId }): JSX.Element => {
-  const { t } = useTranslation();
+  const { t, i18n } = useTranslation();
+  const currentLangCode = i18n.language;
+  const dateFnsLocale = getLocale(currentLangCode);
+
   const action = activity.action as SupportedActivityActionType;
   const action = activity.action as SupportedActivityActionType;
   const keyToTranslate = translateAction(action);
   const keyToTranslate = translateAction(action);
   const fullKeyPath = `user_home_page.${keyToTranslate}`;
   const fullKeyPath = `user_home_page.${keyToTranslate}`;
@@ -66,7 +108,7 @@ export const ActivityListItem = ({ activity }: { activity: ActivityHasUserId }):
         </span>
         </span>
 
 
         <span className="text-secondary small ms-3">
         <span className="text-secondary small ms-3">
-          {calculateTimePassed(activity.createdAt)}
+          {calculateTimePassed(activity.createdAt, dateFnsLocale)}
         </span>
         </span>
       </p>
       </p>
     </div>
     </div>