Translation Coordinator logo

Translation Coordinator

Community
artemnovichkov
translation-coordinator

Coordinates translation of an Xcode project or its String Catalogs (.xcstrings) into other languages. This is the main skill to activate when asked to work on translating strings, adding languages or working with .xcstrings files. Handles the full workflow: preparing the project for a new language, fetching untranslated strings, delegating translation work, and verifying results.

Overview

Publisherartemnovichkov
Repositoryxcode-skills
Skill nametranslation-coordinator
Stars
67
Forks
1
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by artemnovichkov on GitHub. Read the source before you install it.

Installation

Install the Translation Coordinator AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/artemnovichkov/xcode-skills/tree/main/skills/translation-coordinator
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/artemnovichkov/xcode-skills.git /tmp/xcode-skills
mkdir -p .claude/skills
cp -r /tmp/xcode-skills/skills/translation-coordinator .claude/skills/translation-coordinator
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Translation Coordinator in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Translation Coordinator on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Translation Coordinator is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Localization Coordinator

Orchestrate the translation of an Xcode project by preparing it, fetching untranslated strings, and delegating translation work to sub-agents. Access String Catalogs only through the tools below—never write .xcstrings files directly. Never translate strings directly. Instead, fetch the context that sub-agents need to succeed as translators.

Quick Reference

ToolPurpose
LocalizationPlannerPrepare project for new language (creates String Catalogs, adds locale) or other localization changes
StringCatalogReadGet string keys by translation state (new, needs_review, translated, machine_translated)

Workflow

1. Prepare the Project (Optional)

Call LocalizationPlanner first when adding a new language to a project. Skip if the user instructs you to, or if the user only requested translation of a few specific strings.

If the tool's nextStep output says to build the project, build the project—only building extracts strings from code into newly created String Catalogs.

2. Select Relevant String Catalogs

Identify all String Catalogs relevant to the user's request. If the user's request is very broad, all catalogs may be relevant.

3. Get Strings to Translate

If the prompt already contains per-locale key lists, skip this step, as you have already been given the keys and languages to translate. Otherwise, call StringCatalogRead with the file path, target locale, and requestedState: "new" to get untranslated strings. You can also request "needs_review" or "machine_translated" states to improve existing translations.

If totalForRequestedState exceeds the number of returned keys, paginate by increasing offset until you have collected all keys. Collect all keys before moving to step 4.

The keys are unique identifiers to strings in this String Catalog. Use them exactly as returned by this tool in any operations or operations in sub-agents that you conduct.

4. Delegate Translations

Split the fetched strings into batches and delegate each batch to a sub-agent.

  1. Split the strings you fetched from StringCatalogRead into batches of up to 15 strings each. Smaller batches produce better translations because sub-agents can dedicate more attention to context and terminology per string.
  2. Create sub-agents for each batch. You MUST tell each sub-agent to use the xcode-integration:translation skill to translate their batch. Tell them to skip the LocalizationPlanner tool—you ran it for them.
  3. Limit concurrency to 5 sub-agents at a time. Launch at most 5 sub-agents in parallel, then wait for all of them to complete before launching the next group of up to 5. This prevents overloading the system with too many concurrent translation tasks.
  4. Use the keys exactly as returned by the StringCatalogRead tool, and tell each agent to use them verbatim (including any escaping).
  5. Instruct each sub-agent to invoke the xcode-integration:translation Skill, and provide the target locale, the tab identifier, the String Catalog path, and the key list to them. See the examples below for the exact format.
  6. Forward the user's request, terminology and style choices to sub-agents (they don't have access to the user's original prompt, you have to forward it to them). State that any guidance you include takes precedence over the style guide, and that the sub-agent must still read the style guide as the baseline for anything your guidance and existing translations don't cover.

If you have any string keys that represent an app name (e.g. CFBundleDisplayName, CFBundleName), make sure to put them at the top of the first batch to translate. This way subsequent translations can reuse chosen terminology.

5. Verify Results

Once all sub-agents have completed their tasks, use the StringCatalogRead tool to verify the strings you requested to translate are translated.

Collect anything the sub-agents flagged as needing a code change. Pass these to the user with the key and the catalog, so the call site can be fixed.

Tool Reference

LocalizationPlanner

Prepares an Xcode project for localization. Call this each time you are tasked with adding a language to the project, or to translate an entire project or feature. It is ok to skip this tool if requested explicitly.

What It Does

  1. Adds target language to all localizable containers (projects, packages)
  2. Prepares the project for translation by creating String Catalogs as necessary

Inputs

ParameterTypeRequiredDescription
tabIdentifierStringYesWorkspace tab identifier
targetLocaleIdentifierStringYesLocale identifier (e.g., de, pt-PT)

Outputs

FieldTypeDescription
nextStepStringWhat to do next (e.g. "ready for translation")
stepsFailedString?Failed steps requiring manual intervention
changesMadeString?List of changes successfully made
suggestionsString?Non-blocking suggestions the user may want to follow (e.g., migrate .strings to String Catalogs)
stringCatalogPaths[String]Absolute paths to all String Catalogs in workspace

Follow the instructions in the nextStep field.


StringCatalogRead

Returns string keys grouped by translation state for the requested locale. Includes counts of all string keys grouped by translation state. Supports pagination. Curly apostrophes and quotes are escaped (e.g., \u2019 for curly apostrophe, \u201C for curly quote).

Inputs

ParameterTypeRequiredDefaultDescription
tabIdentifierStringYes—Workspace tab identifier
filePathStringYes—Path to String Catalog (relative or absolute)
targetLocaleIdentifierStringYes—Locale to check translations for (e.g., de, pt-PT)
requestedStateString?NonilState to retrieve: new, needs_review, translated, machine_translated. If omitted, only counts for all states are returned.
keyLimitIntNo50Maximum keys to return
offsetIntNo0Keys to skip (for pagination)

Outputs

Always returned:

FieldTypeDescription
newCountIntUntranslated strings
needsReviewCountIntStrings marked needs review
translatedCountIntHuman-translated strings
machineTranslatedCountIntMachine-translated strings

When requestedState is provided:

FieldTypeDescription
requestedStateStringThe requested state bucket
totalForRequestedStateIntTotal keys in state bucket before pagination
returnedCountIntKeys returned after pagination
keys[String]Array of string keys

A key can appear in multiple state buckets if variants have different states.


Critical Rules

  1. Always delegate translation work to sub-agents. Never write a translation yourself.
  2. Use only String Catalog tools to access .xcstrings files. Never read or write them directly.
  3. Complete the entire task—continue until all requested strings are translated.
  4. Use typographically correct quotes and apostrophes for the target language (e.g., „...“ for German, «...» for French). All curly quotes must be escaped (e.g., \u201E...\u201C for German „...“), as well as apostrophes (e.g. \u2019 for curly apostrophe). NEVER XML-escape the ampersand: write a literal &, NOT &amp;. The same goes for all other HTML/XML entities — never write &lt;, &gt;, &quot;, or &apos;; write the literal <, >, ", ' characters instead. The String Catalog stores Unicode text, not XML, so any &amp; would ship verbatim into the app. Other non-ascii characters do not need extra escaping either.
  5. Do NOT skip strings to save time, even when there are hundreds of strings. Don't skip work or cut corners to save time—rather, focus on accuracy and completeness.
  6. Forward keys into sub-agents exactly as you have received them from the StringCatalogRead tool. Escaped strings with \uXXXX sequences might lose one level of escaping during transit. Keep them double-escaped them so the sub-agent receives the original form.
  7. Locale identifiers: If the user provides an explicit locale code, pass it through verbatim to tool calls and to sub-agents — do not normalize, canonicalize, or swap separators (e.g., if told pt_BR, use pt_BR; if told zh-TW, use zh-TW). If the user only names a language/region in prose (e.g., "Brazilian Portuguese", "Traditional Chinese"), derive a BCP 47 identifier with hyphens (pt-BR, zh-Hant) rather than underscores. The explicit-code rule always wins over the BCP 47 default.

Examples

Entire Project
  1. User requests translating the project into Japanese
  2. Agent calls LocalizationPlanner tool. Once completed, the project is ready for localization.
  3. Agent reviews the returned String Catalog paths and selects only those relevant to the user's request.
  4. Agent uses StringCatalogRead on the relevant String Catalogs to understand what string keys need translating.
  5. Agent divides work among subagents, prompting each subagents with the following:

============ Translate the strings for the following keys into Japanese (ja). Skip running the LocalizationPlanner tool. Do NOT spawn further sub-agents. Translate only the keys listed below. Use the xcode-integration:translation Skill.

IMPORTANT: Use the keys EXACTLY as written below, including all escaping. You must preserve this escaping exactly when passing the key to StringCatalogContext and StringCatalogEdit.

  • Tab identifier:
  • String Catalog: path/to/string/catalog.xcstrings
  • Keys:
key1
key2
key3

============

  1. Once all sub-agents have completed, agent uses StringCatalogRead to verify that each requested string has received a translation.
Specific Strings
  1. User requests translation of specific strings in a specific String Catalog into Japanese.
  2. Agent skips LocalizationPlanner and StringCatalogRead since the user already specified which strings to translate.
  3. Agent divides work among sub-agents, prompting each with the following:

============ Translate the strings for the following keys into Japanese (ja). Skip running the LocalizationPlanner tool. Do NOT spawn further sub-agents. Translate only the keys listed below. Use the xcode-integration:translation Skill.

IMPORTANT: Use the keys EXACTLY as written below, including all escaping. You must preserve this escaping exactly when passing the key to StringCatalogContext and StringCatalogEdit.

  • Tab identifier:
  • String Catalog: path/to/string/catalog.xcstrings
  • Keys:
key1
key2
key3

============

  1. Once all sub-agents have completed, agent uses StringCatalogRead to verify that each requested string has received a translation.

Frequently asked questions

What does the Translation Coordinator AI skill do?

Coordinates translation of an Xcode project or its String Catalogs (.xcstrings) into other languages. This is the main skill to activate when asked to work on translating strings, adding languages or working with .xcstrings files. Handles the full workflow: preparing the project for a new language, fetching untranslated strings, delegating translation work, and verifying results.

Why use Translation Coordinator on TypingMind?

Because you install it once and use it with any model. Translation Coordinator is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Translation Coordinator in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/artemnovichkov/xcode-skills/tree/main/skills/translation-coordinator. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Translation Coordinator?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Translation Coordinator?

As many as you like. As long as a model supports skills, you can use Translation Coordinator with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Translation Coordinator AI skill free?

It is published on GitHub by artemnovichkov. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇