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.
		
		
		
		
			
				
					120 lines
				
				3.2 KiB
			
		
		
			
		
	
	
					120 lines
				
				3.2 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								<?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;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |