1.20.x language.module | language_save($language) |
API function to add or update a language.
Parameters
$language: Language object with properties corresponding to 'language' table columns.
File
- modules/
language/ language.module, line 110 - Add language handling functionality to Backdrop.
Code
function language_save($language) {
$config = config('language.settings');
$language->is_new = !$config->get('languages.' . $language->langcode);
if (!isset($language->name) || !isset($language->native)) {
include_once BACKDROP_ROOT . '/core/includes/standard.inc';
$predefined = standard_language_list();
// If name was not set, we add a predefined language.
if (!isset($language->name)) {
$language->name = $predefined[$language->langcode][0];
$language->direction = isset($predefined[$language->langcode][2]) ? $predefined[$language->langcode][2] : LANGUAGE_LTR;
}
if (!isset($language->native)) {
$language->native = isset($predefined[$language->langcode][1]) ? $predefined[$language->langcode][1] : $language->name;
}
}
// Set to enabled for the default language and unless specified otherwise.
if (!empty($language->default) || !isset($language->enabled)) {
$language->enabled = TRUE;
}
// Let other modules modify $language before saved.
module_invoke_all('language_presave', $language);
// Save the record and inform others about the change.
$t_args = array('%language' => $language->name, '%langcode' => $language->langcode);
// Make sure only applicable data is saved.
$language_data = (array) $language;
$defaults = array(
'langcode' => '',
'name' => '',
'native' => '',
'direction' => 0,
'enabled' => TRUE,
'weight' => 0,
);
$language_data += $defaults;
$language_data = array_intersect_key($language_data, $defaults);
// Insert the new language in order.
$all_languages = $config->get('languages');
$all_languages[$language->langcode] = (array) $language_data;
backdrop_sort($all_languages);
$config->set('languages', $all_languages);
$config->save();
if ($language->is_new) {
module_invoke_all('language_insert', $language);
watchdog('language', 'The %language (%langcode) language has been created.', $t_args);
}
else {
module_invoke_all('language_update', $language);
watchdog('language', 'The %language (%langcode) language has been updated.', $t_args);
}
if (!empty($language->default)) {
// Set the new version of this language as default in a variable.
config_set('system.core', 'language_default', $language->langcode);
backdrop_static_reset('language_default');
}
// Update language count based on enabled language count.
$current_languages = $config->get('languages');
$language_count = 0;
foreach ($current_languages as $language) {
if ($language['enabled']) {
$language_count++;
}
}
config_set('system.core', 'language_count', $language_count);
// Kill the static cache in language_list().
backdrop_static_reset('language_list');
return $language;
}