Compare commits

..

6 commits

Author SHA1 Message Date
Benjamin Renard
7c48b8062b
LSio: trace errors and messages during import to map them with objects and hooks. 2023-05-26 11:31:19 +02:00
Benjamin Renard
bc171e6092
generate_ldapsaisie_pot: Add -I/--internal paramater to use internal message extractor for PHP files instead of xgettext
Note: just for tests, not recommended.
2023-05-26 11:31:18 +02:00
Benjamin Renard
b3cd453918
LSlang: fix handling backslash in export POT file 2023-05-26 11:31:18 +02:00
Benjamin Renard
1c900320db
LSlang: improve internal message extrators from PHP files
- add support of multiple lines messages
- detect and ignore commented code block
- improving code tracing

Note: still no support of advanced gettext functions (ngettext,
dcgettext, ...).
2023-05-26 11:31:17 +02:00
Benjamin Renard
65d1d50c3a
Templating tr function: provided message could now be formated as LSformat string using extra provided parameters
Example: {tr msg="Hello %(who)!" who="World"}
2023-05-26 10:26:56 +02:00
Benjamin Renard
087b7e3065
LSerror::getErrors(): add $reset parameter 2023-05-26 09:40:28 +02:00
9 changed files with 692 additions and 448 deletions

View file

@ -3,17 +3,33 @@ h3.LSio {
border-bottom: 1px solid;
}
div.LSio_error {
div.LSio_error, div.LSio_hook {
padding: 0 2em;
}
ul.LSio_global_errors {
background-color: #F56A6A;
ul.LSio_imported_objects h3, ul.LSio_updated_objects h3, div.LSio_hook h3 {
margin: 0;
font-size: 1em;
}
ul.LSio_global_errors, ul.LSio_global_messages, ul.LSio_object_errors, ul.LSio_object_messages, ul.LSio_hook_errors, ul.LSio_hook_messages {
list-style-type: none;
padding: 1em;
margin: 0;
}
ul.LSio_global_errors, ul.LSio_global_messages {
text-align: center;
}
ul.LSio_global_errors, ul.LSio_object_errors, ul.LSio_hook_errors {
background-color: #F56A6A;
}
ul.LSio_global_messages, ul.LSio_object_messages, ul.LSio_hook_messages {
background-color: #d6edf6;
}
ul.LSio_data_errors {
font-style: italic;
font-size: 0.8em;

View file

@ -100,16 +100,19 @@ class LSerror {
/**
* Format current errors message
*
* @param bool $reset Reset errors (optional, default: true)
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @return array Array of formated error messages
*/
public static function getErrors() {
public static function getErrors($reset=true) {
$return = (
self :: errorsDefined()?
$_SESSION['LSerror']:
array()
);
if ($reset)
self :: resetError();
return $return;
}

View file

@ -193,6 +193,7 @@ class LSio extends LSlog_staticLoggerClass {
'imported' => array(),
'updated' => array(),
'errors' => array(),
'hooks' => array(),
);
// Load LSobject
@ -228,8 +229,7 @@ class LSio extends LSlog_staticLoggerClass {
self :: log_trace("import(): objects data=".varDump($objectsData));
// Trigger before_import event
if (
!$ioFormat -> fireEvent(
$success = $ioFormat -> fireEvent(
'before_import',
array(
'input_file' => $input_file,
@ -238,8 +238,14 @@ class LSio extends LSlog_staticLoggerClass {
'objectsData' => &$objectsData,
'return' => &$return,
)
)
) {
);
$return['hooks']['before_import'] = array(
'messages' => $_SESSION['LSsession_infos'],
'errors' => LSerror :: getErrors(),
);
$_SESSION['LSsession_infos'] = array();
if (!$success) {
LSerror :: addErrorCode('LSio_08');
return $return;
}
@ -352,7 +358,12 @@ class LSio extends LSlog_staticLoggerClass {
self :: log_debug('import(): New object, perform creation');
if ($justTry || $object -> updateData('create')) {
self :: log_info('Object '.$object -> getDn().' imported');
$return['imported'][$object -> getDn()] = $object -> getDisplayName();
$return['imported'][$object -> getDn()] = array(
'name' => $object -> getDisplayName(),
'messages' => $_SESSION['LSsession_infos'],
'errors' => LSerror :: getErrors(),
);
$_SESSION['LSsession_infos'] = array();
continue;
}
else {
@ -395,7 +406,12 @@ class LSio extends LSlog_staticLoggerClass {
// Update data on LDAP server
else if ($justTry || $object -> updateData('modify')) {
self :: log_info('Object '.$object -> getDn().' updated');
$return['updated'][$object -> getDn()] = $object -> getDisplayName();
$return['updated'][$object -> getDn()] = array(
'name' => $object -> getDisplayName(),
'infos' => $_SESSION['LSsession_infos'],
'errors' => LSerror :: getErrors(),
);
$_SESSION['LSsession_infos'] = array();
continue;
}
else {
@ -406,13 +422,16 @@ class LSio extends LSlog_staticLoggerClass {
}
}
}
$globalErrors = array_merge(LSerror :: getErrors(), $globalErrors);
$objectsInError[] = array(
'data' => $objData,
'errors' => array (
'globals' => $globalErrors,
'attrs' => $form->getErrors()
)
'attrs' => $form->getErrors(),
),
'messages' => $_SESSION['LSsession_infos'],
);
$_SESSION['LSsession_infos'] = array();
}
$return['errors'] = $objectsInError;
$return['success'] = empty($objectsInError);
@ -429,8 +448,7 @@ class LSio extends LSlog_staticLoggerClass {
);
// Trigger after_import event
if (
!$ioFormat -> fireEvent(
$success = $ioFormat -> fireEvent(
'after_import',
array(
'input_file' => $input_file,
@ -439,8 +457,13 @@ class LSio extends LSlog_staticLoggerClass {
'objectsData' => &$objectsData,
'return' => &$return,
)
)
)
);
$return['hooks']['after_import'] = array(
'messages' => $_SESSION['LSsession_infos'],
'errors' => LSerror :: getErrors(),
);
$_SESSION['LSsession_infos'] = array();
if (!$success)
LSerror :: addErrorCode('LSio_09');
return $return;

View file

@ -499,14 +499,13 @@ function _cli_add_possible_values_from_LSconfig($context, $withouts, $level=0) {
function _cli_parse_template_file($file) {
global $LSlang_cli_logger;
$LSlang_cli_logger -> debug("Looking for string to translate in '$file' template file");
$count = 0;
foreach(file($file) as $line) {
$count ++;
if (preg_match_all('/\{ *tr +msg=["\']([^\}]+)["\'] *\}/',$line,$matches)) {
foreach($matches[1] as $t) {
foreach(file($file) as $line_count => $line) {
$line_count ++;
if (preg_match_all('/\{ *tr +.*msg=(["\'])(?P<msg>[^"}]+)\1.*\}/', $line, $matches)) {
foreach($matches["msg"] as $t) {
$t = preg_replace('/[\'"]\|escape\:.*$/', '', $t);
$LSlang_cli_logger -> trace(" - \"$t\" # Line $count");
_cli_add_str_to_translate($t, _cli_absolute2relative_path($file).":$count");
$LSlang_cli_logger -> trace(" - \"$t\" # Line $line_count");
_cli_add_str_to_translate($t, _cli_absolute2relative_path($file).":$line_count");
}
}
}
@ -520,15 +519,17 @@ function _cli_parse_template_file($file) {
* @return void
*/
function _cli_find_and_parse_template_file($dir) {
global $LSlang_cli_logger;
if (is_dir($dir)) {
$LSlang_cli_logger -> debug("Looking for string to translate in template directory '$dir'");
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file=='.' || $file=='..') continue;
if (is_dir($dir.'/'.$file)) {
_cli_find_and_parse_template_file($dir.'/'.$file);
if (is_dir("$dir/$file")) {
_cli_find_and_parse_template_file("$dir/$file");
}
elseif (is_file($dir."/".$file) && preg_match('/\.tpl$/',$file)) {
_cli_parse_template_file($dir.'/'.$file);
_cli_parse_template_file("$dir/$file");
}
}
closedir($dh);
@ -544,48 +545,162 @@ function _cli_find_and_parse_template_file($dir) {
function _cli_parse_php_file($file) {
global $LSlang_cli_logger;
$LSlang_cli_logger -> debug("Looking for string to translate in '$file' PHP file");
$count = 0;
$quote = '';
$res = '';
foreach(file($file) as $line) {
$count++;
$LSlang_cli_logger -> trace("Handle line #$count of '$file' PHP file");
$comment = null;
$line_break_continue = false;
$inside_keyword = false;
$inside_comment = false;
$end_comment_pos = false;
$keyword = null;
foreach(file($file) as $line_count => $line) {
$line = preg_replace("/\n$/", "", $line);
$line_count++;
$LSlang_cli_logger -> trace("Handle line #$line_count of '$file' PHP file : '$line'");
$offset = 0;
while ($pos = strpos($line,'__(',$offset)) {
$LSlang_cli_logger -> trace("$file:$count: detect keyword at position #$pos ('$line')");
for ($i=$pos+3;$i<strlen($line);$i++) {
while (
$line_break_continue
|| (!$inside_comment && preg_match('#^([ \t])*(//|/\*)#', substr($line, $offset), $comment))
|| ($inside_comment && $end_comment_pos = strpos(substr($line, $offset), '*/'))
|| preg_match('/[^a-zA-Z0-9\'\"]_{1,3}\(/', substr($line, $offset), $keyword, PREG_OFFSET_CAPTURE)
) {
if ($line_break_continue) {
$LSlang_cli_logger -> trace("$file:$line_count: continue from previous line after a line break");
$line_break_continue = false;
$offset = 0;
$inside_keyword = true;
}
elseif ($comment) {
$pos = $offset + strlen($comment[1]);
if ($comment[2] == '//') {
$LSlang_cli_logger -> trace(
"$file:$line_count: entering comment detected '".$comment[2]."' at position #$pos, ".
"ignore the line ('$line', offset=$offset)");
break;
}
$LSlang_cli_logger -> trace(
"$file:$line_count: entering comment detected '".$comment[2]."' at position #$pos ".
"('$line', offset=$offset)");
$inside_comment = true;
$offset = $pos + strlen($comment[2]);
$comment = null;
}
elseif ($inside_comment) {
if ($end_comment_pos) {
$pos = $offset + $end_comment_pos;
$LSlang_cli_logger -> trace(
"$file:$line_count: end of comment detected at position #$pos, continue ".
"('$line', offset=$offset)");
$offset = $pos;
$end_comment_pos = null;
$inside_comment = false;
continue;
}
if ($keyword) {
$pos = $offset + $keyword[0][1];
$LSlang_cli_logger -> trace(
"$file:$line_count: detect keyword '".substr($keyword[0][0], 1).")' at position #$pos,".
" but inside comment => ignore it ('$line', offset=$offset)");
$offset += strlen($keyword[0][0]) + $keyword[0][1];
}
else {
$LSlang_cli_logger -> fatal(
"$file:$line_count: not supported case (inside comment & !keyword), stop");
return;
}
}
else if ($keyword) {
$pos = $offset + $keyword[0][1];
$LSlang_cli_logger -> trace(
"$file:$line_count: detect keyword '".substr($keyword[0][0], 1).")' at position #$pos ".
"('$line', offset=$offset)");
$offset += strlen($keyword[0][0]) + $keyword[0][1];
$closed = false;
$inside_keyword = true;
}
else {
$LSlang_cli_logger -> fatal(
"$file:$line_count: not supported case, stop");
return;
}
$ignore = false;
$concatenation_need = false;
for ($i=$offset; $i<strlen($line); $i++) {
$offset = $i; // Always increase offset to avoid infinity-loop
if (empty($quote)) {
if ($inside_comment) {
if (substr($line, $i, 2) == '*/') {
$LSlang_cli_logger -> trace(
"$file:$line_count: End of comment detected at position #$i ('$line')");
$inside_comment = false;
}
$i++;
}
elseif (empty($quote)) {
// Quote char not detected : try to detect it
if ($line[$i]=='\\' || $line[$i]==" " || $line[$i]=="\t") {
// Space or escape char : pass
$i++;
}
elseif ($line[$i]=='"' || $line[$i]=="'") {
elseif (in_array($line[$i], array('"', "'")) && !$concatenation_need) {
// Quote detected
$LSlang_cli_logger -> trace(
"$file:$line_count: Quote (".$line[$i].") detected at position #$i ('$line')");
$quote=$line[$i];
}
elseif ($line[$i]=='$' || $line[$i]==')') {
elseif ($line[$i]=='$') {
// Variable translation not possible or end function call detected
$LSlang_cli_logger -> trace(
"$file:$line_count: Variable translation detected at position #$i, ignore it ".
"('$line')");
$ignore = true;
break;
}
elseif ($line[$i]==')' && $inside_keyword) {
// End function call detected
$LSlang_cli_logger -> trace(
"$file:$line_count: End function call detected at position #$i ('$line')");
$inside_keyword = false;
break;
}
elseif ($line[$i] == '.' && $concatenation_need) {
// Concatenation char detected
$LSlang_cli_logger -> trace(
"$file:$line_count: Concatenation char detected at position #$i ('$line')");
$concatenation_need = false;
}
elseif (preg_match('/[A-Za-z]/', $line[$i])) {
// Constant or function call detected
$LSlang_cli_logger -> trace(
"$file:$line_count: Constant or function call detected at position #$i, ignore it ('$line')");
$ignore = true;
break;
}
else {
// Unknown case : continue
$LSlang_cli_logger -> trace(
"$file:$line_count: Unknown case before quote at position #$i ('".$line[$i]."'), ".
"ignore it and continue ('$line')");
$i++;
}
}
elseif ($quote) {
// Quote char already detected : try to detect end quote char
if ($line[$i] == '\\') {
// Escape char detected : pass this char and the following one
// Escape char detected : keep it and the following one
$LSlang_cli_logger -> trace(
"$file:$line_count: Escape char detected inside quote at position #$i, keep it and ".
"the following one ('$line')");
$res .= $line[$i];
$i++;
$res .= $line[$i];
}
elseif ($line[$i] == $quote) {
// End quote char detected : reset quote char detection and break detection
// End quote char detected : reset quote and set concatenation as need
$LSlang_cli_logger -> trace(
"$file:$line_count: End quote char detected at position #$i, reset quote and set ".
"concatenation as need ('$line')");
$quote = '';
break;
$concatenation_need = true;
}
else {
// End quote char not detected : append current char to result
@ -594,10 +709,22 @@ function _cli_parse_php_file($file) {
}
}
// Include detected string if not empty and quote char was detected and reseted
if (!empty($res) && empty($quote)) {
_cli_add_str_to_translate($res, _cli_absolute2relative_path($file).":$count");
if ($inside_comment) {
$LSlang_cli_logger -> trace(
"$file:$line_count: line break detected inside comment ('$line')");
}
elseif (!empty($res) && empty($quote) && !$inside_keyword) {
_cli_add_str_to_translate($res, _cli_absolute2relative_path($file).":$line_count");
$res = '';
}
else if (!$ignore) {
$LSlang_cli_logger -> trace(
"$file:$line_count: line break detected inside keyword, continue on next line ('$line')");
$line_break_continue = true;
if ($quote)
$res .= "\n";
break;
}
}
}
}
@ -608,12 +735,24 @@ function _cli_parse_php_file($file) {
* @param string $dir The directory path
* @return void
*/
function _cli_find_and_parse_php_file($dir, $filename_regex) {
function _cli_find_and_parse_php_file($dir, $filename_regex=null, $recursive=false, $ignore_dirs=null) {
global $LSlang_cli_logger;
$filename_regex = $filename_regex?$filename_regex:'/^(.+)\.php$/';
if (is_dir($dir)) {
$LSlang_cli_logger -> debug("Looking for string to translate in PHP files of directory '$dir'");
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if (preg_match($filename_regex, $file)) {
_cli_parse_php_file($dir.'/'.$file);
if ($file == '.' || $file == '..') continue;
if (is_link("$dir/$file")) continue;
if (
is_dir("$dir/$file")
&& $recursive
&& (!is_array($ignore_dirs) || !in_array("$dir/$file", $ignore_dirs))
) {
_cli_find_and_parse_php_file("$dir/$file", $filename_regex, true, $ignore_dirs);
}
elseif (is_file($dir."/".$file) && preg_match($filename_regex, $file)) {
_cli_parse_php_file("$dir/$file");
}
}
closedir($dh);
@ -683,8 +822,8 @@ function _cli_output_php($fd) {
* @return string The cleaned string
*/
function _cli_clean_for_pot_file($val) {
$val = str_replace('"', '\\"', $val);
return str_replace("\n", "\\n", $val);
$val = preg_replace('/([^\\\\])"/', '$1\"', $val);
return str_replace("\n", '\n', $val);
}
/**
@ -708,7 +847,7 @@ function _cli_output_pot($fd) {
}
}
$available_onlys = array("config", "templates", "addons", "auth_methods", "includes");
$available_onlys = array("config", "templates", "addons", "auth_methods", "includes", "php");
$available_withouts = array_merge($available_onlys, array("select-list"));
@ -777,7 +916,7 @@ function cli_generate_lang_file($command_args) {
LScli :: usage(_("You could specify only one -O/--only parameter."));
$only = strtolower($command_args[$i]);
if (!in_array($only, $available_onlys))
LScli :: usage(_("Invalid -O/--only parameter. Must be one of the following values: %s.'"), implode("','", $available_onlys));
LScli :: usage(_("Invalid -O/--only parameter. Must be one of the following values: '%s'."), implode("', '", $available_onlys));
elseif ($withouts)
LScli :: usage(_("You could not use -W/--without parameter combined with -O/--only parameter."));
break;
@ -1017,8 +1156,8 @@ function cli_generate_lang_file($command_args) {
// Manage includes files
if (!in_array('includes', $withouts) && (!$only || $only == 'includes')) {
// Note: Upstream code most only use gettext translation, do not handle it here
if ($include_upstream) _cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_INCLUDE_DIR, '/^(.+)\.php$/');
_cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_LOCAL_DIR.LS_INCLUDE_DIR, '/^(.+)\.php$/');
if ($include_upstream) _cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_INCLUDE_DIR);
_cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_LOCAL_DIR.LS_INCLUDE_DIR);
if ($include_upstream) _cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_CLASS_DIR, '/^class\.(.+)\.php$/');
_cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_LOCAL_DIR.LS_CLASS_DIR, '/^class\.(.+)\.php$/');
}
@ -1040,6 +1179,12 @@ function cli_generate_lang_file($command_args) {
_cli_find_and_parse_php_file(LS_ROOT_DIR.'/'.LS_LOCAL_DIR.LS_CONF_DIR.'/LSauth', '/^config\.(.+)\.php$$/');
}
// Manage all PHP files
if ($only == 'php') {
$LSlang_cli_logger -> info("Looking for string to translate in PHP files");
_cli_find_and_parse_php_file(LS_ROOT_DIR, null, true, array(LS_ROOT_DIR.'/'.LS_LOCAL_DIR));
}
// Sort resulting strings
ksort($data);
@ -1185,6 +1330,22 @@ ___(
**/
function cli_generate_ldapsaisie_pot($command_args) {
global $LSlang_cli_logger;
// Parameters
$use_internal_parser = false;
for ($i=0; $i < count($command_args); $i++) {
switch ($command_args[$i]) {
case '--internal':
case '-I':
$use_internal_parser = true;
break;
default:
LScli :: usage(_("%s: Invalid parameter."), $command_args[$i]);
}
}
// Initialize logger (if not already initialized by another CLI command)
if (!isset($LSlang_cli_logger))
$LSlang_cli_logger = LSlog :: get_logger('generate_ldapsaisie_pot');
@ -1212,7 +1373,23 @@ function cli_generate_ldapsaisie_pot($command_args) {
return false;
}
// Extract messages from LdapSaisie PHP files using xgettext
// Extract messages from LdapSaisie PHP files
if ($use_internal_parser) {
// Using internal parser
$result = LScli :: run_command(
'generate_lang_file',
array (
"-o", LS_I18N_DIR_PATH."/ldapsaisie-main.pot",
"-f", "pot",
"--only", "php",
),
false // do not exit
);
if (!$result)
$LSlang_cli_logger -> fatal("Fail to extract messages from PHP files using generate_lang_file command.");
}
else {
// Using xgettext
$result = LScli :: run_external_command(
array(
"xgettext",
@ -1230,7 +1407,7 @@ function cli_generate_ldapsaisie_pot($command_args) {
);
if (!is_array($result) || $result[0] != 0)
$LSlang_cli_logger -> fatal("Fail to extract messages from PHP files using xgettext.");
}
// Extract other messages from LdapSaisie templates files
$result = LScli :: run_command(
@ -1271,6 +1448,10 @@ LScli :: add_command(
___(" => contains messages from templates files"),
" - ".LS_I18N_DIR_PATH."/ldapsaisie.pot",
___(" => contains all messages"),
null,
___(
"Note: Use -I / --internal parameter to use internal parser instead of
xgettext for PHP files."),
),
false // This command does not need LDAP connection
);

View file

@ -705,7 +705,9 @@ function LStemplate_smarty_getFData($params) {
}
function LStemplate_smarty_tr($params) {
echo __($params['msg']);
$msg = __($params['msg']);
unset($params['msg']);
echo $params?getFData($msg, $params):$msg;
}
function LStemplate_smarty_img($params) {

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: LdapSaisie\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2023-05-17 11:36+0200\n"
"PO-Revision-Date: 2023-05-26 11:30+0200\n"
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
"org>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: /var/www/ldapsaisie/trunk\n"
"X-Poedit-Basepath: .\n"
"X-Generator: Poedit 2.4.2\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@ -385,8 +385,8 @@ msgstr "Comparer"
#: includes/class/class.LSrelation.php:679 includes/class/class.LSform.php:346
#: includes/class/class.LSformElement_select_object.php:75
#: includes/class/class.LSformElement_select_object.php:91
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1064
#: includes/routes.php:1208
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1068
#: includes/routes.php:1212
msgid "Delete"
msgstr "Supprimer"
@ -399,8 +399,8 @@ msgstr "Étendue"
#: includes/class/class.LSrelation.php:736
#: includes/class/class.LSformElement_select_object.php:74
#: includes/class/class.LSformElement_supannLabeledValue.php:90
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1048
#: includes/routes.php:1216 includes/routes.php:1301 includes/routes.php:1447
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1052
#: includes/routes.php:1220 includes/routes.php:1305 includes/routes.php:1451
msgid "Modify"
msgstr "Modifier"
@ -408,7 +408,7 @@ msgstr "Modifier"
msgid "Modify RDN"
msgstr "Modifier le RDN"
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:513
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:517
#: templates/default/select.tpl:28 templates/default/global_search.tpl:6
msgid "Search"
msgstr "Rechercher"
@ -436,7 +436,7 @@ msgstr "Voir les modifications d'LdapSaisie"
#: includes/addons/LSaddons.accesslog.php:244
#: includes/class/class.LSsession.php:1870 includes/routes.php:157
#: includes/routes.php:470 templates/default/select.tpl:29
#: includes/routes.php:474 templates/default/select.tpl:29
msgid "Refresh"
msgstr "Rafraîchir"
@ -752,89 +752,90 @@ msgstr "Valeur invalide"
msgid "LSformRule_%{type}: Parameter %{param} is not found."
msgstr "LSformRule_%{type} : Le paramètre %{param} n'est pas défini."
#: includes/class/class.LSio.php:261
#: includes/class/class.LSio.php:334
msgid "Failed to set post data on creation form."
msgstr "Impossible de définir les données dans le formulaire de création."
#: includes/class/class.LSio.php:267
#: includes/class/class.LSio.php:340
msgid "Error validating creation form."
msgstr "Une erreur est survenue en validant le formulaire de création."
#: includes/class/class.LSio.php:272
#: includes/class/class.LSio.php:345
msgid "Failed to validate object data."
msgstr "Impossible de valider les données de l'objet."
#: includes/class/class.LSio.php:279
#: includes/class/class.LSio.php:352
msgid "Failed to generate DN for this object."
msgstr "Impossible de générer le DN de cet objet."
#: includes/class/class.LSio.php:293
#: includes/class/class.LSio.php:371
msgid "Error creating object on LDAP server."
msgstr "Une erreur est survenue en création cet objet dans l'annuaire LDAP."
msgstr ""
"Une erreur est survenue durant la création de cet objet dans l'annuaire LDAP."
#: includes/class/class.LSio.php:299
#: includes/class/class.LSio.php:377
msgid "An object already exist on LDAP server with DN %{dn}."
msgstr "Un objet existe déjà dans l'annuaire LDAP avec le DN %{dn}."
#: includes/class/class.LSio.php:311
#: includes/class/class.LSio.php:389
msgid ""
"Failed to load existing object %{dn} from LDAP server. Can't update object."
msgstr ""
"Impossible de charger l'objet existant %{dn} depuis l'annuaire LDAP. "
"Impossible de mettre à jour cet objet."
#: includes/class/class.LSio.php:320
#: includes/class/class.LSio.php:398
msgid "Failed to set post data on update form."
msgstr "Impossible de définir les données dans le formulaire de mise à jour."
#: includes/class/class.LSio.php:326
#: includes/class/class.LSio.php:404
msgid "Error validating update form."
msgstr "Une erreur est survenue en validant le formulaire de mise à jour."
#: includes/class/class.LSio.php:336
#: includes/class/class.LSio.php:419
msgid "Error updating object on LDAP server."
msgstr ""
"Une erreur est survenue en mettant à jour cet objet dans l'annuaire LDAP."
#: includes/class/class.LSio.php:724
#: includes/class/class.LSio.php:825
msgid "LSio: Post data not found or not completed."
msgstr "LSio : les données transmises sont introuvables ou incomplètes."
#: includes/class/class.LSio.php:727
#: includes/class/class.LSio.php:828
msgid "LSio: object type invalid."
msgstr "LSio : type d'objet invalide."
#: includes/class/class.LSio.php:730
#: includes/class/class.LSio.php:831
msgid "LSio: input/output format %{format} invalid."
msgstr "LSio : Le format d'entrée/sortie %{format} est invalide."
#: includes/class/class.LSio.php:733
#: includes/class/class.LSio.php:834
msgid "LSio: Fail to initialize input/output driver."
msgstr "LSio : Impossible d'initialiser le pilote d'entrée/sortie."
#: includes/class/class.LSio.php:736
#: includes/class/class.LSio.php:837
msgid "LSio: Fail to load objects's data from input file."
msgstr ""
"LSio: Impossible de charger les données des objets depuis le fichier "
"d'import."
#: includes/class/class.LSio.php:739
#: includes/class/class.LSio.php:840
msgid "LSio: Fail to load objects's data to export from LDAP directory."
msgstr ""
"LSio: Impossible de charger les données des objets à exporter depuis "
"l'annuaire LDAP."
#: includes/class/class.LSio.php:742
#: includes/class/class.LSio.php:843
msgid "LSio: Fail to export objects's data."
msgstr "LSio: Impossible d'exporter les données des objets."
#: includes/class/class.LSio.php:745
#: includes/class/class.LSio.php:846
msgid "LSio: An error occured running before import hooks. Stop the import."
msgstr ""
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'avant "
"import. Arrêt de l'import."
#: includes/class/class.LSio.php:748
#: includes/class/class.LSio.php:849
msgid "LSio: An error occured running after import hooks."
msgstr ""
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'après "
@ -865,7 +866,7 @@ msgstr "Confirmez-vous votre choix ?"
#: includes/class/class.LSconfirmBox.php:37
#: includes/class/class.LSsmoothbox.php:39 includes/class/class.LSform.php:175
#: includes/routes.php:634 includes/routes.php:1288 includes/routes.php:1434
#: includes/routes.php:638 includes/routes.php:1292 includes/routes.php:1438
#: templates/default/recoverpassword.tpl:21
msgid "Validate"
msgstr "Valider"
@ -1038,7 +1039,7 @@ msgid "Unparsable value for component %{c}."
msgstr "Valeur du composant %{c} non-analysable."
#: includes/class/class.LSformElement_supannCompositeAttribute.php:479
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:408
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:413
msgid "%{label}: %{error}"
msgstr "%{label} : %{error}"
@ -1127,53 +1128,53 @@ msgstr "Ou laisser vide pour copier le message original?\n"
msgid "Or leave empty to pass.\n"
msgstr "Or leave empty to pass.\n"
#: includes/class/class.LSlang.php:758
#: includes/class/class.LSlang.php:906
#, php-format
msgid ""
"Invalid -W/--without parameter. Must be one of the following values: %s.'"
msgstr ""
"Paramètre -W/--without invalide. Doit-être une des valeurs suivantes : %s."
#: includes/class/class.LSlang.php:760 includes/class/class.LSlang.php:773
#: includes/class/class.LSlang.php:908 includes/class/class.LSlang.php:921
msgid ""
"You could not use -W/--without parameter combined with -O/--only parameter."
msgstr ""
"Vous ne pouvez pas utiliser les paramètres -W/--without et -O/--only "
"ensemble."
#: includes/class/class.LSlang.php:768
#: includes/class/class.LSlang.php:916
msgid "You could specify only one -O/--only parameter."
msgstr "Vous ne pouvez spécifier qu'un seul paramètre -O/--only."
#: includes/class/class.LSlang.php:771
#: includes/class/class.LSlang.php:919
#, php-format
msgid "Invalid -O/--only parameter. Must be one of the following values: %s.'"
msgid "Invalid -O/--only parameter. Must be one of the following values: '%s'."
msgstr ""
"Paramètre -O/--only invalide. Doit-être une des valeurs suivantes : %s."
"Paramètre -O/--only invalide. Doit-être une des valeurs suivantes : '%s'."
#: includes/class/class.LSlang.php:805
#: includes/class/class.LSlang.php:953
msgid ""
"Invalid -l/--lang parameter. Must be compose in format : [lang].[encoding]"
msgstr ""
"Paramètre -l/--lang invalide. Doit-être composé au format : [lang].[encoding]"
#: includes/class/class.LSlang.php:820
#: includes/class/class.LSlang.php:968
#, php-format
msgid ""
"Invalid -f/--format parameter. Must be one of the following values: %s.'"
msgstr ""
"Paramètre -f/--format invalide. Doit-être une des valeurs suivantes : %s."
#: includes/class/class.LSlang.php:844
#: includes/class/class.LSlang.php:992
#, php-format
msgid "%s: Invalid parameter or lang file to load."
msgstr "%s : Paramètre ou fichier de traductions à charger invalide."
#: includes/class/class.LSlang.php:1136
#: includes/class/class.LSlang.php:1293
msgid "Generate lang.php file"
msgstr "Générer le fichier lang.php"
#: includes/class/class.LSlang.php:1140
#: includes/class/class.LSlang.php:1297
msgid ""
" -W/--without Disable specified messages. Must be one of\n"
" the following values:"
@ -1181,7 +1182,7 @@ msgstr ""
" -W/--without Désactiver les messages spécifiés. Doit\n"
" être une des valeurs suivants :"
#: includes/class/class.LSlang.php:1144
#: includes/class/class.LSlang.php:1301
msgid ""
" -O/--only Only handle specified messages. Must be one\n"
" of the following values :"
@ -1189,7 +1190,7 @@ msgstr ""
" -O/--only Gérer uniquement les messages spécifiés.\n"
" Doit-être une des valeurs suivantes :"
#: includes/class/class.LSlang.php:1148
#: includes/class/class.LSlang.php:1305
msgid ""
" -I/--include-upstream Include upstream code to message lookup\n"
" -c/--copy-original-value Copy original value as translated value when\n"
@ -1224,26 +1225,39 @@ msgstr ""
" caractères UTF-8 invalides dans les fichiers\n"
" de traductions existants."
#: includes/class/class.LSlang.php:1252
#: includes/class/class.LSlang.php:1345
#, php-format
msgid "%s: Invalid parameter."
msgstr "%s : Paramètre invalide."
#: includes/class/class.LSlang.php:1441
msgid "Generate POT files:"
msgstr "Générer les fichiers POT:"
#: includes/class/class.LSlang.php:1255
#: includes/class/class.LSlang.php:1444
msgid "This command generate 3 POT files:"
msgstr "Cette commande génère 3 fichiers POT :"
#: includes/class/class.LSlang.php:1257
#: includes/class/class.LSlang.php:1446
msgid " => contains messages from PHP files"
msgstr " => contient les messages issues des fichiers PHP"
#: includes/class/class.LSlang.php:1259
#: includes/class/class.LSlang.php:1448
msgid " => contains messages from templates files"
msgstr " => contient les messages issues des fichiers de templates"
#: includes/class/class.LSlang.php:1261
#: includes/class/class.LSlang.php:1450
msgid " => contains all messages"
msgstr " => contient tous -W/--withoutles messages"
#: includes/class/class.LSlang.php:1453
msgid ""
"Note: Use -I / --internal parameter to use internal parser instead of\n"
"xgettext for PHP files."
msgstr ""
"Note : Utiliser le paramètre -I / --internal pour utiliser l'extracteur de\n"
"messages interne au lieu de xgettext pour les fichier PHP."
#: includes/class/class.LStemplate.php:160
msgid "LStemplate : compile directory is not writable (dir : %{dir})"
msgstr ""
@ -1308,11 +1322,11 @@ msgstr ""
msgid "A fatal error occured."
msgstr "Une erreur fatale est survenue."
#: includes/class/class.LStemplate.php:731
#: includes/class/class.LStemplate.php:733
msgid "LStemplate : Template %{file} not found."
msgstr "LStemplate : le template %{file} est introuvable."
#: includes/class/class.LStemplate.php:734
#: includes/class/class.LStemplate.php:736
msgid ""
"LStemplate : Fail to execute trigger %{callable} on event %{event} : is not "
"callable."
@ -1320,7 +1334,7 @@ msgstr ""
"LStemplate : Échec d'exécution du déclencheur %{callable} lors de événement "
"%{event} : il n'est pas un callable."
#: includes/class/class.LStemplate.php:737
#: includes/class/class.LStemplate.php:739
msgid ""
"LStemplate : Error during the execution of the trigger %{callable} on event "
"%{event}."
@ -2193,8 +2207,8 @@ msgstr "Attention"
msgid "No object."
msgstr "Aucun objet."
#: includes/class/class.LSrelation.php:747 includes/routes.php:452
#: includes/routes.php:993
#: includes/class/class.LSrelation.php:747 includes/routes.php:456
#: includes/routes.php:997
msgid "New"
msgstr "Nouveau"
@ -2431,13 +2445,13 @@ msgstr ""
"Une erreur est survenue en soumettant ce formulaire. Merci de ré-essayer ou "
"de contacter le support."
#: includes/class/class.LSform.php:327 includes/routes.php:630
#: includes/class/class.LSform.php:327 includes/routes.php:634
msgid "Do you really want to execute custom action %{title} on this search ?"
msgstr ""
"Êtes-vous vraiment sûre de vouloir exécuter l'action personnalisée %{title} "
"sur cette recherche ?"
#: includes/class/class.LSform.php:333 includes/routes.php:1428
#: includes/class/class.LSform.php:333 includes/routes.php:1432
msgid ""
"Do you really want to execute custom action %{customAction} on "
"%{objectname} ?"
@ -2645,8 +2659,8 @@ msgstr "Réinitialiser le choix."
msgid "Display RSS stack."
msgstr "Afficher la file RSS."
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:583
#: includes/routes.php:1375
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:587
#: includes/routes.php:1379
msgid "undefined"
msgstr "non-définie"
@ -2748,39 +2762,39 @@ msgstr "Étape"
msgid "Pedagogical element"
msgstr "Élement pédagogique"
#: includes/class/class.LSsearch.php:1253
#: includes/class/class.LSsearch.php:1318
msgid "Actions"
msgstr "Actions"
#: includes/class/class.LSsearch.php:1256
#: includes/class/class.LSsearch.php:1321
#: templates/default/global_search.tpl:16
msgid "This search didn't get any result."
msgstr "Cette recherche n'a retournée aucun résultat."
#: includes/class/class.LSsearch.php:1898
#: includes/class/class.LSsearch.php:1963
msgid "LSsearch : Invalid filter : %{filter}."
msgstr "LSsearch : Filtre invalide : %{filter}."
#: includes/class/class.LSsearch.php:1901
#: includes/class/class.LSsearch.php:1966
msgid "LSsearch : Invalid basedn : %{basedn}."
msgstr "LSsearch : Base DN invalide."
#: includes/class/class.LSsearch.php:1904
#: includes/class/class.LSsearch.php:1969
msgid "LSsearch : Invalid value for %{param} parameter."
msgstr "LSsearch : La valeur du paramètre %{param} est incorrecte."
#: includes/class/class.LSsearch.php:1907
#: includes/class/class.LSsearch.php:1972
msgid ""
"LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
msgstr ""
"LSsearch : Limite de taille de recherche invalide. Elle doit être un entier "
"supérieur ou égal à 0."
#: includes/class/class.LSsearch.php:1910
#: includes/class/class.LSsearch.php:1975
msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
msgstr "LSsearch : Paramètre %{param} invalide. Il doit être un booléen."
#: includes/class/class.LSsearch.php:1913
#: includes/class/class.LSsearch.php:1978
msgid ""
"LSsearch : Invalid parameter attributes. Must be an string or an array of "
"strings."
@ -2788,13 +2802,13 @@ msgstr ""
"LSsearch : Paramètre 'attributes' invalide. Il doit être une chaîne de "
"caractères ou un tableau de chaînes de caractères."
#: includes/class/class.LSsearch.php:1916
#: includes/class/class.LSsearch.php:1981
msgid "LSsearch : Can't build attributes list for make filter."
msgstr ""
"LSsearch : Impossible de construire la liste des attributs pour faire le "
"filtre."
#: includes/class/class.LSsearch.php:1919
#: includes/class/class.LSsearch.php:1984
msgid ""
"LSsearch : Error building filter with attribute '%{attr}' and pattern "
"'%{pattern}'"
@ -2802,34 +2816,34 @@ msgstr ""
"LSsearch : Problème en construisant le filtre avec l'attribut '%{attr}' et "
"le mot clé '%{pattern}'"
#: includes/class/class.LSsearch.php:1922
#: includes/class/class.LSsearch.php:1987
msgid "LSsearch : Error combining filters."
msgstr "LSsearch : Problème en combinant les filtres."
#: includes/class/class.LSsearch.php:1925
#: includes/class/class.LSsearch.php:1990
msgid "LSsearch : Invalid pattern."
msgstr "LSsearch : Mot clé invalide."
#: includes/class/class.LSsearch.php:1928
#: includes/class/class.LSsearch.php:1993
msgid "LSsearch : Invalid attribute %{attr} in parameters."
msgstr "LSsearch : Attribut %{attr} incorrect dans les paramètres."
#: includes/class/class.LSsearch.php:1931
#: includes/class/class.LSsearch.php:1996
msgid "LSsearch : Error during the search."
msgstr "LSsearch : Erreur pendant la recherche."
#: includes/class/class.LSsearch.php:1934
#: includes/class/class.LSsearch.php:1999
msgid "LSsearch : Error sorting the search."
msgstr "LSsearch : Erreur pendant le trie de la recherche."
#: includes/class/class.LSsearch.php:1937
#: includes/class/class.LSsearch.php:2002
msgid ""
"LSsearch : The function of the custum information %{name} is not callable."
msgstr ""
"LSsearch : La fonction de l'information personnalisée %{name} n'est pas "
"exécutable."
#: includes/class/class.LSsearch.php:1940
#: includes/class/class.LSsearch.php:2005
msgid ""
"LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
"(filter : %{filter})."
@ -2837,13 +2851,13 @@ msgstr ""
"LSsearch : PredefinedFilter invalide pour le type d'LSobject %{type} : "
"%{label} (filtre : %{filter})."
#: includes/class/class.LSsearch.php:1943
#: includes/class/class.LSsearch.php:2008
msgid "LSsearch : Error during execution of the custom action %{customAction}."
msgstr ""
"LSldapObject : Erreur durant l'exécution de l'action personnalisée "
"%{customAction}."
#: includes/class/class.LSsearch.php:1946
#: includes/class/class.LSsearch.php:2011
msgid "LSsearch : Invalid search pattern."
msgstr "LSsearch : Mot clé de recherche invalide."
@ -2978,7 +2992,7 @@ msgstr "Impossible de décoder la valeur JSON #%{idx}."
msgid "JSON value #%{idx} is invalid (or empty)."
msgstr "La valeur JSON #%{idx} est invalide (ou vide)."
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:433
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:438
msgid "Invalid value \"%{value}\" for component %{component}."
msgstr "Valeur invalide pour le composant %{component} : \"%{value}\"."
@ -3146,20 +3160,20 @@ msgstr "LSioFormatCSV : la fonction fputcsv n'est pas disponible."
msgid "LSlog : Fail to load logging handler %{handler}."
msgstr "LSlog : Impossible de charger l'handler %{handler}."
#: includes/class/class.LSerror.php:138
#: includes/class/class.LSerror.php:141
msgid "Unknown error"
msgstr "Erreur inconnue"
#: includes/class/class.LSerror.php:198
#: includes/class/class.LSerror.php:201
msgid "Unknown error : %{error}"
msgstr "Erreur inconnue : %{error}"
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1200
#: includes/routes.php:1293 includes/routes.php:1439
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1204
#: includes/routes.php:1297 includes/routes.php:1443
msgid "View"
msgstr "Voir"
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1056
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1060
msgid "Copy"
msgstr "Copier"
@ -3189,66 +3203,66 @@ msgstr "Accueil"
msgid "You must provide pattern for global search."
msgstr "Vous devez fournir un mot clé pour les recherches globales."
#: includes/routes.php:458 includes/routes.php:814
#: includes/routes.php:462 includes/routes.php:818
msgid "Import"
msgstr "Importer"
#: includes/routes.php:463 includes/routes.php:880
#: includes/routes.php:467 includes/routes.php:884
msgid "Export"
msgstr "Exporter"
#: includes/routes.php:475
#: includes/routes.php:479
msgid "Reset"
msgstr "Réinitialiser"
#: includes/routes.php:514 templates/default/select.tpl:31
#: includes/routes.php:518 templates/default/select.tpl:31
msgid "Approximative search"
msgstr "Recherche approximative"
#: includes/routes.php:515 templates/default/select.tpl:32
#: includes/routes.php:519 templates/default/select.tpl:32
msgid "Recursive search"
msgstr "Recherche récursive"
#: includes/routes.php:604
#: includes/routes.php:608
msgid ""
"The custom action %{title} have been successfully execute on this search."
msgstr ""
"L'action personnalisée %{title} a été correctement exécutée sur cette "
"recherche."
#: includes/routes.php:952
#: includes/routes.php:956
msgid "Data entry form"
msgstr "Masque de saisie"
#: includes/routes.php:958 includes/routes.php:1732
#: includes/routes.php:962 includes/routes.php:1736
msgid "Object has been added."
msgstr "L'objet a été ajouté."
#: includes/routes.php:1095
#: includes/routes.php:1099
msgid "My account"
msgstr "Mon compte"
#: includes/routes.php:1158 includes/routes.php:1904
#: includes/routes.php:1162 includes/routes.php:1908
msgid "The object has been partially modified."
msgstr "L'objet a été partiellement modifié."
#: includes/routes.php:1161 includes/routes.php:1907
#: includes/routes.php:1165 includes/routes.php:1911
msgid "The object has been modified successfully."
msgstr "L'objet a bien été modifié."
#: includes/routes.php:1276 includes/routes.php:1947
#: includes/routes.php:1280 includes/routes.php:1951
msgid "%{objectname} has been successfully deleted."
msgstr "%{objectname} a bien été supprimé."
#: includes/routes.php:1285
#: includes/routes.php:1289
msgid "Deleting : %{objectname}"
msgstr "Suppression : %{objectname}"
#: includes/routes.php:1286
#: includes/routes.php:1290
msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
msgstr "Voulez-vous vraiment supprimer <strong>%{displayName}</strong> ?"
#: includes/routes.php:1396
#: includes/routes.php:1400
msgid ""
"The custom action %{customAction} have been successfully execute on "
"%{objectname}."
@ -3256,19 +3270,39 @@ msgstr ""
"L'action personnalisée %{customAction} a été correctement exécutée sur "
"%{objectname}."
#: includes/functions.php:115
#: includes/functions.php:123
msgid ""
"Function 'getFData' : The method %{meth} of the object %{obj} doesn't exist."
msgstr "Fonction getFData : La méthode %{meth} de l'objet %{obj} n'existe pas."
#: includes/functions.php:208
#: includes/functions.php:211
msgid "[not string value]"
msgstr "[pas une chaîne de caractères]"
#: includes/functions.php:254
#: includes/functions.php:259
msgid "Folder not found"
msgstr "Dossier introuvable"
#: includes/functions.php:863
msgid "TB"
msgstr "To"
#: includes/functions.php:864
msgid "GB"
msgstr "Go"
#: includes/functions.php:865
msgid "MB"
msgstr "Mo"
#: includes/functions.php:866
msgid "KB"
msgstr "Ko"
#: includes/functions.php:867
msgid "B"
msgstr "O"
#: conf/LSaddons/config.LSaddons.supann.php:97
msgid "Mrs."
msgstr "Mme."
@ -3482,7 +3516,8 @@ msgstr "Détails"
msgid "Email"
msgstr "E-mail"
#: templates/default/import.tpl:43
#: templates/default/import.tpl:43 templates/default/import.tpl:98
#: templates/default/import.tpl:126 templates/default/import.tpl:151
msgid "Errors"
msgstr "Erreurs"
@ -3504,11 +3539,15 @@ msgstr "Format"
msgid "Global search"
msgstr "Recherche globale"
#: templates/default/import.tpl:148
msgid "Hook: %(name)"
msgstr "Déclencheur : %(name)"
#: templates/default/recoverpassword.tpl:19 templates/default/login.tpl:18
msgid "Identifier"
msgstr "Identifiant"
#: templates/default/import.tpl:85
#: templates/default/import.tpl:92
msgid "Imported objects"
msgstr "Objets importés"
@ -3536,6 +3575,11 @@ msgstr "Déconnexion"
msgid "Message"
msgstr "Message"
#: templates/default/import.tpl:106 templates/default/import.tpl:134
#: templates/default/import.tpl:159
msgid "Messages"
msgstr "Messages"
#: templates/default/viewSearch.tpl:113
msgid "Nb / page :"
msgstr "Nb / page :"
@ -3548,14 +3592,18 @@ msgstr "Aucun log d'accès trouvé pour cet objet."
msgid "No field."
msgstr "Aucun champ."
#: templates/default/import.tpl:90
#: templates/default/import.tpl:115
msgid "No imported object"
msgstr "Aucun objet importé"
#: templates/default/import.tpl:58
#: templates/default/import.tpl:65
msgid "No value"
msgstr "Aucune valeur"
#: templates/default/import.tpl:45
msgid "Object %(idx)"
msgstr "Objet %(idx)"
#: templates/default/showTechInfo.tpl:11
msgid "Object classes"
msgstr "Classes d'objet"
@ -3585,9 +3633,7 @@ msgstr "Mot de passe"
msgid "Please confirm new password:"
msgstr "Merci de confirmer le nouveau mot de passe :"
#: templates/default/LSaccessRightsMatrixView.tpl:22
#: templates/default/LSaccessRightsMatrixView.tpl:27
#: templates/default/LSaccessRightsMatrixView.tpl:67
#: templates/default/LSaccessRightsMatrixView.tpl:72
#: templates/default/LSaccessRightsMatrixView.tpl:93
#: templates/default/LSaccessRightsMatrixView.tpl:95
@ -3596,9 +3642,7 @@ msgstr "Merci de confirmer le nouveau mot de passe :"
msgid "R"
msgstr "L"
#: templates/default/LSaccessRightsMatrixView.tpl:24
#: templates/default/LSaccessRightsMatrixView.tpl:28
#: templates/default/LSaccessRightsMatrixView.tpl:69
#: templates/default/LSaccessRightsMatrixView.tpl:73
#: templates/default/LSaccessRightsMatrixView.tpl:89
#: templates/default/LSaccessRightsMatrixView.tpl:91
@ -3667,7 +3711,7 @@ msgstr "Ce type d'objet n'a aucune relation de configurée."
msgid "Update objects if exists"
msgstr "Mise à jour des objets existants"
#: templates/default/import.tpl:95
#: templates/default/import.tpl:120
msgid "Updated objects"
msgstr "Objets mis à jour"
@ -3686,136 +3730,3 @@ msgstr "événement(s) trouvé(s) pour cet objet."
#: templates/default/import.tpl:27 templates/default/import.tpl:33
msgid "no"
msgstr "non"
#~ msgid "Generate ldapsaisie.pot files:"
#~ msgstr "Générer les fichiers POT :"
#~ msgid ""
#~ "SAMBA Support: The attribute %{dependency} is missing. Unable to forge "
#~ "the attribute %{attr}."
#~ msgstr ""
#~ "Support SAMBA : L'attribut %{dependency} est manquant. Impossible de "
#~ "générer l'attribut %{attr}."
#~ msgid "Stop"
#~ msgstr "Stop"
#~ msgid "Invalid LDAP URI format"
#~ msgstr "Format d'URI LDAP invalide"
#~ msgid "The value of field %{label} is invalid."
#~ msgstr "La valeur du champ %{label} est incorrecte."
#~ msgid "LSformRule: Unknown rule type %{type}."
#~ msgstr "LSformRule : Type de règle %{type} inconnu."
#~ msgid "Can't validate value of component %{c}."
#~ msgstr "Impossible de valider la valeur du composant %{c}."
#~ msgid "Affiliate"
#~ msgstr "Affilié"
#~ msgid "Alumnus"
#~ msgstr "Ancien apprenant"
#~ msgid "Employee"
#~ msgstr "Employé"
#~ msgid "Faculty"
#~ msgstr "Faculté"
#~ msgid "Member"
#~ msgstr "Membre"
#~ msgid "Student"
#~ msgstr "Étudiant"
#~ msgid "Retired"
#~ msgstr "Retraité"
#~ msgid "Teacher"
#~ msgstr "Enseignant"
#~ msgid "Staff"
#~ msgstr "Staff"
#~ msgid "Researcher"
#~ msgstr "Chercheur"
#~ msgid "Emeritus teacher"
#~ msgstr "Professeur émérite"
#~ msgid "Library - walk-in"
#~ msgstr "Bibliothèque - Accès libre"
#~ msgid "Library - registered"
#~ msgstr "Bibliothèque - Inscrit"
#~ msgid "LSexport: input/output format %{format} invalid."
#~ msgstr "LSimport : Le format d'entrée/sortie %{format} est invalide."
#~ msgid "LSexport: Fail to initialize input/output driver."
#~ msgstr "LSexport : Impossible d'initialiser le pilote d'entrée/sortie."
#~ msgid ""
#~ "LSsession : call function %{func} do not provided from LSaddon %{addon}."
#~ msgstr ""
#~ "LSsession : la fonction %{func} n'est pas fournie par le LSaddon %{addon}."
#~ msgid "LSsession : problem during initialisation."
#~ msgstr "LSsession : Problème durant l'initialisation."
#~ msgid ""
#~ "LSformElement_password : Contact mail invalid (%{mail}). Can't send "
#~ "password."
#~ msgstr ""
#~ "LSformElement_password : Mail de contact invalide (%{mail}). Impossible "
#~ "d'envoyer le mot de passe."
#~ msgid "Only one command could be executed !"
#~ msgstr "Une seule commande peut-être exécutée !"
#~ msgid "Title"
#~ msgstr "Titre"
#~ msgid "deleting"
#~ msgstr "suppression"
#~ msgid "renaming"
#~ msgstr "renommage"
#~ msgid "updating"
#~ msgstr "mise à jour"
#~ msgid "Deleting"
#~ msgstr "Suppression"
#~ msgid "has been deleted successfully"
#~ msgstr "a bien été supprimé"
#~ msgid "Missing parameter"
#~ msgstr "Paramètre manquant"
#~ msgid "PHP error : %{error}"
#~ msgstr "Erreur PHP : %{error}"
#~ msgid "SSH Support : Unable to connect to SSH Server (%{host}:%{port})."
#~ msgstr ""
#~ "Support SSH : Impossible de se connecter au serveur SSH (%{host}:%{port})."
#, fuzzy
#~ msgid "delete"
#~ msgstr "Supprimer"
#~ msgid ""
#~ "LSrelation : The update function of the relation %{relation} is unknow."
#~ msgstr ""
#~ "LSsession : La fonction de mise à jour de la relation %{relation} est "
#~ "inconnue."
#, fuzzy
#~ msgid "Administration"
#~ msgstr "Confirmation"
#~ msgid "Select in a calendar."
#~ msgstr "Choisir dans un calendrier."

View file

@ -309,8 +309,8 @@ msgstr ""
#: includes/class/class.LSrelation.php:679 includes/class/class.LSform.php:346
#: includes/class/class.LSformElement_select_object.php:75
#: includes/class/class.LSformElement_select_object.php:91
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1064
#: includes/routes.php:1208
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1068
#: includes/routes.php:1212
msgid "Delete"
msgstr ""
@ -323,8 +323,8 @@ msgstr ""
#: includes/class/class.LSrelation.php:736
#: includes/class/class.LSformElement_select_object.php:74
#: includes/class/class.LSformElement_supannLabeledValue.php:90
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1048
#: includes/routes.php:1216 includes/routes.php:1301 includes/routes.php:1447
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1052
#: includes/routes.php:1220 includes/routes.php:1305 includes/routes.php:1451
msgid "Modify"
msgstr ""
@ -332,7 +332,7 @@ msgstr ""
msgid "Modify RDN"
msgstr ""
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:513
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:517
#: templates/default/select.tpl:28 templates/default/global_search.tpl:6
msgid "Search"
msgstr ""
@ -360,7 +360,7 @@ msgstr ""
#: includes/addons/LSaddons.accesslog.php:244
#: includes/class/class.LSsession.php:1870 includes/routes.php:157
#: includes/routes.php:470 templates/default/select.tpl:29
#: includes/routes.php:474 templates/default/select.tpl:29
msgid "Refresh"
msgstr ""
@ -638,80 +638,80 @@ msgstr ""
msgid "LSformRule_%{type}: Parameter %{param} is not found."
msgstr ""
#: includes/class/class.LSio.php:261
#: includes/class/class.LSio.php:334
msgid "Failed to set post data on creation form."
msgstr ""
#: includes/class/class.LSio.php:267
#: includes/class/class.LSio.php:340
msgid "Error validating creation form."
msgstr ""
#: includes/class/class.LSio.php:272
#: includes/class/class.LSio.php:345
msgid "Failed to validate object data."
msgstr ""
#: includes/class/class.LSio.php:279
#: includes/class/class.LSio.php:352
msgid "Failed to generate DN for this object."
msgstr ""
#: includes/class/class.LSio.php:293
#: includes/class/class.LSio.php:371
msgid "Error creating object on LDAP server."
msgstr ""
#: includes/class/class.LSio.php:299
#: includes/class/class.LSio.php:377
msgid "An object already exist on LDAP server with DN %{dn}."
msgstr ""
#: includes/class/class.LSio.php:311
#: includes/class/class.LSio.php:389
msgid ""
"Failed to load existing object %{dn} from LDAP server. Can't update object."
msgstr ""
#: includes/class/class.LSio.php:320
#: includes/class/class.LSio.php:398
msgid "Failed to set post data on update form."
msgstr ""
#: includes/class/class.LSio.php:326
#: includes/class/class.LSio.php:404
msgid "Error validating update form."
msgstr ""
#: includes/class/class.LSio.php:336
#: includes/class/class.LSio.php:419
msgid "Error updating object on LDAP server."
msgstr ""
#: includes/class/class.LSio.php:724
#: includes/class/class.LSio.php:825
msgid "LSio: Post data not found or not completed."
msgstr ""
#: includes/class/class.LSio.php:727
#: includes/class/class.LSio.php:828
msgid "LSio: object type invalid."
msgstr ""
#: includes/class/class.LSio.php:730
#: includes/class/class.LSio.php:831
msgid "LSio: input/output format %{format} invalid."
msgstr ""
#: includes/class/class.LSio.php:733
#: includes/class/class.LSio.php:834
msgid "LSio: Fail to initialize input/output driver."
msgstr ""
#: includes/class/class.LSio.php:736
#: includes/class/class.LSio.php:837
msgid "LSio: Fail to load objects's data from input file."
msgstr ""
#: includes/class/class.LSio.php:739
#: includes/class/class.LSio.php:840
msgid "LSio: Fail to load objects's data to export from LDAP directory."
msgstr ""
#: includes/class/class.LSio.php:742
#: includes/class/class.LSio.php:843
msgid "LSio: Fail to export objects's data."
msgstr ""
#: includes/class/class.LSio.php:745
#: includes/class/class.LSio.php:846
msgid "LSio: An error occured running before import hooks. Stop the import."
msgstr ""
#: includes/class/class.LSio.php:748
#: includes/class/class.LSio.php:849
msgid "LSio: An error occured running after import hooks."
msgstr ""
@ -740,7 +740,7 @@ msgstr ""
#: includes/class/class.LSconfirmBox.php:37
#: includes/class/class.LSsmoothbox.php:39 includes/class/class.LSform.php:175
#: includes/routes.php:634 includes/routes.php:1288 includes/routes.php:1434
#: includes/routes.php:638 includes/routes.php:1292 includes/routes.php:1438
#: templates/default/recoverpassword.tpl:21
msgid "Validate"
msgstr ""
@ -900,7 +900,7 @@ msgid "Unparsable value for component %{c}."
msgstr ""
#: includes/class/class.LSformElement_supannCompositeAttribute.php:479
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:408
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:413
msgid "%{label}: %{error}"
msgstr ""
@ -987,59 +987,59 @@ msgstr ""
msgid "Or leave empty to pass.\n"
msgstr ""
#: includes/class/class.LSlang.php:758
#: includes/class/class.LSlang.php:906
#, php-format
msgid ""
"Invalid -W/--without parameter. Must be one of the following values: %s.'"
msgstr ""
#: includes/class/class.LSlang.php:760 includes/class/class.LSlang.php:773
#: includes/class/class.LSlang.php:908 includes/class/class.LSlang.php:921
msgid ""
"You could not use -W/--without parameter combined with -O/--only parameter."
msgstr ""
#: includes/class/class.LSlang.php:768
#: includes/class/class.LSlang.php:916
msgid "You could specify only one -O/--only parameter."
msgstr ""
#: includes/class/class.LSlang.php:771
#: includes/class/class.LSlang.php:919
#, php-format
msgid "Invalid -O/--only parameter. Must be one of the following values: %s.'"
msgid "Invalid -O/--only parameter. Must be one of the following values: '%s'."
msgstr ""
#: includes/class/class.LSlang.php:805
#: includes/class/class.LSlang.php:953
msgid ""
"Invalid -l/--lang parameter. Must be compose in format : [lang].[encoding]"
msgstr ""
#: includes/class/class.LSlang.php:820
#: includes/class/class.LSlang.php:968
#, php-format
msgid ""
"Invalid -f/--format parameter. Must be one of the following values: %s.'"
msgstr ""
#: includes/class/class.LSlang.php:844
#: includes/class/class.LSlang.php:992
#, php-format
msgid "%s: Invalid parameter or lang file to load."
msgstr ""
#: includes/class/class.LSlang.php:1136
#: includes/class/class.LSlang.php:1293
msgid "Generate lang.php file"
msgstr ""
#: includes/class/class.LSlang.php:1140
#: includes/class/class.LSlang.php:1297
msgid ""
" -W/--without Disable specified messages. Must be one of\n"
" the following values:"
msgstr ""
#: includes/class/class.LSlang.php:1144
#: includes/class/class.LSlang.php:1301
msgid ""
" -O/--only Only handle specified messages. Must be one\n"
" of the following values :"
msgstr ""
#: includes/class/class.LSlang.php:1148
#: includes/class/class.LSlang.php:1305
msgid ""
" -I/--include-upstream Include upstream code to message lookup\n"
" -c/--copy-original-value Copy original value as translated value when\n"
@ -1057,26 +1057,37 @@ msgid ""
" in existing lang files."
msgstr ""
#: includes/class/class.LSlang.php:1252
#: includes/class/class.LSlang.php:1345
#, php-format
msgid "%s: Invalid parameter."
msgstr ""
#: includes/class/class.LSlang.php:1441
msgid "Generate POT files:"
msgstr ""
#: includes/class/class.LSlang.php:1255
#: includes/class/class.LSlang.php:1444
msgid "This command generate 3 POT files:"
msgstr ""
#: includes/class/class.LSlang.php:1257
#: includes/class/class.LSlang.php:1446
msgid " => contains messages from PHP files"
msgstr ""
#: includes/class/class.LSlang.php:1259
#: includes/class/class.LSlang.php:1448
msgid " => contains messages from templates files"
msgstr ""
#: includes/class/class.LSlang.php:1261
#: includes/class/class.LSlang.php:1450
msgid " => contains all messages"
msgstr ""
#: includes/class/class.LSlang.php:1453
msgid ""
"Note: Use -I / --internal parameter to use internal parser instead of\n"
"xgettext for PHP files."
msgstr ""
#: includes/class/class.LStemplate.php:160
msgid "LStemplate : compile directory is not writable (dir : %{dir})"
msgstr ""
@ -1132,17 +1143,17 @@ msgstr ""
msgid "A fatal error occured."
msgstr ""
#: includes/class/class.LStemplate.php:731
#: includes/class/class.LStemplate.php:733
msgid "LStemplate : Template %{file} not found."
msgstr ""
#: includes/class/class.LStemplate.php:734
#: includes/class/class.LStemplate.php:736
msgid ""
"LStemplate : Fail to execute trigger %{callable} on event %{event} : is not "
"callable."
msgstr ""
#: includes/class/class.LStemplate.php:737
#: includes/class/class.LStemplate.php:739
msgid ""
"LStemplate : Error during the execution of the trigger %{callable} on event "
"%{event}."
@ -1859,8 +1870,8 @@ msgstr ""
msgid "No object."
msgstr ""
#: includes/class/class.LSrelation.php:747 includes/routes.php:452
#: includes/routes.php:993
#: includes/class/class.LSrelation.php:747 includes/routes.php:456
#: includes/routes.php:997
msgid "New"
msgstr ""
@ -2057,11 +2068,11 @@ msgid ""
"support."
msgstr ""
#: includes/class/class.LSform.php:327 includes/routes.php:630
#: includes/class/class.LSform.php:327 includes/routes.php:634
msgid "Do you really want to execute custom action %{title} on this search ?"
msgstr ""
#: includes/class/class.LSform.php:333 includes/routes.php:1428
#: includes/class/class.LSform.php:333 includes/routes.php:1432
msgid ""
"Do you really want to execute custom action %{customAction} on "
"%{objectname} ?"
@ -2251,8 +2262,8 @@ msgstr ""
msgid "Display RSS stack."
msgstr ""
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:583
#: includes/routes.php:1375
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:587
#: includes/routes.php:1379
msgid "undefined"
msgstr ""
@ -2345,88 +2356,88 @@ msgstr ""
msgid "Pedagogical element"
msgstr ""
#: includes/class/class.LSsearch.php:1253
#: includes/class/class.LSsearch.php:1318
msgid "Actions"
msgstr ""
#: includes/class/class.LSsearch.php:1256
#: includes/class/class.LSsearch.php:1321
#: templates/default/global_search.tpl:16
msgid "This search didn't get any result."
msgstr ""
#: includes/class/class.LSsearch.php:1898
#: includes/class/class.LSsearch.php:1963
msgid "LSsearch : Invalid filter : %{filter}."
msgstr ""
#: includes/class/class.LSsearch.php:1901
#: includes/class/class.LSsearch.php:1966
msgid "LSsearch : Invalid basedn : %{basedn}."
msgstr ""
#: includes/class/class.LSsearch.php:1904
#: includes/class/class.LSsearch.php:1969
msgid "LSsearch : Invalid value for %{param} parameter."
msgstr ""
#: includes/class/class.LSsearch.php:1907
#: includes/class/class.LSsearch.php:1972
msgid ""
"LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
msgstr ""
#: includes/class/class.LSsearch.php:1910
#: includes/class/class.LSsearch.php:1975
msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
msgstr ""
#: includes/class/class.LSsearch.php:1913
#: includes/class/class.LSsearch.php:1978
msgid ""
"LSsearch : Invalid parameter attributes. Must be an string or an array of "
"strings."
msgstr ""
#: includes/class/class.LSsearch.php:1916
#: includes/class/class.LSsearch.php:1981
msgid "LSsearch : Can't build attributes list for make filter."
msgstr ""
#: includes/class/class.LSsearch.php:1919
#: includes/class/class.LSsearch.php:1984
msgid ""
"LSsearch : Error building filter with attribute '%{attr}' and pattern "
"'%{pattern}'"
msgstr ""
#: includes/class/class.LSsearch.php:1922
#: includes/class/class.LSsearch.php:1987
msgid "LSsearch : Error combining filters."
msgstr ""
#: includes/class/class.LSsearch.php:1925
#: includes/class/class.LSsearch.php:1990
msgid "LSsearch : Invalid pattern."
msgstr ""
#: includes/class/class.LSsearch.php:1928
#: includes/class/class.LSsearch.php:1993
msgid "LSsearch : Invalid attribute %{attr} in parameters."
msgstr ""
#: includes/class/class.LSsearch.php:1931
#: includes/class/class.LSsearch.php:1996
msgid "LSsearch : Error during the search."
msgstr ""
#: includes/class/class.LSsearch.php:1934
#: includes/class/class.LSsearch.php:1999
msgid "LSsearch : Error sorting the search."
msgstr ""
#: includes/class/class.LSsearch.php:1937
#: includes/class/class.LSsearch.php:2002
msgid ""
"LSsearch : The function of the custum information %{name} is not callable."
msgstr ""
#: includes/class/class.LSsearch.php:1940
#: includes/class/class.LSsearch.php:2005
msgid ""
"LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
"(filter : %{filter})."
msgstr ""
#: includes/class/class.LSsearch.php:1943
#: includes/class/class.LSsearch.php:2008
msgid "LSsearch : Error during execution of the custom action %{customAction}."
msgstr ""
#: includes/class/class.LSsearch.php:1946
#: includes/class/class.LSsearch.php:2011
msgid "LSsearch : Invalid search pattern."
msgstr ""
@ -2542,7 +2553,7 @@ msgstr ""
msgid "JSON value #%{idx} is invalid (or empty)."
msgstr ""
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:433
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:438
msgid "Invalid value \"%{value}\" for component %{component}."
msgstr ""
@ -2676,20 +2687,20 @@ msgstr ""
msgid "LSlog : Fail to load logging handler %{handler}."
msgstr ""
#: includes/class/class.LSerror.php:138
#: includes/class/class.LSerror.php:141
msgid "Unknown error"
msgstr ""
#: includes/class/class.LSerror.php:198
#: includes/class/class.LSerror.php:201
msgid "Unknown error : %{error}"
msgstr ""
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1200
#: includes/routes.php:1293 includes/routes.php:1439
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1204
#: includes/routes.php:1297 includes/routes.php:1443
msgid "View"
msgstr ""
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1056
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1060
msgid "Copy"
msgstr ""
@ -2715,82 +2726,102 @@ msgstr ""
msgid "You must provide pattern for global search."
msgstr ""
#: includes/routes.php:458 includes/routes.php:814
#: includes/routes.php:462 includes/routes.php:818
msgid "Import"
msgstr ""
#: includes/routes.php:463 includes/routes.php:880
#: includes/routes.php:467 includes/routes.php:884
msgid "Export"
msgstr ""
#: includes/routes.php:475
#: includes/routes.php:479
msgid "Reset"
msgstr ""
#: includes/routes.php:514 templates/default/select.tpl:31
#: includes/routes.php:518 templates/default/select.tpl:31
msgid "Approximative search"
msgstr ""
#: includes/routes.php:515 templates/default/select.tpl:32
#: includes/routes.php:519 templates/default/select.tpl:32
msgid "Recursive search"
msgstr ""
#: includes/routes.php:604
#: includes/routes.php:608
msgid ""
"The custom action %{title} have been successfully execute on this search."
msgstr ""
#: includes/routes.php:952
#: includes/routes.php:956
msgid "Data entry form"
msgstr ""
#: includes/routes.php:958 includes/routes.php:1732
#: includes/routes.php:962 includes/routes.php:1736
msgid "Object has been added."
msgstr ""
#: includes/routes.php:1095
#: includes/routes.php:1099
msgid "My account"
msgstr ""
#: includes/routes.php:1158 includes/routes.php:1904
#: includes/routes.php:1162 includes/routes.php:1908
msgid "The object has been partially modified."
msgstr ""
#: includes/routes.php:1161 includes/routes.php:1907
#: includes/routes.php:1165 includes/routes.php:1911
msgid "The object has been modified successfully."
msgstr ""
#: includes/routes.php:1276 includes/routes.php:1947
#: includes/routes.php:1280 includes/routes.php:1951
msgid "%{objectname} has been successfully deleted."
msgstr ""
#: includes/routes.php:1285
#: includes/routes.php:1289
msgid "Deleting : %{objectname}"
msgstr ""
#: includes/routes.php:1286
#: includes/routes.php:1290
msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
msgstr ""
#: includes/routes.php:1396
#: includes/routes.php:1400
msgid ""
"The custom action %{customAction} have been successfully execute on "
"%{objectname}."
msgstr ""
#: includes/functions.php:115
#: includes/functions.php:123
msgid ""
"Function 'getFData' : The method %{meth} of the object %{obj} doesn't exist."
msgstr ""
#: includes/functions.php:208
#: includes/functions.php:211
msgid "[not string value]"
msgstr ""
#: includes/functions.php:254
#: includes/functions.php:259
msgid "Folder not found"
msgstr ""
#: includes/functions.php:863
msgid "TB"
msgstr ""
#: includes/functions.php:864
msgid "GB"
msgstr ""
#: includes/functions.php:865
msgid "MB"
msgstr ""
#: includes/functions.php:866
msgid "KB"
msgstr ""
#: includes/functions.php:867
msgid "B"
msgstr ""
#: conf/LSaddons/config.LSaddons.supann.php:97
msgid "Mrs."
msgstr ""
@ -2990,7 +3021,8 @@ msgstr ""
msgid "Email"
msgstr ""
#: templates/default/import.tpl:43
#: templates/default/import.tpl:43 templates/default/import.tpl:98
#: templates/default/import.tpl:126 templates/default/import.tpl:151
msgid "Errors"
msgstr ""
@ -3012,11 +3044,15 @@ msgstr ""
msgid "Global search"
msgstr ""
#: templates/default/import.tpl:148
msgid "Hook: %(name)"
msgstr ""
#: templates/default/recoverpassword.tpl:19 templates/default/login.tpl:18
msgid "Identifier"
msgstr ""
#: templates/default/import.tpl:85
#: templates/default/import.tpl:92
msgid "Imported objects"
msgstr ""
@ -3044,6 +3080,11 @@ msgstr ""
msgid "Message"
msgstr ""
#: templates/default/import.tpl:106 templates/default/import.tpl:134
#: templates/default/import.tpl:159
msgid "Messages"
msgstr ""
#: templates/default/viewSearch.tpl:113
msgid "Nb / page :"
msgstr ""
@ -3056,14 +3097,18 @@ msgstr ""
msgid "No field."
msgstr ""
#: templates/default/import.tpl:90
#: templates/default/import.tpl:115
msgid "No imported object"
msgstr ""
#: templates/default/import.tpl:58
#: templates/default/import.tpl:65
msgid "No value"
msgstr ""
#: templates/default/import.tpl:45
msgid "Object %(idx)"
msgstr ""
#: templates/default/showTechInfo.tpl:11
msgid "Object classes"
msgstr ""
@ -3093,9 +3138,7 @@ msgstr ""
msgid "Please confirm new password:"
msgstr ""
#: templates/default/LSaccessRightsMatrixView.tpl:22
#: templates/default/LSaccessRightsMatrixView.tpl:27
#: templates/default/LSaccessRightsMatrixView.tpl:67
#: templates/default/LSaccessRightsMatrixView.tpl:72
#: templates/default/LSaccessRightsMatrixView.tpl:93
#: templates/default/LSaccessRightsMatrixView.tpl:95
@ -3104,9 +3147,7 @@ msgstr ""
msgid "R"
msgstr ""
#: templates/default/LSaccessRightsMatrixView.tpl:24
#: templates/default/LSaccessRightsMatrixView.tpl:28
#: templates/default/LSaccessRightsMatrixView.tpl:69
#: templates/default/LSaccessRightsMatrixView.tpl:73
#: templates/default/LSaccessRightsMatrixView.tpl:89
#: templates/default/LSaccessRightsMatrixView.tpl:91
@ -3173,7 +3214,7 @@ msgstr ""
msgid "Update objects if exists"
msgstr ""
#: templates/default/import.tpl:95
#: templates/default/import.tpl:120
msgid "Updated objects"
msgstr ""

View file

@ -42,7 +42,7 @@
{if !empty($result.errors)}
<h2>{tr msg='Errors'}</h2>
{foreach $result.errors as $error}
<h3 class='LSio'>Object {$error@iteration}</h3>
<h3 class='LSio'>{tr msg="Object %(idx)" idx=$error@iteration}</h3>
<div class='LSio_error'>
{if !empty($error.errors.globals)}
<ul class='LSio_global_errors'>
@ -51,6 +51,13 @@
{/foreach}
</ul>
{/if}
{if $error.messages}
<ul class="LSio_global_messages">
{foreach $error.messages as $m}
<li>{$m}</li>
{/foreach}
</ul>
{/if}
<ul class='LSio_data_errors'>
{foreach $error.data as $key => $val}
<li>
@ -84,8 +91,26 @@
<h2 class='LSio_imported_objects'>{tr msg='Imported objects'} ({count($result.imported)})</h2>
<ul class='LSio_imported_objects'>
{foreach $result.imported as $dn => $name}
<li><a href='object/{$LSobject|escape:"url"}/{$dn|escape:"url"}'>{$name|escape:"htmlall"}</a></li>
{foreach $result.imported as $dn => $obj}
<li>
<a href='object/{$LSobject|escape:"url"}/{$dn|escape:"url"}'>{$obj.name|escape:"htmlall"}</a>
{if $obj.errors}
<h3>{tr msg="Errors"}</h3>
<ul class="LSio_object_errors">
{foreach $obj.errors as $e}
<li>{$e|escape:"htmlall"}</li>
{/foreach}
</ul>
{/if}
{if $obj.messages}
<h3>{tr msg="Messages"}</h3>
<ul class="LSio_object_messages">
{foreach $obj.messages as $e}
<li>{$e|escape:"htmlall"}</li>
{/foreach}
</ul>
{/if}
</li>
{foreachelse}
<li>{tr msg='No imported object'}</li>
{/foreach}
@ -94,11 +119,53 @@
{if !empty($result.updated)}
<h2 class='LSio_updated_objects'>{tr msg='Updated objects'} ({count($result.updated)})</h2>
<ul class='LSio_updated_objects'>
{foreach $result.updated as $dn => $name}
<li><a href='object/{$LSobject|escape:"url"}/{$dn|escape:"url"}'>{$name|escape:"htmlall"}</a></li>
{foreach $result.updated as $dn => $obj}
<li>
<a href='object/{$LSobject|escape:"url"}/{$dn|escape:"url"}'>{$obj.name|escape:"htmlall"}</a>
{if $obj.errors}
<h3>{tr msg="Errors"}</h3>
<ul class="LSio_object_errors">
{foreach $obj.errors as $e}
<li>{$e|escape:"htmlall"}</li>
{/foreach}
</ul>
{/if}
{if $obj.messages}
<h3>{tr msg="Messages"}</h3>
<ul class="LSio_object_messages">
{foreach $obj.messages as $e}
<li>{$e|escape:"htmlall"}</li>
{/foreach}
</ul>
{/if}
</li>
{/foreach}
</ul>
{/if}
{foreach $result.hooks as $hook => $info}
{if $info.errors || $info.messages}
<h2>{tr msg="Hook: %(name)" name=$hook}</h2>
<div class="LSio_hook">
{if $info.errors}
<h3>{tr msg="Errors"}</h3>
<ul class="LSio_hook_errors">
{foreach $info.errors as $e}
<li>{$e|escape:"htmlall"}</li>
{/foreach}
</ul>
{/if}
{if $info.messages}
<h3>{tr msg="Messages"}</h3>
<ul class="LSio_hook_messages">
{foreach $info.messages as $e}
<li>{$e}</li>
{/foreach}
</ul>
{/if}
</div>
{/if}
{/foreach}
{/if}
{/block}