Skip to content
cccskills
FreePublished on GitHub

update-translations

Update interface translations after English text changes. Find missing or outdated messages, translate them across the listed languages, preserve placeholders and plural forms, and check the results for consistency and clipped labels.

OriginalShow the original description

Bring the web app's interface translations up to date with its English text. Use for the periodic translation update, when `bun run i18n:status` reports missing or stale messages, or when asked to translate new UI text.

macro-inc/macro5,635 stars(GitHub 5,635 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Updating translations after English UI copy changes
  • Finding untranslated interface messages
  • Checking placeholders and plural forms
  • Reviewing translated labels for clipping

Files included (1)

  • SKILL.md3.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Update interface translations

Changes add and edit English only; this update translates them into every other interface language. Run everything from apps/web. Conventions are in .agents/rules/web/i18n.md; wording is in src/lib/i18n/glossary.md.

1. Start from main

git fetch origin main && git checkout -B i18n/update-<yyyy-mm-dd> origin/main.

2. Find untranslated text

  • bun run i18n:status --json lists, per language, messages that are missing (no translation), stale (the English changed since it was translated), or have a placeholderMismatch.
  • English that never went through t() doesn't show there. Literal labels on menu items fail CI (tsx-menu-label-translated), but other surfaces can slip through: labels in config objects (label: 'Foo'), sidebar and command definitions, tab names. Read the apps/web/src diff of changes merged since the last update (git log --since='8 days ago' --format='%h %s' origin/main -- apps/web/src) for user-visible text with a string literal in new UI, menus, or navigation. Move each into src/lib/i18n/locales/en/<namespace>.ts and render it with t(), following the rule. Leave surfaces that aren't translated yet (most page content; the slides, canvas, spreadsheet, and database editors) alone, so no page mixes languages.

Nothing missing, stale, or newly converted: stop, without a branch or PR.

3. Translate

For each key, write the translation in every src/lib/i18n/locales/<language>.ts file, in the key's namespace, in the same order as English.

  • Translate from the current English and the surface it appears on (find it with grep -rn "'<namespace>.<key>'" src), not from the old translation.
  • Use the glossary's form of address and its words for product terms. A new product term gets a row in every language's glossary table.
  • Keep {{placeholders}} exactly; use the language's quotation marks.
  • A plural English message (an object such as { one, other }) is an object in every language, with exactly the language's plural categories: new Intl.PluralRules('<language>').resolvedOptions().pluralCategories (Polish and Russian one, few, many, other; French, Spanish, Italian and Portuguese add many for millions; Japanese, Korean, Chinese, Indonesian, Vietnamese and Thai only other). The tests check the forms.
  • Prefer the shorter of two equally clear wordings; menus cap at 22rem.
  • Don't touch translations that aren't missing or stale, and never edit the English.

4. Record and check

  1. bun run i18n:status --accept all, then bun run i18n:status: every language reports up to date.
  2. bun run test -- src/lib/i18n passes (stray keys, placeholders).
  3. just test-i18n-browser passes in every language. A clipped label lists its text: shorten that translation rather than widening the menu. The check renders every key in the context-menu namespaces; a label in another namespace that renders in a narrow space gets added to MENUS in src/lib/i18n/browser-test/menus.tsx.
  4. Converted any literals in step 2? bunx --yes @ast-grep/cli@0.44.1 scan from the repository root, and the tests of the touched features.

5. Open the PR

Commit and open a ready-for-review PR per the git skill, titled like chore(web): update interface translations. Say which messages changed and why (new, changed English, converted literals), and list any glossary terms added so a native speaker can check them.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

add-sdk-endpoint

FreeSummary

Expose new backend API endpoints through the TypeScript SDK, or record intentional exclusions. Follow existing entity and client conventions, check generated request types, and verify that each endpoint is either used by the SDK or explicitly skipped.

  • Adding SDK support for a new Rust service endpoint
  • Investigating endpoints reported as uncovered
  • Recording agreed SDK exclusions
macro-inc/macro5.6KUpdated Oct 29, 2026

add-tour

FreeSummary

Add or update guided feature tours in the web app. Covers registering interface targets, writing steps, guiding users toward hidden controls, and checking the tour with saved progress and different sidebar states.

  • Add a guided tour to a view
  • Revise tour steps and their target controls
  • Guide users toward controls in a collapsed sidebar
macro-inc/macro5.6KUpdated Oct 29, 2026

audit

FreeSummary

Identify the checks required for changed files, run tests, and review applicable project rules. Get a table of passed, failed, and skipped checks with evidence, helping you verify changes before handoff or pushing code.

  • Checking changes before reporting work complete
  • Reviewing required checks before pushing code
  • Finding missing tests or documentation updates
macro-inc/macro5.6KUpdated Oct 29, 2026

Review and structure Rust backend changes using hexagonal architecture, which separates business rules from external interfaces. Check dependency direction, place authorization policy in domain services, and keep database operations and external clients behind defined interfaces.

  • Reviewing layer boundaries before Rust backend changes
  • Moving permission decisions into domain services
  • Separating database and external client implementations
macro-inc/macro5.6KUpdated Oct 29, 2026

Guide the integration of collaboratively edited Markdown fields into an application feature. It explains service selection, permissions inherited from parent records, content storage in Loro sessions, and how to initialize and retire each editing surface.

  • Adding a collaboratively edited description field
  • Implementing shared input through a public API
  • Connecting editing permissions to a parent record
macro-inc/macro5.6KUpdated Oct 29, 2026

create-ai-tool

FreeSummary

Add a new AI tool to an existing Rust application, from implementation and service connections to infrastructure configuration, generated TypeScript types, and a frontend component that displays the tool's results.

  • Adding an AI tool to an existing Rust application
  • Connecting a tool to services and environment variables
  • Generating frontend types from tool schemas
macro-inc/macro5.6KUpdated Oct 29, 2026

See all skills by macro-inc

Report a problem with this skill