Skip to main content

Droidlate

Droidlate is a lightweight, local, web-based translation workspace for Android strings.xml resource files. It features a clean, responsive, Weblate-inspired Single Page Application (SPA) designed to make translating Android applications fast, accurate, and resilient.


Core Usecases

  • Local Offline Workspace: Translate and edit local localization files on your machine. Avoid uploading sensitive resource files to third-party servers or setting up heavy server-side infrastructure.
  • Preserving XML Formatting & Comments: Standard XML parsers rewrite files, wiping out comments, custom spacing, ordering, and attributes. Droidlate's custom parsing engine performs in-place character index replacements to maintain exact XML styling, comments, structure, and formatting.
  • Tracking Outdated Translations: When developers update a base string in values/strings.xml, translations can become outdated. Droidlate normalizes and hashes base strings into a lightweight local sidecar metadata file, highlighting which target translations need updates.
  • Placeholder Verification & QA: Mismatched Java-style placeholders (e.g., %s, %1$d in the source but % d or missing in the target) cause runtime crashes on Android. Droidlate validates alignment on every keystroke and flags warnings.
  • Orphaned String Pruning: Over time, strings are deleted from the main codebase but linger in translation files. Droidlate lists these "orphaned" strings and lets you prune them with a single click.

Key Features

  • Sleek UI with Dark Mode: A modern HSL-tailored interface featuring layout toggles (especially optimized for mobile web layouts), status indicators, and translation statistics.
  • Keyboard Shortcuts: Built for productivity. Use Ctrl+S to instantly Save & Next, and Alt+1/Alt+2 to paste dynamic suggestions.
  • Auto-Translation Suggestions: Integrates with translation suggestion services (like Google Translate and MyMemory) to suggest translations on the fly.
  • Atomicity & Crash Resilience: Local updates are written to the target XML file first, then metadata sidecars second. If interrupted, the app automatically flags the key as Outdated on the next run, ensuring no state corruption.
  • Secure Server Binding: The local Flask server strictly binds to the loopback interface (127.0.0.1), ensuring your filesystem is safe from external network access.

Installation

The recommended way to install Droidlate is globally using pipx:

pipx install droidlate

Alternatively, you can install it using standard pip:

pip install droidlate

Local Development

If you want to run it from source or install in editable mode:

# Clone the repository and install dependencies
git clone https://github.com/estiaksoyeb/Droidlate.git
cd Droidlate
pip install -e .

Usage & CLI Commands

Once installed, you can launch the Droidlate workspace using the droidlate CLI command:

1. Auto-Scan Mode (Default)

Run the command in your Android project root (or near your resources). Droidlate will auto-detect typical folders like app/src/main/res/, src/main/res/, or res/:

droidlate

2. Specify Resource Directory

You can explicitly define where the Android resource directory is located:

droidlate --res-dir /path/to/android/app/src/main/res

3. Single-File Mode

To translate or edit a single pair of strings files directly:

droidlate --source app/src/main/res/values/strings.xml --target app/src/main/res/values-es/strings.xml

4. Custom Port

Run the local web server on a different port:

droidlate --port 8080

Repository Structure

├── droidlate/                     # Package root
│   ├── parser/
│   │   ├── xml_parser.py          # Expat character-level round-trip parser
│   │   └── diff_engine.py         # Hashing, validation, and status engines
│   ├── translator/
│   │   └── engine.py              # Translation Orchestrator
│   ├── web/
│   │   ├── server.py              # Flask server and local REST APIs
│   │   └── static/                # Single Page Web App (HTML, CSS, JS)
│   ├── cli_wizard.py              # CLI console loop wizard
│   └── main.py                    # Command entry point
├── pyproject.toml                 # Package configuration and script registration
├── requirements.txt               # App dependencies
└── README.md                      # This documentation

Credits


License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

droidlate-1.2.1.tar.gz (49.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

droidlate-1.2.1-py3-none-any.whl (52.4 kB view details)

Uploaded Python 3

File details

Details for the file droidlate-1.2.1.tar.gz.

File metadata

  • Download URL: droidlate-1.2.1.tar.gz
  • Upload date:
  • Size: 49.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for droidlate-1.2.1.tar.gz
Algorithm Hash digest
SHA256 7357f99c26fa91e5520b84a55beec49d02a6821081db85c999416f2180a5fa29
MD5 4ace9d3652d1a2bb19370bacf3875e44
BLAKE2b-256 2d588988bb04d9950f8f209114689ed3d889f4f504ca302a3bfc8447dc608f3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for droidlate-1.2.1.tar.gz:

Publisher: publish.yml on estiaksoyeb/Droidlate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file droidlate-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: droidlate-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 52.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for droidlate-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 49f9ee86dbc2a6447c32f9d38032ceeac48159410389df2542d67eb385912b60
MD5 8601a2f0861a8130bdc0dd9fdf627996
BLAKE2b-256 e289534158521d4310f991f405cfc933b610b30cf247f2c3fe5a227e23d3a322

See more details on using hashes here.

Provenance

The following attestation bundles were made for droidlate-1.2.1-py3-none-any.whl:

Publisher: publish.yml on estiaksoyeb/Droidlate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.2.2

2 files

This release

1.2.1 This release

2 files

1.2.0

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page