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 ''.$langs->trans("NbOfMembers").' - * Copyright (C) 2024 Frédéric France +/* Copyright (C) 2019-2023 Open-DSI + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2025 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,7 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php'; */ // Load translation files required by the page -$langs->loadLangs(array("compta", "bills", "other", "accountancy")); +$langs->loadLangs(array("accountancy", "bills", "compta", "exports", "other")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'aZ09'); @@ -410,7 +411,7 @@ if (empty($current_fiscal_period)) { // Step 2 $head = array(); $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; - $head[0][1] = $langs->trans("Step").(getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE") ? '1' : '2').' - '.$langs->trans("AccountancyClosureStep2"); + $head[0][1] = $langs->trans("Step"). ' ' . (getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE") ? '1' : '2').' - '.$langs->trans("AccountancyClosureStep2"); $head[0][2] = 'step2'; print dol_get_fiche_head($head, 'step2', '', -1, ''); @@ -433,7 +434,7 @@ if (empty($current_fiscal_period)) { // Step 3 $head = array(); $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; - $head[0][1] = $langs->trans("Step").(getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE") ? '2' : '3').' - '.$langs->trans("AccountancyClosureStep3"); + $head[0][1] = $langs->trans("Step"). ' ' . (getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE") ? '2' : '3').' - '.$langs->trans("AccountancyClosureStep3"); $head[0][2] = 'step3'; print dol_get_fiche_head($head, 'step3', '', -1, ''); diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 0e168adddb2..bc7e0c14462 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -323,7 +323,7 @@ class Adherent extends CommonObject 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'default' => '1', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 12, 'index' => 1), 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1), - 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 20), + 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 20), 'civility' => array('type' => 'varchar(6)', 'label' => 'Civility', 'enabled' => 1, 'visible' => -1, 'position' => 25), 'lastname' => array('type' => 'varchar(50)', 'label' => 'Lastname', 'enabled' => 1, 'visible' => 1, 'position' => 30, 'showoncombobox' => 1), 'firstname' => array('type' => 'varchar(50)', 'label' => 'Firstname', 'enabled' => 1, 'visible' => 1, 'position' => 35, 'showoncombobox' => 1), @@ -399,6 +399,8 @@ class Adherent extends CommonObject $this->isextrafieldmanaged = 1; // les champs optionnels sont vides $this->array_options = array(); + + $this->fields['ref_ext']['visible'] = getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT'); } diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index f9cde4b5363..7ec045037ad 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -1272,55 +1272,57 @@ if ($mode == 'marketplace') { if (!getDolGlobalString('MAIN_DISABLE_DOLISTORE_SEARCH') && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 1) { // $options is array with filter criteria - $nbmaxtoshow = $options['per_page']; - $options['per_page']++; + if (getDolGlobalInt('MAIN_ENANLE_OLD_DOLISTORE')) { + $nbmaxtoshow = $options['per_page']; + $options['per_page']++; - $remotestore->getRemoteCategories(); - $remotestore->getRemoteProducts($options); + $remotestore->getRemoteCategories(); + $remotestore->getRemoteProducts($options); - print ''.$langs->trans('DOLISTOREdescriptionLong').'

'; + print ''.$langs->trans('DOLISTOREdescriptionLong').'

'; - $previouslink = $remotestore->get_previous_link(); - $nextlink = $remotestore->get_next_link(); + $previouslink = $remotestore->get_previous_link(); + $nextlink = $remotestore->get_next_link(); - print '
'; + print '
'; - print '
'; ?> - - -
-
-
-
- - ">trans('Reset') ?> + print ''; ?> + + +
+
+
+
+ + ">trans('Reset') ?> -   -
- '; +   +
+ '; - print '
'; - print '
'; - ?> + print '
'; + print '
'; + ?> -
-
    - get_categories(); // Do not use dol_escape_htmltag here, it is already a structured content?> -
-
+
+
    + get_categories(); // Do not use dol_escape_htmltag here, it is already a structured content?> +
+
-
- - - get_products($nbmaxtoshow); ?> - -
-
- + + + get_products($nbmaxtoshow); ?> + +
+ + array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 10, 'notnull' => 1, 'visible' => -1,), 'fk_parent' => array('type' => 'integer', 'label' => 'Fkparent', 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'visible' => -1, 'css' => 'maxwidth500 widthcentpercentminusxx',), 'label' => array('type' => 'varchar(180)', 'label' => 'Label', 'enabled' => 1, 'position' => 25, 'notnull' => 1, 'visible' => -1, 'alwayseditable' => 1, 'css' => 'minwidth300', 'cssview' => 'wordbreak', 'csslist' => 'tdoverflowmax150',), - 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'Refext', 'enabled' => 1, 'position' => 30, 'notnull' => 0, 'visible' => 0, 'alwayseditable' => 1,), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'position' => 30, 'notnull' => 0, 'visible' => 0, 'alwayseditable' => 1,), 'type' => array('type' => 'integer', 'label' => 'Type', 'enabled' => 1, 'position' => 35, 'notnull' => 1, 'visible' => -1, 'alwayseditable' => 1,), 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 40, 'notnull' => 0, 'visible' => -1, 'alwayseditable' => 1,), 'color' => array('type' => 'varchar(8)', 'label' => 'Color', 'enabled' => 1, 'position' => 45, 'notnull' => 0, 'visible' => -1, 'alwayseditable' => 1,), diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 65f7b52d63d..a78da69017f 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -452,7 +452,9 @@ class Propal extends CommonObject $this->socid = $socid; $this->id = $propalid; - $this->duree_validite = getDolGlobalInt('PROPALE_VALIDITY_DURATION', 0); + $this->duree_validite = getDolGlobalInt('PROPALE_VALIDITY_DURATION'); + + $this->fields['ref_ext']['visible'] = getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT'); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 51d768c61a1..bacf56cc3b4 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -426,6 +426,8 @@ class Commande extends CommonOrder $this->ismultientitymanaged = 1; $this->isextrafieldmanaged = 1; + + $this->fields['ref_ext']['visible'] = getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT'); } /** diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 8adedcdf6d4..25995dd5ffb 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -102,6 +102,7 @@ $search_all = trim(GETPOST('search_all', 'alphanohtml')); $search_product_category = GETPOST('search_product_category', 'intcomma'); $search_id = GETPOST('search_id', 'int'); $search_ref = GETPOST('search_ref', 'alpha') != '' ? GETPOST('search_ref', 'alpha') : GETPOST('sref', 'alpha'); +$search_ref_ext = GETPOST('search_ref_ext', 'alpha'); $search_ref_customer = GETPOST('search_ref_customer', 'alpha'); $search_company = GETPOST('search_company', 'alpha'); $search_company_alias = GETPOST('search_company_alias', 'alpha'); @@ -201,6 +202,7 @@ $checkedtypetiers = 0; $arrayfields = array( 'c.rowid' => array('label' => "ID", 'checked' => 1, 'enabled' => getDolGlobalInt('MAIN_SHOW_TECHNICAL_ID'), 'position' => 1), 'c.ref' => array('label' => "Ref", 'checked' => 1, 'position' => 5, 'searchall' => 1), + 'c.ref_ext' => array('label' => "RefExt", 'checked' => 1, 'position' => 5, 'visible' => 0, 'searchall' => 1), 'c.ref_client' => array('label' => "RefCustomerOrder", 'checked' => -1, 'position' => 10, 'searchall' => 1), 'p.ref' => array('label' => "ProjectRef", 'checked' => -1, 'enabled' => (!isModEnabled('project') ? 0 : 1), 'position' => 20), 'p.title' => array('label' => "ProjectLabel", 'checked' => 0, 'enabled' => (!isModEnabled('project') ? 0 : 1), 'position' => 25), @@ -309,6 +311,7 @@ if (empty($reshook)) { $search_product_category = ''; $search_id = ''; $search_ref = ''; + $search_ref_ext = ''; $search_ref_customer = ''; $search_company = ''; $search_company_alias = ''; @@ -715,6 +718,9 @@ if (empty($reshook)) { if ($search_ref) { $param .= '&search_ref='.urlencode($search_ref); } + if ($search_ref_ext) { + $param .= '&search_ref_ext='.urlencode($search_ref_ext); + } if ($search_company) { $param .= '&search_company='.urlencode($search_company); } @@ -897,7 +903,7 @@ $sql .= " s2.nom as name2,"; $sql .= " typent.code as typent_code,"; $sql .= " state.code_departement as state_code, state.nom as state_name,"; $sql .= " country.code as country_code,"; -$sql .= ' c.rowid, c.ref, c.total_ht, c.total_tva, c.total_ttc, c.ref_client, c.fk_user_author,'; +$sql .= ' c.rowid, c.ref, c.ref_ext, c.total_ht, c.total_tva, c.total_ttc, c.ref_client, c.fk_user_author,'; $sql .= ' c.fk_multicurrency, c.multicurrency_code, c.multicurrency_tx, c.multicurrency_total_ht, c.multicurrency_total_tva as multicurrency_total_vat, c.multicurrency_total_ttc,'; $sql .= ' c.date_valid, c.date_commande, c.note_public, c.note_private, c.date_livraison as delivery_date, c.fk_statut, c.facture as billed,'; $sql .= ' c.date_creation as date_creation, c.tms as date_modification, c.date_cloture as date_cloture,'; @@ -931,7 +937,7 @@ if (!empty($extrafields->attributes[$object->table_element]['label']) && is_arra $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."commande_extrafields as ef on (c.rowid = ef.fk_object)"; } if ($search_all) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'commandedet as pd ON c.rowid=pd.fk_commande'; + $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'commandedet as pd ON c.rowid = pd.fk_commande'; } $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = c.fk_projet"; $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'user as u ON c.fk_user_author = u.rowid'; @@ -961,6 +967,9 @@ if ($search_id > 0) { if ($search_ref) { $sql .= natural_search('c.ref', $search_ref); } +if ($search_ref_ext) { + $sql .= natural_search('c.ref_ext', $search_ref_ext); +} if ($search_ref_customer) { $sql .= natural_search('c.ref_client', $search_ref_customer); } @@ -1316,6 +1325,9 @@ if ($search_id) { if ($search_ref) { $param .= '&search_ref='.urlencode($search_ref); } +if ($search_ref_ext) { + $param .= '&search_ref_ext='.urlencode($search_ref_ext); +} if ($search_company) { $param .= '&search_company='.urlencode($search_company); } @@ -1647,6 +1659,12 @@ if (!empty($arrayfields['c.ref']['checked'])) { print ''; print ''; } +// Ref ext +if (!empty($arrayfields['c.ref_ext']['checked'])) { + print ''; + print ''; + print ''; +} // Ref customer if (!empty($arrayfields['c.ref_client']['checked'])) { print ''; @@ -1944,6 +1962,10 @@ if (!empty($arrayfields['c.ref']['checked'])) { print_liste_field_titre($arrayfields['c.ref']['label'], $_SERVER["PHP_SELF"], 'c.ref', '', $param, '', $sortfield, $sortorder); $totalarray['nbfield']++; } +if (!empty($arrayfields['c.ref_ext']['checked'])) { + print_liste_field_titre($arrayfields['c.ref_ext']['label'], $_SERVER["PHP_SELF"], 'c.ref_ext', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} if (!empty($arrayfields['c.ref_client']['checked'])) { print_liste_field_titre($arrayfields['c.ref_client']['label'], $_SERVER["PHP_SELF"], 'c.ref_client', '', $param, '', $sortfield, $sortorder); $totalarray['nbfield']++; @@ -2283,6 +2305,16 @@ while ($i < $imaxinloop) { } } + // Ref customer + if (!empty($arrayfields['c.ref_ext']['checked'])) { + print ''; + print dol_escape_htmltag($obj->ref_ext); + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Ref customer if (!empty($arrayfields['c.ref_client']['checked'])) { print ''; @@ -2704,7 +2736,7 @@ while ($i < $imaxinloop) { // Date creation if (!empty($arrayfields['c.datec']['checked'])) { - print ''; + print ''; print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser'); print ''; if (!$i) { @@ -2714,7 +2746,7 @@ while ($i < $imaxinloop) { // Date modification if (!empty($arrayfields['c.tms']['checked'])) { - print ''; + print ''; print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuser'); print ''; if (!$i) { @@ -2724,7 +2756,7 @@ while ($i < $imaxinloop) { // Date cloture if (!empty($arrayfields['c.date_cloture']['checked'])) { - print ''; + print ''; print dol_print_date($db->jdate($obj->date_cloture), 'dayhour', 'tzuser'); print ''; if (!$i) { diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7227cc27c79..179385b1aba 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -324,7 +324,7 @@ class Facture extends CommonInvoice 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'showoncombobox' => 1, 'position' => 5), 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 20, 'index' => 1), 'ref_client' => array('type' => 'varchar(255)', 'label' => 'RefCustomer', 'enabled' => 1, 'visible' => -1, 'position' => 10), - 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 12), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 12), 'type' => array('type' => 'smallint(6)', 'label' => 'Type', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 15), 'subtype' => array('type' => 'smallint(6)', 'label' => 'InvoiceSubtype', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 15), //'increment' =>array('type'=>'varchar(10)', 'label'=>'Increment', 'enabled'=>1, 'visible'=>-1, 'position'=>45), diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index f6acb419e47..4e46f88bb23 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -92,7 +92,7 @@ class Contact extends CommonObject public $fields = array( 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -2, 'noteditable' => 1, 'notnull' => 1, 'index' => 1, 'position' => 1, 'comment' => 'Id', 'css' => 'left'), 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => 3, 'notnull' => 1, 'position' => 30, 'index' => 1), - 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 3, 'position' => 35), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 35), 'civility' => array('type' => 'varchar(6)', 'label' => 'Civility', 'enabled' => 1, 'visible' => 3, 'position' => 40), 'lastname' => array('type' => 'varchar(50)', 'label' => 'Lastname', 'enabled' => 1, 'visible' => 1, 'position' => 45, 'showoncombobox' => 1, 'searchall' => 1), 'name_alias' => array('type' => 'varchar(255)', 'label' => 'Name alias', 'enabled' => 1, 'visible' => -1, 'position' => 46, 'searchall' => 1), @@ -386,6 +386,8 @@ class Contact extends CommonObject $this->ismultientitymanaged = 1; $this->isextrafieldmanaged = 1; + $this->fields['ref_ext']['visible'] = getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT'); + if (!isModEnabled('mailing')) { $this->fields['no_email']['enabled'] = 0; } diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index ae6fd816681..48d54d40f5f 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -79,6 +79,7 @@ $search_cti = preg_replace('/^0+/', '', preg_replace('/[^0-9]/', '', GETPOST('se $search_phone = GETPOST("search_phone", 'alpha'); $search_id = GETPOST("search_id", "intcomma"); +$search_ref_ext = GETPOST("search_ref_ext", "alpha"); $search_firstlast_only = GETPOST("search_firstlast_only", 'alpha'); $search_lastname = GETPOST("search_lastname", 'alpha'); $search_firstname = GETPOST("search_firstname", 'alpha'); @@ -367,6 +368,7 @@ if (empty($reshook)) { if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers $search_all = ""; $search_id = ''; + $search_ref = ''; $search_firstlast_only = ""; $search_lastname = ""; $search_firstname = ""; @@ -482,7 +484,7 @@ if ($resql) { // Build and execute select // -------------------------------------------------------------------- $sql = "SELECT s.rowid as socid, s.nom as name, s.name_alias as alias,"; -$sql .= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.address, p.zip, p.town, p.poste, p.email, p.birthday,"; +$sql .= " p.rowid, p.ref_ext, p.lastname as lastname, p.statut, p.firstname, p.address, p.zip, p.town, p.poste, p.email, p.birthday,"; $sql .= " p.socialnetworks, p.photo,"; $sql .= " p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.fk_pays, p.priv, p.datec as date_creation, p.tms as date_modification,"; $sql .= " p.import_key, p.fk_stcommcontact as stcomm_id, p.fk_prospectlevel,"; @@ -661,6 +663,9 @@ if (strlen($search_firstlast_only)) { if ($search_id > 0) { $sql .= natural_search('p.rowid', $search_id, 1); } +if ($search_ref_ext) { + $sql .= natural_search('p.ref_ext', $search_ref_ext); +} if ($search_lastname) { $sql .= natural_search('p.lastname', $search_lastname); } @@ -859,7 +864,10 @@ if ($search_all != '') { $param .= '&search_all='.urlencode($search_all); } if ($search_id > 0) { - $param .= "&search_id=".urlencode((string) ($search_id)); + $param .= "&search_id=".((int) $search_id); +} +if ($search_ref) { + $param .= "&search_ref=".urlencode($search_ref); } if ($search_lastname != '') { $param .= '&search_lastname='.urlencode($search_lastname); @@ -1082,32 +1090,37 @@ if (!empty($arrayfields['p.rowid']['checked'])) { } if (!empty($arrayfields['p.lastname']['checked'])) { print ''; - print ''; + print ''; print ''; } if (!empty($arrayfields['p.firstname']['checked'])) { print ''; - print ''; + print ''; + print ''; +} +if (!empty($arrayfields['p.ref_ext']['checked'])) { + print ''; + print ''; print ''; } if (!empty($arrayfields['p.poste']['checked'])) { print ''; - print ''; + print ''; print ''; } if (!empty($arrayfields['p.address']['checked'])) { print ''; - print ''; + print ''; print ''; } if (!empty($arrayfields['p.zip']['checked'])) { print ''; - print ''; + print ''; print ''; } if (!empty($arrayfields['p.town']['checked'])) { print ''; - print ''; + print ''; print ''; } @@ -1279,6 +1292,10 @@ if (!empty($arrayfields['p.firstname']['checked'])) { print_liste_field_titre($arrayfields['p.firstname']['label'], $_SERVER["PHP_SELF"], "p.firstname", $begin, $param, '', $sortfield, $sortorder); $totalarray['nbfield']++; } +if (!empty($arrayfields['p.ref_ext']['checked'])) { + print_liste_field_titre($arrayfields['p.ref_ext']['label'], $_SERVER["PHP_SELF"], "p.ref_ext", $begin, $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} if (!empty($arrayfields['p.poste']['checked'])) { print_liste_field_titre($arrayfields['p.poste']['label'], $_SERVER["PHP_SELF"], "p.poste", $begin, $param, '', $sortfield, $sortorder); $totalarray['nbfield']++; @@ -1405,9 +1422,10 @@ while ($i < $imaxinloop) { } $arraysocialnetworks = (array) json_decode($obj->socialnetworks, true); + $contactstatic->id = $obj->rowid; + $contactstatic->ref_ext = $obj->ref_ext; $contactstatic->lastname = $obj->lastname; $contactstatic->firstname = $obj->firstname; - $contactstatic->id = $obj->rowid; $contactstatic->statut = $obj->statut; $contactstatic->poste = $obj->poste; $contactstatic->email = $obj->email; @@ -1483,7 +1501,7 @@ while ($i < $imaxinloop) { // (Last) Name if (!empty($arrayfields['p.lastname']['checked'])) { - print ''; + print ''; if ($contextpage == 'poslist') { print $contactstatic->lastname; } else { @@ -1497,7 +1515,19 @@ while ($i < $imaxinloop) { // Firstname if (!empty($arrayfields['p.firstname']['checked'])) { - print ''.dol_escape_htmltag($obj->firstname).''; + print ''; + print dolPrintHTML($obj->firstname); + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Ref ext + if (!empty($arrayfields['p.ref_ext']['checked'])) { + print ''; + print dolPrintHTML($contactstatic->ref_ext); + print ''; if (!$i) { $totalarray['nbfield']++; } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 6ee2c16d9e7..576ccc21f81 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -268,7 +268,7 @@ class Contrat extends CommonObject public $fields = array( 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), 'ref' => array('type' => 'varchar(50)', 'label' => 'Ref', 'enabled' => 1, 'visible' => -1, 'showoncombobox' => 1, 'position' => 15, 'searchall' => 1), - 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 20), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 20), 'ref_customer' => array('type' => 'varchar(50)', 'label' => 'RefCustomer', 'enabled' => 1, 'visible' => -1, 'position' => 25, 'searchall' => 1), 'ref_supplier' => array('type' => 'varchar(50)', 'label' => 'RefSupplier', 'enabled' => 1, 'visible' => -1, 'position' => 26, 'searchall' => 1), 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 30, 'index' => 1), diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 6ee17c17e72..e4ab9a505d1 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -10360,7 +10360,11 @@ abstract class CommonObject } if (array_key_exists('pass_crypted', $fieldvalues) && property_exists($this, 'pass')) { // @phan-suppress-next-line PhanUndeclaredProperty - $fieldvalues['pass_crypted'] = dol_hash($this->pass); + $tmparray = dol_hash($this->pass, '0', 0, 1); + $fieldvalues['pass_crypted'] = $tmparray['pass_encrypted']; + if (array_key_exists('pass_encoding', $fieldvalues) && property_exists($this, 'pass_encoding')) { + $fieldvalues['pass_encoding'] = $tmparray['pass_encoding']; + } } if (array_key_exists('ref', $fieldvalues)) { $fieldvalues['ref'] = dol_string_nospecial($fieldvalues['ref']); // If field is a ref, we sanitize data diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php index 4e3fa70483a..0c95a0d3d55 100644 --- a/htdocs/core/class/translate.class.php +++ b/htdocs/core/class/translate.class.php @@ -682,14 +682,6 @@ class Translate } } - // We replace some HTML tags by __xx__ to avoid having them encoded by htmlentities because - // we want to keep '"' '' '' '' '' '
' '< ' '' that are reliable HTML tags inside translation strings. - $str = str_replace( - array('"', '', '', '', '', '', '
', '
', '', '', '
', '
', '', '< ', '>'), // We accept '< ' but not '<'. We can accept however '>' - array('__quot__', '__tagb__', '__tagbend__', '__tagu__', '__taguend__', '__tagi__', '__tagiend__', '__tagcenter__', '__tagcenterend__', '__tagb__', '__tagbend__', '__taga__', '__tagaend__', '__tagbr__', '__tagspan__', '__tagspanend__', '__ltspace__', '__gt__'), - $str - ); - if (strpos($key, 'Format') !== 0) { try { // @phan-suppress-next-line PhanPluginPrintfVariableFormatString @@ -699,13 +691,21 @@ class Translate } } + // We replace some HTML tags by __xx__ to avoid having them encoded by htmlentities because + // we want to keep '"' '' '' '' '' '' '' '
'
' '' '
' '
' '' '< ' that are reliable HTML tags inside translation strings. + $str = str_replace( + array('"', '', '', '', '', '', '', '
', '
', '', '', '
', '
', '', '< ', '>'), // We accept '< ' but not '<'. We can accept however '>' + array('__quot__', '__tagb__', '__tagbend__', '__tagu__', '__taguend__', '__tagi__', '__tagiend__', '__tagcenter__', '__tagcenterend__', '__tagb__', '__tagbend__', '__taga__', '__tagaend__', '__tagbr__', '__tagspan__', '__tagspanend__', '__ltspace__', '__gt__'), + $str + ); + // Encode string into HTML $str = htmlentities($str, ENT_COMPAT, $this->charset_output); // Do not convert simple quotes in translation (strings in html are embraced by "). Use dol_escape_htmltag around text in HTML content // Restore reliable HTML tags into original translation string $str = str_replace( array('__quot__', '__tagb__', '__tagbend__', '__tagu__', '__taguend__', '__tagi__', '__tagiend__', '__tagcenter__', '__tagcenterend__', '__taga__', '__tagaend__', '__tagbr__', '__tagspan__', '__tagspanend__', '__ltspace__', '__gt__'), - array('"', '', '', '', '', '', '
', '
', '
', '
', '', '< ', '>'), + array('"', '', '', '', '', '', '', '
', '
', '
', '
', '', '< ', '>'), $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 ''.dol_htmlentities($obj->name).''."\n"; + $tooltip = $obj->name.'
'.$langs->trans("DateCreation").': '.dol_print_date($obj->date_creation, 'dayhour'); + print ''; + print dolPrintHTML($obj->name); + print ''."\n"; // si la ligne n'est pas a changer, on affiche les données if (!$testligneamodifier) { diff --git a/htdocs/product/list.php b/htdocs/product/list.php index a1b8ebb62d2..b83d3a871ba 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -89,7 +89,8 @@ $fourn_id = GETPOSTINT("fourn_id"); $search_all = trim(GETPOST('search_all', 'alphanohtml')); $search_id = GETPOST("search_id", 'alpha'); $search_ref = GETPOST("search_ref", 'alpha'); -$search_ref_supplier = GETPOST("search_ref_supplier", 'alpha'); +$search_ref_ext = trim(GETPOST("search_ref_ext", 'alpha')); +$search_ref_supplier = GETPOST("search_ref_supplier", 'alpha'); // ref of supplier price $search_barcode = GETPOST("search_barcode", 'alpha'); $search_label = GETPOST("search_label", 'alpha'); $search_default_workstation = GETPOST("search_default_workstation", 'alpha'); @@ -238,7 +239,8 @@ $arraypricelevel = array(); // Definition of array of fields for columns $arrayfields = array( 'p.rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -2, 'noteditable' => 1, 'notnull' => 1, 'index' => 1, 'position' => 1, 'comment' => 'Id', 'css' => 'left'), - 'p.ref' => array('label' => 'ProductRef', 'checked' => 1, 'position' => 10), + 'p.ref' => array('label' => 'ProductRef', 'checked' => 1, 'position' => 5), + 'p.ref_ext' => array('label' => 'RefExt', 'checked' => 1, 'position' => 6, 'visible' => getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT')), //'pfp.ref_fourn'=>array('label'=>$langs->trans("RefSupplier"), 'checked'=>1, 'enabled'=>(isModEnabled('barcode'))), 'thumbnail' => array('label' => 'Photo', 'checked' => 0, 'position' => 10), 'p.description' => array('label' => 'Description', 'checked' => 0, 'position' => 10), @@ -365,6 +367,7 @@ if (empty($reshook)) { $search_all = ""; $search_id = ''; $search_ref = ""; + $search_ref_ext = ""; $search_ref_supplier = ""; $search_label = ""; $search_default_workstation = ""; @@ -454,7 +457,7 @@ if ($search_type != '' && $search_type != '-1') { // Build and execute select // -------------------------------------------------------------------- -$sql = 'SELECT p.rowid, p.ref, p.description, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; +$sql = 'SELECT p.rowid, p.ref, p.ref_ext, p.description, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; $sql .= ' p.fk_product_type, p.duration, p.finished, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; $sql .= ' p.tobatch, '; if (isModEnabled('workstation')) { @@ -556,6 +559,9 @@ if ($search_id) { if ($search_ref) { $sql .= natural_search('p.ref', $search_ref); } +if ($search_ref_ext) { + $sql .= natural_search('p.ref_ext', $search_ref_ext); +} if ($search_label) { $sql .= natural_search('p.label', $search_label); } @@ -783,6 +789,9 @@ foreach ($searchCategoryProductList as $searchCategoryProduct) { if ($search_ref) { $param .= "&search_ref=".urlencode($search_ref); } +if ($search_ref_ext) { + $param .= "&search_ref_ext=".urlencode($search_ref_ext); +} if ($search_ref_supplier) { $param .= "&search_ref_supplier=".urlencode($search_ref_supplier); } @@ -1007,17 +1016,22 @@ if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { } if (!empty($arrayfields['p.rowid']['checked'])) { print ''; - print ''; + print ''; print ''; } if (!empty($arrayfields['p.ref']['checked'])) { print ''; - print ''; + print ''; + print ''; +} +if (!empty($arrayfields['p.ref_ext']['checked'])) { + print ''; + print ''; print ''; } if (!empty($arrayfields['pfp.ref_fourn']['checked'])) { print ''; - print ''; + print ''; print ''; } // Thumbnail @@ -1308,6 +1322,10 @@ if (!empty($arrayfields['p.ref']['checked'])) { print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"], "p.ref", "", $param, "", $sortfield, $sortorder); $totalarray['nbfield']++; } +if (!empty($arrayfields['p.ref_ext']['checked'])) { + print_liste_field_titre($arrayfields['p.ref_ext']['label'], $_SERVER["PHP_SELF"], "p.ref_ext", "", $param, "", $sortfield, $sortorder); + $totalarray['nbfield']++; +} if (!empty($arrayfields['pfp.ref_fourn']['checked'])) { print_liste_field_titre($arrayfields['pfp.ref_fourn']['label'], $_SERVER["PHP_SELF"], "pfp.ref_fourn", "", $param, "", $sortfield, $sortorder); $totalarray['nbfield']++; @@ -1559,6 +1577,7 @@ while ($i < $imaxinloop) { if (empty($reshook)) { $product_static->id = $obj->rowid; $product_static->ref = $obj->ref; + $product_static->ref_ext = $obj->ref_ext; $product_static->description = $obj->description; $product_static->ref_fourn = empty($obj->ref_supplier) ? '' : $obj->ref_supplier; // deprecated $product_static->ref_supplier = empty($obj->ref_supplier) ? '' : $obj->ref_supplier; @@ -1674,6 +1693,16 @@ while ($i < $imaxinloop) { } } + // Ref ext + if (!empty($arrayfields['p.ref_ext']['checked'])) { + print ''; + print dolPrintHTML($product_static->ref_ext); + print "\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Ref supplier if (!empty($arrayfields['pfp.ref_fourn']['checked'])) { print ''; diff --git a/htdocs/public/payment/paymentko.php b/htdocs/public/payment/paymentko.php index f8460f8a799..4e3cc764659 100644 --- a/htdocs/public/payment/paymentko.php +++ b/htdocs/public/payment/paymentko.php @@ -2,7 +2,7 @@ /* Copyright (C) 2001-2002 Rodolphe Quiedeville * Copyright (C) 2006-2013 Laurent Destailleur * Copyright (C) 2012 Regis Houssin - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2025 Frédéric France * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify @@ -145,6 +145,7 @@ $object = new stdClass(); // For triggers */ // Check if we have redirtodomain to do. +$doactionsthenredirect = 0; if ($ws) { $doactionsthenredirect = 1; } diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php index dc3f59c86c6..3ddf784f0e1 100644 --- a/htdocs/public/payment/paymentok.php +++ b/htdocs/public/payment/paymentok.php @@ -5,7 +5,7 @@ * Copyright (C) 2021-2023 Waël Almoman * Copyright (C) 2021 Maxime Demarest * Copyright (C) 2021 Dorian Vabre - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2025 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 34f3d736857..55072848b4a 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -827,8 +827,11 @@ class Reception extends CommonObject if ((!getDolGlobalInt('STOCK_SUPPORTS_SERVICES') && $origin_line->product_type > 0) || $origin_line->product_type > 1) { continue; } - - $qty_wished[$origin_line->fk_product] += $origin_line->qty; + if (array_key_exists($origin_line->fk_product, $qty_wished)) { + $qty_wished[$origin_line->fk_product] += $origin_line->qty; + } else { + $qty_wished[$origin_line->fk_product] = $origin_line->qty; + } } // compare array diff --git a/htdocs/salaries/class/paymentsalary.class.php b/htdocs/salaries/class/paymentsalary.class.php index 816837e13b8..1097eb06f6d 100644 --- a/htdocs/salaries/class/paymentsalary.class.php +++ b/htdocs/salaries/class/paymentsalary.class.php @@ -179,7 +179,7 @@ class PaymentSalary extends CommonObject 'paye' => array('type' => 'smallint(6)', 'label' => 'Status', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 180), 'fk_user_author' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'visible' => 0, 'position' => 190), 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 200, 'visible' => 0,), - 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 210), + 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 210), 'note_public' => array('type' => 'text', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => 0, 'position' => 220), ); diff --git a/htdocs/salaries/class/salary.class.php b/htdocs/salaries/class/salary.class.php index 941cee025bc..da4fed65b02 100644 --- a/htdocs/salaries/class/salary.class.php +++ b/htdocs/salaries/class/salary.class.php @@ -162,6 +162,7 @@ class Salary extends CommonObject public $fields = array( 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => 0, 'notnull' => 1, 'index' => 1, 'position' => 1, 'comment' => 'Id'), 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 10, 'visible' => 1, 'index' => 1, 'comment' => "Reference of object"), + 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 11), 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 12, 'notnull' => 0, 'visible' => 1), 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => 0, 'position' => 30), 'datep' => array('type' => 'date', 'label' => 'Date', 'enabled' => 1, 'visible' => 0, 'position' => 40, 'comment' => 'Date'), @@ -181,7 +182,6 @@ class Salary extends CommonObject 'paye' => array('type' => 'smallint(6)', 'label' => 'Status', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 180), 'fk_user_author' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'visible' => 0, 'position' => 190), 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 200, 'visible' => 0,), - 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 210), 'note_public' => array('type' => 'text', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => 0, 'position' => 220), ); @@ -196,6 +196,8 @@ class Salary extends CommonObject $this->db = $db; $this->element = 'salary'; $this->table_element = 'salary'; + + $this->fields['ref_ext']['visible'] = getDolGlobalInt('MAIN_LIST_SHOW_REF_EXT'); } /** diff --git a/htdocs/theme/dolibarr_preferred_partner.png b/htdocs/theme/dolibarr_preferred_partner.png index f0826b26e70..1ffb119adfb 100644 Binary files a/htdocs/theme/dolibarr_preferred_partner.png and b/htdocs/theme/dolibarr_preferred_partner.png differ diff --git a/htdocs/theme/dolistore_logo.jpg b/htdocs/theme/dolistore_logo.jpg index b79280d819f..850ed55de9c 100644 Binary files a/htdocs/theme/dolistore_logo.jpg and b/htdocs/theme/dolistore_logo.jpg differ diff --git a/htdocs/theme/dolistore_logo.png b/htdocs/theme/dolistore_logo.png index 233f6599108..4aec905e1df 100644 Binary files a/htdocs/theme/dolistore_logo.png and b/htdocs/theme/dolistore_logo.png differ diff --git a/htdocs/theme/dolistore_logo.svg b/htdocs/theme/dolistore_logo.svg index 844010e19b5..5587f5c0f16 100644 --- a/htdocs/theme/dolistore_logo.svg +++ b/htdocs/theme/dolistore_logo.svg @@ -1,146 +1,93 @@ - - - Logo Dolibarr ERP-CRM - - - - - - + sodipodi:docname="dolistore.svg" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> - - - - image/svg+xml - - Logo Dolibarr ERP-CRM - - - - Laurent Destailleur - - - - - Laurent Destailleur - - - - - - - - - - - - - - - Store - - - - - - + inkscape:current-layer="Calque_2" /> + + + + + + + + + + + + + diff --git a/htdocs/variants/class/ProductAttribute.class.php b/htdocs/variants/class/ProductAttribute.class.php index 698d6f211fe..07554b580d3 100644 --- a/htdocs/variants/class/ProductAttribute.class.php +++ b/htdocs/variants/class/ProductAttribute.class.php @@ -102,7 +102,7 @@ class ProductAttribute extends CommonObject public $fields = array( 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), 'ref' => array('type' => 'varchar(255)', 'label' => 'Ref', 'visible' => 1, 'enabled' => 1, 'position' => 10, 'notnull' => 1, 'index' => 1, 'searchall' => 1, 'comment' => "Reference of object", 'css' => 'width200'), - 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'ExternalRef', 'enabled' => 1, 'visible' => 0, 'position' => 20, 'searchall' => 1), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 20, 'searchall' => 1), 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 1, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'help' => "", 'showoncombobox' => 1,), 'position' => array('type' => 'integer', 'label' => 'Rank', 'enabled' => 1, 'visible' => 0, 'default' => '0', 'position' => 40, 'notnull' => 1,), ); diff --git a/htdocs/website/websiteaccount_card.php b/htdocs/website/websiteaccount_card.php index 858ac1ead2a..0561b1f8ebf 100644 --- a/htdocs/website/websiteaccount_card.php +++ b/htdocs/website/websiteaccount_card.php @@ -300,7 +300,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Confirmation to delete if ($action == 'delete') { - $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteWebsiteAccount'), $langs->trans('ConfirmDeleteWebsiteAccount'), 'confirm_delete', '', 0, 1); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteWebsiteAccount'), $langs->trans('ConfirmDeleteWebsiteAccount').'
'.$langs->trans('ConfirmDeleteWebsiteAccount2'), 'confirm_delete', '', 0, 1); } // Call Hook formConfirm diff --git a/test/phpunit/LangTest.php b/test/phpunit/LangTest.php index 9276c9c0323..5b7a22b247e 100644 --- a/test/phpunit/LangTest.php +++ b/test/phpunit/LangTest.php @@ -103,6 +103,40 @@ class LangTest extends CommonClassTest return $langCodes; } + /** + * testLang + * + * @return void + */ + public function testTransWithHTMLInParam(): void + { + global $conf,$user,$langs,$db; + $conf = $this->savconf; + $user = $this->savuser; + $langs = $this->savlangs; + $db = $this->savdb; + + include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php'; + + $newlang = new Translate('', $conf); + $newlang->setDefaultLang('fr_FR'); + $newlang->load("admin"); + + // ErrorModuleRequirePHPVersion is a string than contains accent é and + // The ->transnoentities() does not escape nothing into entities. + $result = $newlang->transnoentities("ModuleMustBeEnabled", 'éaaa'); + print "result=".$result.PHP_EOL; + $this->assertEquals('Le module éaaa doit être activé', $result, 'Translation transnoentities ko'); + + // ErrorModuleRequirePHPVersion is a string than contains accent é and + // The ->trans() escapes content into ModuleMustBeEnabled except b, strong, a, i, br and span tags, + // but content of parameters are escaped + $result = $newlang->trans("ModuleMustBeEnabled", 'éaaa'); + print "result=".$result.PHP_EOL; + $this->assertEquals('Le module éaaa doit être activé', $result, 'Translation trans ko'); + + return; + } /** * testLang @@ -110,6 +144,7 @@ class LangTest extends CommonClassTest * * @param string $code Language code for which to verify translations * @return void + * @depends testTransWithHTMLInParam */ public function testLang($code): void {