Translate text in a gettext-like way without actually using gettext and parsing .po files instead.

i18n, translation, locale, parse, gettext, l10n, localization, internationalization, po, po-parser



Translate text in a gettext-like way by parsing .po files instead of actually using the PHP gettext implementation.

The default gettext implementation doesn't always work and is a bit hard to understand. Potext gives you the ability to still use shorthand functions like _po() and _npo() (for plurals), but use a .po file (parsed with PHP-po-parser) to display the actual text. No text domains or locales. You just put your text in those functions and then set a file whose text will be presented to the user.


Clone this repo or find Potext on Packagist and install it with Composer:

composer require hdodov/potext:dev-master



Firstly, make sure you require Composer's autoload file:

require __DIR__ . '/vendor/autoload.php';

Then, create a Potext object. It allows you to extract data from the po file:

$potext_bg = new Potext\Potext('./locales/bg.po');

Finally, set the Translate singleton to use the Potext object you've just created:

Potext\Translate::$potext = $potext_bg;

This singleton is used by the translator functions (like _po()) to display text. If it has no $potext set, it would simply display the input text.

Now you're ready to display some translated text!

Translator functions

_po("Text");                        // Get translated string
_epo("Text");                       // Echo translated string
_npo("%d Text", "%d Texts", $n);    // Get translated plural string
_enpo("%d Text", "%d Texts", $n);   // Echo translated plural string


If you're using a program like Poedit to translate text, strings inside the Potext functions will not be collected unless you add them to Poedit's keyword list! You need to add this: