Namespaces in software localization
Namespaces are a great way to organize translations in software localization. Learn what namespaces are, why they are important, and how to use them in your localization process.
diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index f90255f6..7da1304a 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -17,6 +17,8 @@ jobs: build-jar: name: "Build JAR" runs-on: ubuntu-latest + outputs: + version: ${{ steps.get-version.outputs.version }} steps: - uses: actions/checkout@v4 name: "Checkout" @@ -29,7 +31,11 @@ jobs: - name: "Build JAR" run: mvn -DskipTests -Pfatjar clean package - name: 'Get version' - run: echo "VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV + id: get-version + run: | + VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "version=$VERSION" >> $GITHUB_OUTPUT - name: 'Upload artifact' uses: actions/upload-artifact@v4 with: @@ -56,11 +62,12 @@ jobs: label: 'linux-arm64' filename: 'simplelocalize-cli' downloadFilename: 'simplelocalize-cli-linux-arm64' - - os: 'macos-13' + # https://github.blog/changelog/2026-02-26-macos-26-is-now-generally-available-for-github-hosted-runners/ + - os: 'macos-26-intel' label: 'mac' filename: 'simplelocalize-cli' downloadFilename: 'simplelocalize-cli-mac' - - os: 'macos-14' + - os: 'macos-26' label: 'mac-arm64' filename: 'simplelocalize-cli' downloadFilename: 'simplelocalize-cli-mac-arm64' @@ -99,3 +106,30 @@ jobs: files: './target/${{ matrix.downloadFilename }}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + bundle-release: + name: "Bundle all files into a single ZIP" + needs: [ build-jar, build-executable ] + runs-on: ubuntu-latest + steps: + - name: "Download all artifacts" + uses: actions/download-artifact@v4 + with: + path: dist + merge-multiple: true + - name: "Create ZIP archive" + run: | + cd dist + zip -j "../simplelocalize-cli-${{ needs.build-jar.outputs.version }}.zip" * + - name: "Upload bundle artifact" + uses: actions/upload-artifact@v4 + with: + name: 'simplelocalize-cli-${{ needs.build-jar.outputs.version }}' + path: 'simplelocalize-cli-${{ needs.build-jar.outputs.version }}.zip' + - name: 'Upload bundle to Release' + if: github.event_name == 'release' + uses: softprops/action-gh-release@v1 + with: + files: 'simplelocalize-cli-${{ needs.build-jar.outputs.version }}.zip' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index cfa38921..5f893538 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,26 @@ simplelocalize upload [GitHub Wiki: Configuration file](/simplelocalize/simplelocalize-cli/wiki/Configuration-file) +### Language mapping + +The `mappings.lang` option (available only in the YAML configuration file) maps SimpleLocalize language keys +(`languageKey`) to the language names used in the file system (`placeholder`, the `{lang}` placeholder). Unlike a +generic `source`/`target` pair, these names stay unambiguous regardless of direction: on `download` a SimpleLocalize +language key is translated to the file system language name, and on `upload` the file system language name is +translated back to the SimpleLocalize language key. This lets you customize where files are downloaded, for example +to download `en` into `/values/` instead of `/values-en/`. + +```yaml +downloadPath: ./res/values{lang}/strings.xml +downloadFormat: android +mappings: + lang: + - languageKey: "en" + placeholder: "" # download 'en' to ./res/values + - languageKey: "de" + placeholder: "-de" # download 'de' to ./res/values-de +``` + ## Proxy support SimpleLocalize CLI supports HTTP and HTTPS proxies, and it respects the `http_proxy`, `https_proxy` environment diff --git a/junit/download-retry/file.json b/junit/download-retry/file.json new file mode 100644 index 00000000..c486ff24 --- /dev/null +++ b/junit/download-retry/file.json @@ -0,0 +1 @@ +{ "key": "value" } \ No newline at end of file diff --git a/junit/download-test/file.json b/junit/download-test/file.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/junit/download-test/file.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/junit/lang-region-codes/en.json b/junit/lang-region-codes/en.json new file mode 100644 index 00000000..7099fd25 --- /dev/null +++ b/junit/lang-region-codes/en.json @@ -0,0 +1,3 @@ +{ + "title": "English" +} diff --git a/junit/lang-region-codes/es_419.json b/junit/lang-region-codes/es_419.json new file mode 100644 index 00000000..bd8c90b4 --- /dev/null +++ b/junit/lang-region-codes/es_419.json @@ -0,0 +1,3 @@ +{ + "title": "Spanish (Latin America)" +} diff --git a/junit/lang-region-codes/pt-BR.json b/junit/lang-region-codes/pt-BR.json new file mode 100644 index 00000000..c506673d --- /dev/null +++ b/junit/lang-region-codes/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Portuguese (Brazil)" +} diff --git a/junit/lang-region-codes/zh-Hant-TW.json b/junit/lang-region-codes/zh-Hant-TW.json new file mode 100644 index 00000000..58a54d85 --- /dev/null +++ b/junit/lang-region-codes/zh-Hant-TW.json @@ -0,0 +1,3 @@ +{ + "title": "Chinese (Traditional, Taiwan)" +} diff --git a/junit/mock-server/test.json b/junit/mock-server/test.json index eee0e58b..be8aef11 100644 --- a/junit/mock-server/test.json +++ b/junit/mock-server/test.json @@ -1,4 +1,4 @@ -
Elegant and simple web-based translation editor. It helps small and growing teams save time on handling localization files and translation strings.

Translate your application into multiple languages with just a few clicks. Choose from OpenAI ChatGPT, Google Translate or DeepL translation providers to translate your texts. Adding support for new languages has never been easier.
Learn more about auto-translation
Online translation editor that helps you to manage your translations in one place. With numerous features like auto-translation, comments, and notifications, you can easily collaborate with your team and keep your translations up to date.
See translation editor features
With SimpleLocalize CLI you can manage your translations from the terminal. It's a powerful tool that helps you to automate the translation process in your project. You can easily synchronize translation files between you local project and SimpleLocalize Translation Editor, start auto-translation or publish changes to the production environment.
CLI documentation# upload strings
+
GitHub integration is now available!|Install nowTranslation management
for software projects
A simple, elegant web-based translation editor for software projects that helps small teams manage translations and keep content in sync.

We power your product localization
From first commit to global launch














What is SimpleLocalize?
It's a platform for managing translations and automating localization workflows.
It simplifies complex localization workflows, keeps your content in sync across all products, and makes continuous localization easy, without unnecessary complexity.

All-in-one localization platform
Manage translations and automate workflows
across all your digital products
AI Auto-translation
Auto-translation, uses AI and traditional machine translation to instantly convert your content into multiple languages, saving time, reducing costs, and simplifying localization.

No-code automations
Automations set up in minutes, translations that run themselves, keeping your content always on time and perfectly in sync.

User-generated translations
Crowdsourced translations: let your users, community, and contributors translate your content, keeping it on-brand.

Content Delivery Network
Translation Hosting that keeps your content always available, always up to date, and new translations delivered at lightning speed.

Universal command-line tool
Localization CLI makes managing your translations more configurable, flexible, and automated than ever before.
# upload source translations
+$ simplelocalize upload
+
+# auto-translate strings
+$ simplelocalize auto-translate
+
+# publish translations
+$ simplelocalize publish
+
+# download translated files
+$ simplelocalize download# upload source translations
$ simplelocalize upload
# auto-translate strings
$ simplelocalize auto-translate
-# download all translations
-$ simplelocalize download
Translation Hosting
Get your translations lightning fast with our CDN. We provide a simple way to host your translations and serve them safely to your users.
Get started with translation hosting {
- "en": {
- "CREATE_ACCOUNT": "Create account",
- "SIGN_IN": "Sign in",
- "WELCOME_TO_THE_JUNGLE" : "Welcome to the jungle"
- },
- "es": {
- "CREATE_ACCOUNT": "Crear cuenta",
- "SIGN_IN": "Iniciar",
- "WELCOME_TO_THE_JUNGLE": "Bienvenido a la jungla"
- }
-}
-
Better oversight
Team analytics
Managers can see an in-depth overview of team activity

Activity tracking
Understand how your team is progressing with translations
Coming soonLanguage analytics
Understand which languages are most popular with your users

Why SimpleLocalize?
Most translation editors are overkill for most teams. SimpleLocalize is easy
to use and understand with no training or prior experience.
Simple and customizable
SimpleLocalize is easy to get started with and focuses on the features that you and your client need the most. You can customize the editor to your needs choosing from a variety of translation editor options.
Flat pricing
No hidden costs at any scale. SimpleLocalize offers a simple and affordable plans for you and your projects. Within easy integration options and intuitive translation editor, it creates a wonderful selection.
Team members
Every paid plan comes with a number of users you can add to your project. You don't need to worry about number of users as the price does not increase with every user.
AI & Auto-translation included
Every paid plan comes with a number of auto-translation characters that are added to your account every month. You can use them to translate your project without any additional costs. You can increase the limit at any time.
Tools for Developers
SimpleLocalize offers a command-line tool, REST API and Webhooks for developers to easily integrate their projects no matter which plan you choose. It enables you to make automations to synchronize translations with your projects.
Personal support
From “how do I get started” to “I need XYZ” requests, when you need that extra helping hand, we’re here for you. We are providing personal support to ensure your experience with SimpleLocalize is as smooth as possible.

"Super EASY to use, great documentation to connect through API.
Very nice dashboard to manage translators and their work.
I personally really do like the export/import of excel files
where I can update translations key en masse"


"The product
and support
are fantastic."
"The support is
blazing fast,
thank you Jakub!"
"Interface that
makes any dev
feel at home!"
"Excellent app,
saves my time
and money"
Trusted by many
Our Translation Hosting is used by over 100 million people every month.





































































































































Integrated with your favourite tools
Have you already integrated i18n library? You can now connect SimpleLocalize without doing much changes in the application code. We don't bound you with our own 'yet another i18n library'.
Browse integrationsReady to say|Greet your customers
in their mother language

Latest news
Stay up to date with the latest news
Namespaces in software localization
Namespaces are a great way to organize translations in software localization. Learn what namespaces are, why they are important, and how to use them in your localization process.
Introducing: Statistics
Check your project's translation progress with the new statistics feature in SimpleLocalize. Monitor progress, untranslated keys, review status, and team performance.
Introducing: Translation comments
Communicate with your team members and translators using comments. Learn how to use comments feature in the translation management system.
\ No newline at end of file
+# publish translations
+$ simplelocalize publish
+
+# download translated files
+$ simplelocalize downloadZero-dependency required.
Works natively on Windows, macOS, and Linux.
Import, auto-translate, and export translations
for your app or host them in the cloud.
From startup MVPs to enterprise ecosystems, SimpleLocalize provides the infrastructure to manage, translate, and deliver your content at scale.
Automate iOS, Android, and Flutter localization. Manage ARB, Strings, and XML files with ease via CLI or GitHub App.
Translate your website with full international SEO support. Works with Next.js, Gatsby, Nuxt, Shopify, Webflow, and any headless CMS.
Easy integration with React, Next.js, Vue, and Angular. Sync your translation files directly via CLI or GitHub Actions.
Scale faster with DeepL, OpenAI and local LLM integrations. Auto-translate new keys instantly and keep your product multi-lingual on autopilot.

Most tools are overkill.
SimpleLocalize is fast, simple, and works out of the box.
SimpleLocalize is easy to get started with and focuses on the features that you and your team need the most. You can customize the editor to your needs choosing from a variety of options.
No hidden costs! SimpleLocalize offers a simple and affordable plans for you and your projects. Within easy integration options and intuitive translation editor, it creates a wonderful selection.
Every paid plan comes with a number of users you can add to your project. You don't need to worry about number of users as the price does not increase with every user.
Every paid plan comes with auto-translation characters that you receive every month. You can also use bring your own API keys and use them with SimpleLocalize in any plan (even free!).
SimpleLocalize gives developers the tools they need to automate and integrate localization into any workflow, such as CLI tool, VS Code extension, IntelliJ plugin, Figma integration, and more.
From “how do I get started” to “I need XYZ” requests, when you need that extra helping hand, we’re here for you. We are here to make sure you get the most out of SimpleLocalize.
Behind every multilingual product,
there's a story of cooperation.

"Super EASY to use, great documentation to connect through API. +Very nice dashboard to manage translators and their work. +I personally really do like the export/import of Excel files +where I can update translations key en masse"

"Without Simplelocalize, it would not have been possible to offer that many languages. We strived to support all major languages, where we also know that there are users."

"The translation process is much more efficient. There are fewer errors, and we no longer have to worry about missing translations. Everything is managed from within the application itself, which makes it straightforward and efficient for our team."

See what we're up to
and get tips on localization

How Django's built-in i18n system works: gettext, message files, plurals, locale URLs, and syncing translations with a TMS.

How API-driven localization works: architecture patterns, caching, rate limits, and when to use an API instead of CDN hosting.

Learn how to manage translations differently across dev, staging, and production. Environment setup, missing key behavior, CI/CD promotion, and real workflow examples with SimpleLocalize.

A translated string can be accurate and still sound wrong. Learn how tone and formality shift across languages and cultures, with real examples.

A practical guide to Angular internationalization. Compare Angular's built-in i18n with ngx-translate and Transloco, handle pluralization, locale routing, and CI/CD.

Learn how to define ownership across engineering, product, and localization teams for scalable translation workflows.