Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
f0fe25e
feat(docs): split Spanish website and documentation from #7406
federicorv25 Oct 22, 2026
c9ebac0
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 22, 2026
8ad7522
docs(es): synchronize the latest dev messaging contract
federicorv25 Oct 22, 2026
716e3f8
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 22, 2026
0b291fb
docs(es): correct review findings and clarify operational contracts
federicorv25 Oct 22, 2026
7be94dc
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 22, 2026
9fc7731
docs(es): synchronize latest quota guidance and record validation
federicorv25 Oct 22, 2026
8f641e7
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 22, 2026
44d4bbe
docs(es): cover current subagent model selection slots
federicorv25 Oct 22, 2026
aa25bbe
Merge current upstream dev while preserving localization and all test…
federicorv25 Oct 24, 2026
083cb39
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 24, 2026
f4cead0
docs(es): refresh Spanish for current dev and clarify nonblank results
federicorv25 Oct 24, 2026
f4960ac
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 24, 2026
bf15c70
docs(es): resolve review findings and audit localized contracts
federicorv25 Oct 24, 2026
ce0c4df
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 26, 2026
8400645
docs(es): sync current dev contracts and record final validation
federicorv25 Oct 26, 2026
f462c69
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Oct 26, 2026
c5d9b72
docs(i18n): resolve Spanish review findings and sync current dev
federicorv25 Oct 26, 2026
e0f3e24
Merge upstream/dev into codex/spanish-docs
federicorv25 Oct 27, 2026
5b173a2
Merge upstream/dev for current Spanish documentation review
federicorv25 Oct 27, 2026
a2627b2
docs: correct Spanish review findings and sync current dev contracts
federicorv25 Oct 27, 2026
7334dc9
Merge origin/dev into carry/7559-p4
lidge-jun Oct 28, 2026
4af5397
docs: carry Spanish review fixes and sync current dev contracts
lidge-jun Oct 28, 2026
672c888
Merge origin/dev into PR #7559 readiness carry
lidge-jun Oct 28, 2026
7e89f80
docs(es): sync current Windows lifecycle and recovery guidance
lidge-jun Oct 28, 2026
6935109
Merge origin/dev into codex/spanish-docs
lidge-jun Oct 28, 2026
38fee5e
docs(es): correct Grok and MiniMax translation blockers
lidge-jun Oct 28, 2026
f074adb
docs(es): correct round-two translation findings
lidge-jun Oct 29, 2026
fae2396
Merge upstream/dev into Spanish documentation, preserving maintainer …
federicorv25 Oct 29, 2026
9af0153
docs(es): sync 2.95 guidance and complete readiness refresh
federicorv25 Oct 29, 2026
eab49f9
test: release CC-Switch SQLite handles before Windows cleanup
federicorv25 Oct 30, 2026
f1c8352
docs: resolve Spanish review findings and align localized examples
federicorv25 Oct 30, 2026
563de91
Merge upstream/dev into Spanish docs review branch
federicorv25 Oct 30, 2026
7ceb7d5
docs(es): complete review fixes and audit current localization
federicorv25 Oct 30, 2026
ab24a74
Merge upstream/dev into codex/spanish-docs
federicorv25 Oct 31, 2026
dcd216c
docs(es): resolve review follow-ups and sync current dev
federicorv25 Nov 1, 2026
bd7dba7
Merge upstream/dev into codex/spanish-docs
federicorv25 Nov 2, 2026
2245250
docs: clarify Spanish remote, admission and adapter contracts
federicorv25 Nov 2, 2026
5a193fe
Merge remote-tracking branch 'upstream/dev' into codex/spanish-docs
federicorv25 Nov 4, 2026
95205d1
docs(i18n): resolve review findings and sync Spanish with dev
federicorv25 Nov 4, 2026
830e392
Merge upstream/dev and refresh Spanish documentation
federicorv25 Nov 11, 2026
4552ab5
Merge dev into PR #7559 head
lidge-jun Nov 11, 2026
0541095
docs(es): address PR #7559 review findings
lidge-jun Nov 12, 2026
58e7ff1
docs(i18n): correct disabled-provider claim in routing guides
lidge-jun Nov 12, 2026
eda450c
Merge commit '4e073bb27ade7376ff3e445f448393e29984557d' into goat/uni…
lidge-jun Nov 12, 2026
6ff8c85
docs(es): translate the reloading model metadata section
lidge-jun Nov 12, 2026
dcd3357
Merge dev aa30ea9d5e into the Spanish docs candidate
lidge-jun Nov 12, 2026
995a56b
Merge dev 5f12824288 into the Spanish docs candidate
lidge-jun Nov 12, 2026
0b1d42e
docs(es): carry the dev Kiro, weekly-quota and prelude-EOF changes
lidge-jun Nov 12, 2026
d193526
Merge dev b55b69b59e into the Spanish docs candidate
lidge-jun Nov 12, 2026
4616093
docs(es): translate the Remote Link Child versions and actions section
lidge-jun Nov 12, 2026
ab16ee6
Merge dev a159cdde into PR #7559 candidate 0b1d42ee
lidge-jun Nov 12, 2026
72a0d87
docs(es): mirror the new existing-server resume section
lidge-jun Nov 12, 2026
08763dd
docs(es): finish the Spanish prose repair pass for the provider CLI r…
lidge-jun Nov 12, 2026
c5d8bd1
Merge remote-tracking branch 'origin/dev' into HEAD
lidge-jun Nov 13, 2026
e123d72
docs(es): align translations with latest English guidance
lidge-jun Nov 13, 2026
7225d88
docs: clarify remote link route timing
lidge-jun Nov 13, 2026
aabdcd0
docs: clarify lightweight child enrollment requirements
lidge-jun Nov 13, 2026
c66cd89
docs: clarify Spanish Cursor enrichment wording
lidge-jun Nov 13, 2026
dc40228
docs(es): correct fail-closed, link direction, allowlist and other tr…
invalid-email-address Nov 13, 2026
cbc28cd
Merge remote-tracking branch 'origin/dev' into merge-7559-dev
invalid-email-address Nov 13, 2026
7064015
Translate new link and advisor guidance
invalid-email-address Nov 13, 2026
e5e88bf
docs(es): correct 26 meaning errors from the final translation review
invalid-email-address Nov 13, 2026
7ee1cda
docs(es): add Remote Link child preflight limit and diagnostics
lidge-jun Nov 13, 2026
1c516c1
Merge remote-tracking branch 'origin/dev' into merge-7559-dev2
lidge-jun Nov 13, 2026
39293d3
docs(es): mirror dev English changes for Desktop authorization, Kiro …
lidge-jun Nov 13, 2026
35bf648
docs(es): fix symlink refusal and error-code wording in Remote Link p…
lidge-jun Nov 13, 2026
a0ea122
Merge remote-tracking branch 'origin/dev' into merge-7559-dev3
lidge-jun Nov 13, 2026
df08e49
docs(es): mirror Remote Link stale pidfile guidance
lidge-jun Nov 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,351 changes: 1,351 additions & 0 deletions devlog/_plan/261022_spanish_split/010_plan.md

Large diffs are not rendered by default.

158 changes: 81 additions & 77 deletions docs-site/astro.config.mjs

Large diffs are not rendered by default.

12 changes: 7 additions & 5 deletions docs-site/src/components/FrontierBoards.astro
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import data from "../data/frontier-benchmarks.json";
import { FRONTIER_STRINGS } from "../data/frontier-i18n";

interface Props {
locale?: "en" | "fr" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja" | "tr";
locale?: "en" | "fr" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja" | "tr" | "es";
/** Comma-separated board ids to render; omit for all boards. */
boards?: string;
/** Show the page-level subtitle (overview pages only). */
Expand All @@ -21,13 +21,16 @@ const { locale = "en", boards: boardsProp, intro = false } = Astro.props;
const include = boardsProp ? new Set(boardsProp.split(",").map(s => s.trim()).filter(Boolean)) : null;
const strings = FRONTIER_STRINGS[locale] as Record<string, string>;
const fallback = FRONTIER_STRINGS.en as Record<string, string>;
/** Resolve a benchmark label, using the canonical copy for unknown localized keys. */
const t = (key: string): string => strings[key] ?? fallback[key] ?? key;
/** Substitute named display placeholders without changing the underlying benchmark data. */
const fill = (key: string, vars: Record<string, string>): string =>
Object.entries(vars).reduce((acc, [k, v]) => acc.replace(`{${k}}`, v), t(key));

// The PR i18n has no column-header key for "score" — keep a tiny local map.
const SCORE_HEADER: Record<string, string> = { en: "Score", fr: "Score", ko: "점수", "zh-cn": "得分", "zh-tw": "得分", ru: "Балл", ja: "スコア", tr: "Puan" };
const SCORE_HEADER: Record<string, string> = { es: "Puntuación", en: "Score", fr: "Score", ko: "점수", "zh-cn": "得分", "zh-tw": "得分", ru: "Балл", ja: "スコア", tr: "Puan" };
/** Dataset tags are kebab-case; i18n keys are camelCase (cheap-subagent → cheapSubagent). */
/** Map dataset kebab-case tags to the existing translation-key suffix. */
const tagKey = (tag: string): string => tag.replace(/-([a-z])/g, (_, c) => c.toUpperCase());

const boards = data.benchmarks.filter(board => !include || include.has(board.id)).map(board => {
Expand Down Expand Up @@ -61,8 +64,7 @@ const boards = data.benchmarks.filter(board => !include || include.has(board.id)
<h3 id={`board-${board.id}`}>{t(`frontier.board.${board.id}.title`)}</h3>
<p class="frontier-meta">
{fill("frontier.updated", { date: board.updated })}
{" · "}
{fill("frontier.tasks", { count: String(board.taskCount) })}
{board.taskCount != null && <span> · {fill("frontier.tasks", { count: String(board.taskCount) })}</span>}
{" · "}
<a href={board.provenance.url}>{t("frontier.sourceLink")}</a>
{board.provenance.license && <span class="frontier-license"> · {board.provenance.license}</span>}
Expand All @@ -76,7 +78,7 @@ const boards = data.benchmarks.filter(board => !include || include.has(board.id)
<th>{t("frontier.col.model")}</th>
<th>{t("frontier.col.effort")}</th>
<th>{SCORE_HEADER[locale] ?? SCORE_HEADER.en}</th>
<th>{t("frontier.col.cost")}</th>
<th>{board.chart.xLabel}</th>
{board.allMeasured && <th>{t("frontier.col.efficiency")}</th>}
<th>{t("frontier.col.tags")}</th>
</tr>
Expand Down
77 changes: 74 additions & 3 deletions docs-site/src/components/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,47 @@ const fr = {
'GitHub, {count} stars': 'GitHub, {count} étoiles',
} as const;

const es: Record<keyof typeof fr, string> = {
"Auto": "Automático",
"Light": "Claro",
"Dark": "Oscuro",
"Theme": "Tema",
"Click to use the next theme": "Haz clic para cambiar al siguiente tema",
"Getting Started": "Primeros pasos",
"Installation": "Instalación",
"Quickstart": "Inicio rápido",
"How It Works": "Cómo funciona",
"Agent Quickstart": "Inicio rápido para agentes",
"Guides": "Guías",
"Providers": "Proveedores",
"Model Routing": "Enrutamiento de modelos",
"Combos": "Combos",
"Codex Integration": "Integración con Codex",
"Codex App Model Picker": "Selector de modelos de Codex App",
"Sidecars: Search & Vision": "Sidecars: búsqueda y visión",
"Image Bridge": "Puente de imágenes",
"Video Bridge": "Puente de video",
"Web Dashboard": "Dashboard web",
"Sub-agent Surface": "Interfaz de subagentes",
"Reference": "Referencia",
"Configuration": "Configuración",
"Adapters": "Adaptadores",
"Architecture": "Arquitectura",
"Proxy API Formats": "Formatos de API del proxy",
"Management API": "API de administración",
"Contributing": "Cómo contribuir",
"Dashboard": "Panel de telemetría",
"Explore guides": "Explorar las guías",
"Main": "Navegación principal",
"Select language": "Elegir idioma",
"Menu": "Menú",
"GitHub": "GitHub",
"GitHub, {count} stars": "GitHub, {count} estrellas",
};

/** Select navigation copy; typed dictionaries require complete French and Spanish keys. */
const t = <K extends keyof typeof fr>(en: K, ko: string, zh: string, ru: string, ja: string, zhTW: string, tr: string): string =>
locale === 'fr' ? fr[en] : locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : locale === 'tr' ? tr : en;
locale === 'es' ? es[en] : locale === 'fr' ? fr[en] : locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : locale === 'tr' ? tr : en;

const starCount = await getStarCount();
const starLocale = locale ?? 'en';
Expand All @@ -97,9 +136,10 @@ const starLabel = t(
const githubAccessibleName = starCount === null ? githubLabel
: starLabel.replace('{count}', starCount.toLocaleString(starLocale));

type LanguageOption = { code: 'root' | 'fr' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja' | 'tr'; label: string };
type LanguageOption = { code: 'root' | 'fr' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja' | 'tr' | 'es'; label: string };
const languages: LanguageOption[] = [
{ code: 'root', label: 'English' },
{ code: 'es', label: 'Español' },
{ code: 'fr', label: 'Français' },
{ code: 'ko', label: '한국어' },
{ code: 'zh-cn', label: '简体中文' },
Expand Down Expand Up @@ -341,8 +381,21 @@ const contributing: NavLink = {
<span class="burger" aria-hidden="true"><span></span><span></span></span>
</button>
<div class="lp-menu-panel" id="lp-menu-panel">
<details class="lp-menu-group lp-menu-languages" style="--i:0">
<summary><span>{t('Select language', '언어 선택', '选择语言', 'Выбрать язык', '言語を選択', '選擇語言', 'Dil seçin')}</span></summary>
<div class="lp-menu-region"><ul>
{languages.map((language) => (
<li><a
href={languageHref(language.code)}
lang={language.code === 'root' ? 'en' : language.code}
hreflang={language.code === 'root' ? 'en' : language.code}
aria-current={language.code === (locale ?? 'root') ? 'true' : undefined}
>{language.label}</a></li>
))}
</ul></div>
</details>
{groups.map((group, i) => (
<details class="lp-menu-group" style={`--i:${i}`}>
<details class="lp-menu-group" style={`--i:${i + 1}`}>
<summary>
<span>{group.label}</span>
<svg viewBox="0 0 16 16" width="18" height="18" fill="none" aria-hidden="true"><path d="M3.5 6l4.5 4.5L12.5 6" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" /></svg>
Expand Down Expand Up @@ -407,6 +460,21 @@ const contributing: NavLink = {
}
:global(.sl-skip-link:focus) { min-height: 44px; }

/* Longer locale labels need room before the full search pill fits. */
@media (min-width: 50rem) and (max-width: 89.99rem) {
.header { gap: 0.5rem; }
.title-wrapper { flex-shrink: 0; }
.search-wrapper :global(button[data-open-modal]) {
width: 44px;
min-width: 44px;
min-height: 44px;
padding: 0;
justify-content: center;
}
.search-wrapper :global(button[data-open-modal] > span),
.search-wrapper :global(button[data-open-modal] > kbd) { display: none; }
}

.search-wrapper,
.github-link,
.right-group,
Expand Down Expand Up @@ -950,6 +1018,9 @@ const contributing: NavLink = {
translate 0.4s cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s;
}
.lp-menu-languages ul { display: grid; grid-template-columns: repeat(2, 1fr); }
.lp-menu-languages a[aria-current='true'] { color: var(--sl-color-text-accent); font-weight: 600; }
@media (min-width: 50rem) { .lp-menu-languages { display: none; } }
.lp-menu-group,
.lp-menu-contrib {
border-bottom: 1px solid var(--sl-color-gray-5);
Expand Down
Loading
Loading