From 05938851f9dc75319ae358d405c9c9bec997407d Mon Sep 17 00:00:00 2001 From: 2ue Date: Thu, 29 Jan 2026 01:39:53 +0800 Subject: [PATCH] fix(frontend): localize subscription expiry labels and show time --- frontend/src/i18n/locales/en.ts | 2 ++ frontend/src/i18n/locales/zh.ts | 2 ++ frontend/src/views/admin/SubscriptionsView.vue | 6 +++--- frontend/src/views/user/SubscriptionsView.vue | 10 +++++----- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index dc93d37c6..eb8fc8cfc 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -3071,6 +3071,8 @@ export default { noActiveSubscriptionsDesc: "You don't have any active subscriptions. Contact administrator to get one.", failedToLoad: 'Failed to load subscriptions', + today: 'Today', + tomorrow: 'Tomorrow', status: { active: 'Active', expired: 'Expired', diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index 4b6a9be6e..dfbe52dc7 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -3219,6 +3219,8 @@ export default { noActiveSubscriptions: '暂无有效订阅', noActiveSubscriptionsDesc: '您没有任何有效订阅。请联系管理员获取订阅。', failedToLoad: '加载订阅失败', + today: '今天', + tomorrow: '明天', status: { active: '有效', expired: '已过期', diff --git a/frontend/src/views/admin/SubscriptionsView.vue b/frontend/src/views/admin/SubscriptionsView.vue index eb2b40d5f..45724ac4f 100644 --- a/frontend/src/views/admin/SubscriptionsView.vue +++ b/frontend/src/views/admin/SubscriptionsView.vue @@ -334,7 +334,7 @@ : 'text-gray-700 dark:text-gray-300' " > - {{ formatDateOnly(value) }} + {{ formatDateTime(value) }}
{{ getDaysRemaining(value) }} {{ t('admin.subscriptions.daysRemaining') }} @@ -564,7 +564,7 @@ {{ extendingSubscription.expires_at - ? formatDateOnly(extendingSubscription.expires_at) + ? formatDateTime(extendingSubscription.expires_at) : t('admin.subscriptions.noExpiration') }} @@ -629,7 +629,7 @@ import { adminAPI } from '@/api/admin' import type { UserSubscription, Group, GroupPlatform, SubscriptionType } from '@/types' import type { SimpleUser } from '@/api/admin/usage' import type { Column } from '@/components/common/types' -import { formatDateOnly } from '@/utils/format' +import { formatDateTime } from '@/utils/format' import AppLayout from '@/components/layout/AppLayout.vue' import TablePageLayout from '@/components/layout/TablePageLayout.vue' import DataTable from '@/components/common/DataTable.vue' diff --git a/frontend/src/views/user/SubscriptionsView.vue b/frontend/src/views/user/SubscriptionsView.vue index 5442c43b3..32f3a21d7 100644 --- a/frontend/src/views/user/SubscriptionsView.vue +++ b/frontend/src/views/user/SubscriptionsView.vue @@ -242,7 +242,7 @@ import subscriptionsAPI from '@/api/subscriptions' import type { UserSubscription } from '@/types' import AppLayout from '@/components/layout/AppLayout.vue' import Icon from '@/components/icons/Icon.vue' -import { formatDateOnly } from '@/utils/format' +import { formatDateTime } from '@/utils/format' const { t } = useI18n() const appStore = useAppStore() @@ -286,16 +286,16 @@ function formatExpirationDate(expiresAt: string): string { return t('userSubscriptions.status.expired') } - const dateStr = formatDateOnly(expires) + const dateTimeStr = formatDateTime(expires) if (days === 0) { - return `${dateStr} (Today)` + return `${dateTimeStr} (${t('userSubscriptions.today')})` } if (days === 1) { - return `${dateStr} (Tomorrow)` + return `${dateTimeStr} (${t('userSubscriptions.tomorrow')})` } - return t('userSubscriptions.daysRemaining', { days }) + ` (${dateStr})` + return t('userSubscriptions.daysRemaining', { days }) + ` (${dateTimeStr})` } function getExpirationClass(expiresAt: string): string {