Repository navigation
docs(kb): add 15 knowledge base articles - #649
Conversation
Adds the new articles from #630: - kb/add-i18n-to-nextjs.mdx - kb/ai-agent-i18n-setup.mdx - kb/format-numbers-dates-currencies.mdx - kb/review-translations.mdx - kb/translate-google-slides.mdx - kb/translate-mintlify-docs.mdx - kb/translate-node-app.mdx - kb/translate-react-app.mdx - kb/translate-react-native-app.mdx - kb/translate-sanity-content.mdx - kb/translate-storyblok-content.mdx - kb/translate-strings-outside-jsx.mdx - kb/translate-vue-app.mdx - kb/translations-in-ci.mdx - kb/what-is-locadex.mdx validate-kb.ts accepts an optional updated date (a real date from date to today), which the new articles set, and test-validate-kb.ts covers it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kevinwu98
left a comment
There was a problem hiding this comment.
Validators and tests pass, and most product claims check out against the code and docs. Requesting changes for five factual issues (marked Must fix); the rest are smaller cleanups.
| } | ||
| ``` | ||
|
|
||
| With General Translation, each run translates only content whose source changed, applies the Context Groups (Glossary and Custom Prompts) assigned to the project so terms stay the same across releases, and saves the results to your codebase, so the build ships them. At scale, General Translation is fast: Ramp translated 40,000 keys (millions of words) in a few minutes. The [Generating translations](/docs/cli/guides/generating-translations) guide has the full steps. |
There was a problem hiding this comment.
Must fix: I can't find a source for "Ramp translated 40,000 keys (millions of words) in a few minutes" anywhere in content or gt-cloud. The only other Ramp claim in the KB is "11+ locales." Please cite it or cut it.
Should fix (same line): "saves the results to your codebase" is only true for local storage. In CDN mode (publish: true, no files.gt.output), the results are published to the CDN instead. Suggest adding "(or publishes them to the CDN with --publish)".
There was a problem hiding this comment.
Cut the Ramp sentence in 756bb2e. I found no public source for the figure in content, gt-cloud or on the web.
The same sentence now says the run saves the results to your codebase for the build to ship, or publishes them to General Translation's CDN with --publish for the app to load at run time.
|
|
||
| This walkthrough adds English, Spanish, and French to a small project page. It covers a Server Component, a Client Component, and a language switcher. It uses cookie-based language selection; locale-prefixed URLs and multilingual SEO are a separate step. | ||
|
|
||
| General Translation's `gt-next` is built for Next.js App Router, with direct input from Vercel. It keeps source copy in the JSX that gives it meaning and connects that content to translation generation. Use the [`context` prop](/docs/react/reference/components/t#context) to explain ambiguous wording, and assign [Glossary terms and Custom Prompts](/docs/platform/dashboard/guides/defining-context-for-translations) for terminology and tone. The build workflow below then updates translations as the source changes. |
There was a problem hiding this comment.
Must fix: "with direct input from Vercel" doesn't appear anywhere else in docs, blog, or devlog; it was first written in this PR. Since it's a partnership claim, please remove it unless it can be sourced.
There was a problem hiding this comment.
Removed "with direct input from Vercel" in 756bb2e. The sentence now reads "General Translation's gt-next is built for Next.js App Router."
| related: [review-translations, translate-sanity-content, translate-storyblok-content, translate-mintlify-docs] | ||
| --- | ||
|
|
||
| To translate a Google Slides presentation, you copy the deck once per language and replace the text in every text box, table cell, and speaker note with its translation. It's hard because translated text rarely takes the same space as the original (the phrase "Save changes" runs 63% wider in German and 25% narrower in Japanese), so text overflows its box or leaves gaps that someone has to fix slide by slide. Each copy also goes out of date as soon as someone edits the source deck. |
There was a problem hiding this comment.
Must fix: The 63% / 25% figures come from the landing-page SentenceWidth widget, where they're described as a server-rendered estimate that gets replaced by a measured value, so they vary with the font. Please drop the numbers or present them as approximate.
There was a problem hiding this comment.
Dropped the 63% and 25% figures in 756bb2e. The sentence now says a short English label can run much longer in German, and links the W3C's Text size in translation guide, which gives German examples. That guide says Japanese text often takes more horizontal space than English, so I left Japanese out.
| | Approach | What it does well | Where the translation ends up | What it leaves to you | | ||
| | --- | --- | --- | --- | | ||
| | Translating a copy by hand | A translator sees each slide and can shorten text to fit | A copy you make and name for each language | Every text box, table cell, and speaker note in every language, and finding what changed after each source edit | | ||
| | Google Translate | Translates a whole `.pptx` file in one upload | A downloaded `.pptx` that you convert back to Slides, which turns embedded charts and videos into images | Checking every slide for text that no longer fits, and repeating the round trip after each edit | |
There was a problem hiding this comment.
Must fix: I couldn't find a source for "turns embedded charts and videos into images" when converting from Google Translate's .pptx back to Slides. Please cite a source or soften the claim.
There was a problem hiding this comment.
Softened in 756bb2e. I couldn't find a Google source for the charts and videos claim either. The row now says only that you convert the downloaded .pptx back to Slides as a separate presentation, and the last column says to check every slide after the conversion.
|
|
||
| Use Mintlify's navigation with hand translation when translators cover a few pages that rarely change; use Google Translate or a one-off raw AI API script for a single pass over a small, stable site. Use General Translation when the docs change every release and each language has to keep up. | ||
|
|
||
| General Translation translates Mintlify docs with Locadex, its AI agent, which requires a Starter or Enterprise plan. In the Dashboard, connect GitHub under **Project > Integrations > Catalog**, create an automation from **Generate translations and push** under **Project > Automations** with **Mintlify** as the framework, and click **Run setup** to pick your languages. Locadex opens a pull request with a `gt.config.json`, a `docs.json` navigation entry per language, and the translated pages, where code and components keep their structure and links to translated pages stay in the reader's language. Setup puts every language under a locale prefix, the source included (English pages move to `/en/...`), and restructures files and `docs.json` to match, so review the pull request before you merge. |
There was a problem hiding this comment.
Must fix: This no longer matches current behavior. The Run setup dialog has a Hide default locale in URL paths toggle, and it's on by default (gt-cloud WorkflowSetupNotice.tsx:55). With it on, source pages keep their current paths; they only move under /en/... if the toggle is turned off. The Mintlify docs make the same mistake and are being fixed separately.
There was a problem hiding this comment.
Rewritten in 756bb2e to match the Run setup dialog: Hide default locale in URL paths is on by default, source pages keep their current paths, and each translated language gets its own locale folder, such as /es/.... Turning the toggle off moves the source pages into a locale folder too (/en/...), which changes their URLs.
|
|
||
| In General Translation's Dashboard, open your project, go to **Project > Translations**, choose **Files** or **Components**, and pick the branch and locales. Click a translation cell to edit it; the edit stays a draft until you click **Save**. Labels such as "Needs review," a note, and comment threads attach to one entry in one locale, and the **Filter** icon filters entries by label. The default **Admin** and **Editor** roles can edit and annotate. | ||
|
|
||
| Because General Translation connects your code and translations, [Locadex](/docs/platform/locadex/quickstart), its AI agent which works in your GitHub repository, opens a pull request for Dashboard changes such as manual edits. Team invites, annotations, and Locadex require a Starter or Enterprise plan, and both plans include unlimited users. Run [`npx gt save-local`](/docs/cli/reference/commands/save-local) after editing a downloaded translation file by hand to send the edit back to the platform. The [Reviewing and editing translations](/docs/platform/dashboard/guides/reviewing-translations) guide has the full steps. |
There was a problem hiding this comment.
Must fix: No code path opens a Locadex pull request when someone edits in the Dashboard. The triggers are pull request, commit, manual, and webhook. What happens is that the next Locadex translation run downloads the platform translations, edits included, and commits them. Suggest: "the next Locadex translation run brings Dashboard edits into a pull request." The summary on line 3 has the same claim.
There was a problem hiding this comment.
Fixed in 756bb2e with your wording. Line 22 now says the next translation run by Locadex downloads the project's translations, Dashboard edits included, and brings them into a pull request.
The summary on line 3 and the General Translation row of the table made the same claim. Both now say the next Locadex translation run brings the edits into a pull request.
|
|
||
| **Auto-merge** is off by default; turned on, it merges Locadex pull requests when checks pass. | ||
|
|
||
| Locadex translations follow the [Context Groups](/docs/platform/dashboard/guides/defining-context-for-translations) assigned to your General Translation project (a Glossary that pins product terms and Custom Prompts that set tone). Locadex can also bring manual Dashboard edits into GitHub as pull requests. |
There was a problem hiding this comment.
Must fix: Same issue as in review-translations: Dashboard edits reach GitHub through the next Locadex translation run, not through a pull request opened for each edit.
There was a problem hiding this comment.
Fixed in 756bb2e. The sentence now reads "the next Locadex translation run brings Dashboard edits into a pull request."
| related: [ai-agent-i18n-setup, add-i18n-to-nextjs, translate-mintlify-docs, translations-in-ci, i18n-without-translation-files] | ||
| --- | ||
|
|
||
| ## What is Locadex? |
There was a problem hiding this comment.
Should fix: The other articles open with a direct answer and the approach table; this one opens with a heading and puts the table at the end. Also, "requires a Starter or Enterprise plan" appears twice (lines 24 and 65), and "Starter has a $0 platform fee" (line 65) copies pricing; please link to the pricing page instead.
There was a problem hiding this comment.
Done in 756bb2e. The article now opens with the direct answer, then the approach table and the paragraph on when to use each approach, then the templates, setup and repository sections. The plan requirement appears once, at the start of "How it works", and the platform fee sentence is replaced by a link to the pricing page.
| title: What does the Locadex agent do? | ||
| summary: Locadex is General Translation's AI agent which internationalizes your code and translates your content in your GitHub repository. Its automations run when a pull request is opened, when a commit is pushed, or when you start one, and every change arrives as a pull request. | ||
| date: 2026-10-13 | ||
| updated: 2026-10-14 |
There was a problem hiding this comment.
Should fix (applies to all 15 articles): date: 2026-10-13 and updated: 2026-10-14/16 are older than the publish date, so the articles would go live showing an out-of-date "Last updated." Please set date to the merge date and drop updated on new articles. Jackie's 10-19 edit to this file also didn't bump updated.
There was a problem hiding this comment.
Done in 756bb2e. All 15 new articles now have date: 2026-10-21 and no updated field. The merge date isn't known yet, so the PR description asks whoever merges to bump date if it lands later.
The validator change stays in this PR, because the five revised articles in the stacked PR still set updated.
|
|
||
| Translate by hand in Storyblok's editor when you have a few stories and a translator for each language; nothing more is needed. Use Google Translate or a raw AI API when someone checks a one-off batch by hand; use General Translation when stories change often or span many blocks and languages. | ||
|
|
||
| General Translation's Storyblok integration runs from the Dashboard, with nothing to install, and requires a Starter or Enterprise plan. Add your target languages in Storyblok under **Settings > Internationalization** and create a personal access token under **My account > Account settings > Personal access tokens**. In the Dashboard, open **Project > Integrations > Catalog**, click **Connect** on **Storyblok**, and enter the **Space ID**, **Region**, and token. Choose stories and target locales, check **Auto-enable supported fields** if supported fields aren't translatable yet (it updates every component in the space), and click **Sync and apply**. The run writes each language into the story as a draft and publishes nothing: review and publish the draft in Storyblok, and request it with `language` (add `version=draft` to preview). Each rerun reuses the translations in the story, including values you edited in Storyblok, and translates new or changed fields. The [Storyblok Quickstart](/docs/integrations/storyblok/quickstart) has the full steps. |
There was a problem hiding this comment.
Should fix: The Storyblok Quickstart says Settings > Languages and My account > Personal access tokens; this article says Settings > Internationalization and adds an Account settings step. Please match the Quickstart, or update both if Storyblok's UI has changed.
There was a problem hiding this comment.
Storyblok's UI has changed, so I updated the docs to match the article, in 97d1a7b. Storyblok's own docs put languages under Settings > Internationalization (Internationalization) and tokens under My account > Account settings > Personal access tokens (Access tokens).
The article already used those names, so it is unchanged. The Quickstart, the configuration guide and the locales and connection reference pages now use them too.
- translations-in-ci: cut the unsourced Ramp figure, and say that --publish sends results to the CDN instead of the codebase. - add-i18n-to-nextjs: drop the unsourced "direct input from Vercel". - translate-google-slides: replace the widget's width percentages with a sourced general statement, and drop the unsourced claim that the .pptx round trip turns charts and videos into images. - translate-mintlify-docs: describe the Hide default locale in URL paths toggle, which is on by default and keeps source paths unchanged. - review-translations and what-is-locadex: Dashboard edits reach GitHub through the next Locadex translation run, not a pull request per edit. - what-is-locadex: open with the direct answer and the approach table, state the plan requirement once, and link the pricing page. - All 15 articles: set date to 2026-10-21 and drop updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Storyblok's own docs now place languages under Settings > Internationalization and personal access tokens under My account > Account settings > Personal access tokens. Update the Quickstart, the configuration guide and both reference pages to match, so they agree with the Storyblok knowledge base article. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main now keeps the knowledge base in kb/en-US/ (#671) and requires a short description when a summary is too long for a meta description (#662). The merge has no textual conflicts. The validator tests this branch added for `updated` now expect kb/en-US/ paths, to match the rest of main's tests. The 15 new articles move in the next commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Follows #671, which keeps the English knowledge base source in kb/en-US/. Renames only; the content is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each summary is longer than the 200-character meta description limit that main's validator now enforces (#662), so each article gets a description of 200 characters or fewer that answers its question on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in main by way of #649's branch: the knowledge base now lives in kb/en-US/ (#671), and every article has a meta description (#662). The five revised articles move to kb/en-US/ with their revised bodies and summaries. Each frontmatter conflict keeps this branch's summary and takes main's description line, rewritten to match the revised summary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The revisions publish with this PR, so an updated date of 2026-10-16 would show an older "Last updated" than the publish date, the issue raised in review on #649. best-localization-software already has 2026-10-21. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Synced with main in 7562e7c. Following #671, the 15 new articles moved to |
ai-agent-i18n-setup said Locadex automation "is available across accounts". Locadex workflows require a Starter or Enterprise plan (locadex_workflows in packages/node/src/auth/features.ts), so the sentence now states the plan requirement and links the usage rates. The same article offered "unlimited seats" without the plan. Team invites also require Starter or Enterprise, so it now says both plans include unlimited users, and names the Enterprise feature it means: translation approval. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the new articles - Split the 12 short articles into two or three sections: the approaches compared, the steps with General Translation, and a follow-on section where the content supports one. - Turn each setup sentence into a numbered list. - Replace the Google Translate and raw AI API rows repeated across the articles with alternatives specific to each topic (Lingui, react-intl, nestjs-i18n, @nuxtjs/i18n, expo-localization, date-fns, translation management systems), linked to the KB comparisons or the library's docs. - Credit Kevin Liu and Kevin Wu as authors on all 15 articles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kevinwu98
left a comment
There was a problem hiding this comment.
All review fixes check out. I pushed f812378: headings and numbered steps in the 12 short articles, topic-specific alternatives in place of the repeated Google Translate and raw AI API rows, and Kevin Liu and Kevin Wu as authors. Please bump date to the merge day before merging.


This PR adds 15 knowledge base articles. It is the first half of #630, split so the new articles and the edits to the five original articles can be reviewed apart; the edits are in the PR stacked on this one.
The articles
Each one answers one question in the style guide's AEO format: the direct answer first, an approach table with General Translation in the last row, when to use each approach, and the exact steps. On generaltranslation.com each article is led by its film (the KB pages in generaltranslation/gt-cloud#5388).
add-i18n-to-nextjsai-agent-i18n-setupformat-numbers-dates-currenciesreview-translationstranslate-google-slidestranslate-mintlify-docstranslate-node-apptranslate-react-apptranslate-react-native-apptranslate-sanity-contenttranslate-storyblok-contenttranslate-strings-outside-jsxtranslate-vue-apptranslations-in-ciwhat-is-locadexJackie's edits from #630 are included: the consolidated setup guides, usage costs, product access and Enterprise governance, and the pricing link. The categories are a first pass; change any that file better elsewhere.
Validator
The revised articles in the stacked PR set an
updateddate, soscripts/validate-kb.tsacceptsupdated(a real date, not in the future, not beforedate), with tests inscripts/test-validate-kb.ts. The 15 new articles setdateand noupdated.Dates
Each new article has
date: 2026-10-21. Whoever merges this: if it lands after October 21, bumpdatein the 15 articles to the merge day.Storyblok docs
The Storyblok Quickstart, configuration guide and two reference pages now use Storyblok's current menu names (Settings > Internationalization, My account > Account settings > Personal access tokens), taken from Storyblok's own documentation, so they match the Storyblok article.
Checks
On this branch, merged with main at 3ada815, with the 15 articles in
kb/en-US/and a meta description on each:npm test,validate:unsafe-html,validate:callouts,validate:reference-links,validate:structure,validate:blog-order,validate:kb(49 articles),typecheck,validate-links.tsand the content app build all pass. Everyrelatedslug and/kb/link resolves on this branch.🤖 Generated with Claude Code
KB editorial audit — October 19: The Locadex article now presents repository setup and supported run controls without a failure/restart narrative. KB, internal-link, reference-link, and unsafe-HTML validation pass. Engineering defect evidence stays outside published KB prose; the NestJS scanner reproduction is tracked in generaltranslation/gt#2474. This audit does not merge or publish the articles.
Follow-up fixes
Kevin Wu's ten review comments are fixed in 756bb2e and 97d1a7b and answered on each thread. A further check of every product claim in the 15 articles found one more: 38fd184 fixes the Locadex plan claim in
ai-agent-i18n-setup. Automation needs the Starter or Enterprise plan, aslocadex_workflowsin gt-cloud'sfeatures.tsrequires, so "available across accounts" now states that requirement and links /pricing/usage; "unlimited seats" and "translation approval" are scoped to the plans that include them.