Completed
Push — master ( 4cd033...db029f )
by Restu
13:17
created

Lang::getFromArray()   B

Complexity

Conditions 5
Paths 2

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 1
Metric Value
cc 5
eloc 7
c 2
b 1
f 1
nc 2
nop 5
dl 0
loc 13
rs 8.8571
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
    public static function setLocale($locale)
33
    {
34
        static::$locale = $locale;
35
    }
36
37
    /**
38
     * @param $dir
39
     * @throws \Exception
40
     */
41
    public static function setDir($dir)
42
    {
43
        static::$langDir = rtrim($dir, "/")."/";
44
45
        if (!is_dir(static::$langDir)) {
46
            throw new \Exception("folder lang not found");
47
        }
48
    }
49
50
    /**
51
     * @param $name
52
     * @param array $params
53
     * @param string $default
54
     * @return mixed|null|string
55
     */
56
    public static function get($name, $params = [], $default = "")
57
    {
58
        $nameArr = static::tryExplodeName($name);
59
60 View Code Duplication
        if (null !== $return = static::searchFormArrayLangOrFile($nameArr, $params, null, false)) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
61
            return $return;
62
        }
63
64
        $nameArrDef = $nameArr;
65
        $nameArrDef[0] = static::$localeDefault;
66 View Code Duplication
        if (null !== $return = static::searchFormArrayLangOrFile($nameArrDef, $params, null, false)) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
67
            return $return;
68
        }
69
70
        return $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
    public static function getFromArray($arr, $name, $params = [], $default = null, $getFormDefault = true)
82
    {
83
        $nameArr = static::tryExplodeName($name);
84
85
        $result = static::searchArrayWithNameArray($arr, $nameArr);
86
87
        if ($getFormDefault && $result === null && static::$localeDefault != static::$locale) {
88
            $nameArr[0] = static::$localeDefault;
89
            $result = static::searchArrayWithNameArray($arr, $nameArr);
90
        }
91
92
        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
    public static function getFromFile($name, $params = [], $default = null, $getFormDefault = true)
103
    {
104
        $nameArr = static::tryExplodeName($name);
105
106
        static::$lang[$nameArr[0]][$nameArr[1]] = static::loadFile($nameArr[0]."/".$nameArr[1].".php");
107
108
        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
    public static function getFromString($string, $params = [])
117
    {
118
        if ($string === null) {
119
            return null;
120
        }
121
122
        foreach ($params as $key => $value) {
123
            $string = str_replace("{" . $key . "}", $value, $string);
124
        }
125
126
        return $string;
127
    }
128
129
    /**
130
     * @param array|string $name
131
     * @return array
132
     */
133
    protected static function tryExplodeName($name)
134
    {
135
        if (is_string($name)) {
136
            $name = static::$locale.".".$name;
137
            return explode(".", $name);
138
        }
139
140
        return $name;
141
    }
142
143
    /**
144
     * @param array $arrLang
145
     * @param array $nameArr
146
     * @return array|mixed|null
147
     */
148
    protected static function searchArrayWithNameArray(array $arrLang, array $nameArr)
149
    {
150
        $result = $arrLang;
151
        for ($i = 0; $i < count($nameArr) && is_array($result); $i++) {
152
            $result = array_key_exists($nameArr[$i], $result)?$result[$nameArr[$i]]:null;
153
        }
154
155
        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
    protected static function searchFormArrayLangOrFile(
166
        array $nameArr,
167
        array $params = [],
168
        $default = null,
169
        $getFormDefault = false
170
    ) {
171
        if (null !== $return = static::getFromArray(static::$lang, $nameArr, $params, $default, $getFormDefault)) {
172
            return $return;
173
        }
174
        if (null !== $return = static::getFromFile($nameArr, $params, $default, $getFormDefault)) {
175
            return $return;
176
        }
177
178
        return $default;
179
    }
180
181
    /**
182
     * @param $filename
183
     * @return array|mixed
184
     */
185
    protected static function loadFile($filename)
186
    {
187
        $locFile = static::$langDir.$filename;
188
        return file_exists($locFile)?include($locFile):[];
189
    }
190
}
191