feat(web): i18n (#12471)

This commit is contained in:
Adam
2026-02-06 08:54:51 -06:00
committed by GitHub
parent 0ec5f6608b
commit 812597bb8b
75 changed files with 9868 additions and 726 deletions

View File

@@ -117,6 +117,7 @@
display: flex;
align-items: center;
gap: 8px;
white-space: nowrap;
@media (max-width: 55rem) {
display: none;

View File

@@ -6,8 +6,10 @@ import { Header } from "~/component/header"
import { Footer } from "~/component/footer"
import { Legal } from "~/component/legal"
import { Faq } from "~/component/faq"
import { useI18n } from "~/context/i18n"
export default function Enterprise() {
const i18n = useI18n()
const [formData, setFormData] = createSignal({
name: "",
role: "",
@@ -54,9 +56,9 @@ export default function Enterprise() {
return (
<main data-page="enterprise">
<Title>OpenCode | Enterprise solutions for your organisation</Title>
<Title>{i18n.t("enterprise.title")}</Title>
<Link rel="canonical" href={`${config.baseUrl}/enterprise`} />
<Meta name="description" content="Contact OpenCode for enterprise solutions" />
<Meta name="description" content={i18n.t("enterprise.meta.description")} />
<div data-component="container">
<Header />
@@ -64,13 +66,9 @@ export default function Enterprise() {
<section data-component="enterprise-content">
<div data-component="enterprise-columns">
<div data-component="enterprise-column-1">
<h1>Your code is yours</h1>
<p>
OpenCode operates securely inside your organization with no data or context stored and no licensing
restrictions or ownership claims. Start a trial with your team, then deploy it across your
organization by integrating it with your SSO and internal AI gateway.
</p>
<p>Let us know and how we can help.</p>
<h1>{i18n.t("enterprise.hero.title")}</h1>
<p>{i18n.t("enterprise.hero.body1")}</p>
<p>{i18n.t("enterprise.hero.body2")}</p>
<Show when={false}>
<div data-component="testimonial">
@@ -150,59 +148,59 @@ export default function Enterprise() {
<div data-component="enterprise-form">
<form onSubmit={handleSubmit}>
<div data-component="form-group">
<label for="name">Full name</label>
<label for="name">{i18n.t("enterprise.form.name.label")}</label>
<input
id="name"
type="text"
required
value={formData().name}
onInput={handleInputChange("name")}
placeholder="Jeff Bezos"
placeholder={i18n.t("enterprise.form.name.placeholder")}
/>
</div>
<div data-component="form-group">
<label for="role">Role</label>
<label for="role">{i18n.t("enterprise.form.role.label")}</label>
<input
id="role"
type="text"
required
value={formData().role}
onInput={handleInputChange("role")}
placeholder="Executive Chairman"
placeholder={i18n.t("enterprise.form.role.placeholder")}
/>
</div>
<div data-component="form-group">
<label for="email">Company email</label>
<label for="email">{i18n.t("enterprise.form.email.label")}</label>
<input
id="email"
type="email"
required
value={formData().email}
onInput={handleInputChange("email")}
placeholder="jeff@amazon.com"
placeholder={i18n.t("enterprise.form.email.placeholder")}
/>
</div>
<div data-component="form-group">
<label for="message">What problem are you trying to solve?</label>
<label for="message">{i18n.t("enterprise.form.message.label")}</label>
<textarea
id="message"
required
rows={5}
value={formData().message}
onInput={handleInputChange("message")}
placeholder="We need help with..."
placeholder={i18n.t("enterprise.form.message.placeholder")}
/>
</div>
<button type="submit" disabled={isSubmitting()} data-component="submit-button">
{isSubmitting() ? "Sending..." : "Send"}
{isSubmitting() ? i18n.t("enterprise.form.sending") : i18n.t("enterprise.form.send")}
</button>
</form>
{showSuccess() && <div data-component="success-message">Message sent, we'll be in touch soon.</div>}
{showSuccess() && <div data-component="success-message">{i18n.t("enterprise.form.success")}</div>}
</div>
</div>
</div>
@@ -210,35 +208,20 @@ export default function Enterprise() {
<section data-component="faq">
<div data-slot="section-title">
<h3>FAQ</h3>
<h3>{i18n.t("enterprise.faq.title")}</h3>
</div>
<ul>
<li>
<Faq question="What is OpenCode Enterprise?">
OpenCode Enterprise is for organizations that want to ensure that their code and data never leaves
their infrastructure. It can do this by using a centralized config that integrates with your SSO and
internal AI gateway.
</Faq>
<Faq question={i18n.t("enterprise.faq.q1")}>{i18n.t("enterprise.faq.a1")}</Faq>
</li>
<li>
<Faq question="How do I get started with OpenCode Enterprise?">
Simply start with an internal trial with your team. OpenCode by default does not store your code or
context data, making it easy to get started. Then contact us to discuss pricing and implementation
options.
</Faq>
<Faq question={i18n.t("enterprise.faq.q2")}>{i18n.t("enterprise.faq.a2")}</Faq>
</li>
<li>
<Faq question="How does enterprise pricing work?">
We offer per-seat enterprise pricing. If you have your own LLM gateway, we do not charge for tokens
used. For further details, contact us for a custom quote based on your organization's needs.
</Faq>
<Faq question={i18n.t("enterprise.faq.q3")}>{i18n.t("enterprise.faq.a3")}</Faq>
</li>
<li>
<Faq question="Is my data secure with OpenCode Enterprise?">
Yes. OpenCode does not store your code or context data. All processing happens locally or through
direct API calls to your AI provider. With central config and SSO integration, your data remains
secure within your organization's infrastructure.
</Faq>
<Faq question={i18n.t("enterprise.faq.q4")}>{i18n.t("enterprise.faq.a4")}</Faq>
</li>
</ul>
</section>