Objects to assist in reading, manipulating and creating GNU gettext style PO files

v2.0.2 2020-12-30 23:34 UTC

This package is auto-updated.

Last update: 2023-01-29 02:21:26 UTC


Scrutinizer Code Quality Code Coverage Build Status

Po is a set of objects to assist in reading, manipulating and creating GNU gettext style PO files.


The recommended installation method is using composer. To add "geekwright/po" to your composer managed project, use this command:

composer require geekwright/po

PHP Support

Po version 1 supports PHP 5.3 and above. Begining with version 2, Po requires a minimum of PHP 7.1.


All Po classes are in the Geekwright\Po namespace.


Po provides the capability to create, read, and modify PO and POT files, including the ability to scan PHP sources for gettext style calls to build a POT file. You can connect the pieces however you need, but here are a few examples for common situations.

Reading a PO File

    try {
        $poFile = new PoFile();
        // list all the messages in the file
        $entries = $poFile->getEntries();
        foreach($entries as $entry) {
            echo $entry->getAsString(PoTokens::MESSAGE);
    } catch (UnrecognizedInputException $e) {
        // we had unrecognized lines in the file, decide what to do
    } catch (FileNotReadableException $e) {
        // the file couldn't be read, nothing happened

Get the Plural-Forms Header

    $pluralRule = $poFile->getHeaderEntry()->getHeader('plural-forms');

Add a New Entry

    $entry = new PoEntry;
    $entry->set(PoTokens::MESSAGE, 'This is a message.');
    $entry->set(PoTokens::FLAG, 'fuzzy');

Get the Translation for an Entry

The translation for an entry can be a string, or an array of strings if the Entry is a plural form. This code fragment will assign the translation to $msgstr appropriate for either case.

    $msgid_plural = $entry->get(PoTokens::PLURAL);
    if (empty($msgid_plural)) {
        $msgstr = $entry->getAsString(PoTokens::TRANSLATED);
    } else {
        $msgstr = $entry->getAsStringArray(PoTokens::TRANSLATED);

Writing a PO File

    try {
    } catch (FileNotWriteableException $e) {
        // the file couldn't be written

Create a POT File from PHP sources

    $poFile = new PoFile();
    $poInit = new PoInitPHP($poFile);
    foreach (glob("*.php") as $filename) {
        try {
        } catch (FileNotReadableException $e) {
            // the souce file couldn't be read, decide what to do
    try {
    } catch (FileNotWriteableException $e) {
        // the file couldn't be written


For more information, see the full Po API documentation.