Skip to content

ChaosElephant/PHP-po-parser

 
 

Repository files navigation

Po Parser

Latest Stable Version Total Downloads License Build Status Code Coverage Scrutinizer Quality Score ![Gitter](https://badges.gitter.im/Join Chat.svg)

PoParser is a personal project to fulfill a need I got: parse Gettext Portable files (*.po files) and edit its content using PHP.

PoParser will allow you to read PO Data from any source (files and strings built-in), update it and store back to a file (or get the compiled string).

It supports following parsing features:

  • header section.
  • msgid, both single and multiline.
  • msgstr, both single and multiline.
  • msgctxt (Message context).
  • msgid_plural (plurals forms).
  • #, keys (flags).
  • keys (translator comments).

  • #. keys (Comments extracted from source code).
  • #: keys (references).
  • #| keys (previously untranslated), both single and multiline.
  • #~ keys (old entries), both single and multiline.

Usage

// Parse a po file
$fileHandler = new Sepia\FileHandler('es.po');

$poParser = new Sepia\PoParser($fileHandler);
$entries  = $poParser->parse();
// $entries contains every entry in es.po file.

// Update entries
$msgid = 'Press this button to save';
$entries[$msgid]['msgstr'] = 'Pulsa este botón para guardar';
$poParser->setEntry($msgid, $entries[$msgid]);
// You can also change translator comments, code comments, flags...

Changelog

v5.0 (WIP)

  • Classes are now fluid.
  • Namespaces reorganized.
  • Removed fuzzy index in favour of flags.
  • Display line number on parsing errors instead of line content.
  • Adds compatibility with #~| entries.
  • parseString() and parseFile() converted to factory methods.
  • Removed method updateEntry() in favour of setEntry().

v4.2.1

  • Support multiline for plural entries (thanks @Ben-Ho)

v4.2.0

  • Add function to add plural and context to existing entry (thanks @Ben-Ho)
  • Add ability to change msg id of entry (thanks @wildex)

v4.1.1

  • Fixes with multi-flags entries (thanks @gnouet)

v4.1

  • Constructor now accepts options to define separator used in multiline msgid entries.
  • New method getOptions().

v4.0

  • new methods parseString() and parseFile() replace the old parse()`
  • new method writeFile() replaces the old write().
  • new method compile() which takes all parsed entries and coverts back to a PO formatted string.

See whole changelog

Documentation

See v4 documentation

Testing

Tests are done using PHPUnit. To execute tests, from command line type:

php vendor/bin/phpunit

Install via composer

Edit your composer.json file to include the following:

{
    "require": {
        "sepia/po-parser": "dev-master"
    }
}

Packages

No packages published

Languages

  • PHP 100.0%