/generate-translations
Use when new translation keys are added to packages to generate new translations strings
$ npx -y skills add payloadcms/payload --skill generate-translations --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/generate-translations
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when new translation keys are added to packages to generate new translations strings
SKILL.md
generate-translations.SKILL.mdname: generate-translations
description: Use when new translation keys are added to packages to generate new translations strings
allowed-tools: Write, Bash(date:*), Bash(mkdir -p *)
Translation Generation Guide
Payload has two separate translation systems:
1. **Core Translations** - for core Payload packages (packages/ui, packages/payload, packages/next) 2. **Plugin Translations** - for plugins (packages/plugin-\*)
Table of Contents
- [1. Core Translations](#1-core-translations)
- [2. Plugin Translations](#2-plugin-translations)
- [Scaffolding New Plugin Translations](#scaffolding-new-plugin-translations)
- [Important Notes](#important-notes)
---
1. Core Translations
**When to use:** Adding translations to core Payload packages (packages/ui, packages/payload, packages/next)
Steps:
1. **Add the English translation** to `packages/translations/src/languages/en.ts`
- Add your new key/value to the appropriate section (e.g., `authentication`, `general`, `fields`, etc.)
- Use nested objects for organization
- Example:
export const enTranslations = {
authentication: {
// ... existing keys
newFeature: 'New Feature Text',
},
}2. **Add client key** (if needed for client-side usage) to `packages/translations/src/clientKeys.ts`
- Add the translation key path using colon notation
- Example: `'authentication:newFeature'`
- Client keys are used for translations that need to be available in the browser
3. **Generate translations for all languages**
- Change directory: `cd tools/scripts`
- Run: `pnpm generateTranslations:core`
- This auto-translates your new English keys to all other supported languages
---
2. Plugin Translations
**When to use:** Adding translations to any plugin package (packages/plugin-\*)
Steps:
1. **Verify plugin has translations folder**
- Check if `packages/plugin-{name}/src/translations` exists
- If it doesn't exist, see "Scaffolding New Plugin Translations" below
2. **Add the English translation** to the plugin's `packages/plugin-{name}/src/translations/languages/en.ts`
- Plugin translations are namespaced under the plugin name
- Example for plugin-multi-tenant:
export const enTranslations = {
'plugin-multi-tenant': {
'new-feature-label': 'New Feature',
},
}3. **Generate translations for all languages**
- Change directory: `cd tools/scripts`
- Run the plugin-specific script: `pnpm generateTranslations:plugin-{name}`
- Examples:
- `pnpm generateTranslations:plugin-multi-tenant`
- `pnpm generateTranslations:plugin-ecommerce`
- `pnpm generateTranslations:plugin-import-export`
Scaffolding New Plugin Translations
If a plugin doesn't have a translations folder yet, **ask the user if they want to scaffold one**.
Structure to create:
packages/plugin-{name}/src/translations/
├── index.ts
├── types.ts
└── languages/
├── en.ts
├── es.ts
└── ... (all other language files)Files to create:
1. **types.ts** - Define the plugin's translation types 2. **index.ts** - Export all translations and re-export types 3. **languages/en.ts** - English translations (the source for generation) 4. **languages/\*.ts** - Other language files (initially empty, will be generated)
Generation script to create:
1. Create `tools/scripts/src/generateTranslations/plugin-{name}.ts`
- Use `plugin-multi-tenant.ts` as a template
- Update the import paths to point to the new plugin
- Update the targetFolder path
2. Add script to `tools/scripts/package.json`:
"generateTranslations:plugin-{name}": "node --no-deprecation --import @swc-node/register/esm-register src/generateTranslations/plugin-{name}.ts"---
Important Notes
- All translation generation requires `OPENAI_KEY` environment variable to be set
- The generation scripts use OpenAI to translate from English to other languages
- Always add translations to English first - it's the source of truth
- **Core translations**: Client keys are only needed for translations used in the browser/admin UI
- **Plugin translations**: Automatically namespaced under the plugin name to avoid conflicts
Read more
name: generate-translations description: Use when new translation keys are added to packages to generate new translations strings allowed-tools: Write, Bash(date:*), Bash(mkdir -p *)
Translation Generation Guide
Payload has two separate translation systems:
1. **Core Translations** - for core Payload packages (packages/ui, packages/payload, packages/next) 2. **Plugin Translations** - for plugins (packages/plugin-\*)
Table of Contents
- [1. Core Translations](#1-core-translations)
- [2. Plugin Translations](#2-plugin-translations)
- [Scaffolding New Plugin Translations](#scaffolding-new-plugin-translations)
- [Important Notes](#important-notes)
---
1. Core Translations
**When to use:** Adding translations to core Payload packages (packages/ui, packages/payload, packages/next)
Steps:
1. **Add the English translation** to `packages/translations/src/languages/en.ts`
- Add your new key/value to the appropriate section (e.g., `authentication`, `general`, `fields`, etc.)
- Use nested objects for organization
- Example:
export const enTranslations = {
authentication: {
// ... existing keys
newFeature: 'New Feature Text',
},
}2. **Add client key** (if needed for client-side usage) to `packages/translations/src/clientKeys.ts`
- Add the translation key path using colon notation
- Example: `'authentication:newFeature'`
- Client keys are used for translations that need to be available in the browser
3. **Generate translations for all languages**
- Change directory: `cd tools/scripts`
- Run: `pnpm generateTranslations:core`
- This auto-translates your new English keys to all other supported languages
---
2. Plugin Translations
**When to use:** Adding translations to any plugin package (packages/plugin-\*)
Steps:
1. **Verify plugin has translations folder**
- Check if `packages/plugin-{name}/src/translations` exists
- If it doesn't exist, see "Scaffolding New Plugin Translations" below
2. **Add the English translation** to the plugin's `packages/plugin-{name}/src/translations/languages/en.ts`
- Plugin translations are namespaced under the plugin name
- Example for plugin-multi-tenant:
export const enTranslations = {
'plugin-multi-tenant': {
'new-feature-label': 'New Feature',
},
}3. **Generate translations for all languages**
- Change directory: `cd tools/scripts`
- Run the plugin-specific script: `pnpm generateTranslations:plugin-{name}`
- Examples:
- `pnpm generateTranslations:plugin-multi-tenant`
- `pnpm generateTranslations:plugin-ecommerce`
- `pnpm generateTranslations:plugin-import-export`
Scaffolding New Plugin Translations
If a plugin doesn't have a translations folder yet, **ask the user if they want to scaffold one**.
Structure to create:
packages/plugin-{name}/src/translations/
├── index.ts
├── types.ts
└── languages/
├── en.ts
├── es.ts
└── ... (all other language files)Files to create:
1. **types.ts** - Define the plugin's translation types 2. **index.ts** - Export all translations and re-export types 3. **languages/en.ts** - English translations (the source for generation) 4. **languages/\*.ts** - Other language files (initially empty, will be generated)
Generation script to create:
1. Create `tools/scripts/src/generateTranslations/plugin-{name}.ts`
- Use `plugin-multi-tenant.ts` as a template
- Update the import paths to point to the new plugin
- Update the targetFolder path
2. Add script to `tools/scripts/package.json`:
"generateTranslations:plugin-{name}": "node --no-deprecation --import @swc-node/register/esm-register src/generateTranslations/plugin-{name}.ts"---
Important Notes
- All translation generation requires `OPENAI_KEY` environment variable to be set
- The generation scripts use OpenAI to translate from English to other languages
- Always add translations to English first - it's the source of truth
- **Core translations**: Client keys are only needed for translations used in the browser/admin UI
- **Plugin translations**: Automatically namespaced under the plugin name to avoid conflicts
Payload is the open-source, fullstack Next.js framework, giving you instant backend superpowers. Get a full TypeScript backend and admin panel instantly. Use Payload as a headless CMS or for building powerful applications.
Repo: payloadcms/payload
Other skills on payload.
- /audit-dependencies
Use when fixing dependency vulnerabilities, running pnpm audit, or when the audit-dependencies CI check fails
Open skill - /triage-ci-flake
Use when CI tests fail on main branch after PR merge, when investigating flaky test failures, or when user provides a PR URL/number to aggregate all failing tests
Open skill - /ui4-convert-tests
Use when UI changes are complete and e2e tests need updating. Analyzes what changed in UI components and systematically finds/fixes affected tests.
Open skill - /ui4-review
Review UI4 CSS migrations for proper token usage. Checks that CSS variables are used instead of hardcoded values.
Open skill - /ui4
Manually invoked skill for reskinning Payload UI components. Requires Figma URL. Usage: /ui4
Open skill - /payload
Use when working with Payload projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.
Open skill

