Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion authors/archie.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ avatar: /static/avatars/archie.png
occupation: CEO
company: General Translation
email: archie@generaltranslation.com
twitter: https://x.com/archiemckenzie_/photo
twitter: https://x.com/archiemckenzie_
linkedin: https://www.linkedin.com/in/archie-mckenzie
---

Expand Down
1 change: 1 addition & 0 deletions authors/jackie.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: Jackie Chen
avatar: /static/avatars/jackie.png
occupation: Software Engineer
company: General Translation
email: jackie@generaltranslation.com
twitter: https://x.com/Some_Jackie
Expand Down
10 changes: 5 additions & 5 deletions blog/en-US/gt-next.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ tags: ['guide', 'internationalization', 'nextjs', 'gt-next']

**Internationalization (i18n) sucks. We're building a Next.js library, gt-next, to make it easier.** Today we're launching it in open beta.

``` copy
```bash copy
npm i gt-next
```

Expand Down Expand Up @@ -40,9 +40,9 @@ The goal with gt-next is to create an abundance mindset around translations. The
- Get an API key 🔐 on our [platform](https://generaltranslation.com)
- Read the [docs](https://generaltranslation.com/docs) 📄

### What you can do with gt-next
## What you can do with gt-next

#### Format variables and plurals
### Format variables and plurals

```javascript copy
import { T } from 'gt-next'
Expand All @@ -67,14 +67,14 @@ export default function Page() {
}
```

#### Use a developer API key to see translations locally
### Use a developer API key to see translations locally

```.env copy
GT_API_KEY="gtx-dev-cae62d6fe1e33bda603c9a2926ab0fb8"
GT_PROJECT_ID="abcdef12-3456-789a-bcd4-ef123456789a"
```

#### Support over 100 languages out of the box, with on-demand translation.
### Support over 100 languages out of the box, with on-demand translation.

![landing](/images/blogs/landing.png)

Expand Down
4 changes: 1 addition & 3 deletions blog/en-US/i18n-without-translation-files.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,13 @@ authors: [jackie]
tags: ['guide', 'internationalization', 'nextjs', 'i18n', 'gt-next', 'translation-files', 'developer-experience']
---

import Video from '@/components/Video';

Everyone who's internationalized a JavaScript app knows the workflow. You install an i18n library, create an `en.json` file, pull every user-facing string out of your components, assign each one a key, and reference the key where the string used to be. Then you duplicate that JSON file for every language you support. `es.json`, `fr.json`, `ja.json`.

At first, it's fine. Thirty strings, three languages, 90 entries.

Then your app grows. Six months later you have 400 strings and 12 languages. 4,800 entries across a dozen files. A developer adds a new feature, writes five new strings, forgets to update three of the translation files. Nobody notices until a user in Tokyo sees English fallbacks in a Japanese interface. Someone suggests buying a translation management system.

<Video src='https://assets.gtx.dev/i18n-no-translation.mp4' />
<video controls src="https://assets.gtx.dev/i18n-no-translation.mp4" />

## The file management tax

Expand Down
2 changes: 1 addition & 1 deletion devlog/en-US/generaltranslation_v8.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ The new versioning system mirrors git's branching model:
- Updating a source file on a branch will create a new version of the file.
- Merging a branch into main will generate a link between the source file on the main branch and the source file on the merged branch.
- Future translations will incorporate translations from both branches.
- Checking out a branch will create a new version of the file
- Checking out a branch will create a new version of the file.
- Translations on this branch will reference previous translations from the main branch.

To enable this feature, add the `--enable-branching` flag to the `gtx-cli translate` command on the latest version of gtx-cli.
Expand Down
4 changes: 2 additions & 2 deletions devlog/en-US/gt-i18n_v0_1_0.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ Though `generaltranslation` is also a runtime-agnostic library, it is—by desig

## What's Included

- **[`msg()`](#)** - String registration and variable interpolation
- **[`mFallback()`](#)** and **[`gtFallback()`](#)** - Migration helpers for incremental adoption
- **`msg()`** - String registration and variable interpolation
- **`mFallback()`** and **`gtFallback()`** - Migration helpers for incremental adoption

---

Expand Down
2 changes: 1 addition & 1 deletion devlog/en-US/gt-next_v6_10_0.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export default async function Home() {

### The `locale` parameter requirement

Cached components use their parameters as cache keys, any cached component that contains translatable content must accept a `locale` parameter if they are to update when a user's locale changes. For example, `CachedContent` must accept a `locale` parameter to create separate cache entries for each locale. Without this parameter, the component would serve the same cached content regardless of the user's locale.
Cached components use their parameters as cache keys. Any cached component that contains translatable content must accept a `locale` parameter if it is to update when a user's locale changes. For example, `CachedContent` must accept a `locale` parameter to create separate cache entries for each locale. Without this parameter, the component would serve the same cached content regardless of the user's locale.

### Configuration notes

Expand Down
4 changes: 2 additions & 2 deletions devlog/en-US/gt-next_v6_2_0.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ export default function Page() {
We deliberately kept `gt()` synchronous to match other i18n libraries.
The downside was a `two-step translation process`:

1. Register the text with the API.
2. Wait for a second render to display the translated result.
1. Register the text with the API.
2. Wait for a second render to display the translated result.

Now, thanks to the compiler, translatable content is scanned ahead of time and passed directly into `useGT()` or `getGT()` at compile time.
This means translations are immediately available at runtime — no page refreshes.
Expand Down
2 changes: 0 additions & 2 deletions devlog/en-US/gt-react_v10_15_0.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ authors: [ernest]
tags: ['gt-react', 'derive', 'tagged-template', 'i18n']
---

import Video from '@/components/Video';

## The `declareStatic()` → `derive()` rename

This release is the first to ship with the new `derive()` name. Previously, this function was called `declareStatic()` and the JSX component was `<Static>`. In [PR #1062](https://github.com/generaltranslation/gt/pull/1062), both were renamed to `derive()` and `<Derive>` for clarity.
Expand Down
2 changes: 0 additions & 2 deletions devlog/en-US/gt-react_v10_19_0.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ authors: [ernest]
tags: ['gt-react', 'browser', 'hot-reload', 'dev-experience', 'i18n']
---

import Video from '@/components/Video';

<Video src='https://assets.gtx.dev/devlogs/gt-react-browser-tx-hot-reload.mp4' />

## Overview
Expand Down
2 changes: 1 addition & 1 deletion devlog/en-US/local-edits.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Local Edits in gtx-cli@2.4.0
title: Local edits in gtx-cli@2.4.0
date: 2025-10-21
authors: [fernando]
tags: ['gtx-cli', 'save-local', 'translate']
Expand Down
2 changes: 0 additions & 2 deletions devlog/en-US/react-core-linter_v0_1_0.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ tags: ['react-core-linter', '0.1.0', 'eslint', 'linting', 'static-validation']

This plugin catches common implementation errors that we have seen in the wild.

import Video from '@/components/Video';

<Video src='https://assets.gtx.dev/docs/react-core-linter/web-0.1.0.mp4' />

## Installation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---

title: Managing translations
title: Managing translations
description: How to add or remove languages, keep Mintlify translations current, and edit generated translations with General Translation.
related:
links:
Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/integrations/sanity/guides/meta.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"title": "Guides",
"title": "guides",
"description": "Configure Sanity translations, translate content, manage translations, and query localized documents with General Translation.",
"pages": [
"./configuring-sanity",
Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/integrations/storyblok/reference/connection.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---

title: Connection settings
description: Reference for the settings used to connect a Storyblok space to General Translation. API reference for the Storyblok connection settings.
description: Reference for the settings used to connect a Storyblok space to General Translation. Reference for the Storyblok connection settings.

---

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/integrations/storyblok/reference/locales.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---

title: Locales
description: Reference for how Storyblok space languages map to General Translation locales. API reference for Storyblok locale handling.
description: Reference for how Storyblok space languages map to General Translation locales. Reference for Storyblok locale handling.

---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---

title: Supported content
description: Reference for the Storyblok field types General Translation translates and how content is serialized. API reference for Storyblok supported content.
description: Reference for the Storyblok field types General Translation translates and how content is serialized. Reference for Storyblok supported content.

---

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/overview/for-coding-agents.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Give your agent everything it needs in one paste. Copy the guide below into an `
````markdown title="AGENTS.md"
# General Translation — agent guide

Instructions for AI coding agents adding [General Translation](https://generaltranslation.com) to a project. General Translation is a full-stack localization product: open-source i18n libraries plus a CLI that translate an app and its content into any language. Follow these rules when internationalizing code or wiring up translations.
Instructions for AI coding agents adding [General Translation](https://generaltranslation.com) to a project. General Translation is a full-stack localization product: open-source i18n libraries plus a CLI that translates an app and its content into any language. Follow these rules when internationalizing code or wiring up translations.

## What to use

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/overview/get-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ GT reads your whole codebase and product context, so translations read like they

**What is the difference between internationalization, localization, and translation?** Internationalization prepares your codebase to support multiple languages, translation converts content from one language into another, and localization is the whole process of adapting a product for a locale. See [Key concepts](/docs/overview/key-concepts).

**Do I have to use the platform to use the libraries?** No. The General Translation i18n libraries are free, open-source, and can be configured to load translations from any source. See [React quickstart](/docs/react/react-quickstart).
**Do I have to use the platform to use the libraries?** No. The General Translation i18n libraries are free, open-source, and can be configured to load translations from any source. See [React Quickstart](/docs/react/react-quickstart).

**Which library should I use?** Use `gt-react` for React apps and `gt-next` for Next.js. Use the [Node](/docs/node/quickstart) or [Python](/docs/python/quickstart) libraries for backend services, and the [Core library](/docs/platform/core/quickstart) for lower-level control in any JavaScript runtime.

Expand Down
2 changes: 0 additions & 2 deletions docs/en-US/overview/key-concepts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,6 @@ Understanding the difference between static and dynamic content helps you decide
- **Static content** never changes: raw text and strings a developer can read in the source code, such as "Welcome to my app!". A good rule of thumb is that any text you can read directly in the source is static — even strings that are only rendered conditionally. Static content is translated unless it is a proper noun.
- **Dynamic content** can change at runtime based on the user, environment, or data: a user's name, email, or account balance. You cannot know its value by reading the source alone. When dynamic content resolves to a finite set of known cases — a count that is singular or plural, or a value like *active* vs. *archived* — General Translation can branch on it and generate a correct translation for each case, using logical components like [`<Plural>`](/docs/react/reference/components/plural) and [`<Branch>`](/docs/react/reference/components/branch), or [`<Derive>`](/docs/react/reference/components/derive) to catalog every possible value and translate each variant. See [Handling plurals and branches](/docs/react/guides/handling-plurals-and-branches).



### Variables and formatting

In the i18n libraries, you wrap dynamic values in the [`<Var>`](/docs/react/reference/components/var) component so they stay the same across every language:
Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/platform/core/guides/locale-codes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Some locale tags are functionally equivalent for translation.
For example, `fr` means French, which is equivalent to:

- `fr-FR`, which means French as used in France.
- `fr-FR-Latn` which means French as used in France, written with the Latin alphabet.
- `fr-FR-Latn`, which means French as used in France, written with the Latin alphabet.

The General Translation libraries and platform usually do not distinguish between equivalent codes, since the translation output would be the same.

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/platform/core/guides/translating-files.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ related:

---

The `generaltranslation` library can translate full source files. This page explains how to upload, enqueue, status, and download workflows for files.
The `generaltranslation` library can translate full source files. This page explains how to upload, enqueue, check status, and download workflows for files.

## Before you start [#before-start]

Expand Down
4 changes: 2 additions & 2 deletions docs/en-US/platform/core/quickstart.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---

title: Quickstart
description: Learn what the `generaltranslation` Core library does, when to use it, and how to translate your first string.
description: Learn what the generaltranslation Core library does, when to use it, and how to translate your first string.
related:
links:
- /docs/platform/core/guides/translating-strings
Expand All @@ -12,7 +12,7 @@ related:

The `generaltranslation` library is General Translation's Core i18n library for translation, formatting, and locale utilities.

Most framework apps should start with [gt-react or gt-next](/docs/react/overview). Use `generaltranslation` directly when you want lower-level control, a custom workflow, or translation utilities outside a framework integration.
Most framework apps should start with [`gt-react` or `gt-next`](/docs/react/overview). Use `generaltranslation` directly when you want lower-level control, a custom workflow, or translation utilities outside a framework integration.

## What `generaltranslation` does [#what-it-does]

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/platform/core/reference/types/content.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ description: Supported content formats for translation. API reference for Conten
type Content = JsxChildren | IcuMessage | StringMessage | I18nextMessage;
```

*Note:* the string members (`IcuMessage`, `StringMessage`, `I18nextMessage`) are all aliases for `string`; in the source they are grouped as `StringContent`, so `Content` is equivalently `JsxChildren | StringContent`.
*Note: the string members (`IcuMessage`, `StringMessage`, `I18nextMessage`) are all aliases for `string`; in the source they are grouped as `StringContent`, so `Content` is equivalently `JsxChildren | StringContent`.*

## Members [#members]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: File input structure for file translation workflows. API reference

`FileToTranslate` represents a file object for batch file translation workflows in General Translation.

*Note:* this type is deprecated. The current API uses `FileToUpload` for uploading files (via [`uploadSourceFiles`](/docs/platform/core/reference/gt-class-methods/translation/upload-source-files)) and file reference IDs for queueing translations (via [`enqueueFiles`](/docs/platform/core/reference/gt-class-methods/translation/enqueue-files)).
*Note: this type is deprecated. The current API uses `FileToUpload` for uploading files (via [`uploadSourceFiles`](/docs/platform/core/reference/gt-class-methods/translation/upload-source-files)) and file reference IDs for queueing translations (via [`enqueueFiles`](/docs/platform/core/reference/gt-class-methods/translation/enqueue-files)).*

## Overview [#overview]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type GTConstructorParams = {
};
```

*Note:* the older docs typed this as an `interface`; the current source defines it as a `type` alias.
*Note: the older docs typed this as an `interface`; the current source defines it as a `type` alias.*

## Properties [#properties]

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/platform/core/reference/types/jsx-element.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ The HTML attribute keys map short GT keys to their HTML attributes:
| `arb` | `aria-labelledby` |
| `ard` | `aria-describedby` |

*Note:* transformations are only read on the server side when `t` is `'p'` (plural) or `'b'` (branch).
*Note: transformations are only read on the server side when `t` is `'p'` (plural) or `'b'` (branch).*

### `c` [#children]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type LocaleProperties = {
};
```

*Note:* the older docs typed this as an `interface`; the current source defines it as a `type` alias.
*Note: the older docs typed this as an `interface`; the current source defines it as a `type` alias.*

## Properties [#properties]

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/platform/core/reference/types/variable.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ type VariableType = 'v' | 'n' | 'd' | 'c' | 'rt';
| `'c'` | Currency formatting. |
| `'rt'` | Relative time formatting. |

*Note:* the older docs omitted `'rt'`; it is present in the current source.
*Note: the older docs omitted `'rt'`; it is present in the current source.*

## Example [#example]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ General Translation applies reusable translation instructions through Context Gr

a) **Glossary** defines **key terms**: product and brand names, features, and technical terms. *Example: Locadex is the GT agent. This product name should never be translated.*

b) **Directives** define **style and tone**: audience, formality, conventions, and formatting. *Example: Use active voice, avoid jargon, and use formal “sie”*
b) **Directives** define **style and tone**: audience, formality, conventions, and formatting. *Example: Use active voice, avoid jargon, and use formal “Sie”*

All Context Groups are stored at the Organization-wide level. They can then be applied to one or more Projects.

Expand Down
1 change: 1 addition & 0 deletions docs/en-US/platform/dashboard/reference/api-keys.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ In most SDK and CLI workflows, use the key with your Project ID:
GT_API_KEY=gtx-api-...
GT_PROJECT_ID=...
```

## Manage keys [#manage-keys]

Use descriptive names so keys are easy to identify later.
Expand Down
4 changes: 2 additions & 2 deletions docs/en-US/platform/locadex/guides/configuring-workflows.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Use a stable prefix so Locadex branches are easy to find in GitHub.

Use the toggle buttons to control how Locadex creates and manages pull requests:

- **Auto-merge PRs** merges Locadex pull requests automatically when checks pass. See more information at [Auto-merge Locadex PRs.](/docs/platform/locadex/guides/auto-merging-prs)
- **Auto-merge PRs** merges Locadex pull requests automatically when checks pass. See more information at [Auto-merge Locadex PRs](/docs/platform/locadex/guides/auto-merging-prs).
- **Run on exact content changes** narrows Locadex’s relevance check for the Codegen workflow. When enabled, Locadex checks only the changed lines in the diff. When disabled, it may check the full modified file. This setting does not affect the Translation or Locales workflows.
- **Save local edits** preserves manual translation edits before Locadex runs.

Expand All @@ -68,7 +68,7 @@ The text boxes at the bottom of the page provide additional customizability:
Use commands to run steps such as setup or validation on your Project. Use commands to install dependencies, build your Project, lint generated changes, or run Project-specific checks. Commands can be run before or after Locadex processes files:

- **Pre-process command** runs before Locadex processes files. For example, run `npm run build`.
- **Post-process command** runs after Locadex processes files. For example, run `npm run typecheck` .
- **Post-process command** runs after Locadex processes files. For example, run `npm run typecheck`.

Commands run from the repository root and inside the [Locadex VM image](/docs/platform/locadex/reference/vm-image). If a workflow fails because a package, script, or binary is missing, add a pre-process command.

Expand Down
2 changes: 1 addition & 1 deletion docs/en-US/platform/locadex/guides/managing-languages.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Choose or edit the language your source content is written in. Most English Proj

## Choose target languages [#choose-target-languages]

Choose the languages Locadex should translate into. You can select target languages from all 120 General Translation supported locales. Read more about locales at [Understanding locale codes](/docs/platform/core/guides/locale-codes) and [General Translation supported locales.](/docs/platform/dashboard/reference/supported-locales)
Choose the languages Locadex should translate into. You can select target languages from all 120 General Translation supported locales. Read more about locales at [Understanding locale codes](/docs/platform/core/guides/locale-codes) and [General Translation supported locales](/docs/platform/dashboard/reference/supported-locales).

## Save changes [#save-changes]

Expand Down
Loading
Loading