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.pdfDesignTitle') }}
  • @@ -604,7 +605,7 @@ ul { .item-header { font-size: 2.2rem; } - .item-desc{ + .item-desc { white-space: normal; } .desc-wrapper { @@ -663,4 +664,7 @@ ul { } } } +.design-collection{ + margin-bottom: 3rem; +} diff --git a/src/views/AwardPage/container.vue b/src/views/AwardPage/container.vue index ec32be3..3ae005f 100644 --- a/src/views/AwardPage/container.vue +++ b/src/views/AwardPage/container.vue @@ -76,6 +76,9 @@ + + +