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; border-bottom: 1px solid;
} }
div.LSio_error { div.LSio_error, div.LSio_hook {
padding: 0 2em; padding: 0 2em;
} }
ul.LSio_global_errors { ul.LSio_imported_objects h3, ul.LSio_updated_objects h3, div.LSio_hook h3 {
background-color: #F56A6A; 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; list-style-type: none;
padding: 1em; padding: 1em;
margin: 0;
}
ul.LSio_global_errors, ul.LSio_global_messages {
text-align: center; 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 { ul.LSio_data_errors {
font-style: italic; font-style: italic;
font-size: 0.8em; font-size: 0.8em;

View file

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

View file

@ -193,6 +193,7 @@ class LSio extends LSlog_staticLoggerClass {
'imported' => array(), 'imported' => array(),
'updated' => array(), 'updated' => array(),
'errors' => array(), 'errors' => array(),
'hooks' => array(),
); );
// Load LSobject // Load LSobject
@ -228,18 +229,23 @@ class LSio extends LSlog_staticLoggerClass {
self :: log_trace("import(): objects data=".varDump($objectsData)); self :: log_trace("import(): objects data=".varDump($objectsData));
// Trigger before_import event // Trigger before_import event
if ( $success = $ioFormat -> fireEvent(
!$ioFormat -> fireEvent( 'before_import',
'before_import', array(
array( 'input_file' => $input_file,
'input_file' => $input_file, 'updateIfExists' => $updateIfExists,
'updateIfExists' => $updateIfExists, 'justTry' => $justTry,
'justTry' => $justTry, 'objectsData' => &$objectsData,
'objectsData' => &$objectsData, 'return' => &$return,
'return' => &$return,
)
) )
) { );
$return['hooks']['before_import'] = array(
'messages' => $_SESSION['LSsession_infos'],
'errors' => LSerror :: getErrors(),
);
$_SESSION['LSsession_infos'] = array();
if (!$success) {
LSerror :: addErrorCode('LSio_08'); LSerror :: addErrorCode('LSio_08');
return $return; return $return;
} }
@ -352,7 +358,12 @@ class LSio extends LSlog_staticLoggerClass {
self :: log_debug('import(): New object, perform creation'); self :: log_debug('import(): New object, perform creation');
if ($justTry || $object -> updateData('create')) { if ($justTry || $object -> updateData('create')) {
self :: log_info('Object '.$object -> getDn().' imported'); 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; continue;
} }
else { else {
@ -395,7 +406,12 @@ class LSio extends LSlog_staticLoggerClass {
// Update data on LDAP server // Update data on LDAP server
else if ($justTry || $object -> updateData('modify')) { else if ($justTry || $object -> updateData('modify')) {
self :: log_info('Object '.$object -> getDn().' updated'); 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; continue;
} }
else { else {
@ -406,13 +422,16 @@ class LSio extends LSlog_staticLoggerClass {
} }
} }
} }
$globalErrors = array_merge(LSerror :: getErrors(), $globalErrors);
$objectsInError[] = array( $objectsInError[] = array(
'data' => $objData, 'data' => $objData,
'errors' => array ( 'errors' => array (
'globals' => $globalErrors, 'globals' => $globalErrors,
'attrs' => $form->getErrors() 'attrs' => $form->getErrors(),
) ),
'messages' => $_SESSION['LSsession_infos'],
); );
$_SESSION['LSsession_infos'] = array();
} }
$return['errors'] = $objectsInError; $return['errors'] = $objectsInError;
$return['success'] = empty($objectsInError); $return['success'] = empty($objectsInError);
@ -429,18 +448,22 @@ class LSio extends LSlog_staticLoggerClass {
); );
// Trigger after_import event // Trigger after_import event
if ( $success = $ioFormat -> fireEvent(
!$ioFormat -> fireEvent( 'after_import',
'after_import', array(
array( 'input_file' => $input_file,
'input_file' => $input_file, 'updateIfExists' => $updateIfExists,
'updateIfExists' => $updateIfExists, 'justTry' => $justTry,
'justTry' => $justTry, 'objectsData' => &$objectsData,
'objectsData' => &$objectsData, 'return' => &$return,
'return' => &$return,
)
) )
) );
$return['hooks']['after_import'] = array(
'messages' => $_SESSION['LSsession_infos'],
'errors' => LSerror :: getErrors(),
);
$_SESSION['LSsession_infos'] = array();
if (!$success)
LSerror :: addErrorCode('LSio_09'); LSerror :: addErrorCode('LSio_09');
return $return; 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) { function _cli_parse_template_file($file) {
global $LSlang_cli_logger; global $LSlang_cli_logger;
$LSlang_cli_logger -> debug("Looking for string to translate in '$file' template file"); $LSlang_cli_logger -> debug("Looking for string to translate in '$file' template file");
$count = 0; foreach(file($file) as $line_count => $line) {
foreach(file($file) as $line) { $line_count ++;
$count ++; if (preg_match_all('/\{ *tr +.*msg=(["\'])(?P<msg>[^"}]+)\1.*\}/', $line, $matches)) {
if (preg_match_all('/\{ *tr +msg=["\']([^\}]+)["\'] *\}/',$line,$matches)) { foreach($matches["msg"] as $t) {
foreach($matches[1] as $t) {
$t = preg_replace('/[\'"]\|escape\:.*$/', '', $t); $t = preg_replace('/[\'"]\|escape\:.*$/', '', $t);
$LSlang_cli_logger -> trace(" - \"$t\" # Line $count"); $LSlang_cli_logger -> trace(" - \"$t\" # Line $line_count");
_cli_add_str_to_translate($t, _cli_absolute2relative_path($file).":$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 * @return void
*/ */
function _cli_find_and_parse_template_file($dir) { function _cli_find_and_parse_template_file($dir) {
global $LSlang_cli_logger;
if (is_dir($dir)) { if (is_dir($dir)) {
$LSlang_cli_logger -> debug("Looking for string to translate in template directory '$dir'");
if ($dh = opendir($dir)) { if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) { while (($file = readdir($dh)) !== false) {
if ($file=='.' || $file=='..') continue; if ($file=='.' || $file=='..') continue;
if (is_dir($dir.'/'.$file)) { if (is_dir("$dir/$file")) {
_cli_find_and_parse_template_file($dir.'/'.$file); _cli_find_and_parse_template_file("$dir/$file");
} }
elseif (is_file($dir."/".$file) && preg_match('/\.tpl$/',$file)) { elseif (is_file($dir."/".$file) && preg_match('/\.tpl$/',$file)) {
_cli_parse_template_file($dir.'/'.$file); _cli_parse_template_file("$dir/$file");
} }
} }
closedir($dh); closedir($dh);
@ -544,59 +545,185 @@ function _cli_find_and_parse_template_file($dir) {
function _cli_parse_php_file($file) { function _cli_parse_php_file($file) {
global $LSlang_cli_logger; global $LSlang_cli_logger;
$LSlang_cli_logger -> debug("Looking for string to translate in '$file' PHP file"); $LSlang_cli_logger -> debug("Looking for string to translate in '$file' PHP file");
$count = 0; $quote = '';
$quote=''; $res = '';
$res=''; $comment = null;
foreach(file($file) as $line) { $line_break_continue = false;
$count++; $inside_keyword = false;
$LSlang_cli_logger -> trace("Handle line #$count of '$file' PHP file"); $inside_comment = false;
$offset=0; $end_comment_pos = false;
while ($pos = strpos($line,'__(',$offset)) { $keyword = null;
$LSlang_cli_logger -> trace("$file:$count: detect keyword at position #$pos ('$line')"); foreach(file($file) as $line_count => $line) {
for ($i=$pos+3;$i<strlen($line);$i++) { $line = preg_replace("/\n$/", "", $line);
$offset=$i; // Always increase offset to avoid infinity-loop $line_count++;
if (empty($quote)) { $LSlang_cli_logger -> trace("Handle line #$line_count of '$file' PHP file : '$line'");
$offset = 0;
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 ($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 // Quote char not detected : try to detect it
if ($line[$i]=='\\' || $line[$i]==" " || $line[$i]=="\t") { if ($line[$i]=='\\' || $line[$i]==" " || $line[$i]=="\t") {
// Space or escape char : pass // Space or escape char : pass
$i++; $i++;
} }
elseif ($line[$i]=='"' || $line[$i]=="'") { elseif (in_array($line[$i], array('"', "'")) && !$concatenation_need) {
// Quote detected // Quote detected
$LSlang_cli_logger -> trace(
"$file:$line_count: Quote (".$line[$i].") detected at position #$i ('$line')");
$quote=$line[$i]; $quote=$line[$i];
} }
elseif ($line[$i]=='$' || $line[$i]==')') { elseif ($line[$i]=='$') {
// Variable translation not possible or end function call detected // 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; break;
} }
else { else {
// Unknown case : continue // 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++; $i++;
} }
} }
elseif ($quote) { elseif ($quote) {
// Quote char already detected : try to detect end quote char // Quote char already detected : try to detect end quote char
if ($line[$i]=='\\') { if ($line[$i] == '\\') {
// Escape char detected : pass this char and the following one // Escape char detected : keep it and the following one
$res.=$line[$i]; $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++; $i++;
$res.=$line[$i]; $res .= $line[$i];
} }
elseif ($line[$i]==$quote) { 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
$quote=''; $LSlang_cli_logger -> trace(
break; "$file:$line_count: End quote char detected at position #$i, reset quote and set ".
"concatenation as need ('$line')");
$quote = '';
$concatenation_need = true;
} }
else { else {
// End quote char not detected : append current char to result // End quote char not detected : append current char to result
$res.=$line[$i]; $res .= $line[$i];
} }
} }
} }
// Include detected string if not empty and quote char was detected and reseted // Include detected string if not empty and quote char was detected and reseted
if (!empty($res) && empty($quote)) { if ($inside_comment) {
_cli_add_str_to_translate($res, _cli_absolute2relative_path($file).":$count"); $LSlang_cli_logger -> trace(
$res=''; "$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 * @param string $dir The directory path
* @return void * @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)) { if (is_dir($dir)) {
$LSlang_cli_logger -> debug("Looking for string to translate in PHP files of directory '$dir'");
if ($dh = opendir($dir)) { if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) { while (($file = readdir($dh)) !== false) {
if (preg_match($filename_regex, $file)) { if ($file == '.' || $file == '..') continue;
_cli_parse_php_file($dir.'/'.$file); 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); closedir($dh);
@ -683,8 +822,8 @@ function _cli_output_php($fd) {
* @return string The cleaned string * @return string The cleaned string
*/ */
function _cli_clean_for_pot_file($val) { function _cli_clean_for_pot_file($val) {
$val = str_replace('"', '\\"', $val); $val = preg_replace('/([^\\\\])"/', '$1\"', $val);
return str_replace("\n", "\\n", $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")); $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.")); LScli :: usage(_("You could specify only one -O/--only parameter."));
$only = strtolower($command_args[$i]); $only = strtolower($command_args[$i]);
if (!in_array($only, $available_onlys)) 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) elseif ($withouts)
LScli :: usage(_("You could not use -W/--without parameter combined with -O/--only parameter.")); LScli :: usage(_("You could not use -W/--without parameter combined with -O/--only parameter."));
break; break;
@ -1017,8 +1156,8 @@ function cli_generate_lang_file($command_args) {
// Manage includes files // Manage includes files
if (!in_array('includes', $withouts) && (!$only || $only == 'includes')) { if (!in_array('includes', $withouts) && (!$only || $only == 'includes')) {
// Note: Upstream code most only use gettext translation, do not handle it here // 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$/'); 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, '/^(.+)\.php$/'); _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$/'); 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$/'); _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$$/'); _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 // Sort resulting strings
ksort($data); ksort($data);
@ -1185,6 +1330,22 @@ ___(
**/ **/
function cli_generate_ldapsaisie_pot($command_args) { function cli_generate_ldapsaisie_pot($command_args) {
global $LSlang_cli_logger; 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) // Initialize logger (if not already initialized by another CLI command)
if (!isset($LSlang_cli_logger)) if (!isset($LSlang_cli_logger))
$LSlang_cli_logger = LSlog :: get_logger('generate_ldapsaisie_pot'); $LSlang_cli_logger = LSlog :: get_logger('generate_ldapsaisie_pot');
@ -1212,25 +1373,41 @@ function cli_generate_ldapsaisie_pot($command_args) {
return false; return false;
} }
// Extract messages from LdapSaisie PHP files using xgettext // Extract messages from LdapSaisie PHP files
$result = LScli :: run_external_command( if ($use_internal_parser) {
array( // Using internal parser
"xgettext", $result = LScli :: run_command(
"--from-code utf-8", 'generate_lang_file',
"--language=PHP", array (
"-o", LS_I18N_DIR_PATH."/ldapsaisie-main.pot", // Output "-o", LS_I18N_DIR_PATH."/ldapsaisie-main.pot",
"--omit-header", // No POT header "-f", "pot",
"--keyword=__", // Handle custom __() translation function "--only", "php",
"--keyword=___", // Handle custom ___() translation function ),
"--files=-" // Read files to parse from STDIN false // do not exit
), );
$php_files[1], // Pass PHP files list via STDIN if (!$result)
true, // Escape parameters $LSlang_cli_logger -> fatal("Fail to extract messages from PHP files using generate_lang_file command.");
LS_ROOT_DIR // Run in LdapSaisie root directory }
); else {
if (!is_array($result) || $result[0] != 0) // Using xgettext
$LSlang_cli_logger -> fatal("Fail to extract messages from PHP files using xgettext."); $result = LScli :: run_external_command(
array(
"xgettext",
"--from-code utf-8",
"--language=PHP",
"-o", LS_I18N_DIR_PATH."/ldapsaisie-main.pot", // Output
"--omit-header", // No POT header
"--keyword=__", // Handle custom __() translation function
"--keyword=___", // Handle custom ___() translation function
"--files=-" // Read files to parse from STDIN
),
$php_files[1], // Pass PHP files list via STDIN
true, // Escape parameters
LS_ROOT_DIR // Run in LdapSaisie root directory
);
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 // Extract other messages from LdapSaisie templates files
$result = LScli :: run_command( $result = LScli :: run_command(
@ -1271,6 +1448,10 @@ LScli :: add_command(
___(" => contains messages from templates files"), ___(" => contains messages from templates files"),
" - ".LS_I18N_DIR_PATH."/ldapsaisie.pot", " - ".LS_I18N_DIR_PATH."/ldapsaisie.pot",
___(" => contains all messages"), ___(" => 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 false // This command does not need LDAP connection
); );

View file

@ -705,7 +705,9 @@ function LStemplate_smarty_getFData($params) {
} }
function LStemplate_smarty_tr($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) { function LStemplate_smarty_img($params) {

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: LdapSaisie\n" "Project-Id-Version: LdapSaisie\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \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" "Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise." "Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
"org>\n" "org>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: utf-8\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" "X-Generator: Poedit 2.4.2\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\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.LSrelation.php:679 includes/class/class.LSform.php:346
#: includes/class/class.LSformElement_select_object.php:75 #: includes/class/class.LSformElement_select_object.php:75
#: includes/class/class.LSformElement_select_object.php:91 #: includes/class/class.LSformElement_select_object.php:91
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1064 #: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1068
#: includes/routes.php:1208 #: includes/routes.php:1212
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
@ -399,8 +399,8 @@ msgstr "Étendue"
#: includes/class/class.LSrelation.php:736 #: includes/class/class.LSrelation.php:736
#: includes/class/class.LSformElement_select_object.php:74 #: includes/class/class.LSformElement_select_object.php:74
#: includes/class/class.LSformElement_supannLabeledValue.php:90 #: includes/class/class.LSformElement_supannLabeledValue.php:90
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1048 #: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1052
#: includes/routes.php:1216 includes/routes.php:1301 includes/routes.php:1447 #: includes/routes.php:1220 includes/routes.php:1305 includes/routes.php:1451
msgid "Modify" msgid "Modify"
msgstr "Modifier" msgstr "Modifier"
@ -408,7 +408,7 @@ msgstr "Modifier"
msgid "Modify RDN" msgid "Modify RDN"
msgstr "Modifier le 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 #: templates/default/select.tpl:28 templates/default/global_search.tpl:6
msgid "Search" msgid "Search"
msgstr "Rechercher" msgstr "Rechercher"
@ -436,7 +436,7 @@ msgstr "Voir les modifications d'LdapSaisie"
#: includes/addons/LSaddons.accesslog.php:244 #: includes/addons/LSaddons.accesslog.php:244
#: includes/class/class.LSsession.php:1870 includes/routes.php:157 #: 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" msgid "Refresh"
msgstr "Rafraîchir" msgstr "Rafraîchir"
@ -752,89 +752,90 @@ msgstr "Valeur invalide"
msgid "LSformRule_%{type}: Parameter %{param} is not found." msgid "LSformRule_%{type}: Parameter %{param} is not found."
msgstr "LSformRule_%{type} : Le paramètre %{param} n'est pas défini." 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." msgid "Failed to set post data on creation form."
msgstr "Impossible de définir les données dans le formulaire de création." 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." msgid "Error validating creation form."
msgstr "Une erreur est survenue en validant le formulaire de création." 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." msgid "Failed to validate object data."
msgstr "Impossible de valider les données de l'objet." 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." msgid "Failed to generate DN for this object."
msgstr "Impossible de générer le DN de cet objet." 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." 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}." 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}." 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 "" msgid ""
"Failed to load existing object %{dn} from LDAP server. Can't update object." "Failed to load existing object %{dn} from LDAP server. Can't update object."
msgstr "" msgstr ""
"Impossible de charger l'objet existant %{dn} depuis l'annuaire LDAP. " "Impossible de charger l'objet existant %{dn} depuis l'annuaire LDAP. "
"Impossible de mettre à jour cet objet." "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." msgid "Failed to set post data on update form."
msgstr "Impossible de définir les données dans le formulaire de mise à jour." 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." msgid "Error validating update form."
msgstr "Une erreur est survenue en validant le formulaire de mise à jour." 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." msgid "Error updating object on LDAP server."
msgstr "" msgstr ""
"Une erreur est survenue en mettant à jour cet objet dans l'annuaire LDAP." "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." msgid "LSio: Post data not found or not completed."
msgstr "LSio : les données transmises sont introuvables ou incomplètes." 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." msgid "LSio: object type invalid."
msgstr "LSio : type d'objet invalide." 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." msgid "LSio: input/output format %{format} invalid."
msgstr "LSio : Le format d'entrée/sortie %{format} est invalide." 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." msgid "LSio: Fail to initialize input/output driver."
msgstr "LSio : Impossible d'initialiser le pilote d'entrée/sortie." 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." msgid "LSio: Fail to load objects's data from input file."
msgstr "" msgstr ""
"LSio: Impossible de charger les données des objets depuis le fichier " "LSio: Impossible de charger les données des objets depuis le fichier "
"d'import." "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." msgid "LSio: Fail to load objects's data to export from LDAP directory."
msgstr "" msgstr ""
"LSio: Impossible de charger les données des objets à exporter depuis " "LSio: Impossible de charger les données des objets à exporter depuis "
"l'annuaire LDAP." "l'annuaire LDAP."
#: includes/class/class.LSio.php:742 #: includes/class/class.LSio.php:843
msgid "LSio: Fail to export objects's data." msgid "LSio: Fail to export objects's data."
msgstr "LSio: Impossible d'exporter les données des objets." 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." msgid "LSio: An error occured running before import hooks. Stop the import."
msgstr "" msgstr ""
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'avant " "LSio : Une erreur est survenue durant l'exécution des déclencheurs d'avant "
"import. Arrêt de l'import." "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." msgid "LSio: An error occured running after import hooks."
msgstr "" msgstr ""
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'après " "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.LSconfirmBox.php:37
#: includes/class/class.LSsmoothbox.php:39 includes/class/class.LSform.php:175 #: 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 #: templates/default/recoverpassword.tpl:21
msgid "Validate" msgid "Validate"
msgstr "Valider" msgstr "Valider"
@ -1038,7 +1039,7 @@ msgid "Unparsable value for component %{c}."
msgstr "Valeur du composant %{c} non-analysable." msgstr "Valeur du composant %{c} non-analysable."
#: includes/class/class.LSformElement_supannCompositeAttribute.php:479 #: includes/class/class.LSformElement_supannCompositeAttribute.php:479
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:408 #: includes/class/class.LSformElement_jsonCompositeAttribute.php:413
msgid "%{label}: %{error}" msgid "%{label}: %{error}"
msgstr "%{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" msgid "Or leave empty to pass.\n"
msgstr "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 #, php-format
msgid "" msgid ""
"Invalid -W/--without parameter. Must be one of the following values: %s.'" "Invalid -W/--without parameter. Must be one of the following values: %s.'"
msgstr "" msgstr ""
"Paramètre -W/--without invalide. Doit-être une des valeurs suivantes : %s." "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 "" msgid ""
"You could not use -W/--without parameter combined with -O/--only parameter." "You could not use -W/--without parameter combined with -O/--only parameter."
msgstr "" msgstr ""
"Vous ne pouvez pas utiliser les paramètres -W/--without et -O/--only " "Vous ne pouvez pas utiliser les paramètres -W/--without et -O/--only "
"ensemble." "ensemble."
#: includes/class/class.LSlang.php:768 #: includes/class/class.LSlang.php:916
msgid "You could specify only one -O/--only parameter." msgid "You could specify only one -O/--only parameter."
msgstr "Vous ne pouvez spécifier qu'un seul paramètre -O/--only." 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 #, 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 "" 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 "" msgid ""
"Invalid -l/--lang parameter. Must be compose in format : [lang].[encoding]" "Invalid -l/--lang parameter. Must be compose in format : [lang].[encoding]"
msgstr "" msgstr ""
"Paramètre -l/--lang invalide. Doit-être composé au format : [lang].[encoding]" "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 #, php-format
msgid "" msgid ""
"Invalid -f/--format parameter. Must be one of the following values: %s.'" "Invalid -f/--format parameter. Must be one of the following values: %s.'"
msgstr "" msgstr ""
"Paramètre -f/--format invalide. Doit-être une des valeurs suivantes : %s." "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 #, php-format
msgid "%s: Invalid parameter or lang file to load." msgid "%s: Invalid parameter or lang file to load."
msgstr "%s : Paramètre ou fichier de traductions à charger invalide." 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" msgid "Generate lang.php file"
msgstr "Générer le fichier lang.php" msgstr "Générer le fichier lang.php"
#: includes/class/class.LSlang.php:1140 #: includes/class/class.LSlang.php:1297
msgid "" msgid ""
" -W/--without Disable specified messages. Must be one of\n" " -W/--without Disable specified messages. Must be one of\n"
" the following values:" " the following values:"
@ -1181,7 +1182,7 @@ msgstr ""
" -W/--without Désactiver les messages spécifiés. Doit\n" " -W/--without Désactiver les messages spécifiés. Doit\n"
" être une des valeurs suivants :" " être une des valeurs suivants :"
#: includes/class/class.LSlang.php:1144 #: includes/class/class.LSlang.php:1301
msgid "" msgid ""
" -O/--only Only handle specified messages. Must be one\n" " -O/--only Only handle specified messages. Must be one\n"
" of the following values :" " of the following values :"
@ -1189,7 +1190,7 @@ msgstr ""
" -O/--only Gérer uniquement les messages spécifiés.\n" " -O/--only Gérer uniquement les messages spécifiés.\n"
" Doit-être une des valeurs suivantes :" " Doit-être une des valeurs suivantes :"
#: includes/class/class.LSlang.php:1148 #: includes/class/class.LSlang.php:1305
msgid "" msgid ""
" -I/--include-upstream Include upstream code to message lookup\n" " -I/--include-upstream Include upstream code to message lookup\n"
" -c/--copy-original-value Copy original value as translated value when\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" " caractères UTF-8 invalides dans les fichiers\n"
" de traductions existants." " 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:" msgid "Generate POT files:"
msgstr "Générer les fichiers POT:" 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:" msgid "This command generate 3 POT files:"
msgstr "Cette commande génère 3 fichiers POT :" 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" msgid " => contains messages from PHP files"
msgstr " => contient les messages issues des fichiers PHP" 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" msgid " => contains messages from templates files"
msgstr " => contient les messages issues des fichiers de templates" 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" msgid " => contains all messages"
msgstr " => contient tous -W/--withoutles 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 #: includes/class/class.LStemplate.php:160
msgid "LStemplate : compile directory is not writable (dir : %{dir})" msgid "LStemplate : compile directory is not writable (dir : %{dir})"
msgstr "" msgstr ""
@ -1308,11 +1322,11 @@ msgstr ""
msgid "A fatal error occured." msgid "A fatal error occured."
msgstr "Une erreur fatale est survenue." msgstr "Une erreur fatale est survenue."
#: includes/class/class.LStemplate.php:731 #: includes/class/class.LStemplate.php:733
msgid "LStemplate : Template %{file} not found." msgid "LStemplate : Template %{file} not found."
msgstr "LStemplate : le template %{file} est introuvable." msgstr "LStemplate : le template %{file} est introuvable."
#: includes/class/class.LStemplate.php:734 #: includes/class/class.LStemplate.php:736
msgid "" msgid ""
"LStemplate : Fail to execute trigger %{callable} on event %{event} : is not " "LStemplate : Fail to execute trigger %{callable} on event %{event} : is not "
"callable." "callable."
@ -1320,7 +1334,7 @@ msgstr ""
"LStemplate : Échec d'exécution du déclencheur %{callable} lors de événement " "LStemplate : Échec d'exécution du déclencheur %{callable} lors de événement "
"%{event} : il n'est pas un callable." "%{event} : il n'est pas un callable."
#: includes/class/class.LStemplate.php:737 #: includes/class/class.LStemplate.php:739
msgid "" msgid ""
"LStemplate : Error during the execution of the trigger %{callable} on event " "LStemplate : Error during the execution of the trigger %{callable} on event "
"%{event}." "%{event}."
@ -2193,8 +2207,8 @@ msgstr "Attention"
msgid "No object." msgid "No object."
msgstr "Aucun objet." msgstr "Aucun objet."
#: includes/class/class.LSrelation.php:747 includes/routes.php:452 #: includes/class/class.LSrelation.php:747 includes/routes.php:456
#: includes/routes.php:993 #: includes/routes.php:997
msgid "New" msgid "New"
msgstr "Nouveau" msgstr "Nouveau"
@ -2431,13 +2445,13 @@ msgstr ""
"Une erreur est survenue en soumettant ce formulaire. Merci de ré-essayer ou " "Une erreur est survenue en soumettant ce formulaire. Merci de ré-essayer ou "
"de contacter le support." "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 ?" msgid "Do you really want to execute custom action %{title} on this search ?"
msgstr "" msgstr ""
"Êtes-vous vraiment sûre de vouloir exécuter l'action personnalisée %{title} " "Êtes-vous vraiment sûre de vouloir exécuter l'action personnalisée %{title} "
"sur cette recherche ?" "sur cette recherche ?"
#: includes/class/class.LSform.php:333 includes/routes.php:1428 #: includes/class/class.LSform.php:333 includes/routes.php:1432
msgid "" msgid ""
"Do you really want to execute custom action %{customAction} on " "Do you really want to execute custom action %{customAction} on "
"%{objectname} ?" "%{objectname} ?"
@ -2645,8 +2659,8 @@ msgstr "Réinitialiser le choix."
msgid "Display RSS stack." msgid "Display RSS stack."
msgstr "Afficher la file RSS." msgstr "Afficher la file RSS."
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:583 #: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:587
#: includes/routes.php:1375 #: includes/routes.php:1379
msgid "undefined" msgid "undefined"
msgstr "non-définie" msgstr "non-définie"
@ -2748,39 +2762,39 @@ msgstr "Étape"
msgid "Pedagogical element" msgid "Pedagogical element"
msgstr "Élement pédagogique" msgstr "Élement pédagogique"
#: includes/class/class.LSsearch.php:1253 #: includes/class/class.LSsearch.php:1318
msgid "Actions" msgid "Actions"
msgstr "Actions" msgstr "Actions"
#: includes/class/class.LSsearch.php:1256 #: includes/class/class.LSsearch.php:1321
#: templates/default/global_search.tpl:16 #: templates/default/global_search.tpl:16
msgid "This search didn't get any result." msgid "This search didn't get any result."
msgstr "Cette recherche n'a retournée aucun résultat." 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}." msgid "LSsearch : Invalid filter : %{filter}."
msgstr "LSsearch : Filtre invalide : %{filter}." msgstr "LSsearch : Filtre invalide : %{filter}."
#: includes/class/class.LSsearch.php:1901 #: includes/class/class.LSsearch.php:1966
msgid "LSsearch : Invalid basedn : %{basedn}." msgid "LSsearch : Invalid basedn : %{basedn}."
msgstr "LSsearch : Base DN invalide." msgstr "LSsearch : Base DN invalide."
#: includes/class/class.LSsearch.php:1904 #: includes/class/class.LSsearch.php:1969
msgid "LSsearch : Invalid value for %{param} parameter." msgid "LSsearch : Invalid value for %{param} parameter."
msgstr "LSsearch : La valeur du paramètre %{param} est incorrecte." msgstr "LSsearch : La valeur du paramètre %{param} est incorrecte."
#: includes/class/class.LSsearch.php:1907 #: includes/class/class.LSsearch.php:1972
msgid "" msgid ""
"LSsearch : Invalid size limit. Must be an integer greater or equal to 0." "LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
msgstr "" msgstr ""
"LSsearch : Limite de taille de recherche invalide. Elle doit être un entier " "LSsearch : Limite de taille de recherche invalide. Elle doit être un entier "
"supérieur ou égal à 0." "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." msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
msgstr "LSsearch : Paramètre %{param} invalide. Il doit être un booléen." 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 "" msgid ""
"LSsearch : Invalid parameter attributes. Must be an string or an array of " "LSsearch : Invalid parameter attributes. Must be an string or an array of "
"strings." "strings."
@ -2788,13 +2802,13 @@ msgstr ""
"LSsearch : Paramètre 'attributes' invalide. Il doit être une chaîne de " "LSsearch : Paramètre 'attributes' invalide. Il doit être une chaîne de "
"caractères ou un tableau de chaînes de caractères." "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." msgid "LSsearch : Can't build attributes list for make filter."
msgstr "" msgstr ""
"LSsearch : Impossible de construire la liste des attributs pour faire le " "LSsearch : Impossible de construire la liste des attributs pour faire le "
"filtre." "filtre."
#: includes/class/class.LSsearch.php:1919 #: includes/class/class.LSsearch.php:1984
msgid "" msgid ""
"LSsearch : Error building filter with attribute '%{attr}' and pattern " "LSsearch : Error building filter with attribute '%{attr}' and pattern "
"'%{pattern}'" "'%{pattern}'"
@ -2802,34 +2816,34 @@ msgstr ""
"LSsearch : Problème en construisant le filtre avec l'attribut '%{attr}' et " "LSsearch : Problème en construisant le filtre avec l'attribut '%{attr}' et "
"le mot clé '%{pattern}'" "le mot clé '%{pattern}'"
#: includes/class/class.LSsearch.php:1922 #: includes/class/class.LSsearch.php:1987
msgid "LSsearch : Error combining filters." msgid "LSsearch : Error combining filters."
msgstr "LSsearch : Problème en combinant les filtres." msgstr "LSsearch : Problème en combinant les filtres."
#: includes/class/class.LSsearch.php:1925 #: includes/class/class.LSsearch.php:1990
msgid "LSsearch : Invalid pattern." msgid "LSsearch : Invalid pattern."
msgstr "LSsearch : Mot clé invalide." msgstr "LSsearch : Mot clé invalide."
#: includes/class/class.LSsearch.php:1928 #: includes/class/class.LSsearch.php:1993
msgid "LSsearch : Invalid attribute %{attr} in parameters." msgid "LSsearch : Invalid attribute %{attr} in parameters."
msgstr "LSsearch : Attribut %{attr} incorrect dans les paramètres." 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." msgid "LSsearch : Error during the search."
msgstr "LSsearch : Erreur pendant la recherche." msgstr "LSsearch : Erreur pendant la recherche."
#: includes/class/class.LSsearch.php:1934 #: includes/class/class.LSsearch.php:1999
msgid "LSsearch : Error sorting the search." msgid "LSsearch : Error sorting the search."
msgstr "LSsearch : Erreur pendant le trie de la recherche." msgstr "LSsearch : Erreur pendant le trie de la recherche."
#: includes/class/class.LSsearch.php:1937 #: includes/class/class.LSsearch.php:2002
msgid "" msgid ""
"LSsearch : The function of the custum information %{name} is not callable." "LSsearch : The function of the custum information %{name} is not callable."
msgstr "" msgstr ""
"LSsearch : La fonction de l'information personnalisée %{name} n'est pas " "LSsearch : La fonction de l'information personnalisée %{name} n'est pas "
"exécutable." "exécutable."
#: includes/class/class.LSsearch.php:1940 #: includes/class/class.LSsearch.php:2005
msgid "" msgid ""
"LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} " "LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
"(filter : %{filter})." "(filter : %{filter})."
@ -2837,13 +2851,13 @@ msgstr ""
"LSsearch : PredefinedFilter invalide pour le type d'LSobject %{type} : " "LSsearch : PredefinedFilter invalide pour le type d'LSobject %{type} : "
"%{label} (filtre : %{filter})." "%{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}." msgid "LSsearch : Error during execution of the custom action %{customAction}."
msgstr "" msgstr ""
"LSldapObject : Erreur durant l'exécution de l'action personnalisée " "LSldapObject : Erreur durant l'exécution de l'action personnalisée "
"%{customAction}." "%{customAction}."
#: includes/class/class.LSsearch.php:1946 #: includes/class/class.LSsearch.php:2011
msgid "LSsearch : Invalid search pattern." msgid "LSsearch : Invalid search pattern."
msgstr "LSsearch : Mot clé de recherche invalide." 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)." msgid "JSON value #%{idx} is invalid (or empty)."
msgstr "La valeur JSON #%{idx} est invalide (ou vide)." 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}." msgid "Invalid value \"%{value}\" for component %{component}."
msgstr "Valeur invalide pour le composant %{component} : \"%{value}\"." 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}." msgid "LSlog : Fail to load logging handler %{handler}."
msgstr "LSlog : Impossible de charger l'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" msgid "Unknown error"
msgstr "Erreur inconnue" msgstr "Erreur inconnue"
#: includes/class/class.LSerror.php:198 #: includes/class/class.LSerror.php:201
msgid "Unknown error : %{error}" msgid "Unknown error : %{error}"
msgstr "Erreur inconnue : %{error}" msgstr "Erreur inconnue : %{error}"
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1200 #: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1204
#: includes/routes.php:1293 includes/routes.php:1439 #: includes/routes.php:1297 includes/routes.php:1443
msgid "View" msgid "View"
msgstr "Voir" msgstr "Voir"
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1056 #: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1060
msgid "Copy" msgid "Copy"
msgstr "Copier" msgstr "Copier"
@ -3189,66 +3203,66 @@ msgstr "Accueil"
msgid "You must provide pattern for global search." msgid "You must provide pattern for global search."
msgstr "Vous devez fournir un mot clé pour les recherches globales." 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" msgid "Import"
msgstr "Importer" msgstr "Importer"
#: includes/routes.php:463 includes/routes.php:880 #: includes/routes.php:467 includes/routes.php:884
msgid "Export" msgid "Export"
msgstr "Exporter" msgstr "Exporter"
#: includes/routes.php:475 #: includes/routes.php:479
msgid "Reset" msgid "Reset"
msgstr "Réinitialiser" msgstr "Réinitialiser"
#: includes/routes.php:514 templates/default/select.tpl:31 #: includes/routes.php:518 templates/default/select.tpl:31
msgid "Approximative search" msgid "Approximative search"
msgstr "Recherche approximative" msgstr "Recherche approximative"
#: includes/routes.php:515 templates/default/select.tpl:32 #: includes/routes.php:519 templates/default/select.tpl:32
msgid "Recursive search" msgid "Recursive search"
msgstr "Recherche récursive" msgstr "Recherche récursive"
#: includes/routes.php:604 #: includes/routes.php:608
msgid "" msgid ""
"The custom action %{title} have been successfully execute on this search." "The custom action %{title} have been successfully execute on this search."
msgstr "" msgstr ""
"L'action personnalisée %{title} a été correctement exécutée sur cette " "L'action personnalisée %{title} a été correctement exécutée sur cette "
"recherche." "recherche."
#: includes/routes.php:952 #: includes/routes.php:956
msgid "Data entry form" msgid "Data entry form"
msgstr "Masque de saisie" 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." msgid "Object has been added."
msgstr "L'objet a été ajouté." msgstr "L'objet a été ajouté."
#: includes/routes.php:1095 #: includes/routes.php:1099
msgid "My account" msgid "My account"
msgstr "Mon compte" 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." msgid "The object has been partially modified."
msgstr "L'objet a été partiellement modifié." 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." msgid "The object has been modified successfully."
msgstr "L'objet a bien été modifié." 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." msgid "%{objectname} has been successfully deleted."
msgstr "%{objectname} a bien été supprimé." msgstr "%{objectname} a bien été supprimé."
#: includes/routes.php:1285 #: includes/routes.php:1289
msgid "Deleting : %{objectname}" msgid "Deleting : %{objectname}"
msgstr "Suppression : %{objectname}" msgstr "Suppression : %{objectname}"
#: includes/routes.php:1286 #: includes/routes.php:1290
msgid "Do you really want to delete <strong>%{displayName}</strong> ?" msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
msgstr "Voulez-vous vraiment supprimer <strong>%{displayName}</strong> ?" msgstr "Voulez-vous vraiment supprimer <strong>%{displayName}</strong> ?"
#: includes/routes.php:1396 #: includes/routes.php:1400
msgid "" msgid ""
"The custom action %{customAction} have been successfully execute on " "The custom action %{customAction} have been successfully execute on "
"%{objectname}." "%{objectname}."
@ -3256,19 +3270,39 @@ msgstr ""
"L'action personnalisée %{customAction} a été correctement exécutée sur " "L'action personnalisée %{customAction} a été correctement exécutée sur "
"%{objectname}." "%{objectname}."
#: includes/functions.php:115 #: includes/functions.php:123
msgid "" msgid ""
"Function 'getFData' : The method %{meth} of the object %{obj} doesn't exist." "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." 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]" msgid "[not string value]"
msgstr "[pas une chaîne de caractères]" msgstr "[pas une chaîne de caractères]"
#: includes/functions.php:254 #: includes/functions.php:259
msgid "Folder not found" msgid "Folder not found"
msgstr "Dossier introuvable" 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 #: conf/LSaddons/config.LSaddons.supann.php:97
msgid "Mrs." msgid "Mrs."
msgstr "Mme." msgstr "Mme."
@ -3482,7 +3516,8 @@ msgstr "Détails"
msgid "Email" msgid "Email"
msgstr "E-mail" 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" msgid "Errors"
msgstr "Erreurs" msgstr "Erreurs"
@ -3504,11 +3539,15 @@ msgstr "Format"
msgid "Global search" msgid "Global search"
msgstr "Recherche globale" 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 #: templates/default/recoverpassword.tpl:19 templates/default/login.tpl:18
msgid "Identifier" msgid "Identifier"
msgstr "Identifiant" msgstr "Identifiant"
#: templates/default/import.tpl:85 #: templates/default/import.tpl:92
msgid "Imported objects" msgid "Imported objects"
msgstr "Objets importés" msgstr "Objets importés"
@ -3536,6 +3575,11 @@ msgstr "Déconnexion"
msgid "Message" msgid "Message"
msgstr "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 #: templates/default/viewSearch.tpl:113
msgid "Nb / page :" msgid "Nb / page :"
msgstr "Nb / page :" msgstr "Nb / page :"
@ -3548,14 +3592,18 @@ msgstr "Aucun log d'accès trouvé pour cet objet."
msgid "No field." msgid "No field."
msgstr "Aucun champ." msgstr "Aucun champ."
#: templates/default/import.tpl:90 #: templates/default/import.tpl:115
msgid "No imported object" msgid "No imported object"
msgstr "Aucun objet importé" msgstr "Aucun objet importé"
#: templates/default/import.tpl:58 #: templates/default/import.tpl:65
msgid "No value" msgid "No value"
msgstr "Aucune valeur" msgstr "Aucune valeur"
#: templates/default/import.tpl:45
msgid "Object %(idx)"
msgstr "Objet %(idx)"
#: templates/default/showTechInfo.tpl:11 #: templates/default/showTechInfo.tpl:11
msgid "Object classes" msgid "Object classes"
msgstr "Classes d'objet" msgstr "Classes d'objet"
@ -3585,9 +3633,7 @@ msgstr "Mot de passe"
msgid "Please confirm new password:" msgid "Please confirm new password:"
msgstr "Merci de confirmer le nouveau mot de passe :" msgstr "Merci de confirmer le nouveau mot de passe :"
#: templates/default/LSaccessRightsMatrixView.tpl:22
#: templates/default/LSaccessRightsMatrixView.tpl:27 #: templates/default/LSaccessRightsMatrixView.tpl:27
#: templates/default/LSaccessRightsMatrixView.tpl:67
#: templates/default/LSaccessRightsMatrixView.tpl:72 #: templates/default/LSaccessRightsMatrixView.tpl:72
#: templates/default/LSaccessRightsMatrixView.tpl:93 #: templates/default/LSaccessRightsMatrixView.tpl:93
#: templates/default/LSaccessRightsMatrixView.tpl:95 #: templates/default/LSaccessRightsMatrixView.tpl:95
@ -3596,9 +3642,7 @@ msgstr "Merci de confirmer le nouveau mot de passe :"
msgid "R" msgid "R"
msgstr "L" msgstr "L"
#: templates/default/LSaccessRightsMatrixView.tpl:24
#: templates/default/LSaccessRightsMatrixView.tpl:28 #: templates/default/LSaccessRightsMatrixView.tpl:28
#: templates/default/LSaccessRightsMatrixView.tpl:69
#: templates/default/LSaccessRightsMatrixView.tpl:73 #: templates/default/LSaccessRightsMatrixView.tpl:73
#: templates/default/LSaccessRightsMatrixView.tpl:89 #: templates/default/LSaccessRightsMatrixView.tpl:89
#: templates/default/LSaccessRightsMatrixView.tpl:91 #: 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" msgid "Update objects if exists"
msgstr "Mise à jour des objets existants" msgstr "Mise à jour des objets existants"
#: templates/default/import.tpl:95 #: templates/default/import.tpl:120
msgid "Updated objects" msgid "Updated objects"
msgstr "Objets mis à jour" 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 #: templates/default/import.tpl:27 templates/default/import.tpl:33
msgid "no" msgid "no"
msgstr "non" 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.LSrelation.php:679 includes/class/class.LSform.php:346
#: includes/class/class.LSformElement_select_object.php:75 #: includes/class/class.LSformElement_select_object.php:75
#: includes/class/class.LSformElement_select_object.php:91 #: includes/class/class.LSformElement_select_object.php:91
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1064 #: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1068
#: includes/routes.php:1208 #: includes/routes.php:1212
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
@ -323,8 +323,8 @@ msgstr ""
#: includes/class/class.LSrelation.php:736 #: includes/class/class.LSrelation.php:736
#: includes/class/class.LSformElement_select_object.php:74 #: includes/class/class.LSformElement_select_object.php:74
#: includes/class/class.LSformElement_supannLabeledValue.php:90 #: includes/class/class.LSformElement_supannLabeledValue.php:90
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1048 #: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1052
#: includes/routes.php:1216 includes/routes.php:1301 includes/routes.php:1447 #: includes/routes.php:1220 includes/routes.php:1305 includes/routes.php:1451
msgid "Modify" msgid "Modify"
msgstr "" msgstr ""
@ -332,7 +332,7 @@ msgstr ""
msgid "Modify RDN" msgid "Modify RDN"
msgstr "" 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 #: templates/default/select.tpl:28 templates/default/global_search.tpl:6
msgid "Search" msgid "Search"
msgstr "" msgstr ""
@ -360,7 +360,7 @@ msgstr ""
#: includes/addons/LSaddons.accesslog.php:244 #: includes/addons/LSaddons.accesslog.php:244
#: includes/class/class.LSsession.php:1870 includes/routes.php:157 #: 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" msgid "Refresh"
msgstr "" msgstr ""
@ -638,80 +638,80 @@ msgstr ""
msgid "LSformRule_%{type}: Parameter %{param} is not found." msgid "LSformRule_%{type}: Parameter %{param} is not found."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:261 #: includes/class/class.LSio.php:334
msgid "Failed to set post data on creation form." msgid "Failed to set post data on creation form."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:267 #: includes/class/class.LSio.php:340
msgid "Error validating creation form." msgid "Error validating creation form."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:272 #: includes/class/class.LSio.php:345
msgid "Failed to validate object data." msgid "Failed to validate object data."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:279 #: includes/class/class.LSio.php:352
msgid "Failed to generate DN for this object." msgid "Failed to generate DN for this object."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:293 #: includes/class/class.LSio.php:371
msgid "Error creating object on LDAP server." msgid "Error creating object on LDAP server."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:299 #: includes/class/class.LSio.php:377
msgid "An object already exist on LDAP server with DN %{dn}." msgid "An object already exist on LDAP server with DN %{dn}."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:311 #: includes/class/class.LSio.php:389
msgid "" msgid ""
"Failed to load existing object %{dn} from LDAP server. Can't update object." "Failed to load existing object %{dn} from LDAP server. Can't update object."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:320 #: includes/class/class.LSio.php:398
msgid "Failed to set post data on update form." msgid "Failed to set post data on update form."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:326 #: includes/class/class.LSio.php:404
msgid "Error validating update form." msgid "Error validating update form."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:336 #: includes/class/class.LSio.php:419
msgid "Error updating object on LDAP server." msgid "Error updating object on LDAP server."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:724 #: includes/class/class.LSio.php:825
msgid "LSio: Post data not found or not completed." msgid "LSio: Post data not found or not completed."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:727 #: includes/class/class.LSio.php:828
msgid "LSio: object type invalid." msgid "LSio: object type invalid."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:730 #: includes/class/class.LSio.php:831
msgid "LSio: input/output format %{format} invalid." msgid "LSio: input/output format %{format} invalid."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:733 #: includes/class/class.LSio.php:834
msgid "LSio: Fail to initialize input/output driver." msgid "LSio: Fail to initialize input/output driver."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:736 #: includes/class/class.LSio.php:837
msgid "LSio: Fail to load objects's data from input file." msgid "LSio: Fail to load objects's data from input file."
msgstr "" 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." msgid "LSio: Fail to load objects's data to export from LDAP directory."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:742 #: includes/class/class.LSio.php:843
msgid "LSio: Fail to export objects's data." msgid "LSio: Fail to export objects's data."
msgstr "" 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." msgid "LSio: An error occured running before import hooks. Stop the import."
msgstr "" msgstr ""
#: includes/class/class.LSio.php:748 #: includes/class/class.LSio.php:849
msgid "LSio: An error occured running after import hooks." msgid "LSio: An error occured running after import hooks."
msgstr "" msgstr ""
@ -740,7 +740,7 @@ msgstr ""
#: includes/class/class.LSconfirmBox.php:37 #: includes/class/class.LSconfirmBox.php:37
#: includes/class/class.LSsmoothbox.php:39 includes/class/class.LSform.php:175 #: 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 #: templates/default/recoverpassword.tpl:21
msgid "Validate" msgid "Validate"
msgstr "" msgstr ""
@ -900,7 +900,7 @@ msgid "Unparsable value for component %{c}."
msgstr "" msgstr ""
#: includes/class/class.LSformElement_supannCompositeAttribute.php:479 #: includes/class/class.LSformElement_supannCompositeAttribute.php:479
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:408 #: includes/class/class.LSformElement_jsonCompositeAttribute.php:413
msgid "%{label}: %{error}" msgid "%{label}: %{error}"
msgstr "" msgstr ""
@ -987,59 +987,59 @@ msgstr ""
msgid "Or leave empty to pass.\n" msgid "Or leave empty to pass.\n"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:758 #: includes/class/class.LSlang.php:906
#, php-format #, php-format
msgid "" msgid ""
"Invalid -W/--without parameter. Must be one of the following values: %s.'" "Invalid -W/--without parameter. Must be one of the following values: %s.'"
msgstr "" 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 "" msgid ""
"You could not use -W/--without parameter combined with -O/--only parameter." "You could not use -W/--without parameter combined with -O/--only parameter."
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:768 #: includes/class/class.LSlang.php:916
msgid "You could specify only one -O/--only parameter." msgid "You could specify only one -O/--only parameter."
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:771 #: includes/class/class.LSlang.php:919
#, php-format #, 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 "" msgstr ""
#: includes/class/class.LSlang.php:805 #: includes/class/class.LSlang.php:953
msgid "" msgid ""
"Invalid -l/--lang parameter. Must be compose in format : [lang].[encoding]" "Invalid -l/--lang parameter. Must be compose in format : [lang].[encoding]"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:820 #: includes/class/class.LSlang.php:968
#, php-format #, php-format
msgid "" msgid ""
"Invalid -f/--format parameter. Must be one of the following values: %s.'" "Invalid -f/--format parameter. Must be one of the following values: %s.'"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:844 #: includes/class/class.LSlang.php:992
#, php-format #, php-format
msgid "%s: Invalid parameter or lang file to load." msgid "%s: Invalid parameter or lang file to load."
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1136 #: includes/class/class.LSlang.php:1293
msgid "Generate lang.php file" msgid "Generate lang.php file"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1140 #: includes/class/class.LSlang.php:1297
msgid "" msgid ""
" -W/--without Disable specified messages. Must be one of\n" " -W/--without Disable specified messages. Must be one of\n"
" the following values:" " the following values:"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1144 #: includes/class/class.LSlang.php:1301
msgid "" msgid ""
" -O/--only Only handle specified messages. Must be one\n" " -O/--only Only handle specified messages. Must be one\n"
" of the following values :" " of the following values :"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1148 #: includes/class/class.LSlang.php:1305
msgid "" msgid ""
" -I/--include-upstream Include upstream code to message lookup\n" " -I/--include-upstream Include upstream code to message lookup\n"
" -c/--copy-original-value Copy original value as translated value when\n" " -c/--copy-original-value Copy original value as translated value when\n"
@ -1057,26 +1057,37 @@ msgid ""
" in existing lang files." " in existing lang files."
msgstr "" 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:" msgid "Generate POT files:"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1255 #: includes/class/class.LSlang.php:1444
msgid "This command generate 3 POT files:" msgid "This command generate 3 POT files:"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1257 #: includes/class/class.LSlang.php:1446
msgid " => contains messages from PHP files" msgid " => contains messages from PHP files"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1259 #: includes/class/class.LSlang.php:1448
msgid " => contains messages from templates files" msgid " => contains messages from templates files"
msgstr "" msgstr ""
#: includes/class/class.LSlang.php:1261 #: includes/class/class.LSlang.php:1450
msgid " => contains all messages" msgid " => contains all messages"
msgstr "" 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 #: includes/class/class.LStemplate.php:160
msgid "LStemplate : compile directory is not writable (dir : %{dir})" msgid "LStemplate : compile directory is not writable (dir : %{dir})"
msgstr "" msgstr ""
@ -1132,17 +1143,17 @@ msgstr ""
msgid "A fatal error occured." msgid "A fatal error occured."
msgstr "" msgstr ""
#: includes/class/class.LStemplate.php:731 #: includes/class/class.LStemplate.php:733
msgid "LStemplate : Template %{file} not found." msgid "LStemplate : Template %{file} not found."
msgstr "" msgstr ""
#: includes/class/class.LStemplate.php:734 #: includes/class/class.LStemplate.php:736
msgid "" msgid ""
"LStemplate : Fail to execute trigger %{callable} on event %{event} : is not " "LStemplate : Fail to execute trigger %{callable} on event %{event} : is not "
"callable." "callable."
msgstr "" msgstr ""
#: includes/class/class.LStemplate.php:737 #: includes/class/class.LStemplate.php:739
msgid "" msgid ""
"LStemplate : Error during the execution of the trigger %{callable} on event " "LStemplate : Error during the execution of the trigger %{callable} on event "
"%{event}." "%{event}."
@ -1859,8 +1870,8 @@ msgstr ""
msgid "No object." msgid "No object."
msgstr "" msgstr ""
#: includes/class/class.LSrelation.php:747 includes/routes.php:452 #: includes/class/class.LSrelation.php:747 includes/routes.php:456
#: includes/routes.php:993 #: includes/routes.php:997
msgid "New" msgid "New"
msgstr "" msgstr ""
@ -2057,11 +2068,11 @@ msgid ""
"support." "support."
msgstr "" 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 ?" msgid "Do you really want to execute custom action %{title} on this search ?"
msgstr "" msgstr ""
#: includes/class/class.LSform.php:333 includes/routes.php:1428 #: includes/class/class.LSform.php:333 includes/routes.php:1432
msgid "" msgid ""
"Do you really want to execute custom action %{customAction} on " "Do you really want to execute custom action %{customAction} on "
"%{objectname} ?" "%{objectname} ?"
@ -2251,8 +2262,8 @@ msgstr ""
msgid "Display RSS stack." msgid "Display RSS stack."
msgstr "" msgstr ""
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:583 #: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:587
#: includes/routes.php:1375 #: includes/routes.php:1379
msgid "undefined" msgid "undefined"
msgstr "" msgstr ""
@ -2345,88 +2356,88 @@ msgstr ""
msgid "Pedagogical element" msgid "Pedagogical element"
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1253 #: includes/class/class.LSsearch.php:1318
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1256 #: includes/class/class.LSsearch.php:1321
#: templates/default/global_search.tpl:16 #: templates/default/global_search.tpl:16
msgid "This search didn't get any result." msgid "This search didn't get any result."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1898 #: includes/class/class.LSsearch.php:1963
msgid "LSsearch : Invalid filter : %{filter}." msgid "LSsearch : Invalid filter : %{filter}."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1901 #: includes/class/class.LSsearch.php:1966
msgid "LSsearch : Invalid basedn : %{basedn}." msgid "LSsearch : Invalid basedn : %{basedn}."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1904 #: includes/class/class.LSsearch.php:1969
msgid "LSsearch : Invalid value for %{param} parameter." msgid "LSsearch : Invalid value for %{param} parameter."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1907 #: includes/class/class.LSsearch.php:1972
msgid "" msgid ""
"LSsearch : Invalid size limit. Must be an integer greater or equal to 0." "LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1910 #: includes/class/class.LSsearch.php:1975
msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean." msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1913 #: includes/class/class.LSsearch.php:1978
msgid "" msgid ""
"LSsearch : Invalid parameter attributes. Must be an string or an array of " "LSsearch : Invalid parameter attributes. Must be an string or an array of "
"strings." "strings."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1916 #: includes/class/class.LSsearch.php:1981
msgid "LSsearch : Can't build attributes list for make filter." msgid "LSsearch : Can't build attributes list for make filter."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1919 #: includes/class/class.LSsearch.php:1984
msgid "" msgid ""
"LSsearch : Error building filter with attribute '%{attr}' and pattern " "LSsearch : Error building filter with attribute '%{attr}' and pattern "
"'%{pattern}'" "'%{pattern}'"
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1922 #: includes/class/class.LSsearch.php:1987
msgid "LSsearch : Error combining filters." msgid "LSsearch : Error combining filters."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1925 #: includes/class/class.LSsearch.php:1990
msgid "LSsearch : Invalid pattern." msgid "LSsearch : Invalid pattern."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1928 #: includes/class/class.LSsearch.php:1993
msgid "LSsearch : Invalid attribute %{attr} in parameters." msgid "LSsearch : Invalid attribute %{attr} in parameters."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1931 #: includes/class/class.LSsearch.php:1996
msgid "LSsearch : Error during the search." msgid "LSsearch : Error during the search."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1934 #: includes/class/class.LSsearch.php:1999
msgid "LSsearch : Error sorting the search." msgid "LSsearch : Error sorting the search."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1937 #: includes/class/class.LSsearch.php:2002
msgid "" msgid ""
"LSsearch : The function of the custum information %{name} is not callable." "LSsearch : The function of the custum information %{name} is not callable."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1940 #: includes/class/class.LSsearch.php:2005
msgid "" msgid ""
"LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} " "LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
"(filter : %{filter})." "(filter : %{filter})."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1943 #: includes/class/class.LSsearch.php:2008
msgid "LSsearch : Error during execution of the custom action %{customAction}." msgid "LSsearch : Error during execution of the custom action %{customAction}."
msgstr "" msgstr ""
#: includes/class/class.LSsearch.php:1946 #: includes/class/class.LSsearch.php:2011
msgid "LSsearch : Invalid search pattern." msgid "LSsearch : Invalid search pattern."
msgstr "" msgstr ""
@ -2542,7 +2553,7 @@ msgstr ""
msgid "JSON value #%{idx} is invalid (or empty)." msgid "JSON value #%{idx} is invalid (or empty)."
msgstr "" msgstr ""
#: includes/class/class.LSformElement_jsonCompositeAttribute.php:433 #: includes/class/class.LSformElement_jsonCompositeAttribute.php:438
msgid "Invalid value \"%{value}\" for component %{component}." msgid "Invalid value \"%{value}\" for component %{component}."
msgstr "" msgstr ""
@ -2676,20 +2687,20 @@ msgstr ""
msgid "LSlog : Fail to load logging handler %{handler}." msgid "LSlog : Fail to load logging handler %{handler}."
msgstr "" msgstr ""
#: includes/class/class.LSerror.php:138 #: includes/class/class.LSerror.php:141
msgid "Unknown error" msgid "Unknown error"
msgstr "" msgstr ""
#: includes/class/class.LSerror.php:198 #: includes/class/class.LSerror.php:201
msgid "Unknown error : %{error}" msgid "Unknown error : %{error}"
msgstr "" msgstr ""
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1200 #: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1204
#: includes/routes.php:1293 includes/routes.php:1439 #: includes/routes.php:1297 includes/routes.php:1443
msgid "View" msgid "View"
msgstr "" msgstr ""
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1056 #: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1060
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
@ -2715,82 +2726,102 @@ msgstr ""
msgid "You must provide pattern for global search." msgid "You must provide pattern for global search."
msgstr "" msgstr ""
#: includes/routes.php:458 includes/routes.php:814 #: includes/routes.php:462 includes/routes.php:818
msgid "Import" msgid "Import"
msgstr "" msgstr ""
#: includes/routes.php:463 includes/routes.php:880 #: includes/routes.php:467 includes/routes.php:884
msgid "Export" msgid "Export"
msgstr "" msgstr ""
#: includes/routes.php:475 #: includes/routes.php:479
msgid "Reset" msgid "Reset"
msgstr "" msgstr ""
#: includes/routes.php:514 templates/default/select.tpl:31 #: includes/routes.php:518 templates/default/select.tpl:31
msgid "Approximative search" msgid "Approximative search"
msgstr "" msgstr ""
#: includes/routes.php:515 templates/default/select.tpl:32 #: includes/routes.php:519 templates/default/select.tpl:32
msgid "Recursive search" msgid "Recursive search"
msgstr "" msgstr ""
#: includes/routes.php:604 #: includes/routes.php:608
msgid "" msgid ""
"The custom action %{title} have been successfully execute on this search." "The custom action %{title} have been successfully execute on this search."
msgstr "" msgstr ""
#: includes/routes.php:952 #: includes/routes.php:956
msgid "Data entry form" msgid "Data entry form"
msgstr "" msgstr ""
#: includes/routes.php:958 includes/routes.php:1732 #: includes/routes.php:962 includes/routes.php:1736
msgid "Object has been added." msgid "Object has been added."
msgstr "" msgstr ""
#: includes/routes.php:1095 #: includes/routes.php:1099
msgid "My account" msgid "My account"
msgstr "" msgstr ""
#: includes/routes.php:1158 includes/routes.php:1904 #: includes/routes.php:1162 includes/routes.php:1908
msgid "The object has been partially modified." msgid "The object has been partially modified."
msgstr "" msgstr ""
#: includes/routes.php:1161 includes/routes.php:1907 #: includes/routes.php:1165 includes/routes.php:1911
msgid "The object has been modified successfully." msgid "The object has been modified successfully."
msgstr "" msgstr ""
#: includes/routes.php:1276 includes/routes.php:1947 #: includes/routes.php:1280 includes/routes.php:1951
msgid "%{objectname} has been successfully deleted." msgid "%{objectname} has been successfully deleted."
msgstr "" msgstr ""
#: includes/routes.php:1285 #: includes/routes.php:1289
msgid "Deleting : %{objectname}" msgid "Deleting : %{objectname}"
msgstr "" msgstr ""
#: includes/routes.php:1286 #: includes/routes.php:1290
msgid "Do you really want to delete <strong>%{displayName}</strong> ?" msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
msgstr "" msgstr ""
#: includes/routes.php:1396 #: includes/routes.php:1400
msgid "" msgid ""
"The custom action %{customAction} have been successfully execute on " "The custom action %{customAction} have been successfully execute on "
"%{objectname}." "%{objectname}."
msgstr "" msgstr ""
#: includes/functions.php:115 #: includes/functions.php:123
msgid "" msgid ""
"Function 'getFData' : The method %{meth} of the object %{obj} doesn't exist." "Function 'getFData' : The method %{meth} of the object %{obj} doesn't exist."
msgstr "" msgstr ""
#: includes/functions.php:208 #: includes/functions.php:211
msgid "[not string value]" msgid "[not string value]"
msgstr "" msgstr ""
#: includes/functions.php:254 #: includes/functions.php:259
msgid "Folder not found" msgid "Folder not found"
msgstr "" 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 #: conf/LSaddons/config.LSaddons.supann.php:97
msgid "Mrs." msgid "Mrs."
msgstr "" msgstr ""
@ -2990,7 +3021,8 @@ msgstr ""
msgid "Email" msgid "Email"
msgstr "" 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" msgid "Errors"
msgstr "" msgstr ""
@ -3012,11 +3044,15 @@ msgstr ""
msgid "Global search" msgid "Global search"
msgstr "" msgstr ""
#: templates/default/import.tpl:148
msgid "Hook: %(name)"
msgstr ""
#: templates/default/recoverpassword.tpl:19 templates/default/login.tpl:18 #: templates/default/recoverpassword.tpl:19 templates/default/login.tpl:18
msgid "Identifier" msgid "Identifier"
msgstr "" msgstr ""
#: templates/default/import.tpl:85 #: templates/default/import.tpl:92
msgid "Imported objects" msgid "Imported objects"
msgstr "" msgstr ""
@ -3044,6 +3080,11 @@ msgstr ""
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: templates/default/import.tpl:106 templates/default/import.tpl:134
#: templates/default/import.tpl:159
msgid "Messages"
msgstr ""
#: templates/default/viewSearch.tpl:113 #: templates/default/viewSearch.tpl:113
msgid "Nb / page :" msgid "Nb / page :"
msgstr "" msgstr ""
@ -3056,14 +3097,18 @@ msgstr ""
msgid "No field." msgid "No field."
msgstr "" msgstr ""
#: templates/default/import.tpl:90 #: templates/default/import.tpl:115
msgid "No imported object" msgid "No imported object"
msgstr "" msgstr ""
#: templates/default/import.tpl:58 #: templates/default/import.tpl:65
msgid "No value" msgid "No value"
msgstr "" msgstr ""
#: templates/default/import.tpl:45
msgid "Object %(idx)"
msgstr ""
#: templates/default/showTechInfo.tpl:11 #: templates/default/showTechInfo.tpl:11
msgid "Object classes" msgid "Object classes"
msgstr "" msgstr ""
@ -3093,9 +3138,7 @@ msgstr ""
msgid "Please confirm new password:" msgid "Please confirm new password:"
msgstr "" msgstr ""
#: templates/default/LSaccessRightsMatrixView.tpl:22
#: templates/default/LSaccessRightsMatrixView.tpl:27 #: templates/default/LSaccessRightsMatrixView.tpl:27
#: templates/default/LSaccessRightsMatrixView.tpl:67
#: templates/default/LSaccessRightsMatrixView.tpl:72 #: templates/default/LSaccessRightsMatrixView.tpl:72
#: templates/default/LSaccessRightsMatrixView.tpl:93 #: templates/default/LSaccessRightsMatrixView.tpl:93
#: templates/default/LSaccessRightsMatrixView.tpl:95 #: templates/default/LSaccessRightsMatrixView.tpl:95
@ -3104,9 +3147,7 @@ msgstr ""
msgid "R" msgid "R"
msgstr "" msgstr ""
#: templates/default/LSaccessRightsMatrixView.tpl:24
#: templates/default/LSaccessRightsMatrixView.tpl:28 #: templates/default/LSaccessRightsMatrixView.tpl:28
#: templates/default/LSaccessRightsMatrixView.tpl:69
#: templates/default/LSaccessRightsMatrixView.tpl:73 #: templates/default/LSaccessRightsMatrixView.tpl:73
#: templates/default/LSaccessRightsMatrixView.tpl:89 #: templates/default/LSaccessRightsMatrixView.tpl:89
#: templates/default/LSaccessRightsMatrixView.tpl:91 #: templates/default/LSaccessRightsMatrixView.tpl:91
@ -3173,7 +3214,7 @@ msgstr ""
msgid "Update objects if exists" msgid "Update objects if exists"
msgstr "" msgstr ""
#: templates/default/import.tpl:95 #: templates/default/import.tpl:120
msgid "Updated objects" msgid "Updated objects"
msgstr "" msgstr ""

View file

@ -42,7 +42,7 @@
{if !empty($result.errors)} {if !empty($result.errors)}
<h2>{tr msg='Errors'}</h2> <h2>{tr msg='Errors'}</h2>
{foreach $result.errors as $error} {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'> <div class='LSio_error'>
{if !empty($error.errors.globals)} {if !empty($error.errors.globals)}
<ul class='LSio_global_errors'> <ul class='LSio_global_errors'>
@ -51,6 +51,13 @@
{/foreach} {/foreach}
</ul> </ul>
{/if} {/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'> <ul class='LSio_data_errors'>
{foreach $error.data as $key => $val} {foreach $error.data as $key => $val}
<li> <li>
@ -84,8 +91,26 @@
<h2 class='LSio_imported_objects'>{tr msg='Imported objects'} ({count($result.imported)})</h2> <h2 class='LSio_imported_objects'>{tr msg='Imported objects'} ({count($result.imported)})</h2>
<ul class='LSio_imported_objects'> <ul class='LSio_imported_objects'>
{foreach $result.imported as $dn => $name} {foreach $result.imported as $dn => $obj}
<li><a href='object/{$LSobject|escape:"url"}/{$dn|escape:"url"}'>{$name|escape:"htmlall"}</a></li> <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} {foreachelse}
<li>{tr msg='No imported object'}</li> <li>{tr msg='No imported object'}</li>
{/foreach} {/foreach}
@ -94,11 +119,53 @@
{if !empty($result.updated)} {if !empty($result.updated)}
<h2 class='LSio_updated_objects'>{tr msg='Updated objects'} ({count($result.updated)})</h2> <h2 class='LSio_updated_objects'>{tr msg='Updated objects'} ({count($result.updated)})</h2>
<ul class='LSio_updated_objects'> <ul class='LSio_updated_objects'>
{foreach $result.updated as $dn => $name} {foreach $result.updated as $dn => $obj}
<li><a href='object/{$LSobject|escape:"url"}/{$dn|escape:"url"}'>{$name|escape:"htmlall"}</a></li> <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} {/foreach}
</ul> </ul>
{/if} {/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} {/if}
{/block} {/block}