sL($key); return $value !== FALSE ? $value : NULL; } elseif (is_object($GLOBALS['LANG'])) { $value = $GLOBALS['LANG']->sL($key); return $value !== '' ? $value : NULL; } else { return $key; } } /** * Loads local-language values by looking for a "locallang.php" (or "locallang.xml") file in the plugin resources directory and if found includes it. * Also locallang values set in the TypoScript property "_LOCAL_LANG" are merged onto the values found in the "locallang.php" file. * * @param string $extensionName * @return void */ static protected function initializeLocalization($extensionName) { if (isset(self::$LOCAL_LANG[$extensionName])) { return; } $locallangPathAndFilename = 'EXT:' . \TYPO3\CMS\Core\Utility\GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName) . '/' . self::$locallangPath . 'locallang.xml'; self::setLanguageKeys(); $renderCharset = TYPO3_MODE === 'FE' ? $GLOBALS['TSFE']->renderCharset : $GLOBALS['LANG']->charSet; self::$LOCAL_LANG[$extensionName] = \TYPO3\CMS\Core\Utility\GeneralUtility::readLLfile($locallangPathAndFilename, self::$languageKey, $renderCharset); foreach (self::$alternativeLanguageKeys as $language) { $tempLL = \TYPO3\CMS\Core\Utility\GeneralUtility::readLLfile($locallangPathAndFilename, $language, $renderCharset); if (self::$languageKey !== 'default' && isset($tempLL[$language])) { self::$LOCAL_LANG[$extensionName][$language] = $tempLL[$language]; } } self::loadTypoScriptLabels($extensionName); } /** * Sets the currently active language/language_alt keys. * Default values are "default" for language key and "" for language_alt key. * * @return void */ static protected function setLanguageKeys() { self::$languageKey = 'default'; self::$alternativeLanguageKeys = array(); if (TYPO3_MODE === 'FE') { if (isset($GLOBALS['TSFE']->config['config']['language'])) { self::$languageKey = $GLOBALS['TSFE']->config['config']['language']; if (isset($GLOBALS['TSFE']->config['config']['language_alt'])) { self::$alternativeLanguageKeys[] = $GLOBALS['TSFE']->config['config']['language_alt']; } else { /** @var $locales \TYPO3\CMS\Core\Localization\Locales */ $locales = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Localization\\Locales'); if (in_array(self::$languageKey, $locales->getLocales())) { foreach ($locales->getLocaleDependencies(self::$languageKey) as $language) { self::$alternativeLanguageKeys[] = $language; } } } } } elseif (strlen($GLOBALS['BE_USER']->uc['lang']) > 0) { self::$languageKey = $GLOBALS['BE_USER']->uc['lang']; } } /** * Overwrites labels that are set via TypoScript. * TS locallang labels have to be configured like: * plugin.tx_myextension._LOCAL_LANG.languageKey.key = value * * @param string $extensionName * @return void */ static protected function loadTypoScriptLabels($extensionName) { $configurationManager = static::getConfigurationManager(); $frameworkConfiguration = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, $extensionName); if (!is_array($frameworkConfiguration['_LOCAL_LANG'])) { return; } self::$LOCAL_LANG_UNSET[$extensionName] = array(); foreach ($frameworkConfiguration['_LOCAL_LANG'] as $languageKey => $labels) { if (!(is_array($labels) && isset(self::$LOCAL_LANG[$extensionName][$languageKey]))) { continue; } foreach ($labels as $labelKey => $labelValue) { if (is_string($labelValue)) { self::$LOCAL_LANG[$extensionName][$languageKey][$labelKey][0]['target'] = $labelValue; if ($labelValue === '') { self::$LOCAL_LANG_UNSET[$extensionName][$languageKey][$labelKey] = ''; } if (is_object($GLOBALS['LANG'])) { self::$LOCAL_LANG_charset[$extensionName][$languageKey][$labelKey] = $GLOBALS['LANG']->csConvObj->charSetArray[$languageKey]; } else { self::$LOCAL_LANG_charset[$extensionName][$languageKey][$labelKey] = $GLOBALS['TSFE']->csConvObj->charSetArray[$languageKey]; } } elseif (is_array($labelValue)) { $labelValue = self::flattenTypoScriptLabelArray($labelValue, $labelKey); foreach ($labelValue as $key => $value) { self::$LOCAL_LANG[$extensionName][$languageKey][$key][0]['target'] = $value; if ($value === '') { self::$LOCAL_LANG_UNSET[$extensionName][$languageKey][$key] = ''; } } } } } } /** * Flatten TypoScript label array; converting a hierarchical array into a flat * array with the keys separated by dots. * * Example Input: array('k1' => array('subkey1' => 'val1')) * Example Output: array('k1.subkey1' => 'val1') * * @param array $labelValues Hierarchical array of labels * @param string $parentKey the name of the parent key in the recursion; is only needed for recursion. * @return array flattened array of labels. */ static protected function flattenTypoScriptLabelArray(array $labelValues, $parentKey = '') { $result = array(); foreach ($labelValues as $key => $labelValue) { if (!empty($parentKey)) { $key = $parentKey . '.' . $key; } if (is_array($labelValue)) { $labelValue = self::flattenTypoScriptLabelArray($labelValue, $key); $result = array_merge($result, $labelValue); } else { $result[$key] = $labelValue; } } return $result; } /** * Converts a string from the specified character set to the current. * The current charset is defined by the TYPO3 mode. * * @param string $value string to be converted * @param string $charset The source charset * @return string converted string */ static protected function convertCharset($value, $charset) { if (TYPO3_MODE === 'FE') { return $GLOBALS['TSFE']->csConv($value, $charset); } else { $convertedValue = $GLOBALS['LANG']->csConvObj->conv($value, $GLOBALS['LANG']->csConvObj->parse_charset($charset), $GLOBALS['LANG']->charSet, 1); return $convertedValue !== NULL ? $convertedValue : $value; } } /** * Returns instance of the configuration manager * * @return \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface */ static protected function getConfigurationManager() { if (!is_null(static::$configurationManager)) { return static::$configurationManager; } $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); $configurationManager = $objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManagerInterface'); static::$configurationManager = $configurationManager; return $configurationManager; } }