# shipglobal.dev > Software (desktop app + web app) that translates iOS .strings/.stringsdict/.xcstrings, Android strings.xml, JSON i18n, Flutter .arb, XLIFF and Markdown files locally on your machine using AI models. 64 languages, local translation memory. --- ## What is shipglobal.dev? shipglobal is software that app developers run themselves — a desktop app for macOS and Windows, and a web app at app.shipglobal.dev. It translates localization files locally on your machine using AI models (currently OpenAI). The website shipglobal.dev sells the subscription, issues license keys and meters usage; translation itself never happens on our servers, and files are never uploaded to us. **Target audience:** iOS developers, Android developers, web developers, indie developers, app studios **Problem we solve:** Traditional translation agencies are slow (days/weeks) and expensive. Manual translation with a chat AI is time-consuming and error-prone. shipglobal automates the process while keeping placeholders, plurals and file structure intact — and remembers what has already been translated. --- ## Key Features ### Multi-Format Support - **iOS** — Localizable.strings, .stringsdict, and .xcstrings string catalogs for Swift/Objective-C projects - **Android** — strings.xml for Kotlin/Java projects - **JSON i18n** — For web frameworks (React, Vue, Angular, Next.js) - **Flutter** — .arb files - **XLIFF** — Standard interchange format - **Markdown** — .md/.mdx content files Maximum file size per run: 10 MB. ### Local Translation Memory The translation memory lives on your machine, in your project folder (.apptranslate/tm..json) — never on our servers. When you update your app, only new or changed strings are sent to the AI model; reused strings cost nothing. **How it works:** 1. First run: every string is new and is translated 2. Every run after that: only new or changed strings cause usage 3. Unchanged strings: reused from the local memory, free forever ### The Diff Step Before every run the engine diffs your file against the local memory and marks every string as new, reused or changed — with the price shown before you commit. A release update where 15 of 3,627 strings changed costs cents, because the other 3,612 are already in memory. ### Placeholder Protection Automatically preserves placeholders like: - `%@`, `%lld` (iOS) - `%s`, `%d`, `%1$s` (Android) - `{variable}`, `{{variable}}` (JSON/web) - `` tags ### Quality Assurance - Format validation ensures placeholders remain intact — translations that fail the check are not written - Plural forms (ICU, .stringsdict, .xcstrings variations) survive the round trip - Key coverage is checked: if a key would be missing, the download stops instead of shipping an incomplete file - Existing languages in a string catalog are kept — new ones are added, nothing is overwritten ### CVMS — Cultural Vibe Matching System Included in every translation, at no extra cost and with no setup. CVMS analyses the cultural context of the target market and adapts register, emotional tone, directness, level of detail and trust signals accordingly — e.g. factual and privacy-forward for German, warmer and more personal for Spanish, team-oriented and safety-focused for Japanese. ### Runs Locally Translation runs in the desktop app or in the web app on your machine. Our servers only check the license key and receive usage reports. ### Desktop App - macOS · Apple Silicon (macOS 12 or newer, M1 and later) - macOS · Intel (macOS 12 or newer) - Windows 10 or newer, 64-bit Free to download; translating requires an active license key. The app self-updates and installs signed builds only. --- ## Supported Languages 64 languages. The full, current list is on the website. --- ## How It Works ### Step 1: Open Your File Point the desktop app or the web app at your localization file. It stays on your machine — there is no upload to our servers. ### Step 2: Select Target Languages Choose from 64 supported languages. Each language costs its own tokens; there is no bundle to grow into. ### Step 3: Review the Plan Before every run, the engine diffs your file against your local translation memory and shows which strings are new, changed or reused. Only new and changed strings go to the AI model. ### Step 4: Translate and Ship The translated files come back in the same format, with the same keys and the same order. Usage is measured in tokens and billed with your monthly invoice — or not at all if you use your own model key. --- ## Pricing Details All prices include VAT. Subscriptions are sold by Lemon Squeezy, LLC as Merchant of Record, which handles payment, VAT, invoices and refunds. Cancel monthly via the customer portal. The model is: **monthly base fee (plan) + measured tokens**. The base fee pays for the engine — the part that keeps placeholders, plurals and structure intact and knows in advance which string is actually new. ### Plans - **Single Dev**: €19/month, 1 seat. One seat = one machine; switching machines is fine, using two at once is not. - **Business**: €105/month, 10 seats at a fixed price (€10.50 per seat). Onboarding — installation, license keys, first projects, a short training — is **optional** and chosen at checkout as a separate variant: €299 one-time. Nobody pays it who does not want it. - **Enterprise**: negotiated individually, invoiced annually by PO, licenses set up by hand. No self-checkout. There is no plan between 1 and 10 seats: seat counts are fixed per plan, so anyone needing two to nine machines buys several Single subscriptions. Engine, formats, languages and token price are identical across all plans. ### Usage - **€10 per million tokens** (input + output combined), billed in units of 1,000 tokens (= 1 cent), rounded up once per run - Charged **only** when translating via our model key — there is no free quota and no minimum - **Bring your own key**: use your own OpenAI key and pay no token costs to us; requests then go directly from your machine to the provider. The base fee remains — it pays for the engine, not for tokens. ### Translation Memory Savings Strings already in your local translation memory are never sent to a model again and never billed. A release update where only a handful of strings changed costs cents. --- ## Security & Privacy - No file uploads: your files never reach our servers - Only the text to be translated is sent to the AI provider (OpenAI, L.L.C., USA), from your machine - The translation memory stays in your project folder — we cannot read or use it - Usage reports contain only token counts, model name, target-language code, a bring-your-own-key flag and a timestamp — never content, file names or project names - GDPR compliant; a data processing agreement pursuant to Art. 28 GDPR is in place with OpenAI, and API data is not used to train their models - Infrastructure: Vercel, Supabase (servers in Frankfurt), OpenAI, Fly.io, Lemon Squeezy (as an independent controller) --- ## Technical Integration ### iOS (Swift/Objective-C) Translate your `Localizable.strings`, `.stringsdict` or `.xcstrings` files. The translated files keep the same format, ready for your Xcode project. Existing languages in a string catalog are kept — new ones are added. ### Android (Kotlin/Java) Translate your `strings.xml`. Output follows the locale folder convention (`values-de/strings.xml`, etc.). ### Web (React, Vue, Angular, Next.js) Translate your JSON i18n files. Works with react-intl, react-i18next, next-intl, vue-i18n, Nuxt i18n and similar libraries. ICU plurals and nested keys survive. ### Flutter Translate `.arb` files. ### CLI Run translations from the command line, e.g. `npx shipglobal translate ./locales/en.json --to de,fr` — useful for CI. --- ## FAQ **Q: How accurate are the translations?** A: Translations are produced by AI models with context awareness, plus CVMS cultural adaptation. Formatting, placeholders and special characters are preserved and validated; review the result before you publish it. **Q: Do my files get uploaded?** A: No. Translation runs locally. Only the text to be translated is sent to the AI provider — via our model key or your own. **Q: What file formats are supported?** A: iOS .strings/.stringsdict/.xcstrings, Android strings.xml, JSON i18n, Flutter .arb, XLIFF and Markdown. Up to 10 MB per file. **Q: What does it cost?** A: €19/month for Single Dev (1 seat) or €105/month for Business (10 seats), plus €10 per million tokens when translating via our model key. With your own model key there are no token costs. Prices include VAT. **Q: Is there a free plan or trial quota?** A: No. Because you can bring your own model key, an allowance would pay for exactly the wrong case. The base fee is access to the engine, not the purchase of a quantity of translation. **Q: Can I cancel or get a refund?** A: The subscription is cancellable monthly via the Lemon Squeezy customer portal. Refunds are handled by Lemon Squeezy as the seller. Usage charged for a failed run is refunded. --- ## Company Information **Operated by:** Balane GmbH, Balanstraße 84, 81541 Munich, Germany **Managing Director:** Jonas David Höttler **Contact:** - Website: https://www.shipglobal.dev - Web app: https://app.shipglobal.dev - Support: https://www.shipglobal.dev/en/support - Email: contact@balane.tech Site languages: English (/en) and German (/de). --- ## Links - [Homepage](https://www.shipglobal.dev/en) - [How It Works](https://www.shipglobal.dev/en/how-it-works) - [Pricing](https://www.shipglobal.dev/en/pricing) - [Download](https://www.shipglobal.dev/en/download) - [CVMS](https://www.shipglobal.dev/en/cvms) - [iOS Localization](https://www.shipglobal.dev/en/ios-localization) - [Android Localization](https://www.shipglobal.dev/en/android-localization) - [React i18n](https://www.shipglobal.dev/en/react-i18n) - [Vue i18n](https://www.shipglobal.dev/en/vue-i18n) - [Flutter Localization](https://www.shipglobal.dev/en/flutter-localization) - [App Translation](https://www.shipglobal.dev/en/app-translation) - [Website Translation](https://www.shipglobal.dev/en/website-translation) - [JSON ↔ strings.xml Converter](https://www.shipglobal.dev/en/json-to-android-strings-xml) - [Tools overview](https://www.shipglobal.dev/en/tools) - [i18n key diff](https://www.shipglobal.dev/en/i18n-key-diff) - [XLIFF Viewer](https://www.shipglobal.dev/en/xliff-viewer) - [.strings ↔ .xcstrings](https://www.shipglobal.dev/en/strings-to-xcstrings) - [.xcstrings ↔ JSON](https://www.shipglobal.dev/en/xcstrings-to-json) - [.strings ↔ JSON](https://www.shipglobal.dev/en/strings-to-json) - [.arb ↔ JSON](https://www.shipglobal.dev/en/arb-to-json) - [.po ↔ JSON](https://www.shipglobal.dev/en/po-to-json) - [.resx ↔ JSON](https://www.shipglobal.dev/en/resx-to-json) - [.properties ↔ JSON](https://www.shipglobal.dev/en/properties-to-json) - [CSV ↔ JSON](https://www.shipglobal.dev/en/csv-to-json) - [YAML ↔ JSON](https://www.shipglobal.dev/en/yaml-to-json) - [JSON ↔ XLIFF](https://www.shipglobal.dev/en/json-to-xliff) - [Lokalise alternative](https://www.shipglobal.dev/en/lokalise-alternative) - [Lokalise pricing](https://www.shipglobal.dev/en/lokalise-pricing) - [Crowdin alternative](https://www.shipglobal.dev/en/crowdin-alternative) - [Crowdin pricing](https://www.shipglobal.dev/en/crowdin-pricing) - [Phrase alternative](https://www.shipglobal.dev/en/phrase-alternative) - [Phrase pricing](https://www.shipglobal.dev/en/phrase-pricing) - [POEditor alternative](https://www.shipglobal.dev/en/poeditor-alternative) - [POEditor pricing](https://www.shipglobal.dev/en/poeditor-pricing) - [Weglot alternative](https://www.shipglobal.dev/en/weglot-alternative) - [Transifex alternative](https://www.shipglobal.dev/en/transifex-alternative) - [Blog](https://www.shipglobal.dev/en/blog) - [Guides](https://www.shipglobal.dev/en/guides) - [Comparisons](https://www.shipglobal.dev/en/compare) - [Use Cases](https://www.shipglobal.dev/en/use-cases) - [About Us](https://www.shipglobal.dev/en/about) - [Support](https://www.shipglobal.dev/en/support) - [Privacy Policy](https://www.shipglobal.dev/en/privacy) - [Terms of Service](https://www.shipglobal.dev/en/terms) - [Legal Notice](https://www.shipglobal.dev/en/impressum)