Translate your app release notes to 80+ languages in seconds using OpenAI. Stop wasting hours manually translating "What's New" for every App Store and Play Store update.
Every time you release an app update, you need to write "What's New" text in every language your app supports. If you support 40 languages, that's 40 translations you need to do manually. This is:
- Time consuming (hours of work for each release)
- Expensive (if using professional translators)
- Error-prone (copy-paste mistakes, inconsistent tone)
- Boring (nobody wants to do this)
This CLI tool:
- Takes your English release notes
- Translates them to 80+ languages using GPT-4o-mini (44 for iOS, 82 for Android)
- Outputs files in the exact format App Store Connect and Play Store expect
- Lets you upload to App Store with a single Fastlane command
Total time: ~30 seconds instead of hours.
┌─────────────────────────────────────────────────────────────┐
│ You write release notes in English │
│ "Bug fixes and performance improvements" │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ OpenAI translates to 80+ languages in parallel │
│ (GPT-4o-mini, ~$0.01 per translation batch) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Output files generated: │
│ │
│ iOS (Fastlane format): │
│ └── fastlane/metadata/tr/release_notes.txt │
│ └── fastlane/metadata/de-DE/release_notes.txt │
│ └── fastlane/metadata/ja/release_notes.txt │
│ └── ... (40 languages) │
│ │
│ Android (Play Store format): │
│ └── android/play-store-changelog.txt (direct copy-paste) │
│ └── android/changelogs.md │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Upload to App Store Connect with Fastlane │
│ $ fastlane deliver --skip_binary_upload --force │
└─────────────────────────────────────────────────────────────┘
iOS (44 languages): Arabic, Catalan, Chinese (Simplified/Traditional), Croatian, Czech, Danish, Dutch, English (US/UK/AU/CA), Finnish, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Norwegian, Polish, Portuguese (BR/PT), Romanian, Russian, Slovak, Spanish (ES/MX), Swedish, Thai, Turkish, Ukrainian, Vietnamese
Android (82 languages): All iOS languages plus: Afrikaans, Amharic, Armenian, Azerbaijani, Basque, Belarusian, Bengali, Bulgarian, Burmese, Estonian, Filipino, Galician, Georgian, Gujarati, Icelandic, Kannada, Kazakh, Khmer, Kyrgyz, Lao, Latvian, Lithuanian, Macedonian, Malayalam, Marathi, Nepali, Persian, Romansh, Serbian, Slovenian, Albanian, Swahili, Tamil, Telugu, Zulu
# Clone the repo
git clone https://github.com/quardianwolf/release-notes-ai.git
cd release-notes-ai
# Install dependencies
npm install
# Set up your OpenAI API key
cp .env.example .env
nano .env # Add your OPENAI_API_KEY# Basic usage - translate to all languages
node src/index.js "Bug fixes and performance improvements"
# That's it! Check the ./output foldernode src/index.js "Bug fixes and performance improvements"node src/index.js "Bug fixes" --langs en,tr,de,fr,es,ja,ko,zh-Hansnode src/index.js "What's new?
- Redesigned home screen
- Dark mode support
- Performance improvements
- Bug fixes"node src/index.js -inode src/index.js "Bug fixes" --ios-onlynode src/index.js "Bug fixes" --android-only --version-code 42node src/index.js "Bug fixes" --output ./my-releasenode src/index.js langsAfter running the command, you'll get:
output/
├── fastlane/
│ ├── Deliverfile # Fastlane config
│ └── metadata/
│ ├── en-US/
│ │ └── release_notes.txt # "Bug fixes and performance improvements"
│ ├── tr/
│ │ └── release_notes.txt # "Hata düzeltmeleri ve performans iyileştirmeleri"
│ ├── ja/
│ │ └── release_notes.txt # "バグ修正とパフォーマンスの改善"
│ ├── de-DE/
│ │ └── release_notes.txt # "Fehlerbehebungen und Leistungsverbesserungen"
│ └── ... (44 languages for iOS, 82 for Android)
│
└── android/
├── play-store-changelog.txt # Direct copy-paste to Play Console
└── changelogs.md # All translations in Markdown format
brew install fastlane- Go to App Store Connect
- Navigate to Users and Access → Integrations → App Store Connect API
- Click "+" to generate a new key
- Choose "App Manager" or "Admin" role
- Download the
.p8file (you can only download it once!) - Note the Key ID and Issuer ID shown on the page
Create output/fastlane/api_key.json:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"key": "-----BEGIN PRIVATE KEY-----\nYOUR_P8_FILE_CONTENT_HERE\n-----END PRIVATE KEY-----",
"in_house": false
}Tip: Copy the content of your
.p8file and replace newlines with\n
Update output/fastlane/Deliverfile:
api_key_path "./api_key.json"
app_identifier "com.yourcompany.yourapp"
metadata_path "./metadata"
skip_binary_upload true
skip_screenshots true
submit_for_review falsecd output/fastlane
fastlane deliver --skip_binary_upload --skip_screenshots --forceDone! Check App Store Connect - your release notes are now in 44 languages.
For Android, we generate a play-store-changelog.txt file in the exact format Play Console expects:
<en-US>
Bug fixes and performance improvements
</en-US>
<tr-TR>
Hata düzeltmeleri ve performans iyileştirmeleri
</tr-TR>
...
Steps:
- Open
output/android/play-store-changelog.txt - Copy the entire content
- Paste into Play Console under Release → Release notes → Copy from another release → paste
Or use Fastlane Supply for automation:
cd output/fastlane
fastlane supply --skip_upload_apk --skip_upload_aab --skip_upload_images --skip_upload_screenshots# Generate translations and upload to App Store in one command
node src/index.js "Your release notes here" && cd output/fastlane && fastlane deliver --skip_binary_upload --skip_screenshots --forceThis tool uses OpenAI's GPT-4o-mini model which is very affordable:
- ~$0.02 - $0.05 per full translation batch (82 languages)
- A typical app with weekly releases: ~$2/month
| Variable | Description | Required |
|---|---|---|
OPENAI_API_KEY |
Your OpenAI API key from platform.openai.com | Yes |
The following files contain sensitive data and are excluded from git:
.env- Your OpenAI API key*.p8- Apple private keysapi_key.json- App Store Connect credentialsoutput/- Generated files
Never commit these files to your repository!
| Option | Description | Default |
|---|---|---|
-o, --output <dir> |
Output directory | ./output |
-k, --api-key <key> |
OpenAI API key (or use env) | - |
-v, --version-code <code> |
Android version code | default |
-l, --langs <codes> |
Comma-separated language codes | all |
--ios-only |
Generate only iOS files | false |
--android-only |
Generate only Android files | false |
-i, --interactive |
Interactive mode | false |
PRs welcome! Some ideas:
- Add more translation providers (DeepL, Google Translate)
- Support for app description translation
- Support for keyword translation
- GitHub Action for CI/CD integration
MIT