Getting started
Introduction to langctl
langctl is a modern, CLI-first translation management platform designed specifically for developers who want powerful i18n tools without the enterprise price tag.
What is langctl?
langctl provides everything you need to manage translations across web, mobile, and desktop applications:
- CLI-First Approach: Manage translations directly from your terminal and CI/CD pipelines
- Web Dashboard: User-friendly interface for non-technical team members
- Multi-Platform Support: Pull translations as flat or nested JSON (i18next, vue-i18n, React Native), Android
strings.xml, iOSLocalizable.stringsand Flutter ARB - AI Translation: Fill in missing translations with DeepL, then review them before they ship
- Team Collaboration: Invite team members with role-based permissions
- Module Organization: Group related translations for better organization
Perfect For
Developers, startups, and small teams who need professional translation management without paying $500+/month for enterprise tools like Lokalise or Phrase.
How It Works
langctl follows a simple workflow:
- Create Projects - Set up projects with supported languages
- Add Translation Keys - Create keys with translations for each language
- Organize with Modules - Group related keys (e.g., “auth”, “dashboard”)
- Publish - Mark keys as ready; drafts stay out of your app until they are published
- Pull - Run
langctl pullin your repo (or in CI) to write platform-specific translation files
Key Features
CLI-First Design
Manage everything from your terminal with our powerful CLI:
langctl init # once per repo: pick project, format and path → langctl.json
langctl pull # write translation files
langctl push # upload new strings from your source-language file
langctl keys create mobile-app home.welcome \
--value en="Welcome!" \
--value es="¡Bienvenido!" \
--publish Non-technical team members can use the intuitive web dashboard to:
- Edit translations visually
- Review and approve AI translations
- Import and export files
- Manage the team and API keys
Pull translations in the format your platform needs:
| Platform | Format | Parameter Syntax |
|---|---|---|
| React/Vue/Angular/React Native | json (flat) or nested-json | {{param}} |
| Android | android (strings.xml) | %1$s, %2$s |
| iOS | ios (Localizable.strings) | %1$@, %2$@ |
| Flutter | arb | {param} |
Translate individual keys or in bulk with DeepL:
- Suggest a translation for one language of a key
- Translate missing fills every empty translation for the keys you select
- Placeholders like
{{name}}are kept intact - AI translations are left out of exports and
langctl pulluntil someone approves or edits them
Built for teams with role-based access control:
- Owner: Full access to everything
- Admin: Manage team, projects, and translations
- Member: Create and edit translations
- Viewer: Read-only access for stakeholders
Keep large projects organized by grouping related keys:
auth.login.title
auth.login.subtitle
auth.signup.title
dashboard.welcome.message
dashboard.stats.title Modules can be used to filter what you pull or export (langctl pull -m auth).
See pricing for how langctl’s plans compare with other translation management tools.
langctl is built by developers, for developers:
- Draft/publish workflow: Drafts stay out of your app until they are published, similar to staging/production
- CI/CD ready:
langctl pull --checkfails a build when committed files are out of date - Format conversions: Automatic parameter syntax conversion
- Deterministic output: Sorted keys and no timestamps, so a pull only changes files when translations change
- Module system: Organize like you organize code
Note
langctl handles parameter conversion automatically. Write {{username}} once, and we’ll convert it to %1$s for Android, %1$@ for iOS, and {username} for Flutter when you pull.
Perfect for React, Angular, Vue, or any web framework:
// Your code
t('home.welcome', { name: 'John' })
// langctl handles the translations
// en: "Welcome, {{name}}!"
// es: "¡Bienvenido, {{name}}!"
// fr: "Bienvenue, {{name}}!" Native iOS and Android apps:
// iOS
String(format: NSLocalizedString("home.welcome", comment: ""), name)
// langctl writes: "Welcome, %1$@!" // Android
getString(R.string.home_welcome, name)
// langctl writes: "Welcome, %1$s!" Flutter (ARB) and React Native (JSON):
// Flutter
AppLocalizations.of(context)!.homeWelcome(name)
// langctl writes: "Welcome, {name}!" Getting Started
Ready to get started? Here’s what to do next:
- Quick Start Guide - Get up and running in 5 minutes
- Installation - Detailed setup instructions
- Dashboard Guide - Learn the web interface
- CLI Reference - Master the command line tool
Try It Free
Start with the Free plan - no credit card required. You get:
- 2 projects with up to 3 languages each
- 1,000 translation keys per project
- 300 AI translations per month
- 1 API key, with full CLI and dashboard access
Perfect for side projects and evaluation!
Community & Support
- Documentation: You’re reading it! Use the sidebar to explore all features
- GitHub: github.com/litcode-pvt-ltd/langctl-cli - Report issues, request features
- Email Support: support@langctl.com - Response times by plan are listed on the pricing page
What’s Next?
Continue with the Quick Start Guide to create your first project and start managing translations.