/**
* 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');
}
}