PHPackages                             gettext-voo4/gettext - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. gettext-voo4/gettext

ActiveLibrary[Localization &amp; i18n](/categories/localization)

gettext-voo4/gettext
====================

PHP gettext manager

v4.7.0(7y ago)01.8k1MITPHPPHP &gt;=5.4.0

Since Dec 1Pushed 7y agoCompare

[ Source](https://github.com/epikgr/Gettext)[ Packagist](https://packagist.org/packages/gettext-voo4/gettext)[ Docs](https://github.com/epikgr/Gettext)[ RSS](/packages/gettext-voo4-gettext/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (1)Dependencies (7)Versions (56)Used By (1)

Gettext
=======

[](#gettext)

[![Build Status](https://camo.githubusercontent.com/804a9e23e0157846dde388cf82b5de9cea6384af47c92f9c5fe3f4ba25e6e2dd/68747470733a2f2f7472617669732d63692e6f72672f6f736361726f7465726f2f476574746578742e706e673f6272616e63683d6d6173746572)](https://travis-ci.org/oscarotero/Gettext)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/e8b9d24a3f92a0494901016297d01f5d04afe767a0c9a6e613914581d460eb86/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6f736361726f7465726f2f476574746578742f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/oscarotero/Gettext/?branch=master)[![Reference Status](https://camo.githubusercontent.com/9d5c581e99b8472e3f36a7d64fdebf2610286c20aa8ca4bfd577f7d1228ec083/68747470733a2f2f7777772e76657273696f6e6579652e636f6d2f7068702f676574746578743a676574746578742f7265666572656e63655f62616467652e7376673f7374796c653d666c6174)](https://www.versioneye.com/php/gettext:gettext/references)[![Latest Stable Version](https://camo.githubusercontent.com/d8592a37fd40b73817d4b733ead62fbfa8eeec60a769984bd62c002908950bd7/68747470733a2f2f706f7365722e707567782e6f72672f676574746578742f676574746578742f762f737461626c652e737667)](https://packagist.org/packages/gettext/gettext)[![Total Downloads](https://camo.githubusercontent.com/13cc51734e60ba6c9113fb67c65ab6ec0912a84a90f9802124e5360c3167578c/68747470733a2f2f706f7365722e707567782e6f72672f676574746578742f676574746578742f646f776e6c6f6164732e737667)](https://packagist.org/packages/gettext/gettext)[![Monthly Downloads](https://camo.githubusercontent.com/14f97259904404985e8fa9fca9f19d335d2cfadca4783e796a9fa87adda91131/68747470733a2f2f706f7365722e707567782e6f72672f676574746578742f676574746578742f642f6d6f6e74686c792e706e67)](https://packagist.org/packages/gettext/gettext)[![License](https://camo.githubusercontent.com/10d72d4de5ad8560bdbb277e487edb83478066763735bf69c8e6914c5085635b/68747470733a2f2f706f7365722e707567782e6f72672f676574746578742f676574746578742f6c6963656e73652e737667)](https://packagist.org/packages/gettext/gettext)

[![SensioLabsInsight](https://camo.githubusercontent.com/11e097f84f16cc3a9a1341b12ff6cad077f92e783c9669eca52e203dc9b397d9/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f34393664633261362d343362652d343034362d613238332d6638333730323339646434372f6269672e706e67)](https://insight.sensiolabs.com/projects/496dc2a6-43be-4046-a283-f8370239dd47)

Created by Oscar Otero   (MIT License)

Gettext is a PHP (&gt;=5.4) library to import/export/edit gettext from PO, MO, PHP, JS files, etc.

Installation
------------

[](#installation)

With composer (recomended):

```
composer require gettext/gettext

```

If you don't use composer in your project, you have to download and place this package in a directory of your project. You need to install also [gettext/languages](https://github.com/mlocati/cldr-to-gettext-plural-rules). Then, include the autoloaders of both projects in any place of your php code:

```
include_once "libs/gettext/src/autoloader.php";
include_once "libs/cldr-to-gettext-plural-rules/src/autoloader.php";
```

Classes and functions
---------------------

[](#classes-and-functions)

This package contains the following classes:

- `Gettext\Translation` - A translation definition
- `Gettext\Translations` - A collection of translations
- `Gettext\Extractors\*` - Import translations from various sources (po, mo, php, js, etc)
- `Gettext\Generators\*` - Export translations to various formats (po, mo, php, json, etc)
- `Gettext\Translator` - To use the translations in your php templates instead the [gettext extension](http://php.net/gettext)
- `Gettext\GettextTranslator` - To use the [gettext extension](http://php.net/gettext)

Usage example
-------------

[](#usage-example)

```
use Gettext\Translations;

//import from a .po file:
$translations = Translations::fromPoFile('locales/gl.po');

//edit some translations:
$translation = $translations->find(null, 'apple');

if ($translation) {
	$translation->setTranslation('Mazá');
}

//export to a php array:
$translations->toPhpArrayFile('locales/gl.php');

//and to a .mo file
$translations->toMoFile('Locale/gl/LC_MESSAGES/messages.mo');
```

If you want use this translations in your php templates without using the gettext extension:

```
use Gettext\Translator;

//Create the translator instance
$t = new Translator();

//Load your translations (exported as PhpArray):
$t->loadTranslations('locales/gl.php');

//Use it:
echo $t->gettext('apple'); // "Mazá"

//If you want use global functions:
$t->register();

echo __('apple'); // "Mazá"
```

To use this translations with the gettext extension:

```
use Gettext\GettextTranslator;

//Create the translator instance
$t = new GettextTranslator();

//Set the language and load the domain
$t->setLanguage('gl');
$t->loadDomain('messages', 'Locale');

//Use it:
echo $t->gettext('apple'); // "Mazá"

//Or use the gettext functions
echo gettext('apple'); // "Mazá"

//If you want use the global functions
$t->register();

echo __('apple'); // "Mazá"

//And use sprintf/strtr placeholders
echo __('Hello %s', 'world'); //Hello world
echo __('Hello {name}', ['{name}' => 'world']); //Hello world
```

The benefits of using the functions provided by this library (`__()` instead `_()` or `gettext()`) are:

- You are using the same functions, no matter whether the translations are provided by gettext extension or any other method.
- You can use variables easier because `sprintf` functionality is included. For example: `__('Hello %s', 'world')` instead `sprintf(_('Hello %s'), 'world')`.
- You can also use named placeholders if the second argument is an array. For example: `__('Hello %name%', ['%name%' => 'world'])` instead of `strtr(_('Hello %name%'), ['%name%' => 'world'])`.

Translation
-----------

[](#translation)

The `Gettext\Translation` class stores all information about a translation: the original text, the translated text, source references, comments, etc.

```
// __construct($context, $original, $plural)
$translation = new Gettext\Translation('comments', 'One comment', '%s comments');

$translation->setTranslation('Un comentario');
$translation->setPluralTranslation('%s comentarios');

$translation->addReference('templates/comments/comment.php', 34);
$translation->addComment('To display the amount of comments in a post');

echo $translation->getContext(); // comments
echo $translation->getOriginal(); // One comment
echo $translation->getTranslation(); // Un comentario

// etc...
```

Translations
------------

[](#translations)

The `Gettext\Translations` class stores a collection of translations:

```
$translations = new Gettext\Translations();

//You can add new translations using the array syntax
$translations[] = new Gettext\Translation('comments', 'One comment', '%s comments');

//Or using the "insert" method
$insertedTranslation = $translations->insert('comments', 'One comments', '%s comments');

//Find a specific translation
$translation = $translations->find('comments', 'One comments');

//Edit headers, domain, etc
$translations->setHeader('Last-Translator', 'Oscar Otero');
$translations->setDomain('my-blog');
```

Extractors
----------

[](#extractors)

The extrators allows to fetch gettext values from any source. For example, to scan a .po file:

```
$translations = new Gettext\Translations();

//From a file
Gettext\Extractors\Po::fromFile('locales/en.po', $translations);

//From a string
$string = file_get_contents('locales2/en.po');
Gettext\Extractors\Po::fromString($string, $translations);
```

The better way to use extractors is using the magic methods of `Gettext\Translations`:

```
//Create a Translations instance using a po file
$translations = Gettext\Translations::fromPoFile('locales/en.po');

//Add more messages from other files
$translations->addFromPoFile('locales2/en.po');
```

The available extractors are the following:

NameDescriptionExample**Blade**Scans a Blade template (For laravel users).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/blade/input.php)**Csv**Gets the messages from csv.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Csv.csv)**CsvDictionary**Gets the messages from csv (without plurals and context).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/CsvDictionary.csv)**Jed**Gets the messages from a json compatible with [Jed](http://slexaxton.github.com/Jed/).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Jed.json)**JsCode**Scans javascript code looking for all gettext functions (the same than PhpCode but for javascript). You can use [the javascript gettext-translator library](https://github.com/oscarotero/gettext-translator)[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/jscode/input.js)**Json**Gets the messages from json compatible with [gettext-translator](https://github.com/oscarotero/gettext-translator).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Json.json)**JsonDictionary**Gets the messages from a json (without plurals and context).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/JsonDictionary.json)**Mo**Gets the messages from MO.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Mo.mo)**PhpArray**Gets the messages from a php file that returns an array.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/PhpArray.php)**PhpCode**Scans php code looking for all gettext functions (see `translator_functions.php`).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/phpcode/input.php)**Po**Gets the messages from PO.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Po.po)**Twig**To scan a Twig template.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/twig/input.php)**Xliff**Gets the messages from [xliff (2.0)](http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Xliff.xlf)**Yaml**Gets the messages from yaml.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Yaml.yml)**YamlDictionary**Gets the messages from a yaml (without plurals and context).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/YamlDictionary.yml)**VueJs**Gets the messages from a VueJs template.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/vuejs/input.vue)Generators
----------

[](#generators)

The generators export a `Gettext\Translations` instance to any format (po, mo, array, etc).

```
//Save to a file
Gettext\Generators\Po::toFile($translations, 'locales/en.po');

//Return as a string
$content = Gettext\Generators\Po::toString($translations);
file_put_contents('locales/en.po', $content);
```

Like extractors, the better way to use generators is using the magic methods of `Gettext\Translations`:

```
//Extract messages from a php code file
$translations = Gettext\Translations::fromPhpCodeFile('templates/index.php');

//Export to a po file
$translations->toPoFile('locales/en.po');

//Export to a po string
$content = $translatons->toPoString();
file_put_contents('locales/en.po', $content);
```

The available generators are the following:

NameDescriptionExample**Csv**Exports to csv.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Csv.csv)**CsvDictionary**Exports to csv (without plurals and context).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/CsvDictionary.csv)**Json**Exports to json, compatible with [gettext-translator](https://github.com/oscarotero/gettext-translator).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Json.json)**JsonDictionary**Exports to json (without plurals and context).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/JsonDictionary.json)**Mo**Exports to Mo.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Mo.mo)**PhpArray**Exports to php code that returns an array.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/PhpArray.php)**Po**Exports to Po.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Po.po)**Jed**Exports to json format compatible with [Jed](http://slexaxton.github.com/Jed/).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Jed.json)**Xliff**Exports to [xliff (2.0)](http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Xliff.xlf)**Yaml**Exports to yaml.[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/Yaml.yml)**YamlDictionary**Exports to yaml (without plurals and context).[example](https://github.com/oscarotero/Gettext/blob/master/tests/assets/po/YamlDictionary.yml)Translator
----------

[](#translator)

The class `Gettext\Translator` implements the gettext functions in php. Useful if you don't have the native gettext extension for php or want to avoid problems with it. You can load the translations from a php array file or using a `Gettext\Translations` instance:

```
use Gettext\Translator;

//Create a new instance of the translator
$t = new Translator();

//Load the translations using any of the following ways:

// 1. from php files (generated by Gettext\Extractors\PhpArray)
$t->loadTranslations('locales/gl.php');

// 2. using the array directly
$array = include 'locales/gl.php';
$t->loadTranslations($array);

// 3. using a Gettext\Translations instance (slower)
$translations = Gettext\Translations::fromPoFile('locales/gl.po');
$t->loadTranslations($translations);

//Now you can use it in your templates
echo $t->gettext('apple');
```

GettextTranslator
-----------------

[](#gettexttranslator)

The class `Gettext\GettextTranslator` uses the gettext extension. It's useful because combines the performance of using real gettext functions but with the same API than `Translator` class, so you can switch to one or other translator deppending of the environment without change code of your app.

```
use Gettext\GettextTranslator;

//Create a new instance
$t = new GettextTranslator();

//It detects the environment variables to set the locale, but you can change it:
$t->setLanguage('gl');

//Load the domains:
$t->loadDomain('messages', 'project/Locale');
//this means you have the file "project/Locale/gl/LC_MESSAGES/messages.po"

//Now you can use it in your templates
echo $t->gettext('apple');
```

Global functions
----------------

[](#global-functions)

To ease the use of translations in your php templates, you can use the provided functions:

```
//Register the translator to use the global functions
$t->register();

echo __('apple'); // it's the same than $t->gettext('apple');
```

You can scan the php files containing these functions and extract the values with the PhpCode extractor:

```

```

Merge translations
------------------

[](#merge-translations)

To work with different translations you may want merge them in an unique file. There are two ways to do this:

The simplest way is adding new translations:

```
use Gettext\Translations;

$translations = Translations::fromPoFile('my-file1.po');
$translations->addFromPoFile('my-file2.po');
```

A more advanced way is merge two `Translations` instances:

```
use Gettext\Translations;

//Create a new Translations instances with our translations.

$translations1 = Translations::fromPoFile('my-file1.po');
$translations2 = Translations::fromPoFile('my-file2.po');

//Merge one inside other:
$translations1->mergeWith($translations2);

//Now translations1 has all values
```

The second argument of `mergeWith` defines how the merge will be done. Use the `Gettext\Merge` constants to configure the merging:

ConstantDescription`Merge::ADD`Adds the translations from `$translations2` that are missing`Merge::REMOVE`Removes the translations missing in `$translations2``Merge::HEADERS_ADD`Adds the headers from `$translations2` that are missing`Merge::HEADERS_REMOVE`Removes the headers missing in `$translations2``Merge::HEADERS_OVERRIDE`Overrides the headers with the values of `$translations2``Merge::LANGUAGE_OVERRIDE`Set the language defined in `$translations2``Merge::DOMAIN_OVERRIDE`Set the domain defined in `$translations2``Merge::TRANSLATION_OVERRIDE`Override the translation and plural translations with the value of `$translation2``Merge::COMMENTS_OURS`Use only the comments of `$translation1``Merge::COMMENTS_THEIRS`Use only the comments of `$translation2``Merge::EXTRACTED_COMMENTS_OURS`Use only the extracted comments of `$translation1``Merge::EXTRACTED_COMMENTS_THEIRS`Use only the extracted comments of `$translation2``Merge::FLAGS_OURS`Use only the flags of `$translation1``Merge::FLAGS_THEIRS`Use only the flags of `$translation2``Merge::REFERENCES_OURS`Use only the references of `$translation1``Merge::REFERENCES_THEIRS`Use only the references of `$translation2`Example:

```
use Gettext\Translations;
use Gettext\Merge;

//Scan the php code to find the latest gettext translations
$phpTranslations = Translations::fromPhpCodeFile('my-templates.php');

//Get the translations of the code that are stored in a po file
$poTranslations = Translations::fromPoFile('locale.po');

//Merge the translations from the po file using the references from `$phpTranslations`:
$translations->mergeWith($poTranslations, Merge::REFERENCES_OURS);

//Now save a po file with the result
$translations->toPoFile('locale.po');
```

Note, if the second argument is not defined, the default value is `Merge::DEFAULTS` that's equivalent to `Merge::ADD | Merge::HEADERS_ADD`.

Use from CLI
------------

[](#use-from-cli)

There's a Robo task to use this library from the command line interface:

Use in the browser
------------------

[](#use-in-the-browser)

If you want to use your translations in the browser, there's a javascript translator:

Third party packages
--------------------

[](#third-party-packages)

Twig integration:

- [jaimeperez/twig-configurable-i18n](https://packagist.org/packages/jaimeperez/twig-configurable-i18n)
- [cemerson/translator-twig-extension](https://packagist.org/packages/cemerson/translator-twig-extension)

Framework integration:

- [Laravel 5](https://packagist.org/packages/eusonlito/laravel-gettext)
- [CakePHP 3](https://packagist.org/packages/k1low/po)
- [Symfony 2](https://packagist.org/packages/mablae/gettext-bundle)

[add your package](https://github.com/oscarotero/Gettext/issues/new)

Contributors
------------

[](#contributors)

Thanks to all [contributors](https://github.com/oscarotero/Gettext/graphs/contributors) specially to [@mlocati](https://github.com/mlocati).

Donations
---------

[](#donations)

If this library is useful for you, consider to donate to the author.

[Buy me a beer 🍺](https://www.paypal.me/oscarotero)

Thanks in advance!

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 72.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~32 days

Recently: every ~51 days

Total

55

Last Release

2794d ago

Major Versions

v1.1.5 → 2.02014-11-20

v2.3.0 → v3.02015-01-22

v3.6.0 → v4.0.02016-06-15

v3.6.1 → v4.0.22016-08-28

PHP version history (2 changes)v1.0PHP &gt;=5.3.0

v4.0.0PHP &gt;=5.4.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/3710fe677972410fc279baaafe0c46c6bcf9a024a2e0dd998c8c494803c5d092?d=identicon)[epikgr](/maintainers/epikgr)

---

Top Contributors

[![oscarotero](https://avatars.githubusercontent.com/u/377873?v=4)](https://github.com/oscarotero "oscarotero (390 commits)")[![mlocati](https://avatars.githubusercontent.com/u/928116?v=4)](https://github.com/mlocati "mlocati (62 commits)")[![briedis](https://avatars.githubusercontent.com/u/500491?v=4)](https://github.com/briedis "briedis (14 commits)")[![swissspidy](https://avatars.githubusercontent.com/u/841956?v=4)](https://github.com/swissspidy "swissspidy (14 commits)")[![ScreamingDev](https://avatars.githubusercontent.com/u/2559177?v=4)](https://github.com/ScreamingDev "ScreamingDev (8 commits)")[![soukicz](https://avatars.githubusercontent.com/u/1814750?v=4)](https://github.com/soukicz "soukicz (7 commits)")[![hmpf](https://avatars.githubusercontent.com/u/11956096?v=4)](https://github.com/hmpf "hmpf (5 commits)")[![eusonlito](https://avatars.githubusercontent.com/u/644551?v=4)](https://github.com/eusonlito "eusonlito (5 commits)")[![maxhelias](https://avatars.githubusercontent.com/u/12966574?v=4)](https://github.com/maxhelias "maxhelias (3 commits)")[![delmicio](https://avatars.githubusercontent.com/u/2908209?v=4)](https://github.com/delmicio "delmicio (3 commits)")[![velosipedist](https://avatars.githubusercontent.com/u/653773?v=4)](https://github.com/velosipedist "velosipedist (3 commits)")[![vvh-empora](https://avatars.githubusercontent.com/u/5236105?v=4)](https://github.com/vvh-empora "vvh-empora (3 commits)")[![gator92](https://avatars.githubusercontent.com/u/1335495?v=4)](https://github.com/gator92 "gator92 (2 commits)")[![leom](https://avatars.githubusercontent.com/u/976508?v=4)](https://github.com/leom "leom (2 commits)")[![ArthurHoaro](https://avatars.githubusercontent.com/u/1962678?v=4)](https://github.com/ArthurHoaro "ArthurHoaro (2 commits)")[![Zae](https://avatars.githubusercontent.com/u/96126?v=4)](https://github.com/Zae "Zae (1 commits)")[![axlon](https://avatars.githubusercontent.com/u/3661474?v=4)](https://github.com/axlon "axlon (1 commits)")[![engpetarmarinov](https://avatars.githubusercontent.com/u/935841?v=4)](https://github.com/engpetarmarinov "engpetarmarinov (1 commits)")[![icebird93](https://avatars.githubusercontent.com/u/2758013?v=4)](https://github.com/icebird93 "icebird93 (1 commits)")[![Krato](https://avatars.githubusercontent.com/u/74367?v=4)](https://github.com/Krato "Krato (1 commits)")

---

Tags

i18ntranslationJSgettextpomovoo4

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/gettext-voo4-gettext/health.svg)

```
[![Health](https://phpackages.com/badges/gettext-voo4-gettext/health.svg)](https://phpackages.com/packages/gettext-voo4-gettext)
```

###  Alternatives

[gettext/gettext

PHP gettext manager

70530.2M102](/packages/gettext-gettext)[sepia/po-parser

Gettext \*.PO file parser for PHP.

1271.5M19](/packages/sepia-po-parser)[phpmyadmin/motranslator

Translation API for PHP using Gettext MO files

591.8M8](/packages/phpmyadmin-motranslator)[om/potrans

Command line tool for translate Gettext with Google Translator API or DeepL API

10515.0k4](/packages/om-potrans)[gettext/php-scanner

PHP scanner for gettext

15471.2k12](/packages/gettext-php-scanner)[fisharebest/localization

A lightweight localization database and translation tools, with data from the CLDR, IANA, ISO, etc.

3191.1k2](/packages/fisharebest-localization)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
