Back to LanguageAdapter class

Method createContentLanguage

protected
createContentLanguage
(mixed $tag)
Create an unpublished content language.
Parameters
  • $tag string The language tag
Since
  • 4.0.0
-
  • \Exception

Method createContentLanguage - Source code

/**
 * Create an unpublished content language.
 *
 * @param  $tag  string  The language tag
 *
 * @throws \Exception
 * @since   4.0.0
 */
protected function createContentLanguage($tag)
{
    $tableLanguage = Table::getInstance('language');
    // Check if content language already exists.
    if ($tableLanguage->load(array('lang_code' => $tag))) {
        return;
    }
    $manifestfile = JPATH_SITE . '/language/' . $tag . '/langmetadata.xml';
    if (!is_file($manifestfile)) {
        $manifestfile = JPATH_SITE . '/language/' . $tag . '/' . $tag . '.xml';
    }
    // Load the site language manifest.
    $siteLanguageManifest = LanguageHelper::parseXMLLanguageFile($manifestfile);
    // Set the content language title as the language metadata name.
    $contentLanguageTitle = $siteLanguageManifest['name'];
    // Set, as fallback, the content language native title to the language metadata name.
    $contentLanguageNativeTitle = $contentLanguageTitle;
    // If exist, load the native title from the language xml metadata.
    if (isset($siteLanguageManifest['nativeName']) && $siteLanguageManifest['nativeName']) {
        $contentLanguageNativeTitle = $siteLanguageManifest['nativeName'];
    }
    // Try to load a language string from the installation language var. Will be removed in 4.0.
    if ($contentLanguageNativeTitle === $contentLanguageTitle) {
        $manifestfile = JPATH_INSTALLATION . '/language/' . $tag . '/langmetadata.xml';
        if (!is_file($manifestfile)) {
            $manifestfile = JPATH_INSTALLATION . '/language/' . $tag . '/' . $tag . '.xml';
        }
        if (file_exists($manifestfile)) {
            $installationLanguage = new Language($tag);
            $installationLanguage->load('', JPATH_INSTALLATION);
            if ($installationLanguage->hasKey('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME')) {
                // Make sure it will not use the en-GB fallback.
                $defaultLanguage = new Language('en-GB');
                $defaultLanguage->load('', JPATH_INSTALLATION);
                $defaultLanguageNativeTitle = $defaultLanguage->_('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME');
                $installationLanguageNativeTitle = $installationLanguage->_('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME');
                if ($defaultLanguageNativeTitle !== $installationLanguageNativeTitle) {
                    $contentLanguageNativeTitle = $installationLanguage->_('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME');
                }
            }
        }
    }
    // Prepare language data for store.
    $languageData = array('lang_id' => 0, 'lang_code' => $tag, 'title' => $contentLanguageTitle, 'title_native' => $contentLanguageNativeTitle, 'sef' => $this->getSefString($tag), 'image' => strtolower(str_replace('-', '_', $tag)), 'published' => 0, 'ordering' => 0, 'access' => (int) Factory::getApplication()->get('access', 1), 'description' => '', 'metadesc' => '', 'sitename' => '');
    if (!$tableLanguage->bind($languageData) || !$tableLanguage->check() || !$tableLanguage->store() || !$tableLanguage->reorder()) {
        Log::add(Text::sprintf('JLIB_INSTALLER_WARNING_UNABLE_TO_INSTALL_CONTENT_LANGUAGE', $siteLanguageManifest['name'], $tableLanguage->getError()), Log::NOTICE, 'jerror');
    }
}