Enhance script to track duplicate translation string and use it to

remove around 50 duplicates.
This commit is contained in:
Laurent Destailleur 2015-12-06 13:34:57 +01:00
parent d4268c079f
commit 7f3531a04c
24 changed files with 205 additions and 164 deletions

279
dev/translation/sanity_check_en_langfiles.php Normal file → Executable file
View File

@ -1,82 +1,102 @@
#!/usr/bin/php
<?php
/* Copyright (c) 2015 Tommaso Basilici <t.basilici@19.coop>
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* Copyright (c) 2015 Tommaso Basilici <t.basilici@19.coop>
* Copyright (c) 2015 Laurent Destailleur <eldy@destailleur.fr>
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
echo "<html>";
echo "<head>";
$sapi_type = php_sapi_name();
$script_file = basename(__FILE__);
$path=dirname(__FILE__).'/';
echo "<STYLE type=\"text/css\">
$web=0;
table {
background: #f5f5f5;
border-collapse: separate;
box-shadow: inset 0 1px 0 #fff;
font-size: 12px;
line-height: 24px;
margin: 30px auto;
text-align: left;
width: 800px;
}
th {
background-color: #777;
border-left: 1px solid #555;
border-right: 1px solid #777;
border-top: 1px solid #555;
border-bottom: 1px solid #333;
color: #fff;
font-weight: bold;
padding: 10px 15px;
position: relative;
text-shadow: 0 1px 0 #000;
}
td {
border-right: 1px solid #fff;
border-left: 1px solid #e8e8e8;
border-top: 1px solid #fff;
border-bottom: 1px solid #e8e8e8;
padding: 10px 15px;
position: relative;
// Test if batch mode
if (substr($sapi_type, 0, 3) == 'cgi')
{
$web=1;
}
tr {
background-color: #f1f1f1;
if ($web)
{
echo "<html>";
echo "<head>";
echo "<STYLE type=\"text/css\">
table {
background: #f5f5f5;
border-collapse: separate;
box-shadow: inset 0 1px 0 #fff;
font-size: 12px;
line-height: 24px;
margin: 30px auto;
text-align: left;
width: 800px;
}
th {
background-color: #777;
border-left: 1px solid #555;
border-right: 1px solid #777;
border-top: 1px solid #555;
border-bottom: 1px solid #333;
color: #fff;
font-weight: bold;
padding: 10px 15px;
position: relative;
text-shadow: 0 1px 0 #000;
}
td {
border-right: 1px solid #fff;
border-left: 1px solid #e8e8e8;
border-top: 1px solid #fff;
border-bottom: 1px solid #e8e8e8;
padding: 10px 15px;
position: relative;
}
tr {
background-color: #f1f1f1;
}
tr:nth-child(odd) td {
background-color: #f1f1f1;
}
</STYLE>";
echo "<body>";
}
tr:nth-child(odd) td {
background-color: #f1f1f1;
}
echo "If you call this file with the argument \"?unused=true\" it searches for the translation strings that exist in en_US but are never used.\n";
if ($web) print "<br>";
echo "IMPORTANT: that can take quite a lot of time (up to 10 minutes), you need to tune the max_execution_time on your php.ini accordingly.\n";
if ($web) print "<br>";
</STYLE>";
echo "<body>";
echo "If you call this file with the argument \"?unused=true\" it searches for the translation strings that exist in en_US but are never used.<br>";
echo "IMPORTANT: that can take quite a lot of time (up to 10 minutes), you need to tune the max_execution_time on your php.ini accordingly.<br>";
echo "Happy translating :)<br>";
// STEP 1 - Search duplicates keys
// directory containing the php and lang files
$htdocs = "../../htdocs/";
$htdocs = $path."/../../htdocs/";
// directory containing the english lang files
$workdir = $htdocs."langs/en_US/";
@ -114,8 +134,10 @@ foreach ($files AS $file) {
}
}
foreach ($langstrings_3d AS $filename => $file) {
foreach ($file AS $linenum => $value) {
foreach ($langstrings_3d AS $filename => $file)
{
foreach ($file AS $linenum => $value)
{
$keys = array_keys($langstrings_full, $value);
if (count($keys)>1)
{
@ -126,30 +148,95 @@ foreach ($langstrings_3d AS $filename => $file) {
}
}
echo "<h2>Duplicate strings in lang files in $workdir - ".count($dups)." found</h2>";
if ($web) print "<h2>";
print "Duplicate strings in lang files in $workdir - ".count($dups)." found\n";
if ($web) print "</h2>";
echo "<table border_bottom=1> ";
echo "<thead><tr><th align=\"center\">#</th><th>String</th><th>File and lines</th></thead>";
echo "<tbody>";
$count = 0;
foreach ($dups as $string => $pages) {
$count++;
echo "<tr>";
echo "<td align=\"center\">$count</td>";
echo "<td>$string</td>";
echo "<td>";
foreach ($pages AS $page => $lines ) {
echo "$page ";
foreach ($lines as $line => $translatedvalue) {
//echo "($line - ".(substr($translatedvalue,0,20)).") ";
echo "($line - ".htmlentities($translatedvalue).") ";
}
echo "<br>";
}
echo "</td></tr>\n";
if ($web)
{
echo '<table border_bottom="1">'."\n";
echo "<thead><tr><th align=\"center\">#</th><th>String</th><th>File and lines</th></thead>\n";
echo "<tbody>\n";
}
$sduplicateinsamefile='';
$sinmainandother='';
$sininstallandadmin='';
$sother='';
$count = 0;
foreach ($dups as $string => $pages)
{
$count++;
$s='';
// Keyword $string
if ($web) $s.="<tr>";
if ($web) $s.="<td align=\"center\">";
if ($web) $s.=$count;
if ($web) $s.="</td>";
if ($web) $s.="<td>";
$s.=$string;
if ($web) $s.="</td>";
if ($web) $s.="<td>";
if (! $web) $s.= ' : ';
// Loop on each files keyword was found
$duplicateinsamefile=0;
$inmain=0;
$inadmin=0;
foreach ($pages AS $file => $lines)
{
if ($file == 'main.lang') { $inmain=1; $inadmin=0; }
if ($file == 'admin.lang' && ! $inmain) { $inadmin=1; }
$s.=$file." ";
// Loop on each line keword was found into file.
$listoffilesforthisentry=array();
foreach ($lines as $line => $translatedvalue)
{
if (! empty($listoffilesforthisentry[$file])) $duplicateinsamefile=1;
$listoffilesforthisentry[$file]=1;
$s.= "(".$line." - ".htmlentities($translatedvalue).") ";
}
if ($web) $s.="<br>";
}
if ($web) $s.="</td></tr>";
$s.="\n";
if ($duplicateinsamefile) $sduplicateinsamefile .= $s;
else if ($inmain) $sinmainandother .= $s;
else if ($inadmin) $sininstallandadmin .= $s;
else $sother .= $s;
}
if (! $web) print "\n***** Entries duplicated in same file\n";
print $sduplicateinsamefile;
if (! $web && empty($sduplicateinsamefile)) print "None\n";
if (! $web) print "\n";
if (! $web) print "***** Entries in main and another (keep only entry in main)\n";
print $sinmainandother;
if (! $web && empty($sinmainandother)) print "None\n";
if (! $web) print "\n";
if (! $web) print "***** Entries in admin and another\n";
print $sininstallandadmin;
if (! $web && empty($sininstallandadmin)) print "None\n";
if (! $web) print "\n";
if (! $web) print "***** Other\n";
print $sother;
if (! $web && empty($sother)) print "None\n";
if (! $web) print "\n";
if ($web)
{
echo "</tbody>\n";
echo "</table>\n";
}
echo "</tbody>";
echo "</table>";
// STEP 2 - Search key not used
@ -168,12 +255,20 @@ if (! empty($_REQUEST['unused']) && $_REQUEST['unused'] == 'true')
}
}
echo "<h2>Strings in en_US that are never used</h2>";
echo "<pre>";
if ($web) print "<h2>\n";
print "Strings in en_US that are never used\n";
if ($web) print "</h2>\n";
if ($web) echo "<pre>";
print_r($unused);
echo "</pre>";
if ($web) echo "</pre>\n";
}
echo "\n";
echo "</body>";
echo "</html>";
if ($web)
{
echo "</body>\n";
echo "</html>\n";
}
exit;

View File

@ -2833,7 +2833,7 @@ else if ($id > 0 || ! empty($ref))
print '<tr><td>' . $langs->trans('Company') . '</td>';
print '</td><td colspan="5">';
if (! empty($conf->global->FACTURE_CHANGE_THIRDPARTY) && $action != 'editthirdparty' && $object->brouillon && $user->rights->facture->creer)
print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editthirdparty&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetLinkToThirdParty'), 1) . '</a></td>';
print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editthirdparty&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetLinkToAnotherThirdParty'), 1) . '</a></td>';
print '</tr></table>';
print '</td><td colspan="5">';
if ($action == 'editthirdparty') {

View File

@ -121,9 +121,9 @@ abstract class DolibarrTriggers
$langs->load("admin");
if ($this->version == self::VERSION_DEVELOPMENT) {
return $langs->trans("Development");
return $langs->trans("VersionDevelopment");
} elseif ($this->version == self::VERSION_EXPERIMENTAL) {
return $langs->trans("Experimental");
return $langs->trans("VersionExperimental");
} elseif ($this->version == self::VERSION_DOLIBARR) {
return DOL_VERSION;
} elseif ($this->version) {

View File

@ -333,9 +333,9 @@ if (! empty($force_install_message))
if ($note) $option.=' '.$note;
// Deprecated and experimental
if ($type=='mysql') $option.=' ' . $langs->trans("Deprecated");
elseif ($type=='mssql') $option.=' '.$langs->trans("Experimental");
elseif ($type=='sqlite') $option.=' '.$langs->trans("Experimental");
elseif ($type=='sqlite3') $option.=' '.$langs->trans("Experimental");
elseif ($type=='mssql') $option.=' '.$langs->trans("VersionExperimental");
elseif ($type=='sqlite') $option.=' '.$langs->trans("VersionExperimental");
elseif ($type=='sqlite3') $option.=' '.$langs->trans("VersionExperimental");
// No available
elseif (! function_exists($testfunction)) $option.=' - '.$langs->trans("FunctionNotAvailableInThisPHP");
$option.='</option>';

View File

@ -1,5 +1,4 @@
# Dolibarr language file - en_US - Accounting Expert
CHARSET=UTF-8
ACCOUNTING_EXPORT_SEPARATORCSV=Column separator for export file
ACCOUNTING_EXPORT_DATE=Date format for export file
ACCOUNTING_EXPORT_PIECE=Export the number of piece
@ -12,8 +11,6 @@ ACCOUNTING_EXPORT_PREFIX_SPEC=Specify the prefix for the file name
Accounting=Accounting
Globalparameters=Global parameters
Chartofaccounts=Chart of accounts
Fiscalyear=Fiscal years
Menuaccount=Accounting accounts
Menuthirdpartyaccount=Thirdparty accounts
MenuTools=Tools
@ -33,23 +30,17 @@ Back=Return
Definechartofaccounts=Define a chart of accounts
Selectchartofaccounts=Select a chart of accounts
Validate=Validate
Addanaccount=Add an accounting account
AccountAccounting=Accounting account
AccountAccountingSuggest=Accounting account suggest
Ventilation=Breakdown
ToDispatch=To dispatch
Dispatched=Dispatched
CustomersVentilation=Breakdown customers
SuppliersVentilation=Breakdown suppliers
TradeMargin=Trade margin
Reports=Reports
ByCustomerInvoice=By invoices customers
ByMonth=By Month
NewAccount=New accounting account
Update=Update
List=List
Create=Create
CreateMvts=Create movement
UpdateAccount=Modification of an accounting account
@ -61,7 +52,6 @@ AccountBalanceByMonth=Account balance by month
AccountingVentilation=Breakdown accounting
AccountingVentilationSupplier=Breakdown accounting supplier
AccountingVentilationCustomer=Breakdown accounting customer
Line=Line
CAHTF=Total purchase supplier before tax
InvoiceLines=Lines of invoice to be ventilated
@ -112,17 +102,12 @@ Docref=Reference
Numerocompte=Account
Code_tiers=Thirdparty
Labelcompte=Label account
Debit=Debit
Credit=Credit
Amount=Amount
Sens=Sens
Codejournal=Journal
DelBookKeeping=Delete the records of the general ledger
SellsJournal=Sells journal
PurchasesJournal=Purchases journal
DescSellsJournal=Sells journal
DescSellsJournal=Sales journal
DescPurchasesJournal=Purchases journal
BankJournal=Bank journal
DescBankJournal=Bank journal including all the types of payments other than cash
@ -150,9 +135,6 @@ Pcgversion=Version of the plan
Pcgtype=Class of account
Pcgsubtype=Under class of account
Accountparent=Root of the account
Active=Statement
NewFiscalYear=New fiscal year
DescVentilCustomer=Consult here the annual breakdown accounting of your invoices customers
TotalVente=Total turnover before tax

View File

@ -105,7 +105,6 @@ DetailPosition=Sort number to define menu position
PersonalizedMenusNotSupported=Personalized menus not supported
AllMenus=All
NotConfigured=Module not configured
Setup=Setup
Activation=Activation
Active=Active
SetupShort=Setup
@ -193,15 +192,12 @@ ExportOptions=Export Options
AddDropDatabase=Add DROP DATABASE command
AddDropTable=Add DROP TABLE command
ExportStructure=Structure
Datas=Data
NameColumn=Name columns
ExtendedInsert=Extended INSERT
NoLockBeforeInsert=No lock commands around INSERT
DelayedInsert=Delayed insert
EncodeBinariesInHexa=Encode binary data in hexadecimal
IgnoreDuplicateRecords=Ignore errors of duplicate records (INSERT IGNORE)
Yes=Yes
No=No
AutoDetectLang=Autodetect (browser language)
FeatureDisabledInDemo=Feature disabled in demo
Rights=Permissions
@ -926,7 +922,6 @@ MenuCompanySetup=Company/Foundation
MenuNewUser=New user
MenuTopManager=Top menu manager
MenuLeftManager=Left menu manager
MenuManager=Menu manager
MenuSmartphoneManager=Smartphone menu manager
DefaultMenuTopManager=Top menu manager
DefaultMenuLeftManager=Left menu manager
@ -1110,7 +1105,6 @@ XDebugInstalled=XDebug is loaded.
XCacheInstalled=XCache is loaded.
AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
FieldEdition=Edition of field %s
FixTZ=TimeZone fix
FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
GetBarCode=Get barcode
EmptyNumRefModelDesc=The code is free. This code can be modified at any time.
@ -1644,8 +1638,6 @@ OpenFiscalYear=Open fiscal year
CloseFiscalYear=Close fiscal year
DeleteFiscalYear=Delete fiscal year
ConfirmDeleteFiscalYear=Are you sure to delete this fiscal year ?
Opened=Open
Closed=Closed
AlwaysEditable=Can always be edited
MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application)
NbMajMin=Minimum number of uppercase characters

View File

@ -59,7 +59,6 @@ PaymentBack=Payment back
Payments=Payments
PaymentsBack=Payments back
PaidBack=Paid back
DatePayment=Payment date
DeletePayment=Delete payment
ConfirmDeletePayment=Are you sure you want to delete this payment ?
ConfirmConvertToReduc=Do you want to convert this credit note or deposit into an absolute discount ?<br>The amount will so be saved among all discounts and could be used as a discount for a current or a future invoice for this customer.
@ -103,7 +102,6 @@ ConvertToReduc=Convert into future discount
EnterPaymentReceivedFromCustomer=Enter payment received from customer
EnterPaymentDueToCustomer=Make payment due to customer
DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero
Amount=Amount
PriceBase=Price base
BillStatus=Invoice status
BillStatusDraft=Draft (needs to be validated)
@ -187,7 +185,6 @@ ShowInvoiceReplace=Show replacing invoice
ShowInvoiceAvoir=Show credit note
ShowInvoiceDeposit=Show deposit invoice
ShowPayment=Show payment
File=File
AlreadyPaid=Already paid
AlreadyPaidBack=Already paid back
AlreadyPaidNoCreditNotesNoDeposits=Already paid (without credit notes and deposits)
@ -240,7 +237,6 @@ Reduction=Reduction
ReductionShort=Reduc.
Reductions=Reductions
ReductionsShort=Reduc.
Discount=Discount
Discounts=Discounts
AddDiscount=Create discount
AddRelativeDiscount=Create relative discount

View File

@ -56,7 +56,6 @@ ReportByCustomers=Report by customers
ReportByQuarter=Report by rate
CivilityCode=Civility code
RegisteredOffice=Registered office
Name=Name
Lastname=Last name
Firstname=First name
PostOrFunction=Post/Function

View File

@ -79,7 +79,6 @@ ListPayment=List of payments
ListOfPayments=List of payments
ListOfCustomerPayments=List of customer payments
ListOfSupplierPayments=List of supplier payments
DatePayment=Payment date
DateStartPeriod=Date start period
DateEndPeriod=Date end period
NewVATPayment=New VAT payment
@ -200,7 +199,6 @@ ByProductsAndServices=By products and services
RefExt=External ref
ToCreateAPredefinedInvoice=To create a predefined invoice, create a standard invoice then, without validating it, click onto button "Convert to predefined invoice".
LinkedOrder=Link to order
ReCalculate=Recalculate
Mode1=Method 1
Mode2=Method 2
CalculationRuleDesc=To calculate total VAT, there is two methods:<br>Method 1 is rounding vat on each line, then summing them.<br>Method 2 is summing all vat on each line, then rounding result.<br>Final result may differs from few cents. Default mode is mode <b>%s</b>.

View File

@ -1,5 +1,4 @@
# Dolibarr language file - Source file is en_US - ecm
MenuECM=Documents
DocsMine=My documents
DocsGenerated=Generated documents
DocsElements=Elements documents

View File

@ -3,8 +3,6 @@
# No errors
NoErrorCommitIsDone=No error, we commit
# Errors
Error=Error
Errors=Errors
ErrorButCommitIsDone=Errors found but we validate despite this
ErrorBadEMail=EMail %s is wrong
ErrorBadUrl=Url %s is wrong

View File

@ -1,5 +1,4 @@
# Dolibarr language file - en_US - hrm
CHARSET=UTF-8
# Admin
HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service
Establishments=Establishments

View File

@ -52,9 +52,7 @@ ServerPortDescription=Database server port. Keep empty if unknown.
DatabaseServer=Database server
DatabaseName=Database name
DatabasePrefix=Database prefix table
Login=Login
AdminLogin=Login for Dolibarr database owner.
Password=Password
PasswordAgain=Retype password a second time
AdminPassword=Password for Dolibarr database owner.
CreateDatabase=Create database
@ -62,14 +60,11 @@ CreateUser=Create owner
DatabaseSuperUserAccess=Database server - Superuser access
CheckToCreateDatabase=Check box if database does not exist and must be created.<br>In this case, you must fill the login/password for superuser account at the bottom of this page.
CheckToCreateUser=Check box if database owner does not exist and must be created.<br>In this case, you must choose its login and password and also fill the login/password for the superuser account at the bottom of this page. If this box is unchecked, owner database and its passwords must exists.
Experimental=(experimental)
Deprecated=(deprecated)
DatabaseRootLoginDescription=Login of the user allowed to create new databases or new users, mandatory if your database or its owner does not already exists.
KeepEmptyIfNoPassword=Leave empty if user has no password (avoid this)
SaveConfigurationFile=Save values
ConfigurationSaving=Saving configuration file
ServerConnection=Server connection
DatabaseConnection=Database connection
DatabaseCreation=Database creation
UserCreation=User creation
CreateDatabaseObjects=Database objects creation
@ -92,7 +87,6 @@ GoToDolibarr=Go to Dolibarr
GoToSetupArea=Go to Dolibarr (setup area)
MigrationNotFinished=Version of your database is not completely up to date, so you'll have to run the upgrade process again.
GoToUpgradePage=Go to upgrade page again
Examples=Examples
WithNoSlashAtTheEnd=Without the slash "/" at the end
DirectoryRecommendation=It is recommanded to use a directory outside of your directory of your web pages.
LoginAlreadyExists=Already exists
@ -113,7 +107,6 @@ Upgrade=Upgrade
UpgradeDesc=Use this mode if you have replaced old Dolibarr files with files from a newer version. This will upgrade your database and data.
Start=Start
InstallNotAllowed=Setup not allowed by <b>conf.php</b> permissions
NotAvailable=Not available
YouMustCreateWithPermission=You must create file %s and set write permissions on it for the web server during install process.
CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload page.
AlreadyDone=Already migrated

View File

@ -28,6 +28,7 @@ NoTranslation=No translation
NoRecordFound=No record found
NoError=No error
Error=Error
Errors=Errors
ErrorFieldRequired=Field '%s' is required
ErrorFieldFormat=Field '%s' has a bad value
ErrorFileDoesNotExists=File %s does not exist
@ -671,7 +672,7 @@ NewAttribute=New attribute
AttributeCode=Attribute code
OptionalFieldsSetup=Extra attributes setup
URLPhoto=URL of photo/logo
SetLinkToThirdParty=Link to another third party
SetLinkToAnotherThirdParty=Link to another third party
CreateDraft=Create draft
SetToDraft=Back to draft
ClickToEdit=Click to edit

View File

@ -121,7 +121,6 @@ AttributeName=Attribute name
String=String
Text=Text
Int=Int
Date=Date
DateAndTime=Date and time
PublicMemberCard=Member public card
MemberNotOrNoMoreExpectedToSubscribe=Member not or no more expected to subscribe

View File

@ -64,7 +64,6 @@ SearchOrder=Search order
SearchACustomerOrder=Search a customer order
SearchASupplierOrder=Search a supplier order
ShipProduct=Ship product
Discount=Discount
CreateOrder=Create Order
RefuseOrder=Refuse order
ApproveOrder=Approve order

View File

@ -10,27 +10,26 @@ BirthdayAlertOn= birthday alert active
BirthdayAlertOff= birthday alert inactive
Notify_FICHINTER_VALIDATE=Intervention validated
Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
Notify_BILL_VALIDATE=Customer invoice validated
Notify_BILL_UNVALIDATE=Customer invoice unvalidated
Notify_ORDER_VALIDATE=Customer order validated
Notify_ORDER_SENTBYMAIL=Customer order sent by mail
Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
Notify_ORDER_VALIDATE=Customer order validated
Notify_PROPAL_VALIDATE=Customer proposal validated
Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
Notify_WITHDRAW_CREDIT=Credit withdrawal
Notify_WITHDRAW_EMIT=Perform withdrawal
Notify_ORDER_SENTBYMAIL=Customer order sent by mail
Notify_COMPANY_CREATE=Third party created
Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
Notify_BILL_VALIDATE=Customer invoice validated
Notify_BILL_UNVALIDATE=Customer invoice unvalidated
Notify_BILL_PAYED=Customer invoice payed
Notify_BILL_CANCEL=Customer invoice canceled
Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
Notify_ORDER_SUPPLIER_VALIDATE=Supplier order validated
Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
@ -138,7 +137,6 @@ VolumeUnitinch3=in³
VolumeUnitounce=ounce
VolumeUnitlitre=litre
VolumeUnitgallon=gallon
Size=size
SizeUnitm=m
SizeUnitdm=dm
SizeUnitcm=cm

View File

@ -106,7 +106,6 @@ AddToOtherProposals=Add to other proposals
AddToMyBills=Add to my bills
AddToOtherBills=Add to other bills
CorrectStock=Correct stock
AddPhoto=Add photo
ListOfStockMovements=List of stock movements
BuyingPrice=Buying price
PriceForEachProduct=Products with specific prices
@ -139,7 +138,6 @@ KeywordFilter=Keyword filter
CategoryFilter=Category filter
ProductToAddSearch=Search product to add
AddDel=Add/Delete
Quantity=Quantity
NoMatchFound=No match found
ProductAssociationList=List of products/services that are component of this virtual product/package
ProductParentList=List of package products/services with this product as a component

View File

@ -99,7 +99,6 @@ ReOpenAProject=Open project
ConfirmReOpenAProject=Are you sure you want to re-open this project ?
ProjectContact=Project contacts
ActionsOnProject=Events on project
OpenedProjects=Opened projects
YouAreNotContactOfProject=You are not a contact of this private project
DeleteATimeSpent=Delete time spent
ConfirmDeleteATimeSpent=Are you sure you want to delete this time spent ?

View File

@ -11,7 +11,6 @@ DraftRequests=Draft requests
LastModifiedRequests=Last %s modified price requests
RequestsOpened=Open price requests
SupplierProposalArea=Supplier proposals area
SupplierProposal=Supplier proposal
SupplierProposalShort=Supplier proposal
SupplierProposals=Supplier proposals
NewAskPrice=New price request

View File

@ -53,8 +53,6 @@ AddLineMini=Add
Date_DEBUT=Period date start
Date_FIN=Period date end
ModePaiement=Payment mode
Note=Note
Project=Project
VALIDATOR=User responsible for approval
VALIDOR=Approved by

View File

@ -41,7 +41,6 @@ SearchAUser=Search a user
LoginNotDefined=Login is not defined.
NameNotDefined=Name is not defined.
ListOfUsers=List of users
Administrator=Administrator
SuperAdministrator=Super Administrator
SuperAdministratorDesc=Global administrator
AdministratorDesc=Administrator

View File

@ -48,7 +48,6 @@ RefusedReason=Reason for rejection
RefusedInvoicing=Billing the rejection
NoInvoiceRefused=Do not charge the rejection
InvoiceRefused=Invoice refused (Charge the rejection to customer)
Status=Status
StatusUnknown=Unknown
StatusWaiting=Waiting
StatusTrans=Sent

View File

@ -51,8 +51,9 @@ $select_pricing_rules=array(
);
if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
{
$select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY'] = $langs->trans('PriceByQuantity').' ('.$langs->trans("Experimental").')'; // TODO If this is enabled, price must be hidden when price by qty is enabled, also price for quantity must be used when adding product into order/propal/invoice
$select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY&PRODUIT_MULTIPRICES'] = $langs->trans('MultiPricesAbility') . '+' . $langs->trans('PriceByQuantity').' ('.$langs->trans("Experimental").')';
$langs->load("admin");
$select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY'] = $langs->trans('PriceByQuantity').' ('.$langs->trans("VersionExperimental").')'; // TODO If this is enabled, price must be hidden when price by qty is enabled, also price for quantity must be used when adding product into order/propal/invoice
$select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY&PRODUIT_MULTIPRICES'] = $langs->trans('MultiPricesAbility') . '+' . $langs->trans('PriceByQuantity').' ('.$langs->trans("VersionExperimental").')';
}
// Clean param