datalinx/gettext-context

Implementation of context functions for the PHP gettext extension

v1.0.1 2020-09-26 15:49 UTC

This package is auto-updated.

Last update: 2021-08-26 18:16:05 UTC


README

Implementation of context functions for the PHP gettext extension

Packagist Version Packagist PHP Version Support Coverage 100% Packagist License Packagist Downloads

About

PHP still lacks full support for gettext, because it does not implement the context functions. Until this is sorted out, you can use this package to add context support to your localization efforts.

Requirements

  • PHP >= 7.2
  • gettext PHP extension

It can be used on lower versions of PHP, but you won't be able to install it with composer (or run tests).

Installing

  1. Download it with composer: composer require datalinx/gettext-context
  2. Include the vendor/datalinx/gettext-context/src/gettext-context.php file when you need it*

* It's not added to the autoload directive, since you might not need or want to always include it in runtime. If you want to always load it, just add the source file to your composer.json autoload files list:

{
    "autoload": {
        "files": [
            "vendor/datalinx/gettext-context/src/gettext-context.php"
        ]
    }
}

Usage

See the documented src/gettext-context.php file for the list of functions and their parameters.

Extracting messages with context support

With xgettext

You can add extra keyword parameters to your xgettext call to include the context functions. For example, this would be used in our package:

xgettext --force-po --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 --keyword=dpgettext:2c,3 --keyword=dnpgettext:2c,3,4 -c -o messages.po tests/Test.php

With Poedit

If you're using Poedit, add the following keywords in your Catalog > Properties > Sources Keywords:

  • pgettext:1c,2
  • npgettext:1c,2,3
  • dpgettext:2c,3
  • dnpgettext:2c,3,4

Then run the "Update from code" procedure :)

Credits

  • This answer on Stack Overflow for the implementation.
  • This comment on the PHP documentation for the messages extraction fix.