Latest

Updates and research

index · 4 blogs · 18 updates2025-01-072025-12-15
2025-09-26 · newest

Translating JSX - How to use Conditionals

Learn how to handle translations with better context and flexibility

gt-nextBranchternaryconditionaltranslationi18n
the split ternary the essay opens on
components/DarkModeRow.tsx
1const gt = useGT()
2
3return (
4 <>
5 <span>
6 <T> Dark Mode: </T>
7 </span>
8 <Button>{enabled ? gt('On') : gt('Off')}</Button>
9 </>
10)

“This is not at all how the library was designed to be used.”

the rewrite — one <T>, one <Branch>
components/DarkModeRow.tsx
1<T>
2 <span>Dark Mode:</span>
3 <Button>
4 <Branch branch={enabled.toString()}
5 true="On" false="Off" />
6 </Button>
7</T>

Blogs

Guides and research from the team, newest first — the newest entry sits framed above.

Updates

Release notes for every package in the toolchain — what shipped, and the line of reasoning behind it.

daterelease / changetags
2025-12-15gt-next@6.12.0declareStatic() — the string equivalent of <Static> — plus declareVar() and decodeVars(), for content scattered across services and utilitiesgt-nextdeclareStaticdeclareVar2025-12-09gt-next@6.11.0Adds $maxChars support to translation functions, building on formatCutoff() from generaltranslation@8.1.0gt-nextmaxcharscharacter-limits2025-12-06generaltranslation@8.1.0formatCutoff(): locale-aware text truncation that handles character limits with appropriate terminators per languagegeneraltranslationformattingtext-truncation2025-12-03gt-next@6.10.0Experimental cached component support via experimentalLocaleResolution; legacy static request functions deprecatedgt-nextcached componentsSSG2025-11-25gt-i18n@0.1.0A foundational step toward framework-agnostic JS internationalization: pure-JS logic split from framework-specific logicgt-i18npure-jsi18n2025-11-18gt-next@6.9.0Static rendering: pre-rendered pages at build time. This behavior is deprecated — see gt-next@6.10.0 for the new behaviorgt-nextstatic renderingSSG2025-11-14gt-react@10.8.0Feature flags through the enableI18n field — conditionally disable i18n, with sync and async loading patternsgt-reactfeature flagsi18n2025-11-10generaltranslation v8Significant API changes: branching introduced; unused endpoints deprecated. Older versions of the API are no longer supportedgeneraltranslation8.0.0api2025-11-10gt-next@6.8.0The <Static> component: static function calls directly inside translations, preserving agreement, conjugation and word ordergt-nextgt-reactstatic2025-10-29generaltranslation@7.8.0formatListToParts() on the GT class and standalone: join arbitrary items, not just strings, into locale-aware listsgeneraltranslationList formatting2025-10-21Local Edits in gtx-cli@2.4.0Save local translation edits directly from the CLI and keep everything in sync without touching the dashboardgtx-clisave-localtranslate2025-10-10compiler v1.0.0 + gt-next@6.7.0@general-translation/compiler v1.0.0 — build-time processing grown past the SWC plugin’s Next.js-only scopecompilerv1.0.0i18n2025-09-18gt-next@6.6.0A new direction for brown-field apps: t.obj() returns translated dictionary structuresgt-nextDictionary translation2025-09-12gtx-cli@2.3.0Updated translate and upload behavior, with more visibility into the translation pipelinegtx-clitranslateupload2025-09-10gt-next@6.4.0Locale aliasing: overwrite any canonical locale with an alias via the customMapping configurationgt-nextLocale Aliasing2025-08-27gt-next@6.3.0msg() translates strings anywhere in your codebase — wrap once, pass through m() at render timegt-nextAI DevelopmentString translation2025-08-19gt-next@6.2.0Runtime work moves to build time via an SWC plugin: compile-time hashing, pre-rendered translations, stricter validationgt-nextswcbuild-time2025-01-26@generaltranslation/react-core-linter@0.1.0ESLint rules for React Core integration, catching common implementation errors seen in the wildreact-core-lintereslintlinting