function install_check_translations in Drupal 8
Same name and namespace in other branches
- 9 core/includes/install.core.inc \install_check_translations()
- 10 core/includes/install.core.inc \install_check_translations()
Checks installation requirements and reports any errors.
Parameters
string $langcode: Language code to check for download.
string $server_pattern: Server access pattern (to replace language code, version number, etc. in).
Return value
array|null Requirements compliance array. If the translation was downloaded successfully then an empty array is returned. Otherwise the requirements error with detailed information. NULL if the file already exists for this language code.
1 call to install_check_translations()
- install_download_translation in core/
includes/ install.core.inc - Download a translation file for the selected language.
1 string reference to 'install_check_translations'
- install_download_additional_translations_operations in core/
includes/ install.core.inc - Prepares the system for import and downloads additional translations.
File
- core/
includes/ install.core.inc, line 1901 - API functions for installing Drupal.
Code
function install_check_translations($langcode, $server_pattern) {
$requirements = [];
$readable = FALSE;
$writable = FALSE;
// @todo: Make this configurable.
$site_path = \Drupal::service('site.path');
$files_directory = $site_path . '/files';
$translations_directory = $site_path . '/files/translations';
$translations_directory_exists = FALSE;
$online = FALSE;
// First attempt to create or make writable the files directory.
/** @var \Drupal\Core\File\FileSystemInterface $file_system */
$file_system = \Drupal::service('file_system');
$file_system
->prepareDirectory($files_directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
// Then, attempt to create or make writable the translations directory.
$file_system
->prepareDirectory($translations_directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
// Get values so the requirements errors can be specific.
if (drupal_verify_install_file($translations_directory, FILE_EXIST, 'dir')) {
$readable = is_readable($translations_directory);
$writable = is_writable($translations_directory);
$translations_directory_exists = TRUE;
}
// The file already exists, no need to attempt to download.
if ($existing_file = glob($translations_directory . '/drupal-*.' . $langcode . '.po')) {
return;
}
$version = \Drupal::VERSION;
// For dev releases, remove the '-dev' part and trust the translation server
// to fall back to the latest stable release for that branch.
// @see locale_translation_build_projects()
if (preg_match("/^(\\d+\\.\\d+\\.).*-dev\$/", $version, $matches)) {
// Example match: 8.0.0-dev => 8.0.x (Drupal core)
$version = $matches[1] . 'x';
}
// Build URL for the translation file and the translation server.
$variables = [
'%project' => 'drupal',
'%version' => $version,
'%core' => 'all',
'%language' => $langcode,
];
$translation_url = strtr($server_pattern, $variables);
$elements = parse_url($translation_url);
$server_url = $elements['scheme'] . '://' . $elements['host'];
// Build the language name for display.
$languages = LanguageManager::getStandardLanguageList();
$language = isset($languages[$langcode]) ? $languages[$langcode][0] : $langcode;
// Check if any of the desired translation files are available or if the
// translation server can be reached. In other words, check if we are online
// and have an internet connection.
if ($translation_available = install_check_localization_server($translation_url)) {
$online = TRUE;
}
if (!$translation_available) {
if (install_check_localization_server($server_url)) {
$online = TRUE;
}
}
// If the translations directory does not exist, throw an error.
if (!$translations_directory_exists) {
$requirements['translations directory exists'] = [
'title' => t('Translations directory'),
'value' => t('The translations directory does not exist.'),
'severity' => REQUIREMENT_ERROR,
'description' => t('The installer requires that you create a translations directory as part of the installation process. Create the directory %translations_directory . More details about installing Drupal are available in <a href=":install_txt">INSTALL.txt</a>.', [
'%translations_directory' => $translations_directory,
':install_txt' => base_path() . 'core/INSTALL.txt',
]),
];
}
else {
$requirements['translations directory exists'] = [
'title' => t('Translations directory'),
'value' => t('The directory %translations_directory exists.', [
'%translations_directory' => $translations_directory,
]),
];
// If the translations directory is not readable, throw an error.
if (!$readable) {
$requirements['translations directory readable'] = [
'title' => t('Translations directory'),
'value' => t('The translations directory is not readable.'),
'severity' => REQUIREMENT_ERROR,
'description' => t('The installer requires read permissions to %translations_directory at all times. The <a href=":handbook_url">webhosting issues</a> documentation section offers help on this and other topics.', [
'%translations_directory' => $translations_directory,
':handbook_url' => 'https://www.drupal.org/server-permissions',
]),
];
}
// If translations directory is not writable, throw an error.
if (!$writable) {
$requirements['translations directory writable'] = [
'title' => t('Translations directory'),
'value' => t('The translations directory is not writable.'),
'severity' => REQUIREMENT_ERROR,
'description' => t('The installer requires write permissions to %translations_directory during the installation process. The <a href=":handbook_url">webhosting issues</a> documentation section offers help on this and other topics.', [
'%translations_directory' => $translations_directory,
':handbook_url' => 'https://www.drupal.org/server-permissions',
]),
];
}
else {
$requirements['translations directory writable'] = [
'title' => t('Translations directory'),
'value' => t('The translations directory is writable.'),
];
}
}
// If the translations server can not be contacted, throw an error.
if (!$online) {
$requirements['online'] = [
'title' => t('Internet'),
'value' => t('The translation server is offline.'),
'severity' => REQUIREMENT_ERROR,
'description' => t('The installer requires to contact the translation server to download a translation file. Check your internet connection and verify that your website can reach the translation server at <a href=":server_url">@server_url</a>.', [
':server_url' => $server_url,
'@server_url' => $server_url,
]),
];
}
else {
$requirements['online'] = [
'title' => t('Internet'),
'value' => t('The translation server is online.'),
];
// If translation file is not found at the translation server, throw an
// error.
if (!$translation_available) {
$requirements['translation available'] = [
'title' => t('Translation'),
'value' => t('The %language translation is not available.', [
'%language' => $language,
]),
'severity' => REQUIREMENT_ERROR,
'description' => t('The %language translation file is not available at the translation server. <a href=":url">Choose a different language</a> or select English and translate your website later.', [
'%language' => $language,
':url' => $_SERVER['SCRIPT_NAME'],
]),
];
}
else {
$requirements['translation available'] = [
'title' => t('Translation'),
'value' => t('The %language translation is available.', [
'%language' => $language,
]),
];
}
}
if ($translations_directory_exists && $readable && $writable && $translation_available) {
$translation_downloaded = install_retrieve_file($translation_url, $translations_directory);
if (!$translation_downloaded) {
$requirements['translation downloaded'] = [
'title' => t('Translation'),
'value' => t('The %language translation could not be downloaded.', [
'%language' => $language,
]),
'severity' => REQUIREMENT_ERROR,
'description' => t('The %language translation file could not be downloaded. <a href=":url">Choose a different language</a> or select English and translate your website later.', [
'%language' => $language,
':url' => $_SERVER['SCRIPT_NAME'],
]),
];
}
}
return $requirements;
}