feat(www): locale specific urls (#12508)

This commit is contained in:
Adam
2026-02-06 11:30:40 -06:00
committed by GitHub
parent 8069197329
commit 24cd84cda5
33 changed files with 279 additions and 134 deletions

View File

@@ -1,5 +1,5 @@
import "./index.css"
import { Title, Meta, Link } from "@solidjs/meta"
import { Title, Meta } from "@solidjs/meta"
import { A, createAsync, query } from "@solidjs/router"
import { Header } from "~/component/header"
import { Footer } from "~/component/footer"
@@ -11,6 +11,8 @@ import { config } from "~/config"
import { createSignal, onMount, Show, JSX } from "solid-js"
import { DownloadPlatform } from "./types"
import { useI18n } from "~/context/i18n"
import { useLanguage } from "~/context/language"
import { LocaleLinks } from "~/component/locale-links"
type OS = "macOS" | "Windows" | "Linux" | null
@@ -66,6 +68,7 @@ function CopyStatus() {
export default function Download() {
const i18n = useI18n()
const language = useLanguage()
const [detectedOS, setDetectedOS] = createSignal<OS>(null)
onMount(() => {
@@ -83,7 +86,7 @@ export default function Download() {
return (
<main data-page="download">
<Title>{i18n.t("download.title")}</Title>
<Link rel="canonical" href={`${config.baseUrl}/download`} />
<LocaleLinks path="/download" />
<Meta name="description" content={i18n.t("download.meta.description")} />
<div data-component="container">
<Header hideGetStarted />
@@ -97,7 +100,10 @@ export default function Download() {
<h1>{i18n.t("download.hero.title")}</h1>
<p>{i18n.t("download.hero.subtitle")}</p>
<Show when={detectedOS()}>
<a href={getDownloadHref(getDownloadPlatform(detectedOS()))} data-component="download-button">
<a
href={language.route(getDownloadHref(getDownloadPlatform(detectedOS())))}
data-component="download-button"
>
<IconDownload />
{i18n.t("download.hero.button", { os: detectedOS()! })}
</a>
@@ -169,7 +175,7 @@ export default function Download() {
</span>
<span>{i18n.t("download.platform.macosAppleSilicon")}</span>
</div>
<a href={getDownloadHref("darwin-aarch64-dmg")} data-component="action-button">
<a href={language.route(getDownloadHref("darwin-aarch64-dmg"))} data-component="action-button">
{i18n.t("download.action.download")}
</a>
</div>
@@ -185,7 +191,7 @@ export default function Download() {
</span>
<span>{i18n.t("download.platform.macosIntel")}</span>
</div>
<a href={getDownloadHref("darwin-x64-dmg")} data-component="action-button">
<a href={language.route(getDownloadHref("darwin-x64-dmg"))} data-component="action-button">
{i18n.t("download.action.download")}
</a>
</div>
@@ -208,7 +214,7 @@ export default function Download() {
</span>
<span>{i18n.t("download.platform.windowsX64")}</span>
</div>
<a href={getDownloadHref("windows-x64-nsis")} data-component="action-button">
<a href={language.route(getDownloadHref("windows-x64-nsis"))} data-component="action-button">
{i18n.t("download.action.download")}
</a>
</div>
@@ -224,7 +230,7 @@ export default function Download() {
</span>
<span>{i18n.t("download.platform.linuxDeb")}</span>
</div>
<a href={getDownloadHref("linux-x64-deb")} data-component="action-button">
<a href={language.route(getDownloadHref("linux-x64-deb"))} data-component="action-button">
{i18n.t("download.action.download")}
</a>
</div>
@@ -240,7 +246,7 @@ export default function Download() {
</span>
<span>{i18n.t("download.platform.linuxRpm")}</span>
</div>
<a href={getDownloadHref("linux-x64-rpm")} data-component="action-button">
<a href={language.route(getDownloadHref("linux-x64-rpm"))} data-component="action-button">
{i18n.t("download.action.download")}
</a>
</div>
@@ -257,7 +263,7 @@ export default function Download() {
</span>
<span>Linux (.AppImage)</span>
</div>
<a href={getDownloadHref("linux-x64-appimage")} data-component="action-button">
<a href={language.route(getDownloadHref("linux-x64-appimage"))} data-component="action-button">
Download
</a>
</div>*/}
@@ -422,36 +428,38 @@ export default function Download() {
</li>
<li>
<Faq question={i18n.t("home.faq.q2")}>
{i18n.t("home.faq.a2.before")} <a href="/docs">{i18n.t("home.faq.a2.link")}</a>.
{i18n.t("home.faq.a2.before")} <a href={language.route("/docs")}>{i18n.t("home.faq.a2.link")}</a>.
</Faq>
</li>
<li>
<Faq question={i18n.t("home.faq.q3")}>
{i18n.t("download.faq.a3.beforeLocal")}{" "}
<a href="/docs/providers/#lm-studio" target="_blank">
<a href={language.route("/docs/providers/#lm-studio")} target="_blank">
{i18n.t("download.faq.a3.localLink")}
</a>{" "}
{i18n.t("download.faq.a3.afterLocal.beforeZen")} <A href="/zen">{i18n.t("nav.zen")}</A>
{i18n.t("download.faq.a3.afterLocal.beforeZen")}{" "}
<A href={language.route("/zen")}>{i18n.t("nav.zen")}</A>
{i18n.t("download.faq.a3.afterZen")}
</Faq>
</li>
<li>
<Faq question={i18n.t("home.faq.q5")}>
{i18n.t("home.faq.a5.beforeDesktop")} <a href="/download">{i18n.t("home.faq.a5.desktop")}</a>{" "}
{i18n.t("home.faq.a5.and")} <a href="/docs/cli/#web">{i18n.t("home.faq.a5.web")}</a>!
{i18n.t("home.faq.a5.beforeDesktop")}{" "}
<a href={language.route("/download")}>{i18n.t("home.faq.a5.desktop")}</a> {i18n.t("home.faq.a5.and")}{" "}
<a href={language.route("/docs/cli/#web")}>{i18n.t("home.faq.a5.web")}</a>!
</Faq>
</li>
<li>
<Faq question={i18n.t("home.faq.q6")}>
{i18n.t("download.faq.a5.p1")} {i18n.t("download.faq.a5.p2.beforeZen")}{" "}
<A href="/zen">{i18n.t("nav.zen")}</A>
<A href={language.route("/zen")}>{i18n.t("nav.zen")}</A>
{i18n.t("download.faq.a5.p2.afterZen")}
</Faq>
</li>
<li>
<Faq question={i18n.t("home.faq.q7")}>
{i18n.t("download.faq.a6.p1")} {i18n.t("download.faq.a6.p2.beforeShare")}{" "}
<a href="/docs/share/#privacy">{i18n.t("download.faq.a6.shareLink")}</a>.
<a href={language.route("/docs/share/#privacy")}>{i18n.t("download.faq.a6.shareLink")}</a>.
</Faq>
</li>
<li>