/
MomentLanguageAsset.php
74 lines (63 loc) · 1.85 KB
/
MomentLanguageAsset.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
namespace omnilight\assets;
use Yii;
use yii\web\AssetBundle;
use yii\web\View;
/**
* Class MomentLanguageAsset
*/
class MomentLanguageAsset extends AssetBundle
{
/**
* @inheritdoc
*/
public $depends = [
'omnilight\assets\MomentAsset'
];
/**
* @inheritdoc
*/
public $sourcePath = '@bower/moment/locale';
/**
* @var string|null When null, language will be equal for current locale of the application
*/
public $language = null;
/**
* @inheritdoc
*/
public function init()
{
/**
* Set sourcePath back to what it was, because bundled assets array sets it to `null`
*/
$this->sourcePath = '@bower/moment/locale';
}
public function registerAssetFiles($view)
{
parent::registerAssetFiles($view);
$language = strtolower($this->language ? $this->language : Yii::$app->language);
$this->registerLanguage($language, $view);
}
/**
* @param string $language
* @param View $view
*/
public function registerLanguage($language, $view)
{
$sourcePath = Yii::getAlias($this->sourcePath);
$fallbackLanguage = substr($language, 0, 2);
$desiredFile = $sourcePath . DIRECTORY_SEPARATOR . "{$language}.js";
if (!is_file($desiredFile)) {
if ($fallbackLanguage === 'en') { // en is default, there is not separate locale file for it
return;
}
$desiredFile = $sourcePath . DIRECTORY_SEPARATOR . "{$fallbackLanguage}.js";
if (file_exists($desiredFile)) {
$language = $fallbackLanguage;
}
}
$view->registerJsFile($this->baseUrl."/{$language}.js");
$js = "moment.locale('{$language}')";
$view->registerJs($js, View::POS_READY, 'moment-locale-'.$language);
}
}