Lang   A
last analyzed

Complexity

Total Complexity 27

Size/Duplication

Total Lines 183
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 98.21%

Importance

Changes 3
Bugs 1 Features 2
Metric Value
c 3
b 1
f 2
dl 0
loc 183
ccs 55
cts 56
cp 0.9821
rs 10
wmc 27
lcom 1
cbo 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A setLocale() 0 4 1
A setDir() 0 8 2
A get() 0 16 4
B getFromArray() 0 13 5
A getFromFile() 0 8 1
A getFromString() 0 12 3
A tryExplodeName() 0 9 2
A searchArrayWithNameArray() 0 9 4
A searchFormArrayLangOrFile() 0 15 3
A loadFile() 0 5 2
1
<?php
2
namespace JayaCode\Framework\Core\Lang;
3
4
/**
5
 * Class Lang
6
 * @package JayaCode\Framework\Core\Lang
7
 */
8
class Lang
9
{
10
    /**
11
     * @var string
12
     */
13
    protected static $locale = 'eng';
14
    /**
15
     * @var string
16
     */
17
    protected static $localeDefault = "eng";
18
19
    /**
20
     * @var string
21
     */
22
    protected static $langDir = '/';
23
24
    /**
25
     * @var array
26
     */
27
    protected static $lang = [];
28
29
    /**
30
     * @param $locale
31
     */
32 6
    public static function setLocale($locale)
33
    {
34 6
        static::$locale = $locale;
35 6
    }
36
37
    /**
38
     * @param $dir
39
     * @throws \Exception
40
     */
41 3
    public static function setDir($dir)
42
    {
43 3
        static::$langDir = rtrim($dir, "/")."/";
44
45 3
        if (!is_dir(static::$langDir)) {
46
            throw new \Exception("folder lang not found");
47
        }
48 3
    }
49
50
    /**
51
     * @param $name
52
     * @param array $params
53
     * @param string $default
54
     * @return mixed|null|string
55
     */
56 15
    public static function get($name, $params = [], $default = "")
57
    {
58 15
        $nameArr = static::tryExplodeName($name);
59
60 15
        if (null !== $return = static::searchFormArrayLangOrFile($nameArr, $params)) {
61 3
            return $return;
62
        }
63
64 15
        $nameArrDef = $nameArr;
65 15
        $nameArrDef[0] = static::$localeDefault;
66 15
        if (null !== $return = static::searchFormArrayLangOrFile($nameArrDef, $params)) {
67 3
            return $return;
68
        }
69
70 15
        return is_string($default)?static::getFromString($default, $params):$default;
71
    }
72
73
    /**
74
     * @param $arr
75
     * @param $name
76
     * @param array $params
77
     * @param null $default
78
     * @param bool $getFormDefault
79
     * @return mixed|null
80
     */
81 18
    public static function getFromArray($arr, $name, $params = [], $default = null, $getFormDefault = true)
82
    {
83 18
        $nameArr = static::tryExplodeName($name);
84
85 18
        $result = static::searchArrayWithNameArray($arr, $nameArr);
86
87 18
        if ($getFormDefault && $result === null && static::$localeDefault != static::$locale) {
88 3
            $nameArr[0] = static::$localeDefault;
89 3
            $result = static::searchArrayWithNameArray($arr, $nameArr);
90 3
        }
91
92 18
        return static::getFromString(is_string($result)?$result:$default, $params);
93
    }
94
95
    /**
96
     * @param $name
97
     * @param array $params
98
     * @param null $default
99
     * @param bool $getFormDefault
100
     * @return mixed|null
101
     */
102 15
    public static function getFromFile($name, $params = [], $default = null, $getFormDefault = true)
103
    {
104 15
        $nameArr = static::tryExplodeName($name);
105
106 15
        static::$lang[$nameArr[0]][$nameArr[1]] = static::loadFile($nameArr[0]."/".$nameArr[1].".php");
107
108 15
        return static::getFromArray(static::$lang, $nameArr, $params, $default, $getFormDefault);
109
    }
110
111
    /**
112
     * @param $string
113
     * @param array $params
114
     * @return mixed|null
115
     */
116 21
    public static function getFromString($string, $params = [])
117
    {
118 21
        if ($string === null) {
119 15
            return null;
120
        }
121
122 21
        foreach ($params as $key => $value) {
123 21
            $string = str_replace("{" . $key . "}", htmlspecialchars($value), $string);
124 21
        }
125
126 21
        return $string;
127
    }
128
129
    /**
130
     * @param array|string $name
131
     * @return array
132
     */
133 18
    protected static function tryExplodeName($name)
134
    {
135 18
        if (is_string($name)) {
136 18
            $name = static::$locale.".".$name;
137 18
            return explode(".", $name);
138
        }
139
140 15
        return $name;
141
    }
142
143
    /**
144
     * @param array $arrLang
145
     * @param array $nameArr
146
     * @return array|mixed|null
147
     */
148 18
    protected static function searchArrayWithNameArray(array $arrLang, array $nameArr)
149
    {
150 18
        $result = $arrLang;
151 18
        for ($i = 0; $i < count($nameArr) && is_array($result); $i++) {
152 18
            $result = array_key_exists($nameArr[$i], $result)?$result[$nameArr[$i]]:null;
153 18
        }
154
155 18
        return $result;
156
    }
157
158
    /**
159
     * @param array $nameArr
160
     * @param array $params
161
     * @param null $default
162
     * @param bool $getFormDefault
163
     * @return mixed|null
164
     */
165 15
    protected static function searchFormArrayLangOrFile(
166
        array $nameArr,
167
        array $params = [],
168
        $default = null,
169
        $getFormDefault = false
170
    ) {
171 15
        if (null !== $return = static::getFromArray(static::$lang, $nameArr, $params, $default, $getFormDefault)) {
172 3
            return $return;
173
        }
174 15
        if (null !== $return = static::getFromFile($nameArr, $params, $default, $getFormDefault)) {
175 3
            return $return;
176
        }
177
178 15
        return $default;
179
    }
180
181
    /**
182
     * @param $filename
183
     * @return array|mixed
184
     */
185 15
    protected static function loadFile($filename)
186
    {
187 15
        $locFile = static::$langDir.$filename;
188 15
        return file_exists($locFile)?include($locFile):[];
189
    }
190
}
191