diff --git a/src/assets/images/award/youtube.svg b/src/assets/images/award/youtube.svg new file mode 100644 index 0000000..41565b8 --- /dev/null +++ b/src/assets/images/award/youtube.svg @@ -0,0 +1,4 @@ + diff --git a/src/lang/en.ts b/src/lang/en.ts index 7e698a2..bac82e2 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -38,6 +38,7 @@ export default { fileNameDesc: 'AiDAGlobalDesignAward\n2026_[Your Full Name]', designPortfolio: 'Design Portfolio(PDF)', submitPdf: 'Submit one single PDF file that includes:', + designCollection:'A design collection of 4 outfits', requiredStructure: 'Required structure:', pdfDesignTitle: 'Design title', pdfMoodboard: 'Moodboard', @@ -204,7 +205,7 @@ export default { submissionFiles: 'Submission Files', uploadYourDesignMaterials: 'Upload your design materials', submissionRequirements: 'Submission Requirements', - pdfRequirement: `Single PDF file\n Title, mood board, elaboration\n+ 4 outfit design with materials (max 15 pages)`, + pdfRequirement: `Single PDF file\n Title, mood board, elaboration\n+ a design collection of 4 outfits (max 15 pages)`, rightContent: { format: 'Format: Single PDF file, 15 pages, maximum 20MB', video: `Video: Design process, 1080×1920 pixels (9:16 ratio), maximum 60 seconds` diff --git a/src/lang/index.ts b/src/lang/index.ts index ab7671b..bfb6117 100644 --- a/src/lang/index.ts +++ b/src/lang/index.ts @@ -6,6 +6,26 @@ import { createI18n } from 'vue-i18n' import enLocale from './en' import zhLocale from './zh-cn' +export type AppLocale = 'ENGLISH' | 'CHINESE_SIMPLIFIED' + +const DEFAULT_LOCALE: AppLocale = 'ENGLISH' +const LANG_PREFIX_RE = /^\/(cn|en)(?=\/|$)/ +const CN_PREFIX_RE = /^\/cn(?=\/|$)/ + +export const getLocaleByPath = (path = ''): AppLocale => { + return CN_PREFIX_RE.test(path) ? 'CHINESE_SIMPLIFIED' : DEFAULT_LOCALE +} + +export const getPathByLocale = (path: string, locale: AppLocale) => { + const normalizedPath = path.replace(LANG_PREFIX_RE, '') || '/' + + if (locale === 'CHINESE_SIMPLIFIED') { + return normalizedPath === '/' ? '/cn' : `/cn${normalizedPath}` + } + + return normalizedPath +} + // 语言配置整合 const messages = { ENGLISH: { @@ -20,7 +40,7 @@ const messages = { const i18n = createI18n({ legacy: false, globalInjection: true, // 全局模式,可以直接使用 $t - locale: 'ENGLISH', + locale: getLocaleByPath(typeof window === 'undefined' ? '/' : window.location.pathname), messages: messages }) diff --git a/src/lang/zh-cn.ts b/src/lang/zh-cn.ts index d6eed87..9e7c855 100644 --- a/src/lang/zh-cn.ts +++ b/src/lang/zh-cn.ts @@ -1,7 +1,7 @@ export default { AwardsPage: { submitApplication: '提交申请', - beforeStart:'申请开启在即...', + beforeStart: '申请开启在即...', submitMobile: '申请', contactUs: '联系我们', contactHeader: '有关比赛,欢迎咨询', @@ -12,7 +12,7 @@ export default { copyMailAddress: '复制邮件地址', sendEmailFailed: '无法打开邮件客户端,我们已将邮箱地址复制到您的剪贴板。', applicationDeadline: '申请期限:\n2026年7月15日', - beforeStartDDL:'开放申请:\n2026.05.15 – 07.15', + beforeStartDDL: '开放申请:\n2026.05.15 – 07.15', howToApply: '申请方法', stepByStep: '步骤指南', step1Title: '1. 成为 AiDA 订阅用户', @@ -33,6 +33,7 @@ export default { fileNameDesc: 'AiDAGlobalDesignAward\n2026_[你的名字]', designPortfolio: '设计作品集(PDF)', submitPdf: '提交一份包含以下内容的单一PDF文件:', + designCollection: '一个包含4套服装的系列', requiredStructure: '', pdfDesignTitle: '设计标题', pdfMoodboard: '灵感板,情绪板', @@ -42,12 +43,12 @@ export default { pdfMaxPages: '最多15页', pdfMaxSize: '最大文件大小:不超过20MB', pdfLanguage: '语言:英文,或本国语言附带英文翻译', - step4Title: '4. 决赛入围选手提交要求', + step4Title: '4. 入围决赛选手提交要求', step4Subtitle: '(前20名设计师)', - step4Desc: '入围的20名决赛选手需提交实体服装以供最终评审。', + step4Desc: '20名入围决赛选手需提交实体服装以供最终评审。', finalistPieces: '件数:1件套装', finalistBasedOn: '服装要求:必须根据提交的AiDA生成设计制作', - finalistShipping: '运输说明:\n将由Code-Create提供', + finalistShipping: '运输说明由Code-Create提供', bloomYourCreativity: '绽放你的创造力', themeOf2026: '赛事主题', bloomText: { @@ -98,12 +99,12 @@ export default { grandAwards: '最高奖项', goldAwards: '金奖', silverAwards: '银奖', - finalists: '决赛选手', + finalists: '入围决赛选手', cashAward: '现金奖励', awardCertificate: '获奖证书', globalMediaExposure: '全球媒体曝光', awardCertification: '获奖认证', - TravelAllowance: '差旅补贴', + TravelAllowance: '差旅津贴', selectionCriteria: '作品评选', evaluation: '考量标准', originality: '原创性', @@ -122,25 +123,26 @@ export default { networkingOpportunities: '链接全球行业人脉', networkingOpportunitiesLabel: '对接设计师与行业领军人物', awardCeremonyHongKong: '香港颁奖盛会', - awardCeremonyLabel: '入围者享有差旅津贴', + awardCeremonyLabel: '入围决赛选手享有差旅津贴', competitionTimeline: '赛事时间表', shapingTheFuture: '重要节点', timelineApplicationLabel: '申请期限', timelineDeadlineLabel: '', timeJul15: '7月15日', applicationDeadlineDesc: '申请截止日期及\n作品审核流程开始', - twentyFinalistsAnnounced: '20名入围者揭晓', - announcedLabel: '', + twentyFinalistsAnnounced: '20名入围决赛', + announcedLabel: '选手揭晓', timeAug30: '8月30日', - twentyFinalistsDesc: '公布进入终评阶段\n的20名入围者', + twentyFinalistsDesc: '公布进入终评阶段\n的20名入围决赛选手', finalistSubmission: '入围作品', submissionLabel: '提交最后期限', timeSept30: '9月30日', - finalistSubmissionDesc: '入围选手需在现场提交\n成品作品,并将成衣实物寄送\n至Code-Create', + finalistSubmissionDesc: + '入围决赛选手需提交设计作品,\n并将成衣实物寄送至Code-\nCreate(地址另行通知)', receivingOutfits: '收到成衣期限', fromFinalistsLabel: '', timeOctober: '10月23日', - receivingOutfitsDesc: 'Code-Create需确认收\n到入围成衣实物', + receivingOutfitsDesc: 'Code-Create需确认收到\n入围决赛选手的成衣实物', awardCeremony: '奖项颁发仪式', ceremonyLabel: '', timeNov12: '11月12日', @@ -195,7 +197,7 @@ export default { submissionFiles: '作品上传', uploadYourDesignMaterials: '上传你的设计材料', submissionRequirements: '提交要求', - pdfRequirement: `单独PDF文件\n 作品标题、灵感板及情绪板,设计说明\n+ 4套服装设计及材料说明(页数:最多15页)`, + pdfRequirement: `单独PDF文件\n 作品标题、灵感板及情绪板,设计说明\n+ 一个包含4套服装的系列(页数:最多15页)`, rightContent: { format: '格式:单个 PDF 文件,最多15页,最大 20MB', video: `视频:创作过程,分辨率1080×1920 像素\n(9:16 纵向比例),最长 60 秒` diff --git a/src/router/router-config.ts b/src/router/router-config.ts index 1690970..fc39c9d 100644 --- a/src/router/router-config.ts +++ b/src/router/router-config.ts @@ -1,19 +1,7 @@ +import i18n, { getLocaleByPath } from '@/lang' import router from './index' -router.beforeEach((to, from, next) => { - const path = to.path - const list = { - cn: 'CHINESE_SIMPLIFIED', - en: 'ENGLISH' - } - if (path.startsWith('/cn') || (to.params.lang === 'cn')) { - localStorage.setItem('loginLanguage', 'CHINESE_SIMPLIFIED') - } else { - localStorage.setItem('loginLanguage', 'ENGLISH') - } - +router.beforeEach((to, _from, next) => { + i18n.global.locale.value = getLocaleByPath(to.path) next() }) - -router.afterEach(() => { -}) diff --git a/src/views/AwardPage/components/ApplySection.vue b/src/views/AwardPage/components/ApplySection.vue index cef9659..3292c69 100644 --- a/src/views/AwardPage/components/ApplySection.vue +++ b/src/views/AwardPage/components/ApplySection.vue @@ -92,6 +92,7 @@
{{ $t('AwardsPage.submitPdf') }}
+{{ $t('AwardsPage.designCollection') }}
{{ $t('AwardsPage.requiredStructure') }}
+
+ {{ $t('AwardsPage.copyRight') }}
@@ -187,10 +190,10 @@ @@ -471,10 +460,10 @@ const handleBtnClick = () => { padding-right: 22rem; background-color: #232323; .social-list { - column-gap: 2rem; + column-gap: 0.8rem; img { - width: 2rem; - height: 2rem; + width: 3.8rem; + height: 3.8rem; } } .copyright { diff --git a/src/views/AwardPage/index.vue b/src/views/AwardPage/index.vue index dea79b6..65bcda9 100644 --- a/src/views/AwardPage/index.vue +++ b/src/views/AwardPage/index.vue @@ -52,6 +52,7 @@ import bannerPad from '@/assets/images/pad_version/banner_pad.mp4' import bannerPadZh from '@/assets/images/pad_version/banner_pad_chinese.mp4' import bannerMobile from '@/assets/images/mobile_version_background/banner_mobile.mp4' import bannerZhMobile from '@/assets/images/mobile_version_background/banner_mobile_zh.mp4' +import { getPathByLocale, type AppLocale } from '@/lang' import { useIsMobile, useIsTablet } from '@/utils/isMobile' const { isMobile } = useIsMobile() const { isTablet } = useIsTablet() @@ -88,7 +89,7 @@ const bannerUrl = computed(() => { const handleSubmitApplication = () => { if (!start.value) return router.push({ - path: '/contestants', + path: getPathByLocale('/contestants', locale.value as AppLocale), query: { ...route.query } @@ -142,10 +143,12 @@ const handleSubmitApplication = () => { } .ddl { position: absolute; - bottom: -4rem; - left: 0; + top: calc(100% + 1.8rem); + left: 50%; + transform: translateX(-50%); text-align: center; width: 41rem; + white-space: nowrap; font-family: 'ArialBold'; font-weight: 700; font-size: 2rem; @@ -185,8 +188,11 @@ const handleSubmitApplication = () => { .ddl { white-space: pre-line; text-align: left; + width: 100%; padding-left: 4rem; - bottom: -6rem; + top: calc(100% + 2rem); + left: 0; + transform: none; } } } @@ -199,8 +205,11 @@ const handleSubmitApplication = () => { .ddl { white-space: pre-line; text-align: left; + width: 100%; padding-left: 4rem; - bottom: -6rem; + top: calc(100% + 2rem); + left: 0; + transform: none; } } }