Android i18n MCP Server
An MCP server that automatically translates Android app string resources to multiple languages by detecting changes in default strings.xml files using Git diff. It supports batch translation, preserves formatting placeholders, and works with multiple Android modules.
README
Android i18n MCP Server
<div align="right"> <a href="https://github.com/realskyrin/android-i18n-mcp/blob/main/README.md">English</a> | <a href="https://github.com/realskyrin/android-i18n-mcp/blob/main/README-ZH.md">δΈζ</a> </div>
An MCP (Model Context Protocol) server that automatically translates Android app string resources to multiple languages by detecting changes in the default strings.xml files using Git diff.
π Project Introduction Article (Chinese)
Screenshots
<div align="center"> <img src="imgs/9548ffd0aeeebf8617bd116f6e82c3a7.png" alt="Batch Generation of Multi-language Files" width="100%"/> <p><em>Generate multiple language files in one go, batch translation at scale for improved efficiency</em></p> </div>
<div align="center"> <img src="imgs/f8c5cc563a3df28ecfaeda97011d0dbe.png" alt="MCP Tool Execution" width="100%"/> <p><em>MCP tool automatically detecting and translating missing languages</em></p> </div>
Features
- Automatically detects new or modified strings in default
strings.xmlfiles using Git diff - Translates to up to 28 languages (configurable via environment variable)
- Preserves Android string formatting placeholders (%s, %d, %1$s, etc.)
- Supports multiple Android modules
- Batch translation for better performance
- Only translates changed strings to save API costs
- Configurable language selection to optimize API usage
Supported Languages
The server supports translation to 28 languages. You can configure which languages to translate to using the TRANSLATION_LANGUAGES environment variable.
All Supported Languages:
zh-CN- Simplified Chinese (values-zh-rCN)zh-TW- Traditional Chinese Taiwan (values-zh-rTW)zh-SG- Traditional Chinese Singapore (values-zh-rSG)zh-HK- Traditional Chinese Hong Kong (values-zh-rHK)zh-MO- Traditional Chinese Macau (values-zh-rMO)en- English (values-en)es- Spanish (values-es)hi- Hindi (values-hi)fr- French (values-fr)ar- Arabic (values-ar)bn- Bengali (values-bn)pt- Portuguese (values-pt)ru- Russian (values-ru)ur- Urdu (values-ur)id- Indonesian (values-id)de- German (values-de)ja- Japanese (values-ja)sw- Swahili (values-sw)mr- Marathi (values-mr)te- Telugu (values-te)tr- Turkish (values-tr)ko- Korean (values-ko)ta- Tamil (values-ta)vi- Vietnamese (values-vi)az- Azerbaijani (values-az)be- Belarusian (values-be)it- Italian (values-it)uk- Ukrainian (values-uk)
Installation
- Clone the repository:
git clone <repository-url>
cd android-i18n-mcp
- Install dependencies:
npm install
- Build the project:
npm run build
- Configure environment variables:
cp .env.example .env
Edit .env file with your configuration:
ANDROID_PROJECT_ROOT=/path/to/your/android/project
TRANSLATION_PROVIDER=openai
TRANSLATION_API_KEY=your_api_key_here
# Optional:
TRANSLATION_API_BASE_URL=https://api.openai.com/v1
TRANSLATION_MODEL=gpt-4o-mini
# Comma-separated list of languages to translate (optional, defaults to all 28 languages)
TRANSLATION_LANGUAGES=zh-CN,es,fr,de,ja,ko
# Source language setting (optional, defaults to 'en'. If your default strings.xml uses another language like Chinese, set it to 'zh-CN')
TRANSLATOR_SOURCE_LANGUAGE=en
MCP Configuration
Add this server to your MCP client configuration (e.g., CursorοΌClaude Desktop):
{
"mcpServers": {
"android-i18n": {
"command": "node",
"args": ["/path/to/android-i18n-mcp/build/index.js"],
"env": {
"ANDROID_PROJECT_ROOT": "/path/to/your/android/project",
"TRANSLATION_PROVIDER": "openai",
"TRANSLATION_API_BASE_URL": "https://api.deepseek.com/v1",
"TRANSLATION_API_KEY": "your_api_key_here",
"TRANSLATION_LANGUAGES": "zh-CN,es,fr,de", // Optional: specific languages
"TRANSLATOR_SOURCE_LANGUAGE": "en" // Optional: source language (default: en)
}
}
}
}
Codx Configuration Example
Add the following to your codx.toml:
[mcp_servers.android-i18n]
command = "node"
args = ["/path/to/android-i18n-mcp/build/index.js"]
[mcp_servers.android-i18n.env]
ANDROID_PROJECT_ROOT = "/path/to/android/project"
TRANSLATION_PROVIDER = "deepseek"
TRANSLATION_API_BASE_URL = "https://api.deepseek.com/v1"
TRANSLATION_API_KEY = "sk-xxxxxx"
TRANSLATION_MODEL = "deepseek-chat"
TRANSLATION_LANGUAGES = "zh-CN,es,fr,de,ja,ko" # Optional: specific languages
TRANSLATOR_SOURCE_LANGUAGE = "en" # Optional: source language (default: en)
Agent Instruction
You can configure AGENTS.md or CLAUDE.md to have the Agent automatically call MCP when strings.xml files are modified:
## Copy res update Guidelines
- Whenever a strings.xml file is modified, run android-i18n mcp to check and update copy.
Available Tools
1. translate_all_modules
Detects changes in all default strings.xml files across all modules and translates them to all supported languages.
Parameters:
projectRoot(optional): Android project root directory. UsesANDROID_PROJECT_ROOTenv var if not provided.
Example:
{
"tool": "translate_all_modules",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}
2. translate_module
Detects changes in a specific module's default strings.xml and translates to all languages.
Parameters:
modulePath(required): Path to the Android module directory
Example:
{
"tool": "translate_module",
"arguments": {
"modulePath": "/path/to/android/project/app"
}
}
3. check_changes
Checks for uncommitted changes in default strings.xml files without performing translation.
Parameters:
projectRoot(optional): Android project root directory
Example:
{
"tool": "check_changes",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}
4. check_missing_languages
Checks which language directories are missing compared to the configured TRANSLATION_LANGUAGES environment variable.
Parameters:
projectRoot(optional): Android project root directory
Example:
{
"tool": "check_missing_languages",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}
5. create_and_translate_missing_languages
Creates missing language directories and translates the default strings.xml into them for all configured languages.
Parameters:
projectRoot(optional): Android project root directory
Example:
{
"tool": "create_and_translate_missing_languages",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}
How It Works
-
Change Detection: The server uses Git diff to detect which strings have been added or modified in the default
values/strings.xmlfiles since the last commit. -
Batch Translation: Changed strings are translated in batches to the target language using the configured AI translation API.
-
XML Merging: Translated strings are merged into the existing language-specific
strings.xmlfiles, preserving existing translations and only updating changed ones. -
Module Support: The server can process multiple Android modules in a single operation, detecting all
strings.xmlfiles matching the pattern**/src/main/res/values/strings.xml.
Translation Providers
Currently supported:
- OpenAI (including OpenAI-compatible APIs)
- DeepSeek (automatically uses api.deepseek.com endpoint)
Planned support:
- Anthropic Claude
- Google Translate
DeepSeek Configuration Example:
TRANSLATION_PROVIDER=deepseek
TRANSLATION_API_KEY=your_deepseek_api_key
# Optional: defaults to deepseek-chat
TRANSLATION_MODEL=deepseek-chat
# Optional: specific languages to translate (defaults to all 28)
TRANSLATION_LANGUAGES=zh-CN,en,es,fr,de,ja,ko
# Optional: source language (defaults to 'en')
TRANSLATOR_SOURCE_LANGUAGE=en
Configuration Options
Language Selection
You can configure which languages to translate to using the TRANSLATION_LANGUAGES environment variable:
-
Translate to all 28 supported languages (default):
# Don't set TRANSLATION_LANGUAGES or leave it empty -
Translate to specific languages only:
TRANSLATION_LANGUAGES=zh-CN,es,fr,de,ja,ko -
Single language:
TRANSLATION_LANGUAGES=zh-CN
Note: If you specify languages that are not supported, the server will:
- Show a warning listing the unsupported languages
- Display all supported languages for reference
- Continue with only the valid languages from your configuration
Source Language Configuration
By default, the server assumes your default values/strings.xml file uses English (en). If your project uses a different language as the default (e.g., Chinese), you need to configure the source language:
Scenario 1: Default strings.xml uses English (no configuration needed)
# Don't set TRANSLATOR_SOURCE_LANGUAGE, defaults to 'en'
Scenario 2: Default strings.xml uses Chinese
TRANSLATOR_SOURCE_LANGUAGE=zh-CN
Scenario 3: Using other languages as default
# Any supported language code
TRANSLATOR_SOURCE_LANGUAGE=es # Spanish
TRANSLATOR_SOURCE_LANGUAGE=fr # French
TRANSLATOR_SOURCE_LANGUAGE=ja # Japanese
# etc...
Important Notes:
- Correct source language configuration ensures translation quality and accuracy
- Incorrect source language configuration may lead to translation failures or incorrect results
- When the target language matches the source language, text will be copied directly without translation
- Translation validation logic automatically adjusts based on the source language to avoid false untranslated warnings
Development
Run in development mode with hot reload:
npm run dev
Build the project:
npm run build
Project Structure
android-i18n-mcp/
βββ src/
β βββ index.ts # MCP server entry point
β βββ xmlParser.ts # Android strings.xml parsing
β βββ gitDiff.ts # Git diff analysis
β βββ translator.ts # Translation API integration
β βββ translationManager.ts # Translation orchestration
βββ package.json
βββ tsconfig.json
βββ .env.example
βββ README.md
Notes
- The server only translates strings that have
translatableattribute not set tofalse - Deleted strings are automatically removed from translated files
- Translation preserves Android formatting placeholders
- All file operations are atomic - if translation fails for any language, no files are modified
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.