From f07e2caefbb7b400d6a4570495dde020b197dfde Mon Sep 17 00:00:00 2001 From: hao Date: Fri, 16 Oct 2026 22:33:40 +0800 Subject: [PATCH] feat: improve trilingual website discovery --- website/app.js | 24 ++++++++++++++++++++++++ website/index.html | 10 +++++++--- website/sitemap.xml | 27 +++++++++++++++++++++++---- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/website/app.js b/website/app.js index de1b15c..d696aae 100644 --- a/website/app.js +++ b/website/app.js @@ -79,6 +79,12 @@ const copy = { const languageOptions = document.querySelectorAll(".language-option"); const heroAppScreen = document.querySelector("#hero-app-screen"); const privacyLink = document.querySelector("#privacy-link"); +const siteURL = "https://ixiehao.github.io/MP4Flow/"; +const localeURLs = { + zh: siteURL, + en: `${siteURL}?lang=en`, + ja: `${siteURL}?lang=ja` +}; const requestedLanguage = new URLSearchParams(window.location.search).get("lang"); const browserLanguage = navigator.language.toLowerCase(); let language = ["zh", "en", "ja"].includes(requestedLanguage) @@ -90,6 +96,21 @@ function setMeta(selector, value) { if (meta) meta.setAttribute("content", value); } +function setLink(selector, value) { + const link = document.querySelector(selector); + if (link) link.setAttribute("href", value); +} + +function updateSoftwareSchema(translations) { + const schemaNode = document.querySelector("#software-schema"); + if (!schemaNode) return; + const schema = JSON.parse(schemaNode.textContent); + schema.url = localeURLs[language]; + schema.description = translations.pageDescription; + schema.inLanguage = language === "zh" ? "zh-CN" : language; + schemaNode.textContent = JSON.stringify(schema); +} + function applyLanguage(nextLanguage) { language = nextLanguage; const translations = copy[language]; @@ -98,11 +119,14 @@ function applyLanguage(nextLanguage) { setMeta('meta[name="description"]', translations.pageDescription); setMeta('meta[property="og:title"]', translations.ogTitle); setMeta('meta[property="og:description"]', translations.ogDescription); + setMeta('meta[property="og:url"]', localeURLs[language]); setMeta('meta[property="og:locale"]', translations.ogLocale); setMeta('meta[property="og:image:alt"]', translations.socialImageAlt); setMeta('meta[name="twitter:title"]', translations.ogTitle); setMeta('meta[name="twitter:description"]', translations.ogDescription); setMeta('meta[name="twitter:image:alt"]', translations.socialImageAlt); + setLink('link[rel="canonical"]', localeURLs[language]); + updateSoftwareSchema(translations); heroAppScreen.src = language === "zh" ? heroAppScreen.dataset.srcZh : language === "ja" ? heroAppScreen.dataset.srcJa : heroAppScreen.dataset.srcEn; heroAppScreen.alt = translations.stageAlt; document.querySelectorAll("[data-i18n]").forEach((element) => { diff --git a/website/index.html b/website/index.html index 4b7845d..d90d9dd 100644 --- a/website/index.html +++ b/website/index.html @@ -6,14 +6,15 @@ + - + - + @@ -35,19 +36,22 @@ -