Browse Source

Fix #3195 : pre-selection automatique de la langue lorsqu'on cree une traduction : la langue de l'auteur ou l'autre langue si il y en a que 2

retour partiel sur b011297b en lien avec #2839
remotes/checkIfPRContentChanged-1613674085726468295/master
Cerdic 2 months ago
parent
commit
8dedb1b793
  1. 8
      ecrire/inc/editer.php
  2. 19
      ecrire/inc/precharger_objet.php
  3. 4
      prive/formulaires/editer_article.php

8
ecrire/inc/editer.php

@ -223,11 +223,14 @@ function formulaires_editer_objet_charger(
}
$new = !is_numeric($id);
$lang_default = '';
// Appel direct dans un squelette
if (!$row) {
if (!$new or $lier_trad) {
if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
$row = $select($id, $id_parent, $lier_trad);
// si on a une fonction precharger, elle pu faire un reglage de langue
$lang_default = (!empty($row['lang']) ? $row['lang'] : null);
} else {
$row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id));
}
@ -277,6 +280,9 @@ function formulaires_editer_objet_charger(
$config = array();
if ($config_fonc) {
$contexte['config'] = $config = $config_fonc($contexte);
if (!$lang_default) {
$lang_default = $config['langue'];
}
}
$config = $config + array(
'lignes' => 0,
@ -305,7 +311,7 @@ function formulaires_editer_objet_charger(
$lier_trad .
"' />" .
"\n<input type='hidden' name='changer_lang' value='" .
$config['langue'] .
$lang_default .
"' />"))
. $hidden
. (isset($md5) ? $md5 : '');

19
ecrire/inc/precharger_objet.php

@ -146,6 +146,22 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_t
$is_rubrique = isset($desc['field']['id_rubrique']);
if ($is_rubrique) {
$langues_dispo = explode(',', $GLOBALS['meta']['langues_multilingue']);
// si le redacteur utilise une autre langue que celle de la source, on suppose que c'est pour traduire dans sa langue
if (in_array($GLOBALS['spip_lang'], $langues_dispo) and $GLOBALS['spip_lang'] !== $row['lang']) {
$row['lang'] = $GLOBALS['spip_lang'];
}
// sinon si il y a seulement 2 langues dispos, on bascule sur l'"autre"
elseif (count($langues_dispo) == 2) {
$autre_langue = array_diff($langues_dispo, [$row['lang']]);
if (count($autre_langue) == 1) {
$row['lang'] = reset($autre_langue);
}
}
else {
$row['lang'] = 'en';
}
if ($id_rubrique) {
$row['id_rubrique'] = $id_rubrique;
@ -156,8 +172,7 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_t
// Regler la langue, si possible, sur celle du redacteur
// Cela implique souvent de choisir une rubrique ou un secteur
if (in_array($GLOBALS['spip_lang'],
explode(',', $GLOBALS['meta']['langues_multilingue']))) {
if (in_array($GLOBALS['spip_lang'], $langues_dispo)) {
// Si le menu de langues est autorise sur l'objet,
// on peut changer la langue quelle que soit la rubrique

4
prive/formulaires/editer_article.php

@ -210,7 +210,9 @@ function formulaires_editer_article_traiter_dist(
// ici on ignore changer_lang qui est poste en cas de trad,
// car l'heuristique du choix de la langue est pris en charge par article_inserer
// en fonction de la config du site et de la rubrique choisie
set_request('changer_lang');
if (!$lier_trad) {
set_request('changer_lang');
}
return formulaires_editer_objet_traiter(
'article',

Loading…
Cancel
Save