Skip to content

Commit ca5a737

Browse files
committed
docs: localize Go graph and testimonial copy
1 parent c6187ee commit ca5a737

2 files changed

Lines changed: 59 additions & 30 deletions

File tree

packages/console/app/src/i18n/en.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,32 @@ export const dict = {
254254
"go.pricing.body": "Use with any agent. Top up credit if needed. Cancel any time.",
255255
"go.graph.free": "Free",
256256
"go.graph.go": "Go",
257+
"go.graph.label": "Requests/month",
258+
"go.graph.usageLimits": "Usage limits",
259+
"go.graph.tick": "{{n}}x",
260+
"go.graph.aria": "Requests per month: {{free}} vs {{go}}",
261+
262+
"go.testimonials.brand.zen": "Zen",
263+
"go.testimonials.brand.go": "Go",
264+
"go.testimonials.handle": "@OpenCode",
265+
"go.testimonials.dax.name": "Dax Raad",
266+
"go.testimonials.dax.title": "ex-CEO, Terminal Products",
267+
"go.testimonials.dax.quoteAfter": "has been life changing, it's truly a no-brainer.",
268+
"go.testimonials.jay.name": "Jay V",
269+
"go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint",
270+
"go.testimonials.jay.quoteBefore": "4 out of 5 people on our team love using",
271+
"go.testimonials.jay.quoteAfter": ".",
272+
"go.testimonials.adam.name": "Adam Elmore",
273+
"go.testimonials.adam.title": "ex-Hero, AWS",
274+
"go.testimonials.adam.quoteBefore": "I can't recommend",
275+
"go.testimonials.adam.quoteAfter": "enough. Seriously, it's really good.",
276+
"go.testimonials.david.name": "David Hill",
277+
"go.testimonials.david.title": "ex-Head of Design, Laravel",
278+
"go.testimonials.david.quoteBefore": "With",
279+
"go.testimonials.david.quoteAfter": "I know all the models are tested and perfect for coding agents.",
280+
"go.testimonials.frank.name": "Frank Wang",
281+
"go.testimonials.frank.title": "ex-Intern, Nvidia (4 times)",
282+
"go.testimonials.frank.quote": "I wish I was still at Nvidia.",
257283
"go.problem.title": "What problem is Go solving?",
258284
"go.problem.body":
259285
"We're focused on bringing the OpenCode experience to as many people as possible. OpenCode Go is a low cost ($10/month) subscription designed to bring agentic coding to programmers around the world. It provides generous limits and reliable access to the most capable open source models.",

packages/console/app/src/routes/go/index.tsx

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ const checkLoggedIn = query(async () => {
2727
if (workspaceID) throw redirect(`/workspace/${workspaceID}`)
2828
}, "checkLoggedIn.get")
2929

30-
function LimitsGraph(props: { href: string; labels: { free: string; go: string } }) {
30+
function LimitsGraph(props: { href: string }) {
3131
let root!: HTMLElement
3232
const [visible, setVisible] = createSignal(false)
3333

34+
const i18n = useI18n()
35+
3436
onMount(() => {
3537
if (typeof IntersectionObserver === "undefined") return setVisible(true)
3638
const observer = new IntersectionObserver(
@@ -73,7 +75,7 @@ function LimitsGraph(props: { href: string; labels: { free: string; go: string }
7375
return (
7476
<figure
7577
data-component="limit-graph"
76-
aria-label="Requests per month: Free vs Go"
78+
aria-label={i18n.t("go.graph.aria", { free: i18n.t("go.graph.free"), go: i18n.t("go.graph.go") })}
7779
data-visible={visible() ? "" : undefined}
7880
ref={root}
7981
style={{ "--start": `${start}%` } as any}
@@ -86,7 +88,7 @@ function LimitsGraph(props: { href: string; labels: { free: string; go: string }
8688
<g>
8789
<line x1={x(t)} y1={top} x2={x(t)} y2={h - bottom} data-grid />
8890
<text x={x(t)} y={h - 18} text-anchor="middle" data-tick>
89-
{t}x
91+
{i18n.t("go.graph.tick", { n: t })}
9092
</text>
9193
</g>
9294
)}
@@ -118,10 +120,10 @@ function LimitsGraph(props: { href: string; labels: { free: string; go: string }
118120

119121
<div data-slot="plot-labels">
120122
<span data-row-label style={{ "--y": y(yFree) } as any}>
121-
{props.labels.free}
123+
{i18n.t("go.graph.free")}
122124
</span>
123125
<span data-row-label style={{ "--y": y(yGo) } as any}>
124-
{props.labels.go}
126+
{i18n.t("go.graph.go")}
125127
</span>
126128
</div>
127129
</div>
@@ -130,15 +132,15 @@ function LimitsGraph(props: { href: string; labels: { free: string; go: string }
130132
<div data-slot="caption-row">
131133
<div data-slot="caption-left">
132134
<div data-slot="caption-meta">
133-
<span data-slot="caption-label">Requests/month</span>
135+
<span data-slot="caption-label">{i18n.t("go.graph.label")}</span>
134136
<a data-slot="caption-link" href={props.href}>
135-
Usage limits
137+
{i18n.t("go.graph.usageLimits")}
136138
</a>
137139
</div>
138140
<div data-slot="legend">
139141
<span data-item>
140142
<i data-dot data-kind="free" />
141-
<span data-name>Free</span>
143+
<span data-name>{i18n.t("go.graph.free")}</span>
142144
<span data-value>{free.toLocaleString()}</span>
143145
</span>
144146
<For each={models}>
@@ -274,10 +276,7 @@ export default function Home() {
274276
</section>
275277

276278
<section data-component="comparison">
277-
<LimitsGraph
278-
href={language.route("/docs/go/#usage-limits")}
279-
labels={{ free: i18n.t("go.graph.free"), go: i18n.t("go.graph.go") }}
280-
/>
279+
<LimitsGraph href={language.route("/docs/go/#usage-limits")} />
281280
</section>
282281

283282
<section data-component="problem">
@@ -349,57 +348,61 @@ export default function Home() {
349348
<div data-slot="testimonial">
350349
<div data-slot="name">
351350
<img src={avatarDax} alt="" />
352-
<strong>Dax Raad</strong>
353-
<span>ex-CEO, Terminal Products</span>
351+
<strong>{i18n.t("go.testimonials.dax.name")}</strong>
352+
<span>{i18n.t("go.testimonials.dax.title")}</span>
354353
</div>
355354
<div data-slot="quote">
356-
<span>@OpenCode</span> <s>Zen</s> Go has been life changing, it's truly a no-brainer.
355+
<span>{i18n.t("go.testimonials.handle")}</span> <s>{i18n.t("go.testimonials.brand.zen")}</s>{" "}
356+
{i18n.t("go.testimonials.brand.go")} {i18n.t("go.testimonials.dax.quoteAfter")}
357357
</div>
358358
</div>
359359
{/*Jay*/}
360360
<div data-slot="testimonial">
361361
<div data-slot="name">
362362
<img src={avatarJay} alt="" />
363-
<strong>Jay V</strong>
364-
<span>ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint</span>
363+
<strong>{i18n.t("go.testimonials.jay.name")}</strong>
364+
<span>{i18n.t("go.testimonials.jay.title")}</span>
365365
</div>
366366
<div data-slot="quote">
367-
{"4 out of 5 people on our team love using "}
368-
<span>@OpenCode</span> <s>Zen</s> Go.
367+
{i18n.t("go.testimonials.jay.quoteBefore")} <span>{i18n.t("go.testimonials.handle")}</span>{" "}
368+
<s>{i18n.t("go.testimonials.brand.zen")}</s> {i18n.t("go.testimonials.brand.go")}
369+
{i18n.t("go.testimonials.jay.quoteAfter")}
369370
</div>
370371
</div>
371372
{/*Adam*/}
372373
<div data-slot="testimonial">
373374
<div data-slot="name">
374375
<img src={avatarAdam} alt="" />
375-
<strong>Adam Elmore</strong>
376-
<span>ex-Hero, AWS</span>
376+
<strong>{i18n.t("go.testimonials.adam.name")}</strong>
377+
<span>{i18n.t("go.testimonials.adam.title")}</span>
377378
</div>
378379
<div data-slot="quote">
379-
{"I can't recommend "}
380-
<span>@OpenCode</span> <s>Zen</s> Go enough. Seriously, it's really good.
380+
{i18n.t("go.testimonials.adam.quoteBefore")} <span>{i18n.t("go.testimonials.handle")}</span>{" "}
381+
<s>{i18n.t("go.testimonials.brand.zen")}</s> {i18n.t("go.testimonials.brand.go")}{" "}
382+
{i18n.t("go.testimonials.adam.quoteAfter")}
381383
</div>
382384
</div>
383385
{/*David*/}
384386
<div data-slot="testimonial">
385387
<div data-slot="name">
386388
<img src={avatarDavid} alt="" />
387-
<strong>David Hill</strong>
388-
<span>ex-Head of Design, Laravel</span>
389+
<strong>{i18n.t("go.testimonials.david.name")}</strong>
390+
<span>{i18n.t("go.testimonials.david.title")}</span>
389391
</div>
390392
<div data-slot="quote">
391-
{"With "}
392-
<span>@OpenCode</span> <s>Zen</s> Go I know all the models are tested and perfect for coding agents.
393+
{i18n.t("go.testimonials.david.quoteBefore")} <span>{i18n.t("go.testimonials.handle")}</span>{" "}
394+
<s>{i18n.t("go.testimonials.brand.zen")}</s> {i18n.t("go.testimonials.brand.go")}{" "}
395+
{i18n.t("go.testimonials.david.quoteAfter")}
393396
</div>
394397
</div>
395398
{/*Frank*/}
396399
<div data-slot="testimonial">
397400
<div data-slot="name">
398401
<img src={avatarFrank} alt="" />
399-
<strong>Frank Wang</strong>
400-
<span>ex-Intern, Nvidia (4 times)</span>
402+
<strong>{i18n.t("go.testimonials.frank.name")}</strong>
403+
<span>{i18n.t("go.testimonials.frank.title")}</span>
401404
</div>
402-
<div data-slot="quote">I wish I was still at Nvidia.</div>
405+
<div data-slot="quote">{i18n.t("go.testimonials.frank.quote")}</div>
403406
</div>
404407
</section>
405408

0 commit comments

Comments
 (0)