Format arguments
Preserve %s, %d, and positional markers such as %1$s across every locale.
Translate only what changed, preserve Android format arguments, and validate every target resource before a malformed string or incomplete plural reaches your build.
$ forthwith check
[ERROR] Missing translation key · cart_item_count
app/src/main/res/values-es/strings.xml
Install path
Install the CLI and run it from the repository root. Forthwith discovers Android resource directories and checks them locally before you configure translation.
Use Homebrew on macOS, the install script on Linux, or Scoop on Windows.
Keep the check beside your source code and existing localization resources.
Review actionable findings locally before creating an account or changing a file.
brew install Forthwith-LLC/forthwith/forthwith
cd path/to/your-project
forthwith check
Framework-aware validation
Validate the parts of Android localization that are easy to damage during manual or general-purpose translation, while keeping resource names and files under Git.
Preserve %s, %d, and positional markers such as %1$s across every locale.
Detect malformed resources and duplicate names with actionable file locations.
Check the plural categories required by each target language rather than copying English forms.
Find absent names, empty target values, and inconsistent localized collections.
Sample diff
Forthwith updates the target resource file instead of introducing a parallel translation store. Reviewers see the resource name, preserved arguments, and translated value together.
--- a/app/src/main/res/values-es/strings.xml+++ b/app/src/main/res/values-es/strings.xml@@ -7,2 +7,3 @@ <string name="checkout_title">Finalizar compra</string>+ <string name="welcome_user">Hola, %1$s</string> <string name="pay_total">Pagar %1$s</string>
CI recipe
Add a lightweight localization job alongside Gradle checks so resource defects are reported where the change is introduced.
Validation needs no Forthwith token. Exit code 1 fails the job when errors are found; --warnings-as-errors also treats warnings as release blockers.
name: Android localization
on: pull_request
jobs:
localization:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Forthwith
run: curl -fsSL https://raw.githubusercontent.com/Forthwith-LLC/forthwith-releases/main/install.sh | bash
- name: Validate localization files
run: forthwith check --warnings-as-errors
When you are ready to translate
After the free check, initialize your project and run forthwith translate. New, changed, and missing source values are translated into the configured values-* resources and validated before they are written.
We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect