PHPackages                             undercloud/lang - 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. undercloud/lang

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

undercloud/lang
===============

PHP Multilanguage System

113PHP

Since Apr 13Pushed 10y ago1 watchersCompare

[ Source](https://github.com/undercloud/lang)[ Packagist](https://packagist.org/packages/undercloud/lang)[ RSS](/packages/undercloud-lang/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

\#Lang PHP Multilanguage System

\##install `composer require undercloud/lang`

\##translates

```
// /en/message.php
return [
	'hello' => 'Hello, :username',
	'hobbies' => 'Your hobbies is: :hobbies'
];
```

\##setup

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

$lang = new Undercloud\Lang([
	// translates path
	'root' => '/path/to/translates',
	// list of user accepted, default parse http header Accept-Language
	'accept' => ['en', 'de'],
	// list of supported translates
	'avail' => ['en','fr','de'],
	// setup translates file handler, default PHP Arrays
	'parser' => new Undercloud\Lang\Parser\AbstractParser
]);

// Hello, John
$lang('message.hello', ['username' => 'John']);

//Your hobbies is: music, football, web
$lang('message.hobbies', ['hobbies': ['music', 'football', 'web']]);
```

\##api

```
// parse Accept-Language header and return supported locales
$lang->getLangsHttp();

// return primary locale name
$lang->getPrimaryLocale();

// return fallback locale
$lang->getFallBackLocale();
```

\##parser By default avail two type of language files parsers `Undercloud\Lang\Parser\DefaultParser` and `Undercloud\Lang\Parser\JsonParser`, You can define you'r own parser:

```
// file based parser
use Undercloud\Lang\Parser\AbstractParser;

class MyOwnParser extends AbstractParser
{
	public function parse()
	{
		$path = func_get_arg(0) . '.extension';
		/*...*/
	}
}
```

or

```
// database like parser
use Undercloud\Lang\Parser\AbstractParser;

class MyOwnParser extends AbstractParser
{
	public $buildPath = false;

	public function parse()
	{
		$locale = func_get_arg(0);
		$entity = func_get_arg(1);

		/*...*/
	}
}
```

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/920a45a1bd1af5960cf6781cd2d8831ebfe2890c1077210667802afa109d8d13?d=identicon)[undercloud](/maintainers/undercloud)

### Embed Badge

![Health badge](/badges/undercloud-lang/health.svg)

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

###  Alternatives

[php-translation/translator

Translator services

25224.8k5](/packages/php-translation-translator)[smmoosavi/php-gettext

Wrapper for php-gettext by danilo segan. This library provides PHP functions to read MO files even when gettext is not compiled in or when appropriate locale is not present on the system.

1926.6k1](/packages/smmoosavi-php-gettext)[laradevs/spanish

labels translated to spanish

166.7k](/packages/laradevs-spanish)

PHPackages © 2026

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