0.0
The project is in a healthy, maintained state
A Ruby gem that wraps a Rust CLI tool for converting between Mozilla's Fluent localization format and other formats like Android XML string resources and GNU gettext PO files
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

Runtime

~> 1.0
 Project Readme

Fluent Tools

A CLI tool and Ruby gem for converting between Mozilla's Fluent localization format and other formats, currently including Android XML string resources and GNU gettext PO files.

Overview

This project provides a CLI for:

  • Android XML conversion: Convert between Fluent (.ftl) files and Android XML string resources
  • PO conversion: Convert between Fluent (.ftl) files and GNU gettext PO format

Installation

Rust CLI Tool

cargo build --release
./target/release/fluent-tools --help

Ruby Gem

cd ruby
gem build fluent-tools.gemspec
gem install fluent-tools-*.gem

Usage

CLI Commands

Android XML Conversion

# Convert Fluent to Android XML
fluent-tools android from-fluent -i input.ftl -o output.xml

# Convert Android XML to Fluent
fluent-tools android to-fluent -i input.xml -o output.ftl

# Convert Android XML to Fluent using original file for variable mapping
fluent-tools android to-fluent -i input.xml -o output.ftl --original-fluent original.ftl

PO Conversion

# Convert Fluent to PO format
fluent-tools po from-fluent -i input.ftl -o output.po -l en-US

# Convert PO to Fluent format
fluent-tools po to-fluent -i input.po -o output.ftl

Ruby API

require 'fluent_tools'

# Android XML conversion
FluentTools.fluent_to_android('input.ftl', 'output.xml')
FluentTools.android_to_fluent('input.xml', 'output.ftl')
FluentTools.android_to_fluent('input.xml', 'output.ftl', original_fluent: 'original.ftl')

# PO conversion
FluentTools.fluent_to_po('input.ftl', 'output.po', locale: 'en-US')
FluentTools.po_to_fluent('input.po', 'output.ftl')

Project Structure

├── src/
│   ├── main.rs              # Main CLI entry point
│   ├── android/             # Android XML conversion modules
│   ├── po/                  # PO conversion modules
│   └── shared/              # Shared modules, Fluent parser
├── ruby/                    # Ruby gem wrapper

Features

Android XML Support

  • Convert Fluent messages to Android string resources
  • Handle plurals
  • Preserve comments
  • Fluent variables are forwarded as-is
  • Support for bidirectional conversion

PO Format Support

  • Convert Fluent to GNU gettext PO format
  • Support for plural forms
  • Preserve message context and comments
  • Support for bidirectional conversion

Development

Building

cargo build

Testing

cargo test

Ruby Development

cd ruby
bundle install
bundle exec rspec

License

MPL-2.0