diff --git a/dev/tools/codespell/codespell-ignore.txt b/dev/tools/codespell/codespell-ignore.txt
index f8205fc6495..9c957630967 100644
--- a/dev/tools/codespell/codespell-ignore.txt
+++ b/dev/tools/codespell/codespell-ignore.txt
@@ -86,6 +86,10 @@ espace
methode
datee
+# Some string found because part of a text the is html entities escaped into file
+tre
+activ
+
# Translation keys
addin
amountin
diff --git a/dev/tools/codespell/codespell-lines-ignore.txt b/dev/tools/codespell/codespell-lines-ignore.txt
index b7cfa4033c0..687afec36f4 100644
--- a/dev/tools/codespell/codespell-lines-ignore.txt
+++ b/dev/tools/codespell/codespell-lines-ignore.txt
@@ -174,3 +174,4 @@ print '
', '', ' ', '', '< ', '>'),
$str
);
diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php
index f016a3e610d..6a0e5de24da 100644
--- a/htdocs/core/lib/security.lib.php
+++ b/htdocs/core/lib/security.lib.php
@@ -234,21 +234,38 @@ function dolDecrypt($chain, $key = '')
* If constant MAIN_SECURITY_SALT is defined, we use it as a salt (used only if hashing algorithm is something else than 'password_hash').
*
* @param string $chain String to hash
- * @param string $type Type of hash ('0':auto will use MAIN_SECURITY_HASH_ALGO else md5, '1':sha1, '2':sha1+md5, '3':md5, '4': for OpenLdap, '5':sha256, '6':password_hash).
+ * @param string $type Type of hash:
+ * 'auto' or '0': will use MAIN_SECURITY_HASH_ALGO else md5
+ * 'sha1' or '1': sha1
+ * 'sha1md5' or '2': sha1md5
+ * 'md5' or '3': md5
+ * 'openldapxxx' or '4': for OpenLdap
+ * 'sha256' or '5': sha256
+ * 'password_hash' or '6': password_hash
* Use 'md5' if hash is not needed for security purpose. For security need, prefer 'auto'.
* @param int $nosalt Do not include any salt
- * @return string Hash of string
+ * @param int $mode 0=Return encoded password, 1=Return array with encoding password + encoding algorithm
+ * @return string|array Hash of string or array with pass_encrypted and pass_encoding
* @see getRandomPassword(), dol_verifyHash()
*/
-function dol_hash($chain, $type = '0', $nosalt = 0)
+function dol_hash($chain, $type = '0', $nosalt = 0, $mode = 0)
{
// No need to add salt for password_hash
- if (($type == '0' || $type == 'auto') && getDolGlobalString('MAIN_SECURITY_HASH_ALGO') && getDolGlobalString('MAIN_SECURITY_HASH_ALGO') == 'password_hash' && function_exists('password_hash')) {
+ if (($type == '0' || $type == 'auto') && getDolGlobalString('MAIN_SECURITY_HASH_ALGO') == 'password_hash' && function_exists('password_hash')) {
if (strpos($chain, "\0") !== false) {
// String contains a null character that can't be encoded. Return an error instead of fatal error.
- return 'Invalid string to encrypt. Contains a null character.';
+ if ($mode == 1) {
+ return array('pass_encrypted' => 'Invalid string to encrypt. Contains a null character', 'pass_encoding' => '');
+ } else {
+ return 'Invalid string to encrypt. Contains a null character.';
+ }
+ }
+
+ if ($mode == 1) {
+ return array('pass_encrypted' => password_hash($chain, PASSWORD_DEFAULT), 'pass_encoding' => 'password_hash');
+ } else {
+ return password_hash($chain, PASSWORD_DEFAULT);
}
- return password_hash($chain, PASSWORD_DEFAULT);
}
// Salt value
@@ -257,25 +274,61 @@ function dol_hash($chain, $type = '0', $nosalt = 0)
}
if ($type == '1' || $type == 'sha1') {
- return sha1($chain);
+ if ($mode == 1) {
+ return array('pass_encrypted' => sha1($chain), 'pass_encoding' => 'sha1');
+ } else {
+ return sha1($chain);
+ }
} elseif ($type == '2' || $type == 'sha1md5') {
- return sha1(md5($chain));
+ if ($mode == 1) {
+ return array('pass_encrypted' => sha1(md5($chain)), 'pass_encoding' => 'sha1md5');
+ } else {
+ return sha1(md5($chain));
+ }
} elseif ($type == '3' || $type == 'md5') { // For hashing with no need of security
- return md5($chain);
+ if ($mode == 1) {
+ return array('pass_encrypted' => md5($chain), 'pass_encoding' => 'md5');
+ } else {
+ return md5($chain);
+ }
} elseif ($type == '4' || $type == 'openldap') {
- return dolGetLdapPasswordHash($chain, getDolGlobalString('LDAP_PASSWORD_HASH_TYPE', 'md5'));
+ if ($mode == 1) {
+ return array('pass_encrypted' => dolGetLdapPasswordHash($chain, getDolGlobalString('LDAP_PASSWORD_HASH_TYPE', 'md5')), 'pass_encoding' => 'ldappasswordhash'.getDolGlobalString('LDAP_PASSWORD_HASH_TYPE', 'md5'));
+ } else {
+ return dolGetLdapPasswordHash($chain, getDolGlobalString('LDAP_PASSWORD_HASH_TYPE', 'md5'));
+ }
} elseif ($type == '5' || $type == 'sha256') {
- return hash('sha256', $chain);
+ if ($mode == 1) {
+ return array('pass_encrypted' => hash('sha256', $chain), 'pass_encoding' => 'sha256');
+ } else {
+ return hash('sha256', $chain);
+ }
} elseif ($type == '6' || $type == 'password_hash') {
- return password_hash($chain, PASSWORD_DEFAULT);
+ if ($mode == 1) {
+ return array('pass_encrypted' => password_hash($chain, PASSWORD_DEFAULT), 'pass_encoding' => 'password_hash');
+ } else {
+ return password_hash($chain, PASSWORD_DEFAULT);
+ }
} elseif (getDolGlobalString('MAIN_SECURITY_HASH_ALGO') == 'sha1') {
- return sha1($chain);
+ if ($mode == 1) {
+ return array('pass_encrypted' => sha1($chain), 'pass_encoding' => 'sha1');
+ } else {
+ return sha1($chain);
+ }
} elseif (getDolGlobalString('MAIN_SECURITY_HASH_ALGO') == 'sha1md5') {
- return sha1(md5($chain));
+ if ($mode == 1) {
+ return array('pass_encrypted' => sha1(md5($chain)), 'pass_encoding' => 'sha1md5');
+ } else {
+ return sha1(md5($chain));
+ }
}
// No particular encoding defined, use default
- return md5($chain);
+ if ($mode == 1) {
+ return array('pass_encrypted' => md5($chain), 'pass_encoding' => 'md5');
+ } else {
+ return md5($chain);
+ }
}
/**
@@ -292,7 +345,8 @@ function dol_hash($chain, $type = '0', $nosalt = 0)
*/
function dol_verifyHash($chain, $hash, $type = '0')
{
- if ($type == '0' && getDolGlobalString('MAIN_SECURITY_HASH_ALGO') && getDolGlobalString('MAIN_SECURITY_HASH_ALGO') == 'password_hash' && function_exists('password_verify')) {
+ if ($type == '0' && getDolGlobalString('MAIN_SECURITY_HASH_ALGO') == 'password_hash' && function_exists('password_verify')) {
+ // Try to autodetect which algo we used
if (! empty($hash[0]) && $hash[0] == '$') {
return password_verify($chain, $hash);
} elseif (dol_strlen($hash) == 32) {
diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php
index adb2cec459a..c2260b72b9e 100644
--- a/htdocs/core/lib/website2.lib.php
+++ b/htdocs/core/lib/website2.lib.php
@@ -164,6 +164,7 @@ function dolSavePageContent($filetpl, Website $object, WebsitePage $objectpage,
$shortlangcode = substr($objectpage->lang, 0, 2); // en_US or en-US -> en
}
if (empty($shortlangcode)) {
+ // Take the language of website
$shortlangcode = substr($object->lang, 0, 2); // en_US or en-US -> en
}
@@ -186,7 +187,8 @@ function dolSavePageContent($filetpl, Website $object, WebsitePage $objectpage,
if (getDolGlobalString('WEBSITE_FORCE_DOCTYPE_HTML5')) {
$tplcontent .= "\n";
}
- $tplcontent .= ''."\n";
+ // If a language was forced on page, we use it, else we use the lang of visitor else the lang of web site
+ $tplcontent .= 'lang ? ' lang="'.substr($objectpage->lang, 0, 2).'"' : 'shortlang ? \' lang="\'.$weblangs->shortlang.\'"\' : \'\' ?>').'>'."\n";
$tplcontent .= ''."\n";
$tplcontent .= ''.dol_string_nohtmltag($objectpage->title, 0, 'UTF-8').''."\n";
$tplcontent .= ''."\n";
@@ -200,7 +202,7 @@ function dolSavePageContent($filetpl, Website $object, WebsitePage $objectpage,
$tplcontent .= ''."\n";
// Add favicon
- if ($objectpage->id == $object->fk_default_home) {
+ if (in_array($objectpage->type_container, array('page', 'blogpost'))) {
$tplcontent .= ''."\n";
}
diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php
index 93a4121f9a4..b440a0bd1bc 100644
--- a/htdocs/core/modules/DolibarrModules.class.php
+++ b/htdocs/core/modules/DolibarrModules.class.php
@@ -1876,34 +1876,39 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
$val = '';
}
- $sql = "SELECT count(*) as nb";
- $sql .= " FROM ".MAIN_DB_PREFIX."const";
- $sql .= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($name)."'";
- $sql .= " AND entity = ".((int) $entity);
+ if (!empty($name)) {
+ $sql = "SELECT count(*) as nb";
+ $sql .= " FROM ".MAIN_DB_PREFIX."const";
+ $sql .= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($name)."'";
+ $sql .= " AND entity = ".((int) $entity);
- $result = $this->db->query($sql);
- if ($result) {
- $row = $this->db->fetch_row($result);
+ $result = $this->db->query($sql);
+ if ($result) {
+ $row = $this->db->fetch_row($result);
- if ($row[0] == 0) { // If not found
- $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible,entity)";
- $sql .= " VALUES (";
- $sql .= $this->db->encrypt($name);
- $sql .= ",'".$this->db->escape($type)."'";
- $sql .= ",".(($val != '') ? $this->db->encrypt($val) : "''");
- $sql .= ",".($note ? "'".$this->db->escape($note)."'" : "null");
- $sql .= ",'".$this->db->escape($visible)."'";
- $sql .= ",".$entity;
- $sql .= ")";
+ if ($row[0] == 0) { // If not found
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name, type, value, note, visible, entity)";
+ $sql .= " VALUES (";
+ $sql .= $this->db->encrypt($name);
+ $sql .= ", '".$this->db->escape($type)."'";
+ $sql .= ", ".(($val != '') ? $this->db->encrypt($val) : "''");
+ $sql .= ", ".($note ? "'".$this->db->escape($note)."'" : "null");
+ $sql .= ", '".$this->db->escape($visible)."'";
+ $sql .= ", ".((int) $entity);
+ $sql .= ")";
- if (!$this->db->query($sql)) {
- $err++;
+ if (!$this->db->query($sql)) {
+ $err++;
+ } else {
+ // Set also the variable in running environment
+ $conf->global->$name = $val;
+ }
+ } else {
+ dol_syslog(__METHOD__." constant '".$name."' already exists", LOG_DEBUG);
}
} else {
- dol_syslog(__METHOD__." constant '".$name."' already exists", LOG_DEBUG);
+ $err++;
}
- } else {
- $err++;
}
}
diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php
index 3bd2e0feb35..afd28c3d3c6 100644
--- a/htdocs/expensereport/class/expensereport.class.php
+++ b/htdocs/expensereport/class/expensereport.class.php
@@ -296,7 +296,7 @@ class ExpenseReport extends CommonObject
'ref' => array('type' => 'varchar(50)', 'label' => 'Ref', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'showoncombobox' => 1, 'position' => 15),
'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 20),
'ref_number_int' => array('type' => 'integer', 'label' => 'Ref number int', 'enabled' => 1, 'visible' => -1, 'position' => 25),
- 'ref_ext' => array('type' => 'integer', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => -1, 'position' => 30),
+ 'ref_ext' => array('type' => 'integer', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 30),
'total_ht' => array('type' => 'double(24,8)', 'label' => 'Total ht', 'enabled' => 1, 'visible' => -1, 'position' => 35),
'total_tva' => array('type' => 'double(24,8)', 'label' => 'Total tva', 'enabled' => 1, 'visible' => -1, 'position' => 40),
'localtax1' => array('type' => 'double(24,8)', 'label' => 'Localtax1', 'enabled' => 1, 'visible' => -1, 'position' => 45),
@@ -357,6 +357,8 @@ class ExpenseReport extends CommonObject
// List of language codes for status
$this->labelStatusShort = array(0 => 'Draft', 2 => 'Validated', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused');
$this->labelStatus = array(0 => 'Draft', 2 => 'ValidatedWaitingApproval', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused');
+
+ $this->fields['ref_ext']['visible'] = getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT');
}
/**
diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php
index b55c66da257..edb30a045ca 100644
--- a/htdocs/fichinter/class/fichinter.class.php
+++ b/htdocs/fichinter/class/fichinter.class.php
@@ -48,7 +48,7 @@ class Fichinter extends CommonObject
'fk_projet' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Fk projet', 'enabled' => 'isModEnabled("project")', 'visible' => -1, 'position' => 20),
'fk_contrat' => array('type' => 'integer', 'label' => 'Fk contrat', 'enabled' => '$conf->contrat->enabled', 'visible' => -1, 'position' => 25),
'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'showoncombobox' => 1, 'position' => 30),
- 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 35),
+ 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 35),
'ref_client' => array('type' => 'varchar(255)', 'label' => 'RefCustomer', 'enabled' => 1, 'visible' => -1, 'position' => 36),
'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 40, 'index' => 1),
'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 45),
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index 9fe9b26f578..3e529a3727a 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -376,7 +376,7 @@ class CommandeFournisseur extends CommonOrder
public $fields = array(
'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => 0, 'notnull' => 1, 'position' => 10),
'ref' => array('type' => 'varchar(255)', 'label' => 'Ref', 'enabled' => 1, 'visible' => 1, 'showoncombobox' => 1, 'position' => 25, 'searchall' => 1),
- 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 35),
+ 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 35),
'ref_supplier' => array('type' => 'varchar(255)', 'label' => 'RefOrderSupplierShort', 'enabled' => 1, 'visible' => 1, 'position' => 40, 'searchall' => 1),
'fk_projet' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Project', 'enabled' => "isModEnabled('project')", 'visible' => -1, 'position' => 45),
'date_valid' => array('type' => 'datetime', 'label' => 'DateValidation', 'enabled' => 1, 'visible' => -1, 'position' => 710),
diff --git a/htdocs/install/mysql/migration/20.0.0-21.0.0.sql b/htdocs/install/mysql/migration/20.0.0-21.0.0.sql
index 19a8b90a04c..2ea5cf7a51e 100644
--- a/htdocs/install/mysql/migration/20.0.0-21.0.0.sql
+++ b/htdocs/install/mysql/migration/20.0.0-21.0.0.sql
@@ -394,7 +394,12 @@ ALTER TABLE llx_facture_rec ADD COLUMN fk_societe_rib integer DEFAULT NULL;
ALTER TABLE llx_facture ADD COLUMN is_also_delivery_note tinyint DEFAULT 0 NOT NULL;
ALTER TABLE llx_user MODIFY COLUMN signature LONGTEXT;
+
+ALTER TABLE llx_societe_rib MODIFY COLUMN label varchar(180); -- 200 is too long to allow index after
+ALTER TABLE llx_societe_rib MODIFY COLUMN iban_prefix varchar(100);
+
-- Add entity field
ALTER TABLE llx_societe_rib DROP INDEX uk_societe_rib;
ALTER TABLE llx_societe_rib ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER rowid;
+-- select entity, label, fk_soc, default_rib, MIN(iban_prefix), MAX(iban_prefix), MIN(rowid), MAX(rowid), COUNT(rowid) from llx_societe_rib GROUP BY entity, label, fk_soc, default_rib HAVING COUNT(rowid) > 1;
ALTER TABLE llx_societe_rib ADD UNIQUE INDEX uk_societe_rib(entity, label, fk_soc);
diff --git a/htdocs/install/mysql/tables/llx_societe_rib.sql b/htdocs/install/mysql/tables/llx_societe_rib.sql
index e5ef25a45b3..71a618b4acb 100644
--- a/htdocs/install/mysql/tables/llx_societe_rib.sql
+++ b/htdocs/install/mysql/tables/llx_societe_rib.sql
@@ -26,7 +26,7 @@ create table llx_societe_rib
rowid integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 1 NOT NULL, -- multi company id
type varchar(32) DEFAULT 'ban' NOT NULL, -- 'ban' or 'paypal' or 'card' or 'stripe'
- label varchar(200),
+ label varchar(180),
fk_soc integer NOT NULL,
datec datetime,
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
@@ -40,7 +40,7 @@ create table llx_societe_rib
bic varchar(20), -- 11 according to ISO 9362 (we keep 20 for backward compatibility)
bic_intermediate varchar(11), -- 11 according to ISO 9362. Same as bic but for intermediate bank
- iban_prefix varchar(80), -- full iban. 34 according to ISO 13616 but we set 80 to allow to store it with encryption information
+ iban_prefix varchar(100), -- full iban. 34 according to ISO 13616 but we set 100 to allow to store it with encryption information
domiciliation varchar(255),
proprio varchar(60),
diff --git a/htdocs/langs/ar_EG/blockedlog.lang b/htdocs/langs/ar_EG/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/ar_EG/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/ar_IQ/blockedlog.lang b/htdocs/langs/ar_IQ/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/ar_IQ/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/ar_IQ/categories.lang b/htdocs/langs/ar_IQ/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/ar_IQ/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/ar_IQ/datapolicy.lang b/htdocs/langs/ar_IQ/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/ar_IQ/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/ar_IQ/hrm.lang b/htdocs/langs/ar_IQ/hrm.lang
new file mode 100644
index 00000000000..73b810239f7
--- /dev/null
+++ b/htdocs/langs/ar_IQ/hrm.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - hrm
+RequiredRank=Required rank for the job profile
+RequiredRankShort=Required rank
+EmployeeRank=Employee rank for this skill
+EmployeeRankShort=Employee rank
diff --git a/htdocs/langs/ar_IQ/mails.lang b/htdocs/langs/ar_IQ/mails.lang
new file mode 100644
index 00000000000..3fe9bd4edff
--- /dev/null
+++ b/htdocs/langs/ar_IQ/mails.lang
@@ -0,0 +1,18 @@
+# Dolibarr language file - Source file is en_US - mails
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/de_AT/blockedlog.lang b/htdocs/langs/de_AT/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/de_AT/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/de_AT/datapolicy.lang b/htdocs/langs/de_AT/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/de_AT/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/de_CH/datapolicy.lang b/htdocs/langs/de_CH/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/de_CH/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/de_CH/main.lang b/htdocs/langs/de_CH/main.lang
index 15e1eda5b27..8817527f2cd 100644
--- a/htdocs/langs/de_CH/main.lang
+++ b/htdocs/langs/de_CH/main.lang
@@ -63,7 +63,6 @@ RecordGenerated=Datensatz erzeugt
DolibarrInHttpAuthenticationSoPasswordUseless=Der Dolibarr Authentifizierungsmodus steht auf %s in der Konfigurationsdatei. Das heisst, dass Änderungen in diesem Feld keine Auswirkung haben werden, weil die Passwort - Datenbank ausserhalb der Dolibarr - Umgebung liegt.
PasswordForgotten=Hast du dein Passwort vergessen?
NoAccount=Ich habe kein Benutzerkonto
-HomeArea=Start
LastConnexion=Zuletzt gesehen am:
PreviousConnexion=Davor zuletzt gesehen am:
AuthenticationMode=Authentifizierungsmodus
@@ -74,7 +73,6 @@ InformationLastAccessInError=Informationen zum letzten Datenbankfehler
YouCanSetOptionDolibarrMainProdToZero=Für weitere Informationen schaust du in der Logdatei nach, oder setzest in der Konfigurationsdatei die Option $dolibarr_main_prod auf '0'.
LineID=Zeilennummer
WarningYouHaveAtLeastOneTaskLate=Obacht, mindestens ein Element ist verspätet.
-Home=Start
MediaBrowser=Mediabrowser
SelectedPeriod=Gewählter Zeitraum
PreviousPeriod=Vorangegangener Zeitraum
@@ -125,7 +123,6 @@ UserValidationShort=Validieren
Second=Zweitens
Morning=Morgen
Afternoon=Nachmittag
-MinuteShort=min
DefaultValues=Standardwerte
PriceCurrency=Währung
UnitPriceHTCurrency=Nettopreis
diff --git a/htdocs/langs/de_DE/main.lang b/htdocs/langs/de_DE/main.lang
index 748dd568ae2..79a615bd1af 100644
--- a/htdocs/langs/de_DE/main.lang
+++ b/htdocs/langs/de_DE/main.lang
@@ -37,6 +37,7 @@ Translation=Übersetzung
Translations=Übersetzungen
CurrentTimeZone=Aktuelle Zeitzone des PHP-Servers
EmptySearchString=Keine leeren Suchkriterien eingeben
+EnterNonEmptyLinesFirst=zuerst die Zeilen eingeben, die nicht leer sind
EnterADateCriteria=Geben Sie ein Datumskriterium ein
NoRecordFound=Keinen Eintrag gefunden
NoRecordDeleted=Keine Datensätze gelöscht
@@ -45,6 +46,7 @@ NoError=kein Fehler
Error=Fehler
Errors=Fehler
ErrorFieldRequired=Feld '%s' ist erforderlich
+CustomMandatoryFieldRule=Benutzerdefinierte Regel für „Pflichtfeld“
ErrorFieldFormat=Der Wert in Feld '%s' ist ungültig
ErrorFileDoesNotExists=Die Datei %s existiert nicht
ErrorFailedToOpenFile=Fehler beim Öffnen der Datei %s
@@ -110,7 +112,7 @@ Undefined=Nicht definiert
PasswordForgotten=Passwort vergessen?
NoAccount=Kein Konto?
SeeAbove=Siehe oben
-HomeArea=Startseite
+HomeArea=Start
LastConnexion=Letzte Anmeldung
PreviousConnexion=Vorherige Anmeldung
PreviousValue=Vorheriger Wert
@@ -141,7 +143,7 @@ Yes=Ja
no=nein
No=Nein
All=Alle
-Home=Startseite
+Home=Start
Help=Hilfe
OnlineHelp=Online-Hilfe
PageWiki=Wiki-Seite
@@ -308,6 +310,7 @@ DateBuild=Datum der Berichterstellung
DatePayment=Zahlungsdatum
DateApprove=Genehmigungsdatum
DateApprove2=Genehmigungsdatum (zweite Genehmigung)
+PendingSince=Ausstehend seit
RegistrationDate=Registrierungsdatum
UserCreation=Erzeuge Datenbank-Benutzer
UserModification=Aktualisierung Benutzer
@@ -349,12 +352,12 @@ Afternoon=nachmittags
Quadri=vierfach
MonthOfDay=Tag des Monats
DaysOfWeek=Wochentage
-HourShort=H
-MinuteShort=mn
-SecondShort=Sek
+HourShort=h
+MinuteShort=min
+SecondShort=sek
DayShort=d
MonthShort=m
-YearShort=J
+YearShort=a
Rate=Rate
CurrencyRate=Wechselkurs
UseLocalTax=inkl. MwSt.
@@ -384,8 +387,8 @@ UnitPriceHTCurrency=Stückpreis (netto) (Währung)
UnitPriceTTC=Stückpreis (brutto)
PriceU=Einzelpr.
PriceUHT=EP (netto)
-PriceUHTCurrency=Einzelpr. (netto) (Währung)
-PriceUTTC=Einzelpr. (brutto)
+PriceUHTCurrency=EP (netto) (Währung)
+PriceUTTC=EP (brutto)
Amount=Betrag
Amounts=Beträge
AmountInvoice=Rechnungsbetrag
@@ -536,7 +539,7 @@ By=Durch
From=Von
FromDate=Von
FromLocation=von
-to=An
+to=Bis
To=An
ToDate=bis
ToLocation=An
@@ -721,6 +724,8 @@ TextUsedInTheMessageBody=E-Mail Text
SendAcknowledgementByMail=Bestätigungsmail senden
SendMail=E-Mail versenden
Email=E-Mail
+EMail=E-Mail
+EMails=E-Mail
NoEMail=Keine E-Mail-Adresse(n) vorhanden
AlreadyRead=Bereits gelesen
NotRead=Ungelesen
@@ -879,6 +884,7 @@ toward=zu
Access=Zugriff
SelectAction=Aktion auswählen
SelectTargetUser=Zielbenutzer/Mitarbeiter wählen
+ClickToCopyToClipboard=Klicken, um in die Zwischenablage zu kopieren
HelpCopyToClipboard=Benutze Ctrl+C für Kopie in Zwischenablage
SaveUploadedFileWithMask=Datei auf dem Server unter dem Namen "%s" speichern (wenn deaktiviert wird der %s benutzt)
OriginFileName=original Dateiname
@@ -925,6 +931,7 @@ ConfirmMassDeletionQuestion=Möchten Sie den/die %s ausgewählten Datensa
ConfirmMassClone=Bestätigung des Massen-Klonens
ConfirmMassCloneQuestion=Wählen Sie das Projekt aus, in das geklont werden soll
ConfirmMassCloneToOneProject=In Projekt %s klonen
+ObjectClonedSuccessfuly=Objekt erfolgreich dupliziert
RelatedObjects=Verknüpfte Objekte
ClassifyBilled=Als 'fakturiert' markieren
ClassifyUnbilled=Als 'nicht fakturiert' markieren
@@ -961,10 +968,11 @@ PrivateDownloadLinkDesc=Sie müssen eingeloggt sein und Berechtigungen zum Anzei
Download=Download
DownloadDocument=Dokument herunterladen
DownloadSignedDocument=Unterzeichnetes Dokument herunterladen
-ActualizeCurrency=Wechselkurs aktualisieren
+ActualizeCurrency=Letzten bekannten Wechselkurs verwenden
Fiscalyear=Fiskalisches Jahr
ModuleBuilder=Module Builder für Module und Anwendungen
SetMultiCurrencyCode=Währung festlegen
+SetMultiCurrencyRate=Wechselkurs festlegen
BulkActions=Massenaktionen
ClickToShowHelp=Klicken um die Tooltiphilfe anzuzeigen
WebSite=Website
@@ -1104,6 +1112,7 @@ PayedBy=Bezahlt von
PayedTo=Bezahlt
Monthly=Monatlich
Quarterly=Quartalsweise
+Quarter=Quartal
Annual=Jährlich
Local=Lokal
Remote=Remote
@@ -1306,3 +1315,27 @@ TranslationOfKey=Übersetzung vom Schlüssel AnyTranslationKey
SignedStatus=Status Unterschrift
NbRecordQualified=Zahl von qualifizierten Datensätzen
auto=automatisch
+UploadFile=Direkter Import des Dokuments
+OrClickToSelectAFile=oder klicken, um ein Datei von der Festplatte auszuwählen
+NetTotal=Nettosumme
+VATAmount=USt.-Betrag
+TotalDiscount=Gesamtrabatt
+TotalHTBeforeDiscount=Gesamtnetto vor Rabatt
+Contains=Enthält
+DoesNotContain=Enthält nicht
+Is=Ist
+IsNot=Ist nicht
+StartsWith=Beginnt mit
+EndsWith=Endet mit
+IsBefore=Ist vor
+IsAfter=Ist nach
+IsOnOrBefore=Ist vor oder gleich
+IsOnOrAfter=Ist nach oder gleich
+IsHigherThan=Ist größer als
+IsHigherThanOrEqual=Ist größer oder gleich
+IsLowerThan=Ist niedriger als
+IsLowerThanOrEqual=Ist kleiner oder gleich
+addToFilter=Hinzufügen
+FilterAssistance=Filter-Editor
+Operator=Operator
+AllFieldsRequired=Alle Felder sind Pflichtfelder.
diff --git a/htdocs/langs/el_CY/blockedlog.lang b/htdocs/langs/el_CY/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/el_CY/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/el_CY/categories.lang b/htdocs/langs/el_CY/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/el_CY/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/el_CY/datapolicy.lang b/htdocs/langs/el_CY/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/el_CY/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/el_CY/errors.lang b/htdocs/langs/el_CY/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/el_CY/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/el_GR/boxes.lang b/htdocs/langs/el_GR/boxes.lang
index f69f61b6bf9..3459523037d 100644
--- a/htdocs/langs/el_GR/boxes.lang
+++ b/htdocs/langs/el_GR/boxes.lang
@@ -15,7 +15,7 @@ BoxLastCustomers=Τελευταίοι τροποποιημένοι πελάτε
BoxLastSuppliers=Τελευταίοι τροποποιημένοι προμηθευτές
BoxLastCustomerOrders=Τελευταίες εντολές πωλήσεων
BoxLastActions=Τελευταίες ενέργειες
-BoxLastContracts=Τελευταία συμβόλαια
+BoxLastContracts=Τελευταίες συμβάσεις
BoxLastContacts=Τελευταίες επαφές/διευθύνσεις
BoxLastMembers=Τελευταία μέλη
BoxLastModifiedMembers=Τελευταία τροποποιημένα μέλη
@@ -50,7 +50,7 @@ BoxLastExpiredServices=Τελευταίες %s παλαιότερες επαφέ
BoxTitleLastActionsToDo=Τελευταίες %s ενέργειες προς πραγματοποίηση
BoxTitleOldestActionsToDo=Τα παλαιότερα %s συμβάντα που πρέπει να γίνουν, μη ολοκληρωμένα
BoxTitleFutureActions=Τα επόμενα %s επερχόμενα συμβάντα
-BoxTitleLastContracts=Τελευταία %s τροποποιημένα συμβόλαια
+BoxTitleLastContracts=Τελευταία %s τροποποιημένες συμβάσεις
BoxTitleLastModifiedDonations=Τελευταίες %s τροποποιημένες δωρεές
BoxTitleLastModifiedExpenses=Τελευταίες %s αναφορές εξόδων που τροποποιήθηκαν
BoxTitleLatestModifiedBoms=Τελευταία %s BOM που τροποποιήθηκαν
@@ -65,23 +65,24 @@ FailedToRefreshDataInfoNotUpToDate=Αποτυχία ανανέωσης ροής
LastRefreshDate=Ημερομηνία τελευταίας ανανέωσης
NoRecordedBookmarks=Δεν υπάρχουν σελιδοδείκτες που ορίζονται. Κάντε κλικ εδώ για να προσθέσετε σελιδοδείκτες.
ClickToAdd=Πατήστε εδώ για προσθήκη.
-NoRecordedCustomers=Δεν υπάρχουν καταχωρημένοι πελάτες
-NoRecordedContacts=Δεν υπάρχουν καταγεγραμμένες επαφές
+NoRecordedCustomers=Δεν έχουν καταγραφεί πελάτες
+NoRecordedContacts=Δεν έχουν καταγραφεί επαφές
NoActionsToDo=Δεν υπάρχουν ενέργειες που πρέπει να γίνουν
-NoRecordedOrders=Δεν υπάρχουν καταγεγραμμένες εντολές πωλήσεων
-NoRecordedProposals=Δεν υπάρχουν καταχωρημένες προσφορές
-NoRecordedInvoices=Δεν υπάρχουν καταγεγραμμένα τιμολόγια πελατών
+NoRecordedOrders=Δεν έχουν καταγραφεί εντολές πωλήσεων
+NoRecordedProposals=Δεν έχουν καταγραφεί προσφορές
+NoRecordedInvoices=Δεν έχουν καταγραφεί τιμολόγια πελάτων
NoUnpaidCustomerBills=Δεν υπάρχουν απλήρωτα τιμολόγια πελατών
NoUnpaidSupplierBills=Δεν υπάρχουν απλήρωτα τιμολόγια προμηθευτών
-NoModifiedSupplierBills=Δεν υπάρχουν καταγεγραμμένα τιμολόγια προμηθευτή
-NoRecordedProducts=Δεν υπάρχουν καταχωρημένα προϊόντα/υπηρεσίες
-NoRecordedProspects=Καμία καταγεγραμμένη προοπτική
-NoContractedProducts=Δεν υπάρχουν καταχωρημένα συμβόλαια με προϊόντα/υπηρεσίες
-NoRecordedContracts=Δεν υπάρχουν καταχωρημένα συμβόλαια
+NoModifiedSupplierBills=Δεν έχουν καταγραφεί τιμολόγια προμηθευτών
+NoRecordedProducts=Δεν έχουν καταγραφεί προϊόντα/υπηρεσίες
+NoRecordedProspects=Δεν έχουν καταγραφεί προοπτικές
+NoContractedProducts=Δεν υπάρχουν καταχωρημένες συμβάσεις με προϊόντα/υπηρεσίες
+NoRecordedContracts=Δεν έχουν καταγραφεί συμβάσεις
NoRecordedInterventions=Δεν έχουν καταγραφεί παρεμβάσεις
+NoRecordedBankAccounts=Δεν έχουν καταγραφεί οικονομικοί λογαριασμοί
+NoSupplierOrder=Δεν έχει καταγραφεί καμία αγορά Παραγγελία
BoxLatestSupplierOrders=Τελευταίες παραγγελίες αγοράς
BoxLatestSupplierOrdersAwaitingReception=Τελευταίες παραγγελίες αγοράς (εν αναμονή παραλαβής)
-NoSupplierOrder=Καμία καταγεγραμμένη εντολή αγοράς
BoxCustomersInvoicesPerMonth=Τιμολόγιο Πελατών ανά μήνα
BoxSuppliersInvoicesPerMonth=Τιμολόγια προμηθευτή ανά μήνα
BoxCustomersOrdersPerMonth=Παραγγελίες Πωλήσεων ανά μήνα
@@ -100,7 +101,7 @@ BoxTitleLatestModifiedCandidatures=Τελευταίες %s τροποποιημ
ForCustomersInvoices=Τιμολόγια Πελάτη
ForCustomersOrders=Παραγγελίες πελατών
ForProposals=Προσφορές
-LastXMonthRolling=Τελευταίοι %s κυλιόμενοι μήνες
+LastXMonthRolling=Τελευταίοι %s μήνες
ChooseBoxToAdd=Προσθήκη γραφικού στοιχείου στον πίνακα ελέγχου
BoxAdded=Το γραφικό στοιχείο προστέθηκε στον πίνακα ελέγχου.
BoxTitleUserBirthdaysOfMonth=Γενέθλια αυτού του μήνα (χρήστες)
@@ -118,6 +119,9 @@ NoRecordedShipments=Καμία καταγεγραμμένη αποστολή π
BoxCustomersOutstandingBillReached=Πελάτες που έχουν φτάσει το όριο μέγιστου οφειλόμενου
BoxTitleLastFediverseInfos=Τελευταίες %s αναρτήσεις από %s
BoxLastFediverseInfos=Τελευταίες ενημερώσεις Fediverse: Ειδήσεις και Τάσεις
+NoOpenedProjectsOpportunities=Δεν υπάρχουν ανοιχτές ευκαιρίες
+NoOpenedProjects=Δεν υπάρχουν ανοιχτά έργα
+NoScheduledJobs=Δεν υπάρχουν προγραμματισμένες εργασίες
# Pages
UsersHome=Χρήστες και ομάδες
MembersHome=Μέλη
diff --git a/htdocs/langs/el_GR/main.lang b/htdocs/langs/el_GR/main.lang
index a50d76c8d57..aa29743448d 100644
--- a/htdocs/langs/el_GR/main.lang
+++ b/htdocs/langs/el_GR/main.lang
@@ -37,8 +37,9 @@ Translation=Μετάφραση
Translations=Μεταφράσεις
CurrentTimeZone=TimeZone PHP (server)
EmptySearchString=Εισάγετε μη κενά κριτήρια αναζήτησης
+EnterNonEmptyLinesFirst=εισάγετε πρώτα μη κενές γραμμές
EnterADateCriteria=Εισαγάγετε κριτήρια ημερομηνίας
-NoRecordFound=Κανένα αρχείο δεν βρέθηκε
+NoRecordFound=Δεν βρέθηκαν εγγραφές
NoRecordDeleted=Κανένα αρχείο δεν διαγράφηκε
NotEnoughDataYet=Τα δεδομένα δεν είναι επαρκή
NoError=Κανένα Σφάλμα
@@ -309,6 +310,7 @@ DateBuild=Αναφορά ημερομηνία κατασκευής
DatePayment=Ημερομηνία πληρωμής
DateApprove=Ημερομηνία έγκρισης
DateApprove2=Ημερομηνία έγκρισης (δεύτερο έγκριση)
+PendingSince=Εκκρεμεί από
RegistrationDate=Ημερομηνία Εγγραφής
UserCreation=Χρήστης δημιουργίας
UserModification=Χρήστης τροποποίησης
@@ -722,6 +724,8 @@ TextUsedInTheMessageBody=Κείμενο email
SendAcknowledgementByMail=Αποστολή email επιβεβαίωσης
SendMail=Αποστολή email
Email=Email
+EMail=Email
+EMails=Emails
NoEMail=Χωρίς email
AlreadyRead=Διαβασμένα
NotRead=Αδιάβαστο
@@ -880,6 +884,7 @@ toward=προς
Access=Πρόσβαση
SelectAction=Επιλογή ενέργειας
SelectTargetUser=Επιλέξτε χρήστη/υπάλληλο-στόχο
+ClickToCopyToClipboard=Κάντε κλικ για αντιγραφή στο πρόχειρο
HelpCopyToClipboard=Χρησιμοποιήστε το Ctrl + C για να αντιγράψετε στο πρόχειρο
SaveUploadedFileWithMask=Αποθηκεύστε το αρχείο στον server με το όνομα "%s" (αλλιώς "%s")
OriginFileName=Αρχική Ονομασία
@@ -926,6 +931,7 @@ ConfirmMassDeletionQuestion=Είστε σίγουροι ότι θέλετε να
ConfirmMassClone=Επιβεβαίωση μαζικής κλωνοποίησης
ConfirmMassCloneQuestion=Επιλέξτε έργο για κλωνοποίηση
ConfirmMassCloneToOneProject=Κλωνοποίηση στο έργο %s
+ObjectClonedSuccessfuly=Το αντικείμενο αντιγράφηκε με επιτυχία
RelatedObjects=Σχετικά Αντικείμενα
ClassifyBilled=Ταξινόμηση ως τιμολογημένο
ClassifyUnbilled=Ταξινόμηση ως μη τιμολογημένο
@@ -962,10 +968,11 @@ PrivateDownloadLinkDesc=Πρέπει να είστε συνδεδεμένοι κ
Download=Λήψη
DownloadDocument=Λήψη εγγράφου
DownloadSignedDocument=Λήψη υπογεγραμμένου εγγράφου
-ActualizeCurrency=Ενημέρωση τιμής νομίσματος
+ActualizeCurrency=Χρήση της τελευταίας γνωστής ισοτιμίας του νομίσματος
Fiscalyear=Οικονομικό έτος
ModuleBuilder=Εφαρμογή δημιουργίας ενοτήτων
SetMultiCurrencyCode=Ορισμός νομίσματος
+SetMultiCurrencyRate=Ορισμός ισοτιμίας νομίσματος
BulkActions=Μαζικές ενέργειες
ClickToShowHelp=Κάντε κλικ για να εμφανιστεί το αναδυόμενο πλαίσιο βοήθειας
WebSite=Ιστοσελίδα
@@ -1105,6 +1112,7 @@ PayedBy=Πληρώθηκε από
PayedTo=Πληρώθηκε σε
Monthly=Μηνιαία
Quarterly=Τριμηνιαία
+Quarter=Τρίμηνο
Annual=Ετήσια
Local=Τοπικά
Remote=Απομακρυσμένο
@@ -1177,8 +1185,8 @@ DefaultMailModel=Προεπιλεγμένο πρότυπο αλληλογραφ
PublicVendorName=Επωνυμία προμηθευτή
DateOfBirth=Ημερομηνία γέννησης
SecurityTokenHasExpiredSoActionHasBeenCanceledPleaseRetry=Το Security token έχει λήξει, επομένως η ενέργεια ακυρώθηκε. Παρακαλώ προσπαθήστε ξανά.
-UpToDate=Ενημερωμένο
-OutOfDate=Ξεπερασμένο
+UpToDate=Ενημερωμένη
+OutOfDate=Ληγμένη
EventReminder=Υπενθύμιση συμβάντος
UpdateForAllLines=Ενημέρωση για όλες τις γραμμές
OnHold=Σε Αναμονή
@@ -1307,3 +1315,27 @@ TranslationOfKey=Μετάφραση του κλειδιού AnyTranslationKey
SignedStatus=Κατάσταση υπογραφής
NbRecordQualified=Αριθμός εγκεκριμένων εγγραφών
auto=αυτόματα
+UploadFile=Άμεση εισαγωγή εγγράφου
+OrClickToSelectAFile=ή κάντε κλικ για να επιλέξετε ένα αρχείο
+NetTotal=Σύνολο καθαρού
+VATAmount=Ποσό ΦΠΑ
+TotalDiscount=Σύνολο έκπτωσης
+TotalHTBeforeDiscount=Αξία προ έκπτωσης
+Contains=Περιέχει
+DoesNotContain=Δεν περιέχει
+Is=Είναι
+IsNot=Δεν είναι
+StartsWith=Ξεκινά με
+EndsWith=Τελειώνει με
+IsBefore=Είναι πριν
+IsAfter=Είναι μετά
+IsOnOrBefore=Είναι πριν ή ίσο
+IsOnOrAfter=Είναι μετά ή ίσο
+IsHigherThan=Είναι μεγαλύτερο από
+IsHigherThanOrEqual=Είναι μεγαλύτερο ή ίσο
+IsLowerThan=Είναι μικρότερο από
+IsLowerThanOrEqual=Είναι μικρότερο ή ίσο
+addToFilter=Προσθήκη
+FilterAssistance=Επεξεργαστής φίλτρου
+Operator=Operator
+AllFieldsRequired=Όλα τα πεδία είναι υποχρεωτικά.
diff --git a/htdocs/langs/en_AE/blockedlog.lang b/htdocs/langs/en_AE/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_AE/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_AE/categories.lang b/htdocs/langs/en_AE/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_AE/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_AE/datapolicy.lang b/htdocs/langs/en_AE/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_AE/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/en_AU/blockedlog.lang b/htdocs/langs/en_AU/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_AU/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_AU/categories.lang b/htdocs/langs/en_AU/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_AU/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_AU/datapolicy.lang b/htdocs/langs/en_AU/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_AU/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/en_CA/blockedlog.lang b/htdocs/langs/en_CA/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_CA/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_CA/categories.lang b/htdocs/langs/en_CA/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_CA/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_CA/datapolicy.lang b/htdocs/langs/en_CA/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_CA/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/en_GB/blockedlog.lang b/htdocs/langs/en_GB/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_GB/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_GB/categories.lang b/htdocs/langs/en_GB/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_GB/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_GB/datapolicy.lang b/htdocs/langs/en_GB/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_GB/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/en_IN/blockedlog.lang b/htdocs/langs/en_IN/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_IN/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_IN/categories.lang b/htdocs/langs/en_IN/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_IN/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_IN/datapolicy.lang b/htdocs/langs/en_IN/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_IN/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/en_SG/blockedlog.lang b/htdocs/langs/en_SG/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_SG/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_SG/categories.lang b/htdocs/langs/en_SG/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_SG/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_SG/datapolicy.lang b/htdocs/langs/en_SG/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_SG/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/en_SG/members.lang b/htdocs/langs/en_SG/members.lang
new file mode 100644
index 00000000000..49313a51d14
--- /dev/null
+++ b/htdocs/langs/en_SG/members.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - members
+MembersByCountryDesc=This screen shows you the statistics of members by countries. Graphs and charts depend on the availability of the Google online graph service as well as on the availability of a working internet connection.
diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang
index 01949332498..63725bae5cc 100644
--- a/htdocs/langs/en_US/website.lang
+++ b/htdocs/langs/en_US/website.lang
@@ -257,6 +257,7 @@ logOutFromYourCustomerAccount=Log out from your customer account
filteredByVersion=Filtered by version
removeFilter=Remove filter
viewMyCart=View my shopping cart
+Shipping=Shipping
freeShipping=Free shipping!
noProducts=No products
nbrItemsInCart=There are 0 items in your cart.
@@ -359,3 +360,6 @@ LoginCheckout=Login & Proceed to checkout
paymentSuccessProcessed=Your payment has been successfully processed.
youWillBeRedirectedToOrderPage=You will be redirected to the order details page shortly.
WebPortalSetupNotComplete=Web portal setup is not complete
+DeleteWebsiteaccount=Delete website account
+ConfirmDeleteWebsiteAccount=Are you sure you want to delete this account.
+ConfirmDeleteWebsiteAccount2=If this account was used to login on the public portal or any otherweb site powered by Dolibarr, the login may be no more possible.
diff --git a/htdocs/langs/en_ZA/blockedlog.lang b/htdocs/langs/en_ZA/blockedlog.lang
new file mode 100644
index 00000000000..76e01492a53
--- /dev/null
+++ b/htdocs/langs/en_ZA/blockedlog.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
+DataOfArchivedEventHelp=This field contains the unalterable and structured data that was archived on real time. Even if some parent business event could have been purged or modified, the data archived here is the original data, and it can't be modified.
+DataOfArchivedEventHelp2=Its integrity is guaranteed if the status of the line is OK
diff --git a/htdocs/langs/en_ZA/categories.lang b/htdocs/langs/en_ZA/categories.lang
new file mode 100644
index 00000000000..7d96b9aa69a
--- /dev/null
+++ b/htdocs/langs/en_ZA/categories.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AddFichinterIntoCategory=Assign category to interventional
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/en_ZA/datapolicy.lang b/htdocs/langs/en_ZA/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/en_ZA/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/es_BO/blockedlog.lang b/htdocs/langs/es_BO/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_BO/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_BO/categories.lang b/htdocs/langs/es_BO/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_BO/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_BO/datapolicy.lang b/htdocs/langs/es_BO/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_BO/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_BO/errors.lang b/htdocs/langs/es_BO/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_BO/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_BO/mails.lang b/htdocs/langs/es_BO/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_BO/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_DO/blockedlog.lang b/htdocs/langs/es_DO/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_DO/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_DO/categories.lang b/htdocs/langs/es_DO/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_DO/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_DO/datapolicy.lang b/htdocs/langs/es_DO/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_DO/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_DO/errors.lang b/htdocs/langs/es_DO/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_DO/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_DO/mails.lang b/htdocs/langs/es_DO/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_DO/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_GT/blockedlog.lang b/htdocs/langs/es_GT/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_GT/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_GT/categories.lang b/htdocs/langs/es_GT/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_GT/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_GT/datapolicy.lang b/htdocs/langs/es_GT/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_GT/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_GT/errors.lang b/htdocs/langs/es_GT/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_GT/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_GT/mails.lang b/htdocs/langs/es_GT/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_GT/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_HN/blockedlog.lang b/htdocs/langs/es_HN/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_HN/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_HN/categories.lang b/htdocs/langs/es_HN/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_HN/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_HN/datapolicy.lang b/htdocs/langs/es_HN/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_HN/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_HN/errors.lang b/htdocs/langs/es_HN/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_HN/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_HN/mails.lang b/htdocs/langs/es_HN/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_HN/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_MX/datapolicy.lang b/htdocs/langs/es_MX/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_MX/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_PA/blockedlog.lang b/htdocs/langs/es_PA/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_PA/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_PA/categories.lang b/htdocs/langs/es_PA/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_PA/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_PA/datapolicy.lang b/htdocs/langs/es_PA/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_PA/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_PA/errors.lang b/htdocs/langs/es_PA/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_PA/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_PA/mails.lang b/htdocs/langs/es_PA/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_PA/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_PE/assets.lang b/htdocs/langs/es_PE/assets.lang
index f4824c81709..a339947648f 100644
--- a/htdocs/langs/es_PE/assets.lang
+++ b/htdocs/langs/es_PE/assets.lang
@@ -1,5 +1,4 @@
# Dolibarr language file - Source file is en_US - assets
-DeleteType=Borrar
MenuListAssets=Lista
MenuListAssetModels=Lista
AssetReversalAmountHT=Importe de amortización (sin IGV)
diff --git a/htdocs/langs/es_PE/blockedlog.lang b/htdocs/langs/es_PE/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_PE/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_PE/categories.lang b/htdocs/langs/es_PE/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_PE/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_PE/datapolicy.lang b/htdocs/langs/es_PE/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_PE/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_PE/members.lang b/htdocs/langs/es_PE/members.lang
new file mode 100644
index 00000000000..835cd28545c
--- /dev/null
+++ b/htdocs/langs/es_PE/members.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - members
+DeleteType=Borrar
+MembersByCountryDesc=This screen shows you the statistics of members by countries. Graphs and charts depend on the availability of the Google online graph service as well as on the availability of a working internet connection.
diff --git a/htdocs/langs/es_PY/blockedlog.lang b/htdocs/langs/es_PY/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_PY/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_PY/categories.lang b/htdocs/langs/es_PY/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_PY/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_PY/datapolicy.lang b/htdocs/langs/es_PY/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_PY/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_PY/errors.lang b/htdocs/langs/es_PY/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_PY/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_PY/mails.lang b/htdocs/langs/es_PY/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_PY/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_US/blockedlog.lang b/htdocs/langs/es_US/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_US/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_US/categories.lang b/htdocs/langs/es_US/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_US/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_US/datapolicy.lang b/htdocs/langs/es_US/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_US/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_US/errors.lang b/htdocs/langs/es_US/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_US/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_US/mails.lang b/htdocs/langs/es_US/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_US/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_UY/blockedlog.lang b/htdocs/langs/es_UY/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_UY/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_UY/categories.lang b/htdocs/langs/es_UY/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/es_UY/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/es_UY/datapolicy.lang b/htdocs/langs/es_UY/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_UY/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_UY/errors.lang b/htdocs/langs/es_UY/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/es_UY/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/es_UY/mails.lang b/htdocs/langs/es_UY/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/es_UY/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/es_VE/blockedlog.lang b/htdocs/langs/es_VE/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/es_VE/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/es_VE/datapolicy.lang b/htdocs/langs/es_VE/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/es_VE/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/es_VE/sendings.lang b/htdocs/langs/es_VE/sendings.lang
new file mode 100644
index 00000000000..e77b722fe45
--- /dev/null
+++ b/htdocs/langs/es_VE/sendings.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - sendings
+SendingCard=Envío
diff --git a/htdocs/langs/es_VE/suppliers.lang b/htdocs/langs/es_VE/suppliers.lang
new file mode 100644
index 00000000000..c0fe420495b
--- /dev/null
+++ b/htdocs/langs/es_VE/suppliers.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - suppliers
+NbDaysToDelivery=Tiempos de entrega
diff --git a/htdocs/langs/fr_BE/blockedlog.lang b/htdocs/langs/fr_BE/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/fr_BE/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/fr_BE/categories.lang b/htdocs/langs/fr_BE/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/fr_BE/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/fr_BE/datapolicy.lang b/htdocs/langs/fr_BE/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/fr_BE/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/fr_CA/blockedlog.lang b/htdocs/langs/fr_CA/blockedlog.lang
new file mode 100644
index 00000000000..ab5333aa867
--- /dev/null
+++ b/htdocs/langs/fr_CA/blockedlog.lang
@@ -0,0 +1,37 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+BlockedLog=Journaux inaltérables
+BlockedLogDesc=Ce module permet de suivre certains événements dans un journal inaltérable (que vous ne pouvez pas modifier une fois enregistré) dans une chaîne de blocs, en temps réel. Ce module assure la compatibilité avec les exigences des lois de certains pays (comme la France avec la loi Finance 2016 - Norme NF525).
+Fingerprints=Événements archivés et empreintes digitales
+FingerprintsDesc=Il s'agit de l'outil permettant de parcourir ou d'extraire les logs inaltérables. Les logs inaltérables sont générés et archivés localement dans une table dédiée, en temps réel lorsque vous enregistrez un événement métier. Vous pouvez utiliser cet outil pour exporter cette archive et la sauvegarder sur un support externe (certains pays, comme la France, demandent de le faire tous les ans). A noter qu'il n'existe aucune fonctionnalité permettant de purger ce log et que toute tentative de modification directement dans ce log (par un hacker par exemple) sera signalée avec une empreinte non valide. Si vous avez vraiment besoin de purger cette table car vous avez utilisé votre application à des fins de démonstration/test et que vous souhaitez nettoyer vos données pour démarrer votre production, vous pouvez demander à votre revendeur ou intégrateur de réinitialiser votre base de données (toutes vos données seront supprimées).
+CompanyInitialKey=Clé initiale de l'entreprise (hachage du bloc de genèse)
+BrowseBlockedLog=Des journaux inaltérables
+DownloadBlockChain=Télécharger les empreintes digitales
+KoCheckFingerprintValidity=L'entrée de journal archivée n'est pas valide. Cela signifie que quelqu'un (un pirate informatique ?) a modifié certaines données de cet enregistrement après son enregistrement, ou a effacé l'enregistrement archivé précédent (vérifiez que la ligne avec le numéro précédent existe) ou a modifié la somme de contrôle de l'enregistrement précédent.
+OkCheckFingerprintValidity=L'enregistrement de journal archivé est valide. Les données de cette ligne n'ont pas été modifiées et l'entrée suit la précédente.
+NotAddedByAuthorityYet=Pas encore stocké dans l'autorité distante
+BlockedLogBillDownload=Téléchargement de la facture client
+BlockedLogBillPreview=Aperçu de la facture client
+BlockedlogInfoDialog=Détails du journal
+ListOfTrackedEvents=Liste des événements suivis
+Fingerprint=Empreinte digitale
+DataOfArchivedEvent=Données complètes de l'événement archivé
+ImpossibleToReloadObject=Objet d'origine (type %s, id %s) non lié (voir la colonne « Données complètes » pour obtenir des données enregistrées inaltérables)
+BlockedLogAreRequiredByYourCountryLegislation=Le module Logs inaltérables peut être exigé par la législation de votre pays. La désactivation de ce module peut rendre toutes transactions futures invalides au regard de la loi et de l'utilisation de logiciels légaux car elles ne peuvent pas être validées par un contrôle fiscal.
+BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Le module Logs inaltérables a été activé en raison de la législation de votre pays. La désactivation de ce module peut rendre toutes transactions futures invalides au regard de la loi et de l'utilisation de logiciels légaux car elles ne peuvent pas être validées par un contrôle fiscal.
+BlockedLogDisableNotAllowedForCountry=Liste des pays où l'utilisation de ce module est obligatoire (juste pour éviter de désactiver le module par erreur, si votre pays est dans cette liste, la désactivation du module n'est pas possible sans avoir préalablement édité cette liste. Notez également que l'activation/désactivation de ce module conservera une trace dans le journal inaltérable).
+TooManyRecordToScanRestrictFilters=Trop d'enregistrements à analyser. Veuillez restreindre la liste avec des filtres plus restrictifs.
+RestrictYearToExport=Restreindre le mois/l'année à exporter
+BlockedLogEnabled=Un système de suivi des événements dans des journaux inaltérables a été activé
+BlockedLogDisabled=Le système de suivi des événements dans des journaux inaltérables a été désactivé après que certains enregistrements ont été effectués. Nous avons enregistré une empreinte digitale spéciale pour suivre la chaîne comme étant brisée
+BlockedLogDisabledBis=Le système de suivi des événements dans des journaux inaltérables a été désactivé. Cela est possible car aucun enregistrement n'a encore été effectué.
+LinkHasBeenDisabledForPerformancePurpose=Pour des raisons de performance, le lien direct vers le document n'est pas affiché après la 100e ligne.
+logBILL_DELETE=Facture client logiquement supprimée
+logBILL_SENTBYMAIL=Facture client envoyée par courrier
+logCASHCONTROL_VALIDATE=Enregistrement de la clôture de la caisse
+logDOC_DOWNLOAD=Téléchargement d'un document validé afin de l'imprimer ou de l'envoyer
+logDOC_PREVIEW=Aperçu d'un document validé pour l'imprimer ou le télécharger
+logDONATION_PAYMENT_CREATE=Paiement de don créé
+logDONATION_PAYMENT_DELETE=Suppression logique du paiement du don
+logMEMBER_SUBSCRIPTION_CREATE=Abonnement membre créé
+logMEMBER_SUBSCRIPTION_DELETE=Suppression logique de l'abonnement des membres
+logMEMBER_SUBSCRIPTION_MODIFY=Modification de l'abonnement des membres
diff --git a/htdocs/langs/fr_CA/datapolicy.lang b/htdocs/langs/fr_CA/datapolicy.lang
new file mode 100644
index 00000000000..0de226eccb9
--- /dev/null
+++ b/htdocs/langs/fr_CA/datapolicy.lang
@@ -0,0 +1,8 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+Module4100Desc =Module de gestion de la confidentialité des données (Conformité au RGPD)
+datapolicySetupPage =Selon les lois de votre pays (Exemple Article 5 du RGPD), les données personnelles doivent être conservées pendant une durée n'excédant pas la durée pendant laquelle les données sont nécessaires à la finalité pour laquelle elles ont été collectées, sauf à des fins d'archivage. La suppression se fera automatiquement après une certaine durée sans événements (durée que vous aurez indiquée ci-dessous).
+NB_YEARS =%s années
+DATAPOLICY_ADHERENT =Membre
+SendAgreement =Envoyer des e-mails
+TXTLINKDATAPOLICYACCEPT =Texte pour le lien « accord »
+MailSent =Un e-mail a été envoyé
diff --git a/htdocs/langs/fr_CA/mrp.lang b/htdocs/langs/fr_CA/mrp.lang
new file mode 100644
index 00000000000..40fdf46c24c
--- /dev/null
+++ b/htdocs/langs/fr_CA/mrp.lang
@@ -0,0 +1,98 @@
+# Dolibarr language file - Source file is en_US - mrp
+Mrp=Commandes de fabrication
+MOs=Commandes de fabrication
+MRPDescription=Module de gestion de la production et des Ordres de Fabrication (OM).
+MRPArea=Zone MRP
+MrpSetupPage=Installation du module MRP
+MenuBOM=Listes de matériel
+LatestBOMModified=Dernières nomenclatures modifiées %s
+LatestMOModified=Derniers ordres de fabrication modifiés %s
+Bom=Listes de matériel
+BillOfMaterials=Liste des matériaux
+ListOfBOMs=Nomenclatures de matériel - BOM
+ListOfManufacturingOrders=Commandes de fabrication
+NewBOM=Nouvelle nomenclature
+ProductBOMHelp=Produit à créer (ou à désassembler) avec cette nomenclature. Remarque : les produits avec la propriété « Nature du produit » = « Matière première » ne sont pas visibles dans cette liste.
+CloneDefBomProduct=Cloner la nomenclature par défaut à utiliser pour fabriquer le produit
+ErrorProductCloneBom=Erreur : échec du clonage d'une nomenclature
+BOMsNumberingModules=Modèles de numérotation de nomenclature
+BOMsModelModule=Modèles de documents BOM
+MOsNumberingModules=Modèles de numérotation MO
+MOsModelModule=Modèles de documents MO
+FreeLegalTextOnBOMs=Texte libre sur le document de nomenclature
+WatermarkOnDraftBOMs=Filigrane sur le brouillon de nomenclature
+FreeLegalTextOnMOs=Texte libre sur le document de MO
+WatermarkOnDraftMOs=Filigrane sur le brouillon MO
+ConfirmCloneBillOfMaterials=Êtes-vous sûr de vouloir cloner la nomenclature %s ?
+ConfirmCloneMo=Êtes-vous sûr de vouloir cloner l'ordre de fabrication %s ?
+ConsumptionEfficiency=Efficacité de consommation
+ValueOfMeansLoss=Une valeur de 0,95 signifie une moyenne de 5%% de perte lors de la fabrication ou du démontage
+ValueOfMeansLossForProductProduced=La valeur de 0,95 signifie une perte moyenne de 5%% du produit fabriqué
+CancelMo=Annuler l'ordre de fabrication
+MoCancelConsumedAndProducedLines=Annuler également toutes les lignes consommées et produites (supprimer les lignes et restaurer les stocks)
+ConfirmDeleteBillOfMaterials=Êtes-vous sûr de vouloir supprimer cette nomenclature ?
+ConfirmDeleteMo=Etes-vous sûr de vouloir supprimer cet ordre de fabrication ?
+DeleteMoChild =Supprimer les MO enfants liés à ce MO %s
+MoChildsDeleted =Tous les MO enfants ont été supprimés
+MenuMRP=Commandes de fabrication
+NewMO=Nouvel ordre de fabrication
+KeepEmptyForAsap=Vide signifie « Dès que possible »
+EstimatedDurationDesc=Durée estimée de fabrication (ou de démontage) de ce produit à l'aide de cette nomenclature
+ConfirmValidateBom=Etes-vous sûr de vouloir valider la nomenclature avec la référence %s (vous pourrez l'utiliser pour créer de nouveaux ordres de fabrication)
+ConfirmCloseBom=Etes-vous sûr de vouloir annuler cette nomenclature (vous ne pourrez plus l'utiliser pour créer de nouveaux ordres de fabrication) ?
+ConfirmReopenBom=Etes-vous sûr de vouloir rouvrir cette nomenclature (vous pourrez l'utiliser pour créer de nouveaux ordres de fabrication)
+StatusMOProduced=Produit
+QtyFrozen=Quantité congelée
+QuantityFrozen=Quantité congelée
+DisableStockChange=Changement de stock désactivé
+DisableStockChangeHelp=Lorsque ce flag est positionné, il n'y a pas de changement de stock sur ce produit, quelle que soit la quantité consommée
+BOMLine=Ligne de BOM
+WarehouseForProduction=Entrepôt de production
+CreateMO=Créer MO
+ToConsume=À consommer
+ToObtain=Pour obtenir
+QtyAlreadyConsumed=Quantité déjà consommée
+QtyAlreadyProduced=Quantité déjà produite
+QtyAlreadyConsumedShort=Quantité consommée
+QtyAlreadyProducedShort=Quantité produite
+QtyRequiredIfNoLoss=Quantité requise pour produire la quantité définie dans la nomenclature s'il n'y a pas de perte (si l'efficacité de fabrication est de 100%%)
+ConsumeOrProduce=Consommer ou produire
+ConsumeAndProduceAll=Consommer et produire tout
+ForAQuantityToConsumeOf=Pour une quantité à démonter de %s
+ConfirmValidateMo=Etes-vous sûr de vouloir valider cet Ordre de Fabrication ?
+ConfirmProductionDesc=En cliquant sur '%s', vous validerez la consommation et/ou la production pour les quantités paramétrées. Cela permettra également de mettre à jour le stock et d'enregistrer les mouvements de stock.
+CancelProductionForRef=Annulation de la décrémentation du stock de produits pour le produit %s
+TooltipDeleteAndRevertStockMovement=Supprimer la ligne et rétablir le mouvement du stock
+AutoCloseMO=Fermer automatiquement l'ordre de fabrication si les quantités à consommer et à produire sont atteintes
+NoStockChangeOnServices=Pas de changement de stock sur les services
+ProductQtyToConsumeByMO=Quantité de produit restant à consommer par MO ouvert
+ProductQtyToProduceByMO=Quantité de produits restant à produire par MO ouvert
+AddNewProduceLines=Ajouter une nouvelle ligne pour produire
+BOMTotalCost=Le coût de production de cette nomenclature en fonction du coût de chaque quantité et produit à consommer (utilisez le prix de revient s'il est défini, sinon le prix moyen pondéré s'il est défini, sinon le meilleur prix d'achat)
+BOMTotalCostService=Si le module "Poste de travail" est activé et qu'un poste de travail est défini par défaut sur la ligne, alors le calcul est "quantité (convertie en heures) x ahr poste de travail", sinon "quantité x prix de revient de la prestation"
+GoOnTabProductionToProduceFirst=Vous devez d'abord avoir démarré la production pour pouvoir clôturer un Ordre de Fabrication (Voir onglet '%s'). Mais vous pouvez l'Annuler.
+ErrorAVirtualProductCantBeUsedIntoABomOrMo=Un kit ne peut pas être utilisé dans une nomenclature ou un MO
+WorkstationSetup =Installation des postes de travail
+WorkstationSetupPage =Page de configuration des postes de travail
+ConfirmEnableWorkstation=Êtes-vous sûr de vouloir activer le poste de travail %s ?
+EnableAWorkstation=Activer un poste de travail
+ConfirmDisableWorkstation=Êtes-vous sûr de vouloir désactiver le poste de travail %s ?
+THMOperatorEstimated=Opérateur estimé THM
+THMMachineEstimated=Machine estimée THM
+HumanMachine=Humain / Machine
+WorkstationArea=Espace poste de travail
+BOM=Liste des matériaux
+MOAndLines=Ordres et lignes de fabrication
+MoChildGenerate=Générer un enfant Mo
+ParentMo=Parent MO
+MOChild=Enfant MO
+BOMNetNeeds =Besoins nets BOM
+BOMProductsList=Produits BOM
+Disassemble=Démonter
+QtyTot=Qté Total
+MOIsClosed=L'ordre de fabrication est fermé
+QtyCantBeSplit=La quantité ne peut pas être divisée
+NoRemainQtyToDispatch=Il ne reste plus de quantité à diviser
+THMOperatorEstimatedHelp=Coût horaire estimé de l'opérateur. Sera utilisé pour estimer le coût d'une nomenclature utilisant ce poste de travail.
+THMMachineEstimatedHelp=Coût horaire estimé de la machine. Sera utilisé pour estimer le coût d'une nomenclature utilisant ce poste de travail.
+BadValueForquantityToConsume=La quantité à consommer pour un matériau ne peut pas être 0 ou négative
diff --git a/htdocs/langs/fr_CA/partnership.lang b/htdocs/langs/fr_CA/partnership.lang
new file mode 100644
index 00000000000..f9cdff437e8
--- /dev/null
+++ b/htdocs/langs/fr_CA/partnership.lang
@@ -0,0 +1,28 @@
+# Dolibarr language file - Source file is en_US - partnership
+PartnershipDescription=Module Gestion des partenariats
+PartnershipDescriptionLong=Module Gestion des partenariats
+CancelPartnershipForExpiredMembers=Partenariat : Annuler le partenariat des membres dont l'abonnement est expiré
+PartnershipCheckBacklink=Partenariat : Vérifier le backlink référent
+NewPartnershipbyWeb=Votre demande de partenariat a bien été prise en compte. Nous vous contacterons prochainement...
+ListOfPartnerships=Liste des partenariats
+PartnershipSetup=Mise en place d'un partenariat
+PartnershipAbout=À propos du partenariat
+PartnershipAboutPage=Partenariat à propos de la page
+partnershipforthirdpartyormember=Le statut de partenaire doit être défini sur « tiers » ou « membre »
+PARTNERSHIP_BACKLINKS_TO_CHECK=Backlinks à vérifier
+PARTNERSHIP_NBDAYS_AFTER_MEMBER_EXPIRATION_BEFORE_CANCEL=Nombre de jours avant l'annulation du statut d'un partenariat lorsqu'un abonnement a expiré
+ReferingWebsiteCheck=Vérification du site Web référent
+ReferingWebsiteCheckDesc=Vous pouvez activer une fonctionnalité pour vérifier que vos partenaires ont ajouté un lien retour vers les domaines de votre site Web sur leur propre site Web.
+PartnershipDedicatedToThisMember=Partenariat dédié à ce membre
+ReasonDeclineOrCancel=Motif du refus ou de l'annulation
+ManagePartnership=Gérer le partenariat
+BacklinkNotFoundOnPartnerWebsite=Lien retour non trouvé sur le site Web du partenaire
+ConfirmClosePartnershipAsk=Etes-vous sûr de vouloir annuler ce partenariat ?
+KeywordToCheckInWebsite=Si vous souhaitez vérifier qu'un mot-clé donné est présent dans le site Web de chaque partenaire, définissez ce mot-clé ici
+YourPartnershipWillSoonBeCanceledContent=Nous tenons à vous informer que notre partenariat sera bientôt résilié (nous n'avons pas obtenu de renouvellement ou une condition préalable à notre partenariat n'a pas été remplie). Veuillez nous contacter si vous avez reçu ceci suite à une erreur.
+YourPartnershipRefusedContent=Nous tenons à vous informer que votre demande de partenariat a été refusée. Les conditions préalables ne sont pas remplies. Veuillez nous contacter si vous souhaitez plus d'informations.
+YourPartnershipAcceptedContent=Nous tenons à vous informer que votre demande de partenariat a été acceptée.
+YourPartnershipCanceledContent=Nous tenons à vous informer que notre partenariat a été annulé. Veuillez nous contacter si vous souhaitez plus d'informations.
+LastCheckBacklink=Date de la dernière vérification de l'URL
+NewPartnershipRequestDesc=Ce formulaire vous permet de demander à faire partie de l'un de nos programmes de partenariat. Si vous avez besoin d'aide pour remplir ce formulaire, veuillez nous contacter par e-mail %s.
+ThisUrlMustContainsAtLeastOneLinkToWebsite=Cette page doit contenir au moins un lien vers l'un des domaines suivants : %s
diff --git a/htdocs/langs/fr_CH/blockedlog.lang b/htdocs/langs/fr_CH/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/fr_CH/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/fr_CH/categories.lang b/htdocs/langs/fr_CH/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/fr_CH/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/fr_CI/blockedlog.lang b/htdocs/langs/fr_CI/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/fr_CI/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/fr_CI/categories.lang b/htdocs/langs/fr_CI/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/fr_CI/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/fr_CI/datapolicy.lang b/htdocs/langs/fr_CI/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/fr_CI/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/fr_CM/blockedlog.lang b/htdocs/langs/fr_CM/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/fr_CM/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/fr_CM/categories.lang b/htdocs/langs/fr_CM/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/fr_CM/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/fr_CM/datapolicy.lang b/htdocs/langs/fr_CM/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/fr_CM/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang
index 6e2148390fc..f19388fdb23 100644
--- a/htdocs/langs/fr_FR/accountancy.lang
+++ b/htdocs/langs/fr_FR/accountancy.lang
@@ -56,6 +56,8 @@ ExportAccountancy=Export comptabilité
WarningDataDisappearsWhenDataIsExported=Attention, cette liste ne contient que les écritures comptables qui n'ont pas encore été exportées (la date d'export est vide). Si vous souhaitez inclure les écritures comptables déjà exportées, cliquez sur le bouton ci-dessus.
VueByAccountAccounting=Vue par comptes comptables
VueBySubAccountAccounting=Affichage par compte auxiliaire
+AccountingAccountByDefault=Compte comptable par défaut
+AccountingAccountByDefaultShort=Compte par défaut
MainAccountForCustomersNotDefined=Compte comptable général pour les clients non défini dans la configuration
MainAccountForSuppliersNotDefined=Compte comptable général pour les fournisseurs non défini dans la configuration
@@ -166,6 +168,7 @@ ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Activer l'export brouillon sur les journa
ACCOUNTANCY_COMBO_FOR_AUX=Activer la liste déroulante pour les comptes auxiliaires (des lenteurs peuvent être rencontrées si vous avez de nombreux tiers)
ACCOUNTING_DATE_START_BINDING=Désactiver la liaison & le transfert en comptabilité lorsque la date est inférieure à cette date (les transactions antérieures à cette date seront exclues par défaut)
ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=Sur la page de transfert des données en comptabilité, quelle est la période sélectionnée par défaut
+ACCOUNTING_LABEL_OPERATION_ON_TRANSFER=Lors de la génération de la comptabilité, définir le libellé des écritures par défaut
ACCOUNTING_SELL_JOURNAL=Ventes
ACCOUNTING_PURCHASE_JOURNAL=Achats
ACCOUNTING_BANK_JOURNAL=Banque
@@ -177,8 +180,10 @@ ACCOUNTING_SOCIAL_JOURNAL=Paie
ACCOUNTING_RESULT_PROFIT=Compte de résultat (Profit)
ACCOUNTING_RESULT_LOSS=Compte de résultat (perte)
ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal de clôture annuel
-ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_BALANCE_SHEET_ACCOUNT=Groupes Comptabilité utilisés pour les comptes de la balance (séparés par une virgule)
-ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT=Groupes de comptabilité utilisés pour le compte de résultat (séparés par une virgule)
+ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_BALANCE_SHEET_ACCOUNT=Groupes de comptes utilisés pour le calcul de la feuille balance
+ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_BALANCE_SHEET_ACCOUNTHelp=Définissez ici la liste des groupes de comptes (définis dans le plan comptable) qui doivent être utilisés pour trouver tous les comptes afin de calculer la balance. Utilisez une virgule pour séparer chaque valeur. Exemple : CAPIT,IMMO,STOCK,FINAN,THIRDPARTY
+ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT=Groupes de comptes utilisés pour le calcul du compte de résultat
+ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENTHelp=Définissez ici la liste des groupes de comptes (définis dans le plan comptable) qui doivent être utilisés pour rechercher tous les comptes afin de calculer le compte de résultat. Utilisez une virgule pour séparer chaque valeur. Exemple : REVENUS, DÉPENSES
ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte comptable par défaut pour les virements internes
TransitionalAccount=Compte transitoire de virement bancaire
ACCOUNTING_ACCOUNT_SUSPENSE=Compte comptable par défaut pour les opérations en attente
@@ -214,14 +219,18 @@ Codejournal=Journal
JournalLabel=Libellé journal
NumPiece=Numéro de pièce
TransactionNumShort=Num. transaction
+AccountingReport=Rapports personnalisés
AccountingCategory=Groupe de comptes personnalisé
AccountingCategories=Groupes de comptes personnalisés
GroupByAccountAccounting=Affichage par compte comptable
GroupBySubAccountAccounting=Affichage par compte auxiliaire
+AccountingAccountReportsDesc=Vous pouvez définir ici des rapports pour la comptabilité. Ils seront utilisés pour les rapports comptables personnalisés.
AccountingAccountGroupsDesc=Vous pouvez définir ici des groupes de comptes comptable. Il seront utilisés pour les reporting comptables personnalisés
ByAccounts=Par compte comptable
ByPredefinedAccountGroups=Par groupes prédéfinis
ByPersonalizedAccountGroups=Par groupes personnalisés
+Personalized=Personnalisé
+NoReportDefined=Aucun rapport personnalisé défini
NotMatch=Non défini
DeleteMvt=Supprimer certaines lignes de la comptabilité
DelMonth=Mois à effacer
@@ -270,7 +279,7 @@ DescVentilCustomer=Consultez ici la liste des lignes de facture client lié (ou
DescVentilMore=Dans la plupart des cas, si vous utilisez des produits ou services prédéfinis et que vous paramétrez le compte (du plan comptable) sur la fiche produit/service, l'application pourra faire toute la liaison entre vos lignes de facture et le compte comptable de votre plan comptable des comptes, juste en un clic avec le bouton "%s" . Si le compte n'a pas été défini sur les fiches produits/services ou s'il vous reste des lignes non liées à un compte, vous devrez effectuer une liaison manuelle depuis le menu "%s".
DescVentilDoneCustomer=Consultez ici la liste des lignes de factures clients et leur compte comptable produits
DescVentilTodoCustomer=Lier les lignes de factures non déjà liées à un compte comptable produit
-ChangeAccount=Modifiez le compte comptable de produit/service pour les lignes sélectionnées avec le compte suivant :
+ChangeAccount=Modifiez le compte produit/service (à partir du plan comptable) pour les lignes sélectionnées avec :
Vide=-
DescVentilSupplier=Consultez ici la liste des lignes de factures fournisseurs déjà liées ou non à un compte produit du plan comptable (seuls les enregistrements non déjà transférés en comptabilité sont visibles)
DescVentilDoneSupplier=Consultez ici la liste des lignes de factures fournisseurs et leur compte comptable
@@ -280,7 +289,7 @@ DescVentilExpenseReportMore=Si vous avez défini des comptes comptables au nivea
DescVentilDoneExpenseReport=Consultez ici la liste des lignes des notes de frais et leur compte comptable
Closure=Clôture annuelle
AccountancyClosureStep1Desc=Consultez ici le nombre de mouvements par mois non encore validés & verrouillés
-OverviewOfMovementsNotValidated=Aperçu des mouvements non validés et verrouillés
+OverviewOfMovementsNotValidated=Aperçu des mouvements non encore validés et verrouillés
AllMovementsWereRecordedAsValidated=Tous les mouvements ont été enregistrés comme validés et ont été verrouillés
NotAllMovementsCouldBeRecordedAsValidated=Certains mouvements n'ont pas pu être enregistrés comme validés et n'ont pas été verrouillés
ValidateMovements=Valider et verrouiller les mouvements
@@ -402,6 +411,7 @@ SaleEECWithoutVATNumber=Vente dans la CEE sans TVA, mais le N° de TVA Intracomm
ForbiddenTransactionAlreadyExported=Interdit : La transaction a été validée et/ou exportée.
ForbiddenTransactionAlreadyValidated=Interdit : La transaction a été validée.
DataMustHaveBeenTransferredInAccounting=Le transfert des données comptables doit avoir été effectué
+IfTransactionHasDueDate=Pour les transactions liées aux documents nécessitant un paiement
## Dictionary
Range=Plage de comptes
Calculated=Calculé
@@ -421,8 +431,8 @@ AccountancyOneUnletteringModifiedSuccessfully=Une annulation de lettrage modifi
AccountancyUnletteringModifiedSuccessfully=%s annulations de lettrage modifiées avec succès
## Closure
AccountancyClosureStep1=Valider et verrouiller les mouvements
-AccountancyClosureStep2=Clôturer l'exercice
-AccountancyClosureStep3=Extraire les entrées (facultatif)
+AccountancyClosureStep2=Clôturer l'exercice fiscal
+AccountancyClosureStep3=Extourner les écritures (facultatif)
AccountancyClosureClose=Clôturer l'exercice fiscal
AccountancyClosureAccountingReversal=Extraire et enregistrer les entrées des « A nouveaux »
AccountancyClosureStep3NewFiscalPeriod=Prochain exercice fiscal
@@ -455,7 +465,7 @@ AccountancyErrorMismatchBalanceAmount=Le solde (%s) n'est pas égal à 0
AccountancyErrorLetteringBookkeeping=Des erreurs sont survenues concernant les transactions : %s
ErrorAccountNumberAlreadyExists=Le code comptable %s existe déjà
ErrorArchiveAddFile=Impossible de mettre le fichier "%s" dans l'archive
-ErrorNoFiscalPeriodActiveFound=Aucune période fiscale active trouvée. Vous pouvez en créer une à partir du menu %s - %s - %s.
+ErrorNoFiscalPeriodActiveFound=Aucune période fiscale active (avec une date de début et définie) n'a été trouvée. Vous pouvez en créer une à partir du menu %s - %s - %s.
ErrorBookkeepingDocDateNotOnActiveFiscalPeriod=La date du document comptable n'est pas comprise dans la période fiscale active
ErrorBookkeepingDocDateIsOnAClosedFiscalPeriod=La date du document comptable se situe dans un exercice clos
## Import
diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang
index e32c325c7d0..b87b9b8f964 100644
--- a/htdocs/langs/fr_FR/companies.lang
+++ b/htdocs/langs/fr_FR/companies.lang
@@ -65,6 +65,7 @@ State=Département / Canton
StateId=ID d'état
StateCode=Code État / Province
StateShort=Département
+DepartmentBuyer=Département de l'acheteur
Region=Région
Region-State=Région - État
Country=Pays
@@ -240,9 +241,9 @@ ProfId4UA=Id Prof 4 (Certificat)
ProfId5UA=Id Prof 5 (RNOKPP)
ProfId6UA=Id Prof 6 (TRDPAU)
ProfId1DZ=RC
-ProfId2DZ=Article
-ProfId3DZ=Numéro d'identification du fournisseur
-ProfId4DZ=Numéro d'identification du client
+ProfId2DZ=NIF
+ProfId3DZ=AI
+ProfId4DZ=NIS
VATIntra=Numéro de TVA
VATIntraShort=Numéro TVA
VATIntraSyntaxIsValid=Syntaxe valide
@@ -384,10 +385,10 @@ DolibarrLogin=Identifiant utilisateur
NoDolibarrAccess=Pas d'accès utilisateur
ExportDataset_company_1=Tiers (sociétés/institutions/particuliers) et attributs
ExportDataset_company_2=Contacts (de tiers) et attributs
-ExportDataset_company_3=Coordonnées bancaires des tiers
+ExportDataset_company_3=Modes de paiement tiers (comptes bancaires)
ImportDataset_company_1=Tiers (sociétés/institutions/particuliers) et attributs
ImportDataset_company_2=Contacts/Adresses (de tiers ou libre) et attributs
-ImportDataset_company_3=Coordonnées bancaires des tiers
+ImportDataset_company_3=Modes de paiement tiers (comptes bancaires)
ImportDataset_company_4=Commerciaux des Tiers (Affectation des Commerciaux aux Tiers)
PriceLevel=Niveau de prix
PriceLevelLabels=Libellé de niveau de prix
@@ -431,7 +432,7 @@ LeopardNumRefModelDesc=Code libre sans vérification.
ManagingDirectors=Nom du(des) gestionnaire(s) (PDG, directeur, président...)
MergeOriginThirdparty=Tiers en doublon (le tiers que vous voulez supprimer)
MergeThirdparties=Fusionner tiers
-ConfirmMergeThirdparties=Êtes-vous sur de vouloir fusionner ce tiers avec le tiers courant ? Tous ses objets liés (factures, commandes, ...) seront déplacés vers le tiers courant, après que le tiers choisi soit supprimé.
+ConfirmMergeThirdparties=Êtes-vous sûr de vouloir fusionner ce tiers avec l'actuel ? Tous les objets liés (factures, commandes, ...) seront déplacés vers le tiers actuel, puis le tiers choisi sera supprimé.
ThirdpartiesMergeSuccess=Les tiers ont été fusionnés
SaleRepresentativeLogin=Login du commercial
SaleRepresentativeFirstname=Prénom du commercial
@@ -461,3 +462,6 @@ ExternalSystemID=ID système externe
IDOfPaymentInAnExternalSystem=ID du mode de paiement dans un système externe (comme Stripe, Paypal, ...)
AADEWebserviceCredentials=Références du Webservice de l'AADE
ThirdPartyMustBeACustomerToCreateBANOnStripe=Le tiers doit être un client pour permettre la création de ces informations bancaires côté Stripe
+NewSocNameForClone=Nouveau nom société
+ConfirmCloneThirdparties=Êtes-vous sûr de vouloir cloner %s société ?
+SocialNetworksBusiness=Réseaux sociaux de la société
diff --git a/htdocs/langs/fr_FR/salaries.lang b/htdocs/langs/fr_FR/salaries.lang
index ea95262f6bf..d4dd5f25ee7 100644
--- a/htdocs/langs/fr_FR/salaries.lang
+++ b/htdocs/langs/fr_FR/salaries.lang
@@ -1,5 +1,5 @@
# Dolibarr language file - Source file is en_US - salaries
-SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Compte comptable par défaut pour les salaires "utilisateurs"
+SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Compte comptable général par défaut pour les salaires "utilisateurs"
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Le compte dédié défini sur la fiche utilisateur sera utilisé pour le compte auxiliaire uniquement. Celui-ci sera utilisé pour le compte général, mais également comme valeur par défaut du compte auxiliaire s'il n'y a pas de compte comptable défini sur l'utilisateur.
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Compte comptable par défaut pour les paiements de salaires
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=Par défaut, laissez vide l’option "Créer automatiquement un paiement complet" lors de la création d’un salaire
@@ -9,6 +9,8 @@ NewSalary=Nouveau salaire
AddSalary=Ajouter un salaire
NewSalaryPayment=Nouveau salaire
AddSalaryPayment=Ajouter paiement de salaire
+SalaryID=ID du salaire
+SalaryAmount=Montant du salaire
SalaryPayment=Règlement salaire
SalariesPayments=Règlements des salaires
SalariesPaymentsOf=Paiements des salaires de %s
@@ -31,3 +33,4 @@ BankTransferAmount=Montant du virement
WithdrawalReceipt=Ordres de virement
OrderWaiting=En attente
FillEndOfMonth=Remplir avec fin de mois
+UserPaySlip=Bulletin de paie
diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang
index d41460f4028..c8aece70148 100644
--- a/htdocs/langs/fr_FR/website.lang
+++ b/htdocs/langs/fr_FR/website.lang
@@ -12,7 +12,7 @@ WEBSITE_ALIASALTDesc=Utilisez ici la liste des autres noms / alias afin que la p
WEBSITE_CSS_URL=URL du fichier de la feuille de style (CSS) externe
WEBSITE_CSS_INLINE=Contenu du fichier CSS (commun à toute les pages)
WEBSITE_JS_INLINE=Contenu du fichier JavaScript (commun à toutes les pages)
-WEBSITE_HTML_HEADER=En-tête HTML (commun à toutes les pages)
+WEBSITE_HTML_HEADER=Ajout en bas de l'en-tête HTML (commun à toutes les pages)
WEBSITE_ROBOT=Fichier robot (robots.txt)
WEBSITE_HTACCESS=Fichier .htaccess du site web
WEBSITE_MANIFEST_JSON=Fichier manifest.json de site Web
@@ -56,16 +56,17 @@ ReadPerm=Lire
WritePerm=Écrire
TestDeployOnWeb=Tester/déployer sur le web
PreviewSiteServedByWebServer=Prévisualiser %s dans un nouvel onglet.
. Le %s sera servi par un serveur web externe (comme Apache, Nginx, IIS). Vous pouvez installer et configurer ce serveur auparavant pour pointer sur le répertoire : %s URL servie par un serveur externe: %s
-PreviewSiteServedByDolibarr=Aperçu %s dans un nouvel onglet.
Le %s sera servi par le serveur Dolibarr aussi aucun serveur Web supplémentaire (comme Apache, Nginx, IIS) n'est nécessaire. L'inconvénient est que l'URL des pages ne sont pas sexy et commencent par un chemin de votre Dolibarr. URL servie par Dolibarr: %s
Pour utiliser votre propre serveur web externe pour servir ce site web, créez un virtual host sur votre serveur web qui pointe sur le répertoire %s ensuite entrez le nom de ce virtual host dans les propriétés de ce site web et cliquer sur le lien "Tester/Déployer sur le web".
+PreviewSiteServedByDolibarr=Aperçu %s dans un nouvel onglet.
Le %s sera servi par le serveur Dolibarr, il n'a donc pas besoin d'installer de serveur Web supplémentaire (comme Apache, Nginx, IIS). L'inconvénient est que les URL des pages ne sont pas sexys et commencent par le chemin de votre Dolibarr. URL servie par Dolibarr: %s
Pour déployer ou tester en utilisant votre propre serveur Web externe (comme Apache, Nginx, Lighttp), utilisez le lien "%s".
VirtualHostUrlNotDefined=URL du virtual host servit par le serveur web externe non défini
NoPageYet=Pas de page pour l'instant
YouCanCreatePageOrImportTemplate=Vous pouvez créer une nouvelle page ou importer un modèle de site Web complet.
SyntaxHelp=Aide sur quelques astuces spécifiques de syntaxe
YouCanEditHtmlSourceckeditor=Vous pouvez éditer le code source en activant l'éditeur HTML avec le bouton "Source".
YouCanEditHtmlSource= Vous pouvez inclure du code PHP dans cette source en utilisant les tags <?php ?>. Les variables globales suivantes sont disponibles : $conf, $db, $mysoc, $utilisateur, $website, $websitepage, $weblangs, $pagelangs.
Vous pouvez également inclure du contenu d'une autre page/conteneur avec la syntaxe suivante : <?php includeContainer('alias_of_container_to_include'); ?>
Vous pouvez effectuer une redirection vers une autre page/conteneur avec la syntaxe suivante (Remarque : ne génère aucun contenu avant une redirection) : <?php redirectToContainer(' alias_of_container_to_redirect_to'); ?> Vous pouvez également effectuer une redirection avec les paramètres GET : <?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?>
Pour ajouter un lien vers une autre page, utilisez la syntaxe : <a href="alias_of_page_to_link_to.php" >monlien<a>
Pour inclure un lien pour télécharger un fichier stocké dans le répertoire documents, utilisez l'encapsuleur document.php : Exemple, pour un fichier dans documents/ecm (besoin d'être loggué), la syntaxe est : <a href="/document.php?modulepart=ecm&fichier= [relative_dir/]filename.ext"> Pour un fichier dans des documents/médias (répertoire ouvert en accès public), la syntaxe est: <a href="/document.php?modulepart=medias&fichier=[relative_dir/]filename.ext"> Pour un fichier partagé avec un lien de partage (accès ouvert en utilisant la clé de partage de fichier), la syntaxe est: <a href="/document.php?hashp=publicsharekeyoffile">
-YouCanEditHtmlSource1= Pour inclure une image stockée dans le répertoire documents, utilisez l'encapsuleurviewimage.php. Par exemple, pour une image dans documents/medias (répertoire ouvert en accès public), la syntaxe est : <img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
-YouCanEditHtmlSource2=Pour une image partagée avec un lien de partage (accès ouvert à l'aide de la clé de partage du fichier), la syntaxe est la suivante: <img src = "/viewimage.php?hashp=12345679012...">
+YouCanEditHtmlSource1= Pour inclure une image stockée dans le répertoire medias (répertoire ouvert au public), utilisez le chemin relatif commençant par /medias, exemple: <img src="/medias/image/myimagepath/filename.ext">
+YouCanEditHtmlSource2=Pour une image partagée avec un lien de partage (accès libre à l'aide de la clé de partage de fichier), utilisez l'encapsuleur : <img src="/viewimage.php?hashp=12345679012...">
YouCanEditHtmlSource3=Pour obtenir l'adresse URL de l'image d'un objet PHP, utilisez <img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSource4=Pour obtenir l'URL d'une image à l'intérieur du contenu HTML d'un article, utilisez <img src="<?php print getImageFromHtmlContent($htmlcontent, 1) ?>">
YouCanEditHtmlSourceMore= Plus d'exemples de code HTML ou dynamique disponibles sur la documentation wiki.
ClonePage=Cloner la page/container
CloneSite=Cloner le site
@@ -94,8 +95,8 @@ SorryWebsiteIsCurrentlyOffLine=Désolé, ce site est actuellement hors ligne. Me
WEBSITE_USE_WEBSITE_ACCOUNTS=Activer la table des comptes de site Web
WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Activer la table pour stocker les comptes de site Web (login / pass) pour chaque site web / tiers
YouMustDefineTheHomePage=Vous devez d'abord définir la page d'accueil par défaut
-OnlyEditionOfSourceForGrabbedContentFuture=Avertissement : La création d'une page Web en important une page Web externe est réservée aux utilisateurs expérimentés. Selon la complexité de la page source, le résultat de l'importation peut différer de l'original. De même, si la page source utilise un style CSS en conflit ou un code JavaScript non compatible, cela peut altérer l'apparence ou les fonctionnalités de l'éditeur de site Web lorsque vous travaillez sur cette page. Cette méthode est un moyen plus rapide de créer une nouvelle page, mais il est recommandé de créer votre nouvelle page à partir de zéro ou à partir d’un modèle de page suggéré. Notez également que l’éditeur en ligne peut ne pas fonctionner correctement quand il est utilisé sur une page créée par aspiration.
-OnlyEditionOfSourceForGrabbedContent=Seule l'édition de source HTML est possible lorsque le contenu a été aspiré depuis un site externe
+OnlyEditionOfSourceForGrabbedContentFuture=Avertissement : la création d'une page Web en important une page Web externe est réservée aux utilisateurs expérimentés. Selon la complexité de la page source, le résultat de l'importation peut différer de l'original. De plus, si la page source utilise des styles CSS en conflit ou un code JavaScript non compatible, cela peut altérer l'apparence ou les fonctionnalités de l'éditeur de site Web lorsque vous travaillez sur cette page. Cette méthode est un moyen plus rapide de créer une page, mais il est recommandé de créer votre nouvelle page à partir de zéro ou d'un modèle de page suggéré. Notez également que l'éditeur en ligne peut ne pas fonctionner correctement lorsqu'il est utilisé sur une page externe récupérée.
+OnlyEditionOfSourceForGrabbedContent=Seule la modification de la source HTML est possible lorsque le contenu est récupéré à partir d'un site externe
GrabImagesInto=Aspirer aussi les images trouvées dans les css et la page.
ImagesShouldBeSavedInto=Les images doivent être sauvegardées dans le répertoire
WebsiteRootOfImages=Répertoire racine pour les images de site Web
@@ -260,7 +261,7 @@ freeShipping=Expédition gratuite !
noProducts=Aucun produits
nbrItemsInCart=Il y a 0 articles dans votre panier.
pricesMayVaryDependingOnYourCountry=Les prix peuvent varier en fonction de votre pays.
-checkOut=Vérifier
+checkOut=Finaliser la commande
productAddedToCart=Produit ajouté avec succès à votre panier
thereIsItemInYourCart=Il y a 1 article dans votre panier.
continueShopping=Continuer vos achats
@@ -273,7 +274,7 @@ sidebarCategories=Catégories
noSubCat=Pas de sous-catégorie
specialPromo=Promotions
allSpecials=Toutes les promotions
-newProducts=Nouveau produits
+newProducts=Nouveaux produits
allNewProducts= Tous les nouveaux produits
view=Voir :
grid=Grille
@@ -289,7 +290,7 @@ showAll=Afficher tout
showing= Affichage
nbrOfProducts= Il y a %s produits.
noResultsHaveBeenFound=0 résultats ont été trouvés.
-noResultsWereFound= Aucun résultat n'a été trouvé.
+noResultsWereFound=Aucun résultat n'a été trouvé.
addToCart=Ajouter au panier
backHome=Revenir à l'Accueil
priceDrop=Baisse des prix
@@ -357,3 +358,4 @@ subtract=Soustraire
LoginCheckout=Connectez-vous et procédez au paiement
paymentSuccessProcessed=Votre paiement a été traité avec succès.
youWillBeRedirectedToOrderPage=Vous serez rapidement redirigé vers la page de détails commande.
+WebPortalSetupNotComplete=La configuration du portail Web n'est pas terminée
diff --git a/htdocs/langs/fr_GA/blockedlog.lang b/htdocs/langs/fr_GA/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/fr_GA/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/fr_GA/categories.lang b/htdocs/langs/fr_GA/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/fr_GA/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/fr_GA/datapolicy.lang b/htdocs/langs/fr_GA/datapolicy.lang
new file mode 100644
index 00000000000..37f9d1f48dc
--- /dev/null
+++ b/htdocs/langs/fr_GA/datapolicy.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
+DATAPOLICY_Tooltip_SETUP=Define the delay with no interaction after which you want the record to be automatically purged.
diff --git a/htdocs/langs/fr_GA/members.lang b/htdocs/langs/fr_GA/members.lang
new file mode 100644
index 00000000000..49313a51d14
--- /dev/null
+++ b/htdocs/langs/fr_GA/members.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - members
+MembersByCountryDesc=This screen shows you the statistics of members by countries. Graphs and charts depend on the availability of the Google online graph service as well as on the availability of a working internet connection.
diff --git a/htdocs/langs/it_CH/blockedlog.lang b/htdocs/langs/it_CH/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/it_CH/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/it_CH/categories.lang b/htdocs/langs/it_CH/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/it_CH/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/it_CH/datapolicy.lang b/htdocs/langs/it_CH/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/it_CH/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/it_CH/errors.lang b/htdocs/langs/it_CH/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/it_CH/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/it_CH/mails.lang b/htdocs/langs/it_CH/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/it_CH/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/nl_BE/datapolicy.lang b/htdocs/langs/nl_BE/datapolicy.lang
new file mode 100644
index 00000000000..ed66a2bc0ab
--- /dev/null
+++ b/htdocs/langs/nl_BE/datapolicy.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - datapolicy
+datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes. The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below).
diff --git a/htdocs/langs/nl_BE/mrp.lang b/htdocs/langs/nl_BE/mrp.lang
new file mode 100644
index 00000000000..64b1c7fa33e
--- /dev/null
+++ b/htdocs/langs/nl_BE/mrp.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - mrp
+DisableStockChange=Voorraadwijziging uitgeschakeld
diff --git a/htdocs/langs/nl_BE/multicurrency.lang b/htdocs/langs/nl_BE/multicurrency.lang
new file mode 100644
index 00000000000..1ff628d8cb9
--- /dev/null
+++ b/htdocs/langs/nl_BE/multicurrency.lang
@@ -0,0 +1,9 @@
+# Dolibarr language file - Source file is en_US - multicurrency
+multicurrency_appId=API-sleutel
+multicurrency_appCurrencySource=Bronvaluta
+multicurrency_alternateCurrencySource=Alternatieve bronvaluta
+MulticurrencyReceived=Ontvangen, oorspronkele valuta
+Codemulticurrency=valutacode
+CancelUpdate=Annuleren
+CurrencyCode=Valutacode
+MutltiCurrencyAutoUpdateCurrencies=Alle valutakoersen bijwerken
diff --git a/htdocs/langs/pt_AO/blockedlog.lang b/htdocs/langs/pt_AO/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/pt_AO/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/pt_AO/categories.lang b/htdocs/langs/pt_AO/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/pt_AO/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/pt_AO/errors.lang b/htdocs/langs/pt_AO/errors.lang
new file mode 100644
index 00000000000..259151779e4
--- /dev/null
+++ b/htdocs/langs/pt_AO/errors.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - errors
+ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
diff --git a/htdocs/langs/pt_AO/hrm.lang b/htdocs/langs/pt_AO/hrm.lang
new file mode 100644
index 00000000000..73b810239f7
--- /dev/null
+++ b/htdocs/langs/pt_AO/hrm.lang
@@ -0,0 +1,5 @@
+# Dolibarr language file - Source file is en_US - hrm
+RequiredRank=Required rank for the job profile
+RequiredRankShort=Required rank
+EmployeeRank=Employee rank for this skill
+EmployeeRankShort=Employee rank
diff --git a/htdocs/langs/pt_AO/mails.lang b/htdocs/langs/pt_AO/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/pt_AO/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/pt_MZ/bills.lang b/htdocs/langs/pt_MZ/bills.lang
index d97a4f873ab..ba85707e9a8 100644
--- a/htdocs/langs/pt_MZ/bills.lang
+++ b/htdocs/langs/pt_MZ/bills.lang
@@ -229,7 +229,6 @@ IdSocialContribution=ID contribuição social
PaymentId=ID pagamento
PaymentRef=Ref. do pagamento
InvoiceId=ID fatura
-InvoiceRef=Ref. fatura
InvoiceDateCreation=Data da criação da fatura
InvoiceStatus=Status da fatura
InvoiceNote=Nota de fatura
diff --git a/htdocs/langs/pt_MZ/receiptprinter.lang b/htdocs/langs/pt_MZ/receiptprinter.lang
new file mode 100644
index 00000000000..51c20fa5b39
--- /dev/null
+++ b/htdocs/langs/pt_MZ/receiptprinter.lang
@@ -0,0 +1,2 @@
+# Dolibarr language file - Source file is en_US - receiptprinter
+InvoiceRef=Ref. de fatura
diff --git a/htdocs/langs/ru_UA/blockedlog.lang b/htdocs/langs/ru_UA/blockedlog.lang
new file mode 100644
index 00000000000..95e99de46ae
--- /dev/null
+++ b/htdocs/langs/ru_UA/blockedlog.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - Source file is en_US - blockedlog
+KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this record after it was recorded, or has erased the previous archived record (check that line with previous # exists) or has modified checksum of the previous record.
+DataOfArchivedEvent=Full data of archived event
diff --git a/htdocs/langs/ru_UA/categories.lang b/htdocs/langs/ru_UA/categories.lang
new file mode 100644
index 00000000000..067e1fcef81
--- /dev/null
+++ b/htdocs/langs/ru_UA/categories.lang
@@ -0,0 +1,4 @@
+# Dolibarr language file - Source file is en_US - categories
+AddCustomerIntoCategory=Assign category to customer
+AddSupplierIntoCategory=Assign category to supplier
+AssignCategoryTo=Assign category to
diff --git a/htdocs/langs/ru_UA/mails.lang b/htdocs/langs/ru_UA/mails.lang
new file mode 100644
index 00000000000..faa6ff93e2c
--- /dev/null
+++ b/htdocs/langs/ru_UA/mails.lang
@@ -0,0 +1,20 @@
+# Dolibarr language file - Source file is en_US - mails
+EMailings=EMailings
+AllEMailings=All eMailings
+ShowEMailing=Show emailing
+ListOfEMailings=List of emailings
+NewMailing=New emailing
+EditMailing=Edit emailing
+ResetMailing=Resend emailing
+ConfirmResetMailingTargetMassaction=Confirmation of the reset of targets statusin error
+DeleteMailing=Delete emailing
+PreviewMailing=Preview emailing
+CreateMailing=Create emailing
+ValidMailing=Valid emailing
+MailingArea=EMailings area
+LastMailings=Latest %s emailings
+SearchAMailing=Search mailing
+SendMailing=Send emailing
+LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session.
+NbOfEMailingsReceived=Mass emailings received
+NbOfEMailingsSend=Mass emailings sent
diff --git a/htdocs/langs/vi_VN/companies.lang b/htdocs/langs/vi_VN/companies.lang
index 34ce5392ee0..7064c4bfd5b 100644
--- a/htdocs/langs/vi_VN/companies.lang
+++ b/htdocs/langs/vi_VN/companies.lang
@@ -65,6 +65,7 @@ State=Bang/Tỉnh
StateId=ID tiểu bang
StateCode=Mã tiểu bang / tỉnh
StateShort=Tỉnh/ thành
+DepartmentBuyer=Buyer's state/province
Region=Vùng
Region-State=Vùng - Tỉnh/ thành
Country=Quốc gia
@@ -252,7 +253,7 @@ Prospect=KH tiềm năng
CustomerCard=Thẻ khách hàng
Customer=Khách hàng
CustomerRelativeDiscount=Giảm giá theo số tiền
-SupplierRelativeDiscount=Giảm giá tương đối nhà cung cấp (%)
+SupplierRelativeDiscount=Chiết khấu của nhà cung cấp tương đối
CustomerRelativeDiscountShort=Giảm giá theo %
CustomerAbsoluteDiscountShort=Giảm giá theo số tiền
CompanyHasRelativeDiscount=Khách hàng này có giảm giá mặc định là %s%%
@@ -384,10 +385,10 @@ DolibarrLogin=Đăng nhập Dolibarr
NoDolibarrAccess=Không truy cập Dolibarr
ExportDataset_company_1=Bên thứ ba (công ty / tổ chức / người) và tính chất của họ
ExportDataset_company_2=Liên lạc và tính chất của họ
-ExportDataset_company_3=Tài khoản ngân hàng của bên thứ ba
+ExportDataset_company_3=Third-parties payment modes (bank accounts)
ImportDataset_company_1=Bên thứ ba và tính chất của họ
ImportDataset_company_2=Các liên lạc/ địa chỉ và thuộc tính bổ sung của bên thứ ba
-ImportDataset_company_3=Tài khoản ngân hàng của bên thứ ba
+ImportDataset_company_3=Third-parties payment modes (bank accounts)
ImportDataset_company_4=Đại diện bán hàng của bên thứ ba (chỉ định đại diện bán hàng/ người dùng cho các công ty)
PriceLevel=Mức giá
PriceLevelLabels=Nhãn mức giá
@@ -431,7 +432,7 @@ LeopardNumRefModelDesc=Free code without verification.
ManagingDirectors=Tên quản lý (CEO, giám đốc, chủ tịch...)
MergeOriginThirdparty=Duplicated third party (the third party you want to delete)
MergeThirdparties=Hợp nhất bên thứ ba
-ConfirmMergeThirdparties=Bạn có chắc chắn muốn hợp nhất bên thứ ba đã chọn với bên hiện tại không? Tất cả các đối tượng được liên kết (hóa đơn, đơn đặt hàng, ...) sẽ được chuyển sang bên thứ ba hiện tại, sau đó bên thứ ba được chọn sẽ bị xóa.
+ConfirmMergeThirdparties=Are you sure you want to merge the chosen third party with the current one? All linked objects (invoices, orders, ...) will be moved to the current third party, then the chosen third party will be deleted.
ThirdpartiesMergeSuccess=Các bên thứ ba đã được sáp nhập
SaleRepresentativeLogin=Đăng nhập của đại diện bán hàng
SaleRepresentativeFirstname=Tên đại diện bán hàng
@@ -461,3 +462,6 @@ ExternalSystemID=ID hệ thống bên ngoài
IDOfPaymentInAnExternalSystem=ID của chế độ thanh toán vào hệ thống bên ngoài (như Stripe, Paypal, ...)
AADEWebserviceCredentials=Thông tin xác thực dịch vụ web AADE
ThirdPartyMustBeACustomerToCreateBANOnStripe=Bên thứ ba phải là khách hàng để cho phép tạo thông tin ngân hàng của mình ở phía Stripe
+NewSocNameForClone=New company name
+ConfirmCloneThirdparties=Are you sure that you want to clone %s company ?
+SocialNetworksBusiness=Social networks for company
diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php
index 71eac7d65dd..8db118c97c1 100644
--- a/htdocs/opensurvey/results.php
+++ b/htdocs/opensurvey/results.php
@@ -828,7 +828,7 @@ if ($object->format == "D") {
$sumfor = array();
$sumagainst = array();
$compteur = 0;
-$sql = "SELECT id_users, nom as name, id_sondage, reponses";
+$sql = "SELECT id_users, nom as name, id_sondage, reponses, tms, date_creation";
$sql .= " FROM ".MAIN_DB_PREFIX."opensurvey_user_studs";
$sql .= " WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog('sql='.$sql);
@@ -850,7 +850,10 @@ while ($compteur < $num) {
}
// Name
- print '