You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							119 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							119 lines
						
					
					
						
							3.2 KiB
						
					
					
				| <?php | |
| /** | |
|  * Created by Error202 | |
|  * Date: 23.08.2018 | |
|  */ | |
|  | |
| namespace core\helpers; | |
|  | |
| use common\modules\pages\forms\PageForm; | |
| use Yii; | |
| use yii\base\DynamicModel; | |
|  | |
| class LanguageHelper | |
| { | |
| 	public static function enabled() | |
| 	{ | |
| 		return count(Yii::$app->params['translatedLanguages']) > 1; | |
| 	} | |
|  | |
| 	public static function suffixList() | |
| 	{ | |
| 		$list = array(); | |
| 		$enabled = self::enabled(); | |
|  | |
| 		foreach (Yii::$app->params['translatedLanguages'] as $lang => $name) { | |
| 			if ($lang === Yii::$app->params['defaultLanguage']) { | |
| 				$suffix = ''; | |
| 				$list[$suffix] = $enabled ? $name : ''; | |
| 			} else { | |
| 				$suffix = '_' . $lang; | |
| 				$list[$suffix] = $name; | |
| 			} | |
| 		} | |
|  | |
| 		return $list; | |
| 	} | |
|  | |
| 	public static function isLangExists($url): bool | |
| 	{ | |
| 		$index = self::_getLangIndex(); | |
| 		$domains = explode('/', ltrim($url, '/')); | |
| 		return in_array($domains[$index], array_keys(Yii::$app->params['translatedLanguages'])); | |
| 	} | |
|  | |
| 	public static function setLanguage($url) | |
| 	{ | |
| 		$index = self::_getLangIndex(); | |
| 		$domains = explode('/', ltrim($url, '/')); | |
| 		$isLangExists = in_array($domains[$index], array_keys(Yii::$app->params['translatedLanguages'])); | |
| 		if ($isLangExists) { | |
| 			Yii::$app->language = $domains[$index]; | |
| 		} | |
| 		else { | |
| 			Yii::$app->language = Yii::$app->params['defaultLanguage']; | |
| 		} | |
| 	} | |
|  | |
| 	public static function processLangInUrl($url): string | |
| 	{ | |
| 		if (self::enabled()) { | |
| 			$index = self::_getLangIndex(); | |
| 			$domains = explode('/', ltrim($url, '/')); | |
| 			$isLangExists = in_array($domains[$index], array_keys(Yii::$app->params['translatedLanguages'])); | |
| 			$isDefaultLang = $domains[$index] == Yii::$app->params['defaultLanguage']; | |
|  | |
| 			if ($isLangExists && !$isDefaultLang) { | |
| 				array_splice($domains, $index, 1); | |
| 			} | |
| 			$url = '/' . implode('/', $domains); | |
| 		} | |
| 		return $url; | |
| 	} | |
|  | |
| 	public static function addLangToUrl($url, $language = null): string | |
| 	{ | |
| 		if (self::enabled()) { | |
| 			$index = self::_getLangIndex(); | |
| 			$domains = explode('/', ltrim($url, '/')); | |
| 			$isHasLang = in_array($language ?: $domains[$index], array_keys(Yii::$app->params['translatedLanguages'])); | |
| 			$isDefaultLang = $language ? $language == Yii::$app->params['defaultLanguage'] : Yii::$app->language == Yii::$app->params['defaultLanguage']; | |
|  | |
| 			if ($isHasLang && $isDefaultLang) { | |
| 				array_splice($domains, $index, 1); | |
| 			} | |
|  | |
| 			if (!$isHasLang && !$isDefaultLang) { | |
| 				array_splice($domains, $index, 0, Yii::$app->language); | |
| 			} | |
|  | |
| 			$domains = array_filter($domains); | |
| 			$url = '/' . implode('/', $domains); | |
| 		} | |
| 		return $url; | |
| 	} | |
|  | |
| 	public static function getName($language) | |
| 	{ | |
| 		return isset(Yii::$app->params['translatedLanguages'][$language]) ? Yii::$app->params['translatedLanguages'][$language] : $language; | |
| 	} | |
|  | |
| 	public static function getBackendName($language) | |
| 	{ | |
| 		return isset(Yii::$app->params['backendTranslatedLanguages'][$language]) ? Yii::$app->params['backendTranslatedLanguages'][$language] : Yii::$app->params['backendTranslatedLanguages'][Yii::$app->params['backendDefaultLanguage']]; | |
| 	} | |
|  | |
| 	private static function _getLangIndex(): int | |
| 	{ | |
| 		$index = 0; | |
| 		$baseUrl = ltrim(Yii::$app->request->baseUrl, '/'); | |
|  | |
| 		if (strlen($baseUrl)) { | |
| 			$baseUrlChunks = explode('/', $baseUrl); | |
| 			if (count($baseUrlChunks) > 0) { | |
| 				$index = count( $baseUrlChunks ); | |
| 			} | |
| 		} | |
| 		return $index; | |
| 	} | |
| }
 | |
| 
 |