![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 (Comments extracted from source code).
- #: keys (references).
- #| keys (previously untranslated), both single and multiline.
- #~ keys (old entries), both single and multiline.
// 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...
v5.0 (WIP)
- Classes are now fluid.
- Namespaces reorganized.
- Removed
fuzzy
index in favour offlags
. - Display line number on parsing errors instead of line content.
- Adds compatibility with
#~|
entries. parseString()
andparseFile()
converted to factory methods.- Removed method
updateEntry()
in favour ofsetEntry()
.
v4.2.2
- More PHPDocs fixes
- Strict comparisons used where safe.
- Fix example for
writeFile
. - Support for EOL line formatting.
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.
Tests are done using PHPUnit. To execute tests, from command line type:
php vendor/bin/phpunit
Edit your composer.json file to include the following:
{
"require": {
"sepia/po-parser": "dev-master"
}
}