95 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Nextend\Framework\Localization;
 | |
| 
 | |
| use Nextend\Framework\Filesystem\Filesystem;
 | |
| use Nextend\Framework\Localization\Joomla\JoomlaLocalization;
 | |
| use Nextend\Framework\Localization\WordPress\WordPressLocalization;
 | |
| use Nextend\Framework\Pattern\SingletonTrait;
 | |
| use Nextend\Framework\Platform\Platform;
 | |
| use Nextend\Framework\Settings;
 | |
| 
 | |
| class Localization {
 | |
| 
 | |
|     use SingletonTrait;
 | |
| 
 | |
|     /**
 | |
|      * @var AbstractLocalization
 | |
|      */
 | |
|     private static $platformLocalization;
 | |
| 
 | |
|     private static $l10n = array();
 | |
| 
 | |
|     private static $js = array();
 | |
| 
 | |
|     protected function init() {
 | |
| 
 | |
|         require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Functions.php';
 | |
|         self::$platformLocalization = new WordPressLocalization();
 | |
|     }
 | |
| 
 | |
|     public static function getLocale() {
 | |
|         return self::$platformLocalization->getLocale();
 | |
|     }
 | |
| 
 | |
|     private static function checkMoFile($path, $locale) {
 | |
|         if (Filesystem::fileexists($path . '/' . $locale . '.mo')) return $locale . '.mo';
 | |
| 
 | |
|         if (strpos($locale, '_')) {
 | |
|             $nextLangStep = implode('_', explode('_', $locale, -1));
 | |
| 
 | |
|             return self::checkMoFile($path, $nextLangStep);
 | |
|         }
 | |
| 
 | |
|         return false;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     private static function loadTextDomain($domain, $mofile) {
 | |
| 
 | |
|         $mo = self::$platformLocalization->createMo();
 | |
|         if (!$mo->import_from_file($mofile)) return false;
 | |
| 
 | |
|         if (isset(self::$l10n[$domain])) $mo->merge_with(self::$l10n[$domain]);
 | |
|         self::$l10n[$domain] = &$mo;
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public static function loadPluginTextDomain($path, $domain = 'nextend') {
 | |
|         if (Platform::isAdmin() && Settings::get('force-english-backend')) {
 | |
|             $locale = 'en_EN';
 | |
|         } else {
 | |
|             $locale = self::getLocale();
 | |
|         }
 | |
|         $mofile = self::checkMoFile($path, $locale);
 | |
| 
 | |
|         if ($mofile && $loaded = self::loadTextDomain($domain, $path . '/' . $mofile)) {
 | |
|             return $loaded;
 | |
|         }
 | |
| 
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     public static function getTranslationsForDomain($domain) {
 | |
|         if (!isset(self::$l10n[$domain])) {
 | |
|             self::$l10n[$domain] = self::$platformLocalization->createNOOP_Translations();
 | |
|         }
 | |
| 
 | |
|         return self::$l10n[$domain];
 | |
|     }
 | |
| 
 | |
|     public static function addJS($texts) {
 | |
|         foreach ((array)$texts as $text) {
 | |
|             self::$js[$text] = n2_($text);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static function toJS() {
 | |
|         if (count(self::$js)) {
 | |
|             return '_N2._localization = ' . json_encode(self::$js) . ';';
 | |
|         }
 | |
| 
 | |
|         return '';
 | |
|     }
 | |
| } |