langcodec-cli 0.1.1

A universal CLI tool for converting and inspecting localization files (Apple, Android, CSV, etc.)
langcodec-cli-0.1.1 is not a library.

langcodec

A universal localization file toolkit in Rust.

langcodec provides format-agnostic parsing, conversion, and serialization for major localization formats, including Apple .strings, .xcstrings, and Android strings.xml. It enables seamless conversion between formats, powerful internal data modeling, and extensibility for new formats.


Status

This is an early 0.1.0 release. The API may evolve as development continues. Contributions and feedback are very welcome to help shape the future of this project!


Features

  • ✨ Parse, write, and convert between multiple localization file formats
  • 🦀 Idiomatic, modular, and ergonomic Rust API
  • 📦 Designed for CLI tools, CI/CD pipelines, and library integration
  • 🔄 Unified internal model (Resource) for lossless format-agnostic processing
  • 📖 Well-documented, robust error handling and extensible codebase
  • 🚀 More formats and CLI support are planned for upcoming releases

Supported Formats

Format Parse Write Plural Support Comments
Apple .strings ✔️ ✔️ No ✔️
Apple .xcstrings ✔️ ✔️ Yes* ✔️
Android strings.xml ✔️ ✔️ No* ✔️
CSV ✔️ ✔️ No

* Plural support for .xcstrings is not under beta testing, and may not be fully implemented yet. * Plural support for Android may be added in the future.


Usage

As a Library

Add to your Cargo.toml:

[dependencies]
langcodec = "0.1"

Example: Read, Manipulate, and Write

use langcodec::{Codec, formats::FormatType};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut codec = Codec::new();

    // Read Apple .strings file
    codec.read_file_by_extension("en.lproj/Localizable.strings", None)?;

    // Manipulate resources if needed (see types.rs for Resource/Entry APIs)

    // Write changes back to the original file
    codec.write_to_file()?;

    // Convert Apple's strings localization to Android's strings
    convert_auto("Localizable.strings", "strings.xml")?;

    Ok(())
}

CLI (Planned)

A CLI tool will be provided for easy conversion and batch processing:

langcodec convert --from Localizable.strings --to strings.xml

Stay tuned for CLI usage and installation instructions!
User feedback is encouraged to help prioritize CLI features and improvements.


Data Model

At the core of langcodec is the Resource struct—an expressive, format-agnostic model for localization data.
See src/types.rs for details.

pub struct Resource {
    pub metadata: Metadata,
    pub entries: Vec<Entry>,
}

Each Entry supports singular and plural translations, comments, status, and custom fields.


Error Handling

All public APIs use the crate’s own Error enum, which provides meaningful variants for parsing, I/O, and format mismatches.


Extending

Adding a new localization format?
Implement the Parser trait for your format struct in formats/, and add From/TryFrom conversions to and from Resource.
PRs welcome!


Contributing

Contributions are welcome!
Please open issues for bugs, suggestions, or new format support.
See CONTRIBUTING.md (to be written) for guidelines.


License

This project is licensed under the MIT License.


Acknowledgements

  • Inspired by the need for universal localization tooling in cross-platform apps
  • Built with love in Rust

Status and Roadmap

langcodec aims to be a universal, format-agnostic localization toolkit that simplifies working with diverse localization file formats. The current focus is on stabilizing core features, expanding format support, and developing a user-friendly CLI. We welcome your issues, feature requests, and discussions at the project’s issue tracker.