All supported frameworks
Android workflow

Translate and validate Android string resources

Translate only what changed, preserve Android format arguments, and validate every target resource before a malformed string or incomplete plural reaches your build.

res/values/strings.xml

$ forthwith check

[ERROR] Missing translation key · cart_item_count

app/src/main/res/values-es/strings.xml

Local scan · no account · no upload
Native strings.xml resources
Target-aware plural categories
Small, reviewable XML diffs

Install path

Check the repository you already have

Install the CLI and run it from the repository root. Forthwith discovers Android resource directories and checks them locally before you configure translation.

  1. 1

    Install the Forthwith CLI

    Use Homebrew on macOS, the install script on Linux, or Scoop on Windows.

  2. 2

    Open the repository root

    Keep the check beside your source code and existing localization resources.

  3. 3

    Run forthwith check

    Review actionable findings locally before creating an account or changing a file.

macOS quick start

No configuration required
brew install Forthwith-LLC/forthwith/forthwith
cd path/to/your-project
forthwith check
Linux and Windows install options The first check never changes files.

Framework-aware validation

Keep Android resources structurally safe

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.

Format arguments

Preserve %s, %d, and positional markers such as %1$s across every locale.

XML structure

Detect malformed resources and duplicate names with actionable file locations.

Quantity strings

Check the plural categories required by each target language rather than copying English forms.

Missing resources

Find absent names, empty target values, and inconsistent localized collections.

Sample diff

Review localization like any other code change

Forthwith updates the target resource file instead of introducing a parallel translation store. Reviewers see the resource name, preserved arguments, and translated value together.

  • Native files stay in their expected location.
  • Placeholders remain visible to reviewers.
  • Only new, changed, or repaired entries appear in the diff.
app/src/main/res/values-es/strings.xml Generated change
--- 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

Validate Android resources on every pull request

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.

.github/workflows/localization.yml GitHub Actions
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

Move from a local report to a reviewable locale update

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.