Skip to content

Automattic/fluent-rust-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

130 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors