@@ -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