Просмотр исходного кода

chore(console): switch /go page to go.* i18n keys

David Hill 6 месяцев назад
Родитель
Сommit
0a2aa8688d
2 измененных файлов с 99 добавлено и 41 удалено
  1. 59 0
      packages/console/app/src/i18n/en.ts
  2. 40 41
      packages/console/app/src/routes/go/index.tsx

+ 59 - 0
packages/console/app/src/i18n/en.ts

@@ -244,6 +244,65 @@ export const dict = {
     "All Zen models are hosted in the US. Providers follow a zero-retention policy and do not use your data for model training, with the",
   "zen.privacy.exceptionsLink": "following exceptions",
 
+  "go.title": "OpenCode Go | Low cost coding models for everyone",
+  "go.hero.title": "Low cost coding models for everyone",
+  "go.hero.body":
+    "Go brings agentic coding to programmers around the world. Offering generous limits and reliable access to the most capable open-source models, so you can build with powerful agents without worrying about cost or availability.",
+
+  "go.cta.start": "Subscribe to Go - $10/mo",
+  "go.pricing.body": "Use with any agent. Top up credit if needed. Cancel any time.",
+  "go.problem.title": "What problem is Go solving?",
+  "go.problem.body":
+    "There are so many models available, but only a few work well with coding agents. Most providers configure them differently with varying results.",
+  "go.problem.subtitle": "We're fixing this for everyone, not just OpenCode users.",
+  "go.problem.item1": "Testing select models and consulting their teams",
+  "go.problem.item2": "Working with providers to ensure they're delivered properly",
+  "go.problem.item3": "Benchmarking all model-provider combinations we recommend",
+  "go.how.title": "How Go works",
+  "go.how.body": "Go is a $10/month subscription you can use with OpenCode or any agent.",
+  "go.how.step1.title": "Create an account",
+  "go.how.step1.beforeLink": "follow the",
+  "go.how.step1.link": "setup instructions",
+  "go.how.step2.title": "Subscribe to Go",
+  "go.how.step2.link": "$10/month",
+  "go.how.step2.afterLink": "with generous limits",
+  "go.how.step3.title": "Start coding",
+  "go.how.step3.body": "with reliable access to open-source models",
+  "go.privacy.title": "Your privacy is important to us",
+  "go.privacy.beforeExceptions":
+    "Go models are hosted in the US. Providers follow a zero-retention policy and do not use your data for model training, with the",
+  "go.privacy.exceptionsLink": "following exceptions",
+  "go.faq.q1": "What is OpenCode Go?",
+  "go.faq.a1":
+    "Go is a low-cost subscription that gives you reliable access to capable open-source models for agentic coding.",
+  "go.faq.q2": "What models does Go include?",
+  "go.faq.a2":
+    "Go focuses on the most capable open-source models available through OpenCode, with generous limits and reliable access.",
+  "go.faq.q3": "Is Go the same as Zen?",
+  "go.faq.a3":
+    "No. Zen is pay-as-you-go, while Go is a $10/month subscription with generous limits and reliable access to open-source models GLM-5, Kimi K2.5, and MiniMax M2.5.",
+  "go.faq.q4": "How much does Go cost?",
+  "go.faq.a4.p1.beforePricing": "Go costs",
+  "go.faq.a4.p1.pricingLink": "$10/month",
+  "go.faq.a4.p1.afterPricing": "with generous limits.",
+  "go.faq.a4.p2.beforeAccount": "You can manage your subscription in your",
+  "go.faq.a4.p2.accountLink": "account",
+  "go.faq.a4.p3": "Cancel any time.",
+  "go.faq.q5": "What about data and privacy?",
+  "go.faq.a5.beforeExceptions":
+    "Go models are hosted in the US. Providers follow a zero-retention policy and do not use your data for model training, with the",
+  "go.faq.a5.exceptionsLink": "following exceptions",
+  "go.faq.q6": "Can I top up credit?",
+  "go.faq.a6": "If you need more usage, you can top up credit in your account.",
+  "go.faq.q7": "Can I cancel?",
+  "go.faq.a7": "Yes, you can cancel any time.",
+  "go.faq.q8": "Can I use Go with other coding agents?",
+  "go.faq.a8": "Yes, you can use Go with any agent. Follow the setup instructions in your preferred coding agent.",
+
+  "go.faq.q9": "What is the difference between the free models included and Go?",
+  "go.faq.a9":
+    "Free models include Big Pickle plus promotional models available at the time, with a quota of 200 requests/day. Go includes GLM-5, Kimi K2.5, and MiniMax M2.5 with higher request quotas enforced across rolling windows (5-hour, weekly, and monthly), roughly equivalent to $12 per 5 hours, $30 per week, and $60 per month (actual request counts vary by model and usage).",
+
   "zen.api.error.rateLimitExceeded": "Rate limit exceeded. Please try again later.",
   "zen.api.error.modelNotSupported": "Model {{model}} not supported",
   "zen.api.error.modelFormatNotSupported": "Model {{model}} not supported for format {{format}}",

+ 40 - 41
packages/console/app/src/routes/go/index.tsx

@@ -35,7 +35,7 @@ export default function Home() {
   return (
     <main data-page="go">
       {/*<HttpHeader name="Cache-Control" value="public, max-age=1, s-maxage=3600, stale-while-revalidate=86400" />*/}
-      <Title>{i18n.t("zen.title")}</Title>
+      <Title>{i18n.t("go.title")}</Title>
       <LocaleLinks path="/go" />
       <Meta property="og:image" content="/social-share-zen.png" />
       <Meta name="twitter:image" content="/social-share-zen.png" />
@@ -49,12 +49,8 @@ export default function Home() {
             <div data-slot="hero-copy">
               <img data-slot="zen logo light" src={goLogoLight} alt="" />
               <img data-slot="zen logo dark" src={goLogoDark} alt="" />
-              <h1>Low cost coding models for everyone</h1>
-              <p>
-                Go brings agentic coding to programmers around the world. Offering generous limits and reliable access
-                to the most capable open-source models, so you can build with powerful agents without worrying about
-                cost or availability.
-              </p>
+              <h1>{i18n.t("go.hero.title")}</h1>
+              <p>{i18n.t("go.hero.body")}</p>
               <div data-slot="model-logos">
                 {/*
                 <div>
@@ -131,7 +127,7 @@ export default function Home() {
                 */}
               </div>
               <a href="/auth">
-                <span>Subscribe to Go - $10/mo</span>
+                <span>{i18n.t("go.cta.start")}</span>
                 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                   <path
                     d="M6.5 12L17 12M13 16.5L17.5 12L13 7.5"
@@ -143,7 +139,7 @@ export default function Home() {
               </a>
             </div>
             <div data-slot="pricing-copy">
-              <p>{i18n.t("zen.pricing.body")}</p>
+              <p>{i18n.t("go.pricing.body")}</p>
             </div>
           </section>
 
@@ -155,50 +151,50 @@ export default function Home() {
 
           <section data-component="problem">
             <div data-slot="section-title">
-              <h3>{i18n.t("zen.problem.title")}</h3>
-              <p>{i18n.t("zen.problem.body")}</p>
+              <h3>{i18n.t("go.problem.title")}</h3>
+              <p>{i18n.t("go.problem.body")}</p>
             </div>
-            <p>{i18n.t("zen.problem.subtitle")}</p>
+            <p>{i18n.t("go.problem.subtitle")}</p>
             <ul>
               <li>
-                <span>[*]</span> {i18n.t("zen.problem.item1")}
+                <span>[*]</span> {i18n.t("go.problem.item1")}
               </li>
               <li>
-                <span>[*]</span> {i18n.t("zen.problem.item2")}
+                <span>[*]</span> {i18n.t("go.problem.item2")}
               </li>
               <li>
-                <span>[*]</span> {i18n.t("zen.problem.item3")}
+                <span>[*]</span> {i18n.t("go.problem.item3")}
               </li>
             </ul>
           </section>
 
           <section data-component="how">
             <div data-slot="section-title">
-              <h3>{i18n.t("zen.how.title")}</h3>
-              <p>{i18n.t("zen.how.body")}</p>
+              <h3>{i18n.t("go.how.title")}</h3>
+              <p>{i18n.t("go.how.body")}</p>
             </div>
             <ul>
               <li>
                 <span>[1]</span>
                 <div>
-                  <strong>{i18n.t("zen.how.step1.title")}</strong> - {i18n.t("zen.how.step1.beforeLink")}{" "}
-                  <a href={language.route("/docs/zen/#how-it-works")} title={i18n.t("zen.how.step1.link")}>
-                    {i18n.t("zen.how.step1.link")}
+                  <strong>{i18n.t("go.how.step1.title")}</strong> - {i18n.t("go.how.step1.beforeLink")}{" "}
+                  <a href={language.route("/docs/zen/#how-it-works")} title={i18n.t("go.how.step1.link")}>
+                    {i18n.t("go.how.step1.link")}
                   </a>
                 </div>
               </li>
               <li>
                 <span>[2]</span>
                 <div>
-                  <strong>{i18n.t("zen.how.step2.title")}</strong> -{" "}
-                  <a href={language.route("/docs/zen/#pricing")}>{i18n.t("zen.how.step2.link")}</a>{" "}
-                  {i18n.t("zen.how.step2.afterLink")}
+                  <strong>{i18n.t("go.how.step2.title")}</strong> -{" "}
+                  <a href={language.route("/docs/zen/#pricing")}>{i18n.t("go.how.step2.link")}</a>{" "}
+                  {i18n.t("go.how.step2.afterLink")}
                 </div>
               </li>
               <li>
                 <span>[3]</span>
                 <div>
-                  <strong>{i18n.t("zen.how.step3.title")}</strong> - {i18n.t("zen.how.step3.body")}
+                  <strong>{i18n.t("go.how.step3.title")}</strong> - {i18n.t("go.how.step3.body")}
                 </div>
               </li>
             </ul>
@@ -206,12 +202,12 @@ export default function Home() {
 
           <section data-component="privacy">
             <div data-slot="privacy-title">
-              <h3>{i18n.t("zen.privacy.title")}</h3>
+              <h3>{i18n.t("go.privacy.title")}</h3>
               <div>
                 <span>[*]</span>
                 <p>
-                  {i18n.t("zen.privacy.beforeExceptions")}{" "}
-                  <a href={language.route("/docs/zen/#privacy")}>{i18n.t("zen.privacy.exceptionsLink")}</a>.
+                  {i18n.t("go.privacy.beforeExceptions")}{" "}
+                  <a href={language.route("/docs/zen/#privacy")}>{i18n.t("go.privacy.exceptionsLink")}</a>.
                 </p>
               </div>
             </div>
@@ -296,36 +292,39 @@ export default function Home() {
             </div>
             <ul>
               <li>
-                <Faq question={i18n.t("zen.faq.q1")}>{i18n.t("zen.faq.a1")}</Faq>
+                <Faq question={i18n.t("go.faq.q1")}>{i18n.t("go.faq.a1")}</Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q2")}>{i18n.t("zen.faq.a2")}</Faq>
+                <Faq question={i18n.t("go.faq.q2")}>{i18n.t("go.faq.a2")}</Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q3")}>{i18n.t("zen.faq.a3")}</Faq>
+                <Faq question={i18n.t("go.faq.q9")}>{i18n.t("go.faq.a9")}</Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q4")}>
-                  {i18n.t("zen.faq.a4.p1.beforePricing")}{" "}
-                  <a href={language.route("/docs/zen/#pricing")}>{i18n.t("zen.faq.a4.p1.pricingLink")}</a>{" "}
-                  {i18n.t("zen.faq.a4.p1.afterPricing")} {i18n.t("zen.faq.a4.p2.beforeAccount")}{" "}
-                  <a href="/auth">{i18n.t("zen.faq.a4.p2.accountLink")}</a>. {i18n.t("zen.faq.a4.p3")}
+                <Faq question={i18n.t("go.faq.q3")}>{i18n.t("go.faq.a3")}</Faq>
+              </li>
+              <li>
+                <Faq question={i18n.t("go.faq.q4")}>
+                  {i18n.t("go.faq.a4.p1.beforePricing")}{" "}
+                  <a href={language.route("/docs/zen/#pricing")}>{i18n.t("go.faq.a4.p1.pricingLink")}</a>{" "}
+                  {i18n.t("go.faq.a4.p1.afterPricing")} {i18n.t("go.faq.a4.p2.beforeAccount")}{" "}
+                  <a href="/auth">{i18n.t("go.faq.a4.p2.accountLink")}</a>. {i18n.t("go.faq.a4.p3")}
                 </Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q5")}>
-                  {i18n.t("zen.faq.a5.beforeExceptions")}{" "}
-                  <a href={language.route("/docs/zen/#privacy")}>{i18n.t("zen.faq.a5.exceptionsLink")}</a>.
+                <Faq question={i18n.t("go.faq.q5")}>
+                  {i18n.t("go.faq.a5.beforeExceptions")}{" "}
+                  <a href={language.route("/docs/zen/#privacy")}>{i18n.t("go.faq.a5.exceptionsLink")}</a>.
                 </Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q6")}>{i18n.t("zen.faq.a6")}</Faq>
+                <Faq question={i18n.t("go.faq.q6")}>{i18n.t("go.faq.a6")}</Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q7")}>{i18n.t("zen.faq.a7")}</Faq>
+                <Faq question={i18n.t("go.faq.q7")}>{i18n.t("go.faq.a7")}</Faq>
               </li>
               <li>
-                <Faq question={i18n.t("zen.faq.q8")}>{i18n.t("zen.faq.a8")}</Faq>
+                <Faq question={i18n.t("go.faq.q8")}>{i18n.t("go.faq.a8")}</Faq>
               </li>
             </ul>
           </section>