Skip to content

Commit 93b76ef

Browse files
committed
v1.1.0
Added new method `rnd`, which is used to return a random text if the value is an array. Added LocalizerInterface.php
1 parent 5877b38 commit 93b76ef

8 files changed

+156
-14
lines changed

.phpunit.result.cache

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version":1,"defects":{"ArrayBasedTranslators::testForDefaultTranslation":3,"ArrayBasedTranslators::testForDifferentTranslator":3,"ClassBasedTranslators::testForDefaultTranslation":3,"ClassBasedTranslators::testForDifferentTranslator":3},"times":{"ArrayBasedTranslators::testForGet":0.007,"ArrayBasedTranslators::testForDefaultTranslation":0.001,"ArrayBasedTranslators::testForDifferentTranslator":0,"ClassBasedTranslators::testDynamicMessage":0.156,"ClassBasedTranslators::testForGet":0.005,"ClassBasedTranslators::testForDefaultTranslation":0,"ClassBasedTranslators::testForDifferentTranslator":0}}
1+
{"version":1,"defects":{"ArrayBasedTranslators::testForDefaultTranslation":3,"ArrayBasedTranslators::testForDifferentTranslator":3,"ClassBasedTranslators::testForDefaultTranslation":3,"ClassBasedTranslators::testForDifferentTranslator":3,"ArrayBasedTranslatorsTest::testRandom":3},"times":{"ArrayBasedTranslators::testForGet":0.007,"ArrayBasedTranslators::testForDefaultTranslation":0.001,"ArrayBasedTranslators::testForDifferentTranslator":0,"ClassBasedTranslators::testDynamicMessage":0.156,"ClassBasedTranslators::testForGet":0.005,"ClassBasedTranslators::testForDefaultTranslation":0,"ClassBasedTranslators::testForDifferentTranslator":0,"ArrayBasedTranslatorsTest::testForGet":0.006,"ArrayBasedTranslatorsTest::testForDefaultTranslation":0,"ArrayBasedTranslatorsTest::testForDifferentTranslator":0.001,"ArrayBasedTranslatorsTest::testRandom":0,"ClassBasedTranslatorsTest::testForGet":0.013,"ClassBasedTranslatorsTest::testForDefaultTranslation":0.001,"ClassBasedTranslatorsTest::testForDifferentTranslator":0.001,"ClassBasedTranslatorsTest::testRandom":0}}

composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "nabeghe/light-localization",
33
"description": "A light weight, key-value & path-based PHP localization library that translations are loaded up when needed.",
44
"type": "library",
5-
"version": "1.0.2",
5+
"version": "1.1.0",
66
"homepage": "https://github.com/nabeghe/light-localization",
77
"license": "MIT",
88
"autoload": {
@@ -22,7 +22,7 @@
2222
"test": "vendor/bin/phpunit tests"
2323
},
2424
"require": {
25-
"php": ">=7.4"
25+
"php": ">=8.1"
2626
},
2727
"require-dev": {
2828
"phpunit/phpunit": "^9.0"

composer.lock

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Localizer.php

+23-7
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,8 @@
44
* Localizer class.
55
* @package Nabeghe\LightLocalization
66
*/
7-
class Localizer
7+
class Localizer implements LocalizerInterface
88
{
9-
/**
10-
* Default translator name.
11-
*/
12-
public const DEFAULT_TRANSLATOR = 'main';
13-
149
/**
1510
* The root path, where the directories related to the language codes are located.
1611
* @var string
@@ -101,7 +96,7 @@ public function getTranslators(): array
10196
* @param string $code Optional. Localization code. Default `generic`.
10297
* @param Localizer|string $defaultTranslation Optional. Default translation. Default is empty string.
10398
*/
104-
public function __construct(string $path, string $code = 'generic', $defaultTranslation = '')
99+
public function __construct(string $path, string $code = self::DEFAULT_CODE, $defaultTranslation = '')
105100
{
106101
$this->path = rtrim($path, '/');
107102
$this->code = $code;
@@ -218,4 +213,25 @@ public function get(string $key, string $translator = self::DEFAULT_TRANSLATOR)
218213
}
219214
return $this->defaultTranslation->get($key, $translator);
220215
}
216+
217+
/**
218+
* It's's similar to the {@see self::get()} method, with the difference that if the output is an array, it randomly returns one of the values within it.
219+
* @param string $key
220+
* @param string $translator
221+
* @return mixed|Localizer|string
222+
*/
223+
public function rnd(string $key, string $translator = self::DEFAULT_TRANSLATOR)
224+
{
225+
$text = $this->get($key, $translator);
226+
if (!is_array($text)) {
227+
return $text;
228+
}
229+
if ($text) {
230+
return $text[array_rand($text)];
231+
}
232+
if (is_string($this->defaultTranslation)) {
233+
return $this->defaultTranslation;
234+
}
235+
return $this->defaultTranslation->get($key, $translator);
236+
}
221237
}

src/LocalizerInterface.php

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php namespace Nabeghe\LightLocalization;
2+
3+
/**
4+
* Localizer interface.
5+
* @package Nabeghe\LightLocalization
6+
*/
7+
interface LocalizerInterface
8+
{
9+
/**
10+
* Default translator name.
11+
*/
12+
public const DEFAULT_TRANSLATOR = 'main';
13+
14+
/**
15+
* Default translator code.
16+
*/
17+
public const DEFAULT_CODE = 'generic';
18+
19+
/**
20+
* Retrieves the root path.
21+
*/
22+
public function getPath();
23+
24+
/**
25+
* Retrieves the current language code.
26+
*/
27+
public function getCode();
28+
29+
/**
30+
* Changes the localization code.
31+
* @param string $code New code.
32+
* @param bool $refresh Optional. After changing the code, should it reload the loaded translators or remove all of them from the loaded state? Default false.
33+
*/
34+
public function setCode(string $code, bool $refresh = false);
35+
36+
/**
37+
* Retrieves the default translation.
38+
*/
39+
public function getDefaultTranslation();
40+
41+
/**
42+
* Retrieves the list of loaded translators.
43+
* @return array
44+
*/
45+
public function getTranslators(): array;
46+
47+
/**
48+
* Retrieves the file path of a translator.
49+
* @param string $translator Optional. The translator file name without `.php` extension. Default `main`.
50+
* @return string
51+
*/
52+
public function getTranslatorPath(string $translator = self::DEFAULT_TRANSLATOR);
53+
54+
/**
55+
* Checks whether the translator exists or not.
56+
* @param string $translator Translator Translator file name.
57+
* @return bool
58+
*/
59+
public function translatorExists(string $translator = self::DEFAULT_TRANSLATOR);
60+
61+
/**
62+
* Checks if a translator is loaded before or not.
63+
* @param string $translator Translator file name.
64+
* @return bool
65+
*/
66+
public function isLoaded(string $translator);
67+
68+
/**
69+
* Loads a translator even if it is already loaded.
70+
* @param string $translator Translator file name.
71+
* @return bool
72+
*/
73+
public function load($translator = self::DEFAULT_TRANSLATOR);
74+
75+
/**
76+
* Loads all loaded translators from the beginning.
77+
*/
78+
public function refresh();
79+
80+
/**
81+
* Removes a translator from loaded state.
82+
* @param string $translator Translator file name.
83+
* @return bool
84+
*/
85+
public function unload(string $translator = self::DEFAULT_TRANSLATOR);
86+
87+
/**
88+
* Checks whether a key exists in a translator or not.
89+
* @param string $key
90+
* @param string $translator Translator file name.
91+
* @return bool
92+
*/
93+
public function has(string $key, $translator = self::DEFAULT_TRANSLATOR);
94+
95+
/**
96+
* Retrieves a string or translation using its key.
97+
* @param string $key The key is in the translator.
98+
* @param string $translator Translator file name.
99+
* @return string|mixed
100+
*/
101+
public function get(string $key, string $translator = self::DEFAULT_TRANSLATOR);
102+
103+
/**
104+
* It's's similar to the {@see self::get()} method, with the difference that if the output is an array, it randomly returns one of the values within it.
105+
* @param string $key
106+
* @param string $translator
107+
* @return mixed|Localizer|string
108+
*/
109+
public function rnd(string $key, string $translator = self::DEFAULT_TRANSLATOR);
110+
}

tests/LocalizerCase.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,16 @@ public function testForDefaultTranslation(): void
3636
public function testForDifferentTranslator(): void
3737
{
3838
$expected = 'Hadi Akbarzadeh';
39-
$translated = $this->localizer->get('name', 'developer'); // from `names.php` file.
39+
$translated = $this->localizer->get('name', 'developer'); // from `developer.php` file.
4040
$this->assertSame($expected, $translated);
4141
}
42+
43+
public function testRandom(): void
44+
{
45+
$expected = 'Hadi Akbarzadeh';
46+
$translated = $this->localizer->rnd('symbol', 'developer'); // from `developer.php` file.
47+
$this->assertSame(true, in_array($translated, [
48+
'H', 'A', 'D', 'I', 'E', 'L', 'S', 'A',
49+
]));
50+
}
4251
}

tests/data/array/en/developer.php

+3
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@
33
return [
44
'name' => 'Hadi Akbarzadeh',
55
'github' => 'https://github.com/nabeghe',
6+
'symbol' => [
7+
'H', 'A', 'D', 'I', 'E', 'L', 'S', 'A',
8+
],
69
];

tests/data/class/en/developer.php

+4
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44

55
public string $github = 'https://github.com/nabeghe';
66

7+
public array $symbol = [
8+
'H', 'A', 'D', 'I', 'E', 'L', 'S', 'A',
9+
];
10+
711
};

0 commit comments

Comments
 (0)