#localization #android #apple

bin+lib langcodec-cli

A universal CLI tool for converting and inspecting localization files (Apple, Android, CSV, etc.)

18 releases (5 breaking)

Uses new Rust 2024

0.6.4 Oct 5, 2025
0.6.3 Sep 13, 2025
0.5.0 Sep 1, 2025
0.4.1 Sep 1, 2025
0.1.3 Jul 24, 2025

#251 in Internationalization (i18n)

Download history 133/week @ 2025-10-03 15/week @ 2025-10-10 5/week @ 2025-10-17 1/week @ 2025-10-24

1,512 downloads per month

MIT license

415KB
8K SLoC

langcodec-cli (Command Line)

Universal CLI for converting, inspecting, merging, and editing localization files.

  • Formats: Apple .strings, .xcstrings, Android strings.xml, CSV, TSV
  • Commands: convert, merge, view, stats, debug, edit

Install

cargo install langcodec-cli

Commands

convert

langcodec convert -i input.strings -o strings.xml
langcodec convert -i input.csv -o output.xcstrings --source-language en --version 1.0

Auto-detects formats from extensions. For JSON/YAML custom formats, see --input-format in the root README.

merge

langcodec merge -i a.strings -i b.strings -o merged.strings --lang en --strategy last

view

langcodec view -i values/strings.xml --full

Prints entries. Plurals are labeled with Type: Plural and show categories.

stats

langcodec stats -i values/strings.xml
langcodec stats -i Localizable.xcstrings --json

Shows per-language totals, counts by status, and completion percent (excludes DoNotTranslate). Use --json for machine-readable output.

debug

langcodec debug -i input.strings --lang en -o output.json

edit

Unified in-place editing (add/update/remove) across one or many files.

Basics:

# Add or update a key
langcodec edit set -i en.strings -k welcome -v "Hello" --status translated --comment "Shown on home"

# Remove a key (omit or empty value)
langcodec edit set -i en.strings -k welcome
langcodec edit set -i en.strings -k welcome -v ""

# Multiple files or globs (quote patterns)
langcodec edit set -i 'locales/**/*.strings' -k app_name -v "My App"
langcodec edit set -i a.strings -i b.strings -k welcome -v "Hello"

# Preview only
langcodec edit set -i en.strings -k welcome -v "Hello" --dry-run

# Write to a different file (single input only)
langcodec edit set -i en.strings -k welcome -v "Hello" -o out.strings

Options:

  • --inputs/-i: One or more input files. Supports glob patterns when quoted.
  • --lang/-l: Language code (required when an input contains multiple languages).
  • --key/-k: Entry key to modify.
  • --value/-v: New value. If omitted or empty, the entry is removed.
  • --comment: Optional translator note.
  • --status: translated|needs_review|new|do_not_translate|stale.
  • --output/-o: Optional output path. Not allowed with multiple inputs.
  • --dry-run: Print what would change and exit without writing.
  • --continue-on-error: Process all inputs; report failures at the end (non-zero exit if any fail).

Supported formats: .strings, .xml (Android), .xcstrings, .csv, .tsv. Custom JSON/YAML/.langcodec edit is currently not enabled.

Notes

  • Android plurals <plurals> are supported.
  • Language inference: en.lproj/Localizable.strings, values-es/strings.xml, base values/en by default.
  • Globbing: use quotes for patterns in merge and edit (e.g., '**/*.xml').

License

MIT

Dependencies

~17–25MB
~530K SLoC