Index: pykota/trunk/po/pykota.pot
===================================================================
--- pykota/trunk/po/pykota.pot (revision 3094)
+++ pykota/trunk/po/pykota.pot (revision 3097)
@@ -27,5 +27,5 @@
 "Report-Msgid-Bugs-To: alet@librelogiciel.com\n"
 "POT-Creation-Date: 2006-03-30 22:00+0200\n"
-"PO-Revision-Date: 2006-03-26 11:15:00+0100\n"
+"PO-Revision-Date: 2006-11-30 23:46:00+0100\n"
 "Last-Translator: Jerome Alet <alet@librelogiciel.com>\n"
 "Language-Team: English <alet@librelogiciel.com>\n"
@@ -57,4 +57,383 @@
 "                       If the user already exists, actual balance is left\n"
 "                       unmodified. If unset, the default value is 0.\n"
+msgstr ""
+
+#, python-format
+msgid "SIGTERM received, job %s cancelled."
+msgstr ""
+
+#, python-format
+msgid "Network error while querying the CUPS server : %s"
+msgstr ""
+
+msgid "You are not allowed to print at this time."
+msgstr ""
+
+msgid "Print job cancelled."
+msgstr ""
+
+msgid "Unlimited"
+msgstr ""
+
+msgid "ON"
+msgstr ""
+
+msgid "OFF"
+msgstr ""
+
+#, python-format
+msgid "Banner generator %s exit code is %s"
+msgstr ""
+
+msgid "Banner won't be printed : maximum number of deny banners reached."
+msgstr ""
+
+#, python-format
+msgid "Beware : computed job size (%s) != precomputed job size (%s)"
+msgstr ""
+
+msgid ""
+"The job size will be trusted anyway according to the 'trustjobsize' directive"
+msgstr ""
+
+#, python-format
+msgid ""
+"The job size will be trusted because it is inferior to the 'trustjobsize' "
+"directive's limit %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"The job size will be modified according to the 'trustjobsize' directive : %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Printer %s not registered in the PyKota system, applying external policy (%"
+"s) for printer %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"User %s not registered in the PyKota system, applying external policy (%s) "
+"for printer %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"User %s doesn't have quota on printer %s in the PyKota system, applying "
+"external policy (%s) for printer %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"External policy %s for printer %s produced an error. Job rejected. Please "
+"check PyKota's configuration files."
+msgstr ""
+
+#, python-format
+msgid ""
+"Printer %s not registered in the PyKota system, applying default policy (%s)"
+msgstr ""
+
+#, python-format
+msgid ""
+"User %s not registered in the PyKota system, applying default policy (%s) "
+"for printer %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"User %s doesn't have quota on printer %s in the PyKota system, applying "
+"default policy (%s)"
+msgstr ""
+
+#, python-format
+msgid ""
+"Printer %s still not registered in the PyKota system, job will be rejected"
+msgstr ""
+
+#, python-format
+msgid ""
+"User %s still not registered in the PyKota system, job will be rejected on "
+"printer %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"User %s still doesn't have quota on printer %s in the PyKota system, job "
+"will be rejected"
+msgstr ""
+
+msgid "Job is a dupe"
+msgstr ""
+
+msgid "Printing is denied by configuration"
+msgstr ""
+
+#, python-format
+msgid "Duplicate print jobs are not allowed on printer %s."
+msgstr ""
+
+msgid "Subprocess denied printing of a dupe"
+msgstr ""
+
+#, python-format
+msgid "Duplicate print jobs are not allowed on printer %s at this time."
+msgstr ""
+
+msgid "Subprocess allowed printing of a dupe"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"\n"
+"Your system administrator :\n"
+"\n"
+"\t%s - <%s>\n"
+msgstr ""
+
+#, python-format
+msgid "Impossible to connect to SMTP server : %s"
+msgstr ""
+
+msgid "Print Quota"
+msgstr ""
+
+#, python-format
+msgid "Impossible to send mail to %s, error %s : %s"
+msgstr ""
+
+#, python-format
+msgid "Problem when sending mail : %s"
+msgstr ""
+
+msgid "Job contains no data. Printing is denied."
+msgstr ""
+
+msgid "Error in external policy script. Printing is denied."
+msgstr ""
+
+#, python-format
+msgid ""
+"Still no print quota entry for user %s on printer %s after external policy. "
+"Printing is denied."
+msgstr ""
+
+msgid "Printing is denied by printer policy."
+msgstr ""
+
+msgid "Job allowed by printer policy. No accounting will be done."
+msgstr ""
+
+#, python-format
+msgid "Invalid policy %s for printer %s"
+msgstr ""
+
+#, python-format
+msgid "Precomputed job size (%s pages) too large for printer %s."
+msgstr ""
+
+#, python-format
+msgid "You are not allowed to print so many pages on printer %s at this time."
+msgstr ""
+
+#, python-format
+msgid "User %s is not allowed to print at this time."
+msgstr ""
+
+msgid "Your account settings forbid you to print at this time."
+msgstr ""
+
+#, python-format
+msgid "Print Quota exceeded for user %s on printer %s"
+msgstr ""
+
+#, python-format
+msgid "Print Quota low for user %s on printer %s"
+msgstr ""
+
+msgid "Job denied, no accounting will be done."
+msgstr ""
+
+msgid "Job cancelled, no accounting will be done."
+msgstr ""
+
+msgid "Job accounting begins."
+msgstr ""
+
+msgid "Job denied, no accounting has been done."
+msgstr ""
+
+msgid "Job cancelled, no accounting has been done."
+msgstr ""
+
+msgid "Job accounting ends."
+msgstr ""
+
+msgid ""
+"Job size forced to 0 because the real CUPS backend failed. No accounting "
+"will be done."
+msgstr ""
+
+msgid "The real CUPS backend failed, but the job will be accounted for anyway."
+msgstr ""
+
+msgid "Job size forced to 0 because printing is denied."
+msgstr ""
+
+msgid "Job size forced to 0 because printing was cancelled."
+msgstr ""
+
+#, python-format
+msgid "Job size : %i"
+msgstr ""
+
+#, python-format
+msgid "User %s's quota on printer %s won't be modified"
+msgstr ""
+
+#, python-format
+msgid "Updating user %s's quota on printer %s"
+msgstr ""
+
+msgid "Job added to history."
+msgstr ""
+
+#, python-format
+msgid "Billing code %s was updated."
+msgstr ""
+
+#, python-format
+msgid "Incorrect value for the 'onbackenderror' directive in section [%s]"
+msgstr ""
+
+#, python-format
+msgid "The real backend produced an error, we will try again in %s seconds."
+msgstr ""
+
+#, python-format
+msgid "Job %s interrupted by the administrator !"
+msgstr ""
+
+#, python-format
+msgid ""
+"dumpykota v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"Dumps PyKota database's content.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  dumpykota [options] [filterexpr]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints dumpykota's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -d | --data type     Dumps 'type' datas. Allowed types are :\n"
+"                       \n"
+"                         - history : dumps the jobs history.\n"
+"                         - users : dumps users.\n"
+"                         - groups : dumps user groups.\n"
+"                         - printers : dump printers.\n"
+"                         - upquotas : dump user quotas.\n"
+"                         - gpquotas : dump user groups quotas.\n"
+"                         - payments : dumps user payments.\n"
+"                         - pmembers : dumps printer groups members.\n"
+"                         - umembers : dumps user groups members.\n"
+"                         - billingcodes : dumps billing codes.\n"
+"                         - all : dumps all PyKota datas. The output format\n"
+"                                 is always XML in this case.\n"
+"                         \n"
+"                       NB : the -d | --data command line option   \n"
+"                       is MANDATORY.\n"
+"  \n"
+"  -f | --format fmt    Dumps datas in the 'fmt' format. When not specified,\n"
+"                       the format is to dump datas in the csv format (comma\n"
+"                       separated values). All data dumped is between double\n"
+"                       quotes. Allowed formats are :\n"
+"                       \n"
+"                         - csv : separate datas with commas\n"
+"                         - ssv : separate datas with semicolons\n"
+"                         - tsv : separate datas with tabs\n"
+"                         - xml : dump data as XML \n"
+"                         - cups : dump datas in CUPS' page_log format :\n"
+"                                  ONLY AVAILABLE WITH --data history\n"
+"                         \n"
+"  -o | --output fname  All datas will be dumped to the file instead of\n"
+"                       to the standard output. The special '-' filename\n"
+"                       is the default value and means stdout.\n"
+"                       WARNING : existing files are truncated !\n"
+"\n"
+"  -s | --sum           Summarize the selected datas.\n"
+"                           ONLY AVAILABLE WITH --data history or payments\n"
+"\n"
+"  Use the filter expressions to extract only parts of the \n"
+"  datas. Allowed filters are of the form :\n"
+"                \n"
+"         key=value\n"
+"                         \n"
+"  Allowed keys for now are :  \n"
+"                       \n"
+"         username       User's name\n"
+"         groupname      Users group's name\n"
+"         printername    Printer's name\n"
+"         pgroupname     Printers group's name\n"
+"         hostname       Client's hostname\n"
+"         jobid          Job's Id\n"
+"         billingcode    Job's billing code\n"
+"         start          Job's date of printing\n"
+"         end            Job's date of printing\n"
+"         \n"
+"  Dates formatting with 'start' and 'end' filter keys :\n"
+"  \n"
+"    YYYY : year boundaries\n"
+"    YYYYMM : month boundaries\n"
+"    YYYYMMDD : day boundaries\n"
+"    YYYYMMDDhh : hour boundaries\n"
+"    YYYYMMDDhhmm : minute boundaries\n"
+"    YYYYMMDDhhmmss : second boundaries\n"
+"    yesterday[+-NbDays] : yesterday more or less N days (e.g. : yesterday-"
+"15)\n"
+"    today[+-NbDays] : today more or less N days (e.g. : today-15)\n"
+"    tomorrow[+-NbDays] : tomorrow more or less N days (e.g. : tomorrow-15)\n"
+"    now[+-NbDays] : now more or less N days (e.g. now-15)\n"
+"\n"
+"  'now' and 'today' are not exactly the same since today represents the "
+"first\n"
+"  or last second of the day depending on if it's used in a start= or end=\n"
+"  date expression. The utility to be able to specify dates in the future is\n"
+"  a question which remains to be answered :-)\n"
+"  \n"
+"  Contrary to other PyKota management tools, wildcard characters are not \n"
+"  expanded, so you can't use them.\n"
+"  \n"
+"  NB : not all keys are allowed for each data type, so the result may be \n"
+"  empty if you use a key not available for a particular data type.\n"
+"  \n"
+"Examples :\n"
+"\n"
+"  $ dumpykota --data history --format csv >myfile.csv\n"
+"  \n"
+"  This dumps the history in a comma separated values file, for possible\n"
+"  use in a spreadsheet.\n"
+"  \n"
+"  $ dumpykota --data users --format xml -o users.xml\n"
+"  \n"
+"  Dumps all users datas to the users.xml file.\n"
+"  \n"
+"  $ dumpykota --data history printername=HP2100 username=jerome\n"
+"  \n"
+"  Dumps the job history for user jerome on printer HP2100 only.\n"
+"  \n"
+"  $ dumpykota --data history start=200503 end=20050730234615\n"
+"  \n"
+"  Dumps all jobs printed between March 1st 2005 at midnight and\n"
+"  July 30th 2005 at 23 hours 46 minutes and 15 secondes included.\n"
+msgstr ""
+
+msgid "The -d | --data command line option is mandatory, see help."
 msgstr ""
 
@@ -218,7 +597,4 @@
 msgstr ""
 
-msgid "Unlimited"
-msgstr ""
-
 #, python-format
 msgid "Warning banners printed : %s"
@@ -260,7 +636,5 @@
 
 #, python-format
-msgid ""
-"Impossible to create print quota entries if the user or group object '%s' "
-"doesn't already exist. Please use pkusers to create it first."
+msgid "No entry matches %s. Please use pkusers to create them first."
 msgstr ""
 
@@ -272,4 +646,112 @@
 
 msgid "You have to pass user or group names on the command line"
+msgstr ""
+
+#, python-format
+msgid ""
+"repykota v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"Generates print quota reports.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  repykota [options] \n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints repykota's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -u | --users         Generates a report on users quota, this is \n"
+"                       the default.\n"
+"  \n"
+"  -g | --groups        Generates a report on group quota instead of users.\n"
+"  \n"
+"  -i | --ingroups g1[,g2...]  Only lists users who are members of these\n"
+"                              groups. Reserved to PyKota Administrators.\n"
+"  \n"
+"  -P | --printer p     Report quotas on this printer only. Actually p can\n"
+"                       use wildcards characters to select only\n"
+"                       some printers. The default value is *, meaning\n"
+"                       all printers.\n"
+"                       You can specify several names or wildcards, \n"
+"                       by separating them with commas.\n"
+"  \n"
+"examples :                              \n"
+"\n"
+"  $ repykota --printer lp\n"
+"  \n"
+"  This will print the quota status for all users who use the lp printer.\n"
+"\n"
+"  $ repykota \n"
+"  \n"
+"  This will print the quota status for all users on all printers.\n"
+"  \n"
+"  $ repykota --printer \"laser*,*pson\" jerome \"jo*\"\n"
+"  \n"
+"  This will print the quota status for user jerome and all users\n"
+"  whose name begins with \"jo\" on all printers which name begins\n"
+"  with \"laser\" or ends with \"pson\".\n"
+"  \n"
+"  If launched by an user who is not a PyKota administrator, additionnal\n"
+"  arguments representing users or groups names are ignored, and only the\n"
+"  current user/group is reported.\n"
+msgstr ""
+
+msgid "Option --ingroups is reserved to PyKota Administrators."
+msgstr ""
+
+#, python-format
+msgid "There's no printer matching %s"
+msgstr ""
+
+#, python-format
+msgid ""
+"warnpykota v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"Sends mail to users over print quota.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  warnpykota  [options]  [names]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints warnpykota's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -u | --users         Warns users over their print quota, this is the \n"
+"                       default.\n"
+"  \n"
+"  -g | --groups        Warns users whose groups quota are over limit.\n"
+"  \n"
+"  -P | --printer p     Verify quotas on this printer only. Actually p can\n"
+"                       use wildcards characters to select only\n"
+"                       some printers. The default value is *, meaning\n"
+"                       all printers.\n"
+"                       You can specify several names or wildcards, \n"
+"                       by separating them with commas.\n"
+"  \n"
+"examples :                              \n"
+"\n"
+"  $ warnpykota --printer lp\n"
+"  \n"
+"  This will warn all users of the lp printer who have exceeded their\n"
+"  print quota.\n"
+"\n"
+"  $ warnpykota \n"
+"  \n"
+"  This will warn all users  who have exceeded their print quota on\n"
+"  any printer.\n"
+"\n"
+"  $ warnpykota --groups --printer \"laserjet*\" \"dev*\"\n"
+"  \n"
+"  This will warn all users of groups which names begins with \"dev\" and\n"
+"  who have exceeded their print quota on any printer which name begins \n"
+"  with \"laserjet\"\n"
+"  \n"
+"  If launched by an user who is not a PyKota administrator, additionnal\n"
+"  arguments representing users or groups names are ignored, and only the\n"
+"  current user/group is reported.\n"
 msgstr ""
 
@@ -402,4 +884,216 @@
 #, python-format
 msgid ""
+"pkbcodes v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"A billing codes Manager for PyKota.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pkbcodes [options] code1 code2 code3 ... codeN\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pkbcodes version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -a | --add           Adds billing codes if they don't exist in PyKota's\n"
+"                       database. If they exist, they are modified\n"
+"                       unless -s|--skipexisting is also used.\n"
+"\n"
+"  -d | --delete        Deletes billing codes from PyKota's database.\n"
+"                       NB : the history entries with this billing code\n"
+"                       are not deleted, voluntarily.\n"
+"\n"
+"  -D | --description d Adds a textual description to billing codes.\n"
+"\n"
+"  -l | --list          List informations about the billing codes.\n"
+"\n"
+"  -r | --reset         Resets the billing codes' balance and page counters\n"
+"                       to 0.\n"
+"\n"
+"  -s | --skipexisting  In combination with the --add option above, tells\n"
+"                       pkbcodes to not modify existing billing codes.\n"
+"\n"
+"  code1 through codeN can contain wildcards if the --add option\n"
+"  is not set.\n"
+"\n"
+"examples :                              \n"
+"\n"
+"  $ pkbcodes --add -D \"My project\" myproj\n"
+"\n"
+"  Will create the myproj billing code with \"My project\"\n"
+"  as the description.\n"
+"\n"
+"  $ pkbcodes --delete \"*\"\n"
+"\n"
+"  This will completely delete all the billing codes, but without\n"
+"  removing any matching job from the history. USE WITH CARE ANYWAY !\n"
+"  \n"
+"  $ pkbcodes --list \"my*\"\n"
+"  \n"
+"  This will list all billing codes which name begins with 'my'.\n"
+msgstr ""
+
+msgid "You're not allowed to use this command."
+msgstr ""
+
+#, python-format
+msgid "There's no billingcode matching %s"
+msgstr ""
+
+msgid "pages"
+msgstr ""
+
+msgid "and"
+msgstr ""
+
+msgid "credits"
+msgstr ""
+
+#, python-format
+msgid "Billing code [%s] already exists, skipping."
+msgstr ""
+
+#, python-format
+msgid "Billing code [%s] already exists, will be modified."
+msgstr ""
+
+msgid "You have to pass billing codes on the command line"
+msgstr ""
+
+#, python-format
+msgid ""
+"pkinvoice v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"An invoice generator for PyKota.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pkinvoice [options] [filterexpr]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pkinvoice's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -l | --logo img      Use the image as the invoice's logo. The logo will\n"
+"                       be drawn at the center top of the page. The default\n"
+"                       logo is /usr/share/pykota/logos/pykota.jpeg\n"
+"                       \n"
+"  -p | --pagesize sz   Sets sz as the page size. Most well known\n"
+"                       page sizes are recognized, like 'A4' or 'Letter'\n"
+"                       to name a few. The default size is A4.\n"
+"                       \n"
+"  -n | --number N      Sets the number of the first invoice. This number\n"
+"                       will automatically be incremented for each invoice.\n"
+"                       \n"
+"  -o | --output f.pdf  Defines the name of the invoice file which will\n"
+"                       be generated as a PDF document. If not set or\n"
+"                       set to '-', the PDF document is sent to standard\n"
+"                       output. \n"
+"                       \n"
+"  -u | --unit u        Defines the name of the unit to use on the "
+"invoice.                       \n"
+"                       The default unit is 'Credits', optionally translated\n"
+"                       to your native language if it is supported by "
+"PyKota.\n"
+"  \n"
+"  -V | --vat p         Sets the percent value of the applicable VAT to be\n"
+"                       exposed. The default is 0.0, meaning no VAT\n"
+"                       information will be included.\n"
+"  \n"
+"\n"
+"  Use the filter expressions to extract only parts of the \n"
+"  datas. Allowed filters are of the form :\n"
+"                \n"
+"         key=value\n"
+"                         \n"
+"  Allowed keys for now are :  \n"
+"                       \n"
+"         username       User's name\n"
+"         printername    Printer's name\n"
+"         hostname       Client's hostname\n"
+"         jobid          Job's Id\n"
+"         billingcode    Job's billing code\n"
+"         start          Job's date of printing\n"
+"         end            Job's date of printing\n"
+"         \n"
+"  Dates formatting with 'start' and 'end' filter keys :\n"
+"  \n"
+"    YYYY : year boundaries\n"
+"    YYYYMM : month boundaries\n"
+"    YYYYMMDD : day boundaries\n"
+"    YYYYMMDDhh : hour boundaries\n"
+"    YYYYMMDDhhmm : minute boundaries\n"
+"    YYYYMMDDhhmmss : second boundaries\n"
+"    yesterday[+-NbDays] : yesterday more or less N days (e.g. : yesterday-"
+"15)\n"
+"    today[+-NbDays] : today more or less N days (e.g. : today-15)\n"
+"    tomorrow[+-NbDays] : tomorrow more or less N days (e.g. : tomorrow-15)\n"
+"    now[+-NbDays] : now more or less N days (e.g. now-15)\n"
+"\n"
+"  'now' and 'today' are not exactly the same since today represents the "
+"first\n"
+"  or last second of the day depending on if it's used in a start= or end=\n"
+"  date expression. The utility to be able to specify dates in the future is\n"
+"  a question which remains to be answered :-)\n"
+"  \n"
+"  Contrary to other PyKota management tools, wildcard characters are not \n"
+"  expanded, so you can't use them.\n"
+"  \n"
+"examples :\n"
+"\n"
+"  $ pkinvoice --unit EURO --output /tmp/invoices.pdf start=now-30\n"
+"  \n"
+"  Will generate a PDF document containing invoices for all users\n"
+"  who have spent some credits last month. Invoices will be done in\n"
+"  EURO.  No VAT information will be included.\n"
+msgstr ""
+
+msgid "Invoice"
+msgstr ""
+
+msgid "Edited on"
+msgstr ""
+
+msgid "Number of jobs printed"
+msgstr ""
+
+msgid "Number of pages printed"
+msgstr ""
+
+msgid "Amount due"
+msgstr ""
+
+msgid "Included VAT"
+msgstr ""
+
+msgid "Here's the invoice for your printouts"
+msgstr ""
+
+msgid "Generating invoices"
+msgstr ""
+
+#, python-format
+msgid "Incorrect value '%s' for the --vat command line option"
+msgstr ""
+
+#, python-format
+msgid "Incorrect value '%s' for the --number command line option"
+msgstr ""
+
+#, python-format
+msgid "Invalid filter value [%s], see help."
+msgstr ""
+
+#, python-format
+msgid "Invoiced %i users for %i jobs, %i pages and %.3f credits"
+msgstr ""
+
+msgid "Credits"
+msgstr ""
+
+#, python-format
+msgid ""
 "pkmail v%(__version__)s (c) %(__years__)s %(__author__)s\n"
 "\n"
@@ -443,581 +1137,5 @@
 msgstr ""
 
-#, python-format
-msgid ""
-"pkturnkey v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"A turn key tool for PyKota. When launched, this command will initialize\n"
-"PyKota's database with all existing print queues and some or all users.\n"
-"For now, no prices or limits are set, so printing is fully accounted\n"
-"for, but not limited. That's why you'll probably want to also use\n"
-"edpykota once the database has been initialized.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  pkturnkey [options] [printqueues names]\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints pkturnkey version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -c | --doconf        Give hints about what to put into pykota.conf\n"
-"  \n"
-"  -d | --dousers       Manages users accounts as well.\n"
-"  \n"
-"  -D | --dogroups      Manages users groups as well.\n"
-"                       Implies -d | --dousers.\n"
-"  \n"
-"  -e | --emptygroups   Includes empty groups.\n"
-"  \n"
-"  -f | --force         Modifies the database instead of printing what\n"
-"                       it would do.\n"
-"                       \n"
-"  -u | --uidmin uid    Only adds users whose uid is greater than or equal "
-"to\n"
-"                       uid. You can pass an username there as well, and its\n"
-"                       uid will be used automatically.\n"
-"                       If not set, 0 will be used automatically.\n"
-"                       Implies -d | --dousers.\n"
-"                       \n"
-"  -U | --uidmax uid    Only adds users whose uid is lesser than or equal to\n"
-"                       uid. You can pass an username there as well, and its\n"
-"                       uid will be used automatically.\n"
-"                       If not set, a large value will be used "
-"automatically.\n"
-"                       Implies -d | --dousers.\n"
-"\n"
-"  -g | --gidmin gid    Only adds groups whose gid is greater than or equal "
-"to\n"
-"                       gid. You can pass a groupname there as well, and its\n"
-"                       gid will be used automatically.\n"
-"                       If not set, 0 will be used automatically.\n"
-"                       Implies -D | --dogroups.\n"
-"                       \n"
-"  -G | --gidmax gid    Only adds groups whose gid is lesser than or equal "
-"to\n"
-"                       gid. You can pass a groupname there as well, and its\n"
-"                       gid will be used automatically.\n"
-"                       If not set, a large value will be used "
-"automatically.\n"
-"                       Implies -D | --dogroups.\n"
-"\n"
-"examples :                              \n"
-"\n"
-"  $ pkturnkey --dousers --uidmin jerome\n"
-"\n"
-"  Will simulate the initialization of PyKota's database will all existing\n"
-"  printers and print accounts for all users whose uid is greater than\n"
-"  or equal to jerome's one. Won't manage any users group.\n"
-"  \n"
-"  To REALLY initialize the database instead of simulating it, please\n"
-"  use the -f | --force command line switch.\n"
-"  \n"
-"  You can limit the initialization to only a subset of the existing\n"
-"  printers, by passing their names at the end of the command line.\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Printer %s is not managed by PyKota yet. Please modify printers.conf and "
-"restart CUPS."
-msgstr ""
-
-msgid "You're not allowed to use this command."
-msgstr ""
-
-msgid "Please be patient..."
-msgstr ""
-
-msgid "Don't worry, the database WILL NOT BE MODIFIED."
-msgstr ""
-
-msgid "Please WORRY NOW, the database WILL BE MODIFIED."
-msgstr ""
-
-msgid "System users will have a print account as well !"
-msgstr ""
-
-#, python-format
-msgid "Unknown username %s : %s"
-msgstr ""
-
-msgid "System groups will have a print account as well !"
-msgstr ""
-
-#, python-format
-msgid "Unknown groupname %s : %s"
-msgstr ""
-
-msgid "Simulation terminated."
-msgstr ""
-
-msgid "Database initialized !"
-msgstr ""
-
-msgid "The --uidmin or --uidmax command line option implies --dousers as well."
-msgstr ""
-
-msgid ""
-"The --gidmin or --gidmax command line option implies --dogroups as well."
-msgstr ""
-
-msgid "The --dogroups command line option implies --dousers as well."
-msgstr ""
-
-#, python-format
-msgid ""
-"pykosd v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"An OSD quota monitor for PyKota.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  pykosd [options]\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints pykosd's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -c | --color #rrggbb Sets the color to use for display as an hexadecimal\n"
-"                       triplet, for example #FF0000 is 100%% red.\n"
-"                       Defaults to 100%% green (#00FF00).\n"
-"                       \n"
-"  -d | --duration d    Sets the duration of the display in seconds. \n"
-"                       Defaults to 3 seconds.\n"
-"                       \n"
-"  -f | --font f        Sets the font to use for "
-"display.                      \n"
-"                       Defaults to the Python OSD library's default.\n"
-"  \n"
-"  -l | --loop n        Sets the number of times the info will be displayed.\n"
-"                       Defaults to 0, which means loop forever.\n"
-"                       \n"
-"  -s | --sleep s       Sets the sleeping duration between two displays \n"
-"                       in seconds. Defaults to 180 seconds (3 minutes).\n"
-"                       \n"
-"  \n"
-"examples :                              \n"
-"\n"
-"  $ pykosd -s 60 --loop 5\n"
-"  \n"
-"  Will launch pykosd. Display will be refreshed every 60 seconds,\n"
-"  and will last for 3 seconds (the default) each time. After five\n"
-"  iterations, the program will exit.\n"
-msgstr ""
-
-#, python-format
-msgid "Invalid duration option %s"
-msgstr ""
-
-#, python-format
-msgid "Invalid loop option %s"
-msgstr ""
-
-#, python-format
-msgid "Invalid sleep option %s"
-msgstr ""
-
-#, python-format
-msgid "Invalid color option %s"
-msgstr ""
-
-#, python-format
-msgid "User %s doesn't exist in PyKota's database"
-msgstr ""
-
-#, python-format
-msgid "Pages used on %s : %s"
-msgstr ""
-
-#, python-format
-msgid "PyKota Units left : %.2f"
-msgstr ""
-
-msgid "Printing denied."
-msgstr ""
-
-msgid "Printing not limited."
-msgstr ""
-
-msgid "Printing not limited, no accounting."
-msgstr ""
-
-#, python-format
-msgid ""
-"repykota v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"Generates print quota reports.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  repykota [options] \n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints repykota's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -u | --users         Generates a report on users quota, this is \n"
-"                       the default.\n"
-"  \n"
-"  -g | --groups        Generates a report on group quota instead of users.\n"
-"  \n"
-"  -i | --ingroups g1[,g2...]  Only lists users who are members of these\n"
-"                              groups. Reserved to PyKota Administrators.\n"
-"  \n"
-"  -P | --printer p     Report quotas on this printer only. Actually p can\n"
-"                       use wildcards characters to select only\n"
-"                       some printers. The default value is *, meaning\n"
-"                       all printers.\n"
-"                       You can specify several names or wildcards, \n"
-"                       by separating them with commas.\n"
-"  \n"
-"examples :                              \n"
-"\n"
-"  $ repykota --printer lp\n"
-"  \n"
-"  This will print the quota status for all users who use the lp printer.\n"
-"\n"
-"  $ repykota \n"
-"  \n"
-"  This will print the quota status for all users on all printers.\n"
-"  \n"
-"  $ repykota --printer \"laser*,*pson\" jerome \"jo*\"\n"
-"  \n"
-"  This will print the quota status for user jerome and all users\n"
-"  whose name begins with \"jo\" on all printers which name begins\n"
-"  with \"laser\" or ends with \"pson\".\n"
-"  \n"
-"  If launched by an user who is not a PyKota administrator, additionnal\n"
-"  arguments representing users or groups names are ignored, and only the\n"
-"  current user/group is reported.\n"
-msgstr ""
-
-msgid "Option --ingroups is reserved to PyKota Administrators."
-msgstr ""
-
-#, python-format
-msgid "There's no printer matching %s"
-msgstr ""
-
-#, python-format
-msgid "SIGTERM received, job %s cancelled."
-msgstr ""
-
-msgid "You are not allowed to print at this time."
-msgstr ""
-
-msgid "Print job cancelled."
-msgstr ""
-
-#, python-format
-msgid "Banner generator %s exit code is %s"
-msgstr ""
-
-msgid "Banner won't be printed : maximum number of deny banners reached."
-msgstr ""
-
-#, python-format
-msgid "Beware : computed job size (%s) != precomputed job size (%s)"
-msgstr ""
-
-msgid ""
-"The job size will be trusted anyway according to the 'trustjobsize' directive"
-msgstr ""
-
-#, python-format
-msgid ""
-"The job size will be trusted because it is inferior to the 'trustjobsize' "
-"directive's limit %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"The job size will be modified according to the 'trustjobsize' directive : %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"Printer %s not registered in the PyKota system, applying external policy (%"
-"s) for printer %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"User %s not registered in the PyKota system, applying external policy (%s) "
-"for printer %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"User %s doesn't have quota on printer %s in the PyKota system, applying "
-"external policy (%s) for printer %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"External policy %s for printer %s produced an error. Job rejected. Please "
-"check PyKota's configuration files."
-msgstr ""
-
-#, python-format
-msgid ""
-"Printer %s not registered in the PyKota system, applying default policy (%s)"
-msgstr ""
-
-#, python-format
-msgid ""
-"User %s not registered in the PyKota system, applying default policy (%s) "
-"for printer %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"User %s doesn't have quota on printer %s in the PyKota system, applying "
-"default policy (%s)"
-msgstr ""
-
-#, python-format
-msgid ""
-"Printer %s still not registered in the PyKota system, job will be rejected"
-msgstr ""
-
-#, python-format
-msgid ""
-"User %s still not registered in the PyKota system, job will be rejected on "
-"printer %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"User %s still doesn't have quota on printer %s in the PyKota system, job "
-"will be rejected"
-msgstr ""
-
-msgid "Job is a dupe"
-msgstr ""
-
-msgid "Printing is denied by configuration"
-msgstr ""
-
-#, python-format
-msgid "Duplicate print jobs are not allowed on printer %s."
-msgstr ""
-
-msgid "Subprocess denied printing of a dupe"
-msgstr ""
-
-#, python-format
-msgid "Duplicate print jobs are not allowed on printer %s at this time."
-msgstr ""
-
-msgid "Subprocess allowed printing of a dupe"
-msgstr ""
-
-#, python-format
-msgid ""
-"\n"
-"\n"
-"Your system administrator :\n"
-"\n"
-"\t%s - <%s>\n"
-msgstr ""
-
-#, python-format
-msgid "Impossible to connect to SMTP server : %s"
-msgstr ""
-
-msgid "Print Quota"
-msgstr ""
-
-#, python-format
-msgid "Impossible to send mail to %s, error %s : %s"
-msgstr ""
-
-msgid "Job contains no data. Printing is denied."
-msgstr ""
-
-msgid "Error in external policy script. Printing is denied."
-msgstr ""
-
-#, python-format
-msgid ""
-"Still no print quota entry for user %s on printer %s after external policy. "
-"Printing is denied."
-msgstr ""
-
-msgid "Printing is denied by printer policy."
-msgstr ""
-
-msgid "Job allowed by printer policy. No accounting will be done."
-msgstr ""
-
-#, python-format
-msgid "Invalid policy %s for printer %s"
-msgstr ""
-
-#, python-format
-msgid "Precomputed job size (%s pages) too large for printer %s."
-msgstr ""
-
-#, python-format
-msgid "You are not allowed to print so many pages on printer %s at this time."
-msgstr ""
-
-#, python-format
-msgid "User %s is not allowed to print at this time."
-msgstr ""
-
-msgid "Your account settings forbid you to print at this time."
-msgstr ""
-
-#, python-format
-msgid "Print Quota exceeded for user %s on printer %s"
-msgstr ""
-
-#, python-format
-msgid "Print Quota low for user %s on printer %s"
-msgstr ""
-
-msgid "Job denied, no accounting will be done."
-msgstr ""
-
-msgid "Job cancelled, no accounting will be done."
-msgstr ""
-
-msgid "Job accounting begins."
-msgstr ""
-
-msgid "Job denied, no accounting has been done."
-msgstr ""
-
-msgid "Job cancelled, no accounting has been done."
-msgstr ""
-
-msgid "Job accounting ends."
-msgstr ""
-
-msgid ""
-"Job size forced to 0 because the real CUPS backend failed. No accounting "
-"will be done."
-msgstr ""
-
-msgid "The real CUPS backend failed, but the job will be accounted for anyway."
-msgstr ""
-
-msgid "Job size forced to 0 because printing is denied."
-msgstr ""
-
-msgid "Job size forced to 0 because printing was cancelled."
-msgstr ""
-
-#, python-format
-msgid "Job size : %i"
-msgstr ""
-
-#, python-format
-msgid "User %s's quota on printer %s won't be modified"
-msgstr ""
-
-#, python-format
-msgid "Updating user %s's quota on printer %s"
-msgstr ""
-
-msgid "Job added to history."
-msgstr ""
-
-#, python-format
-msgid "Billing code %s was updated."
-msgstr ""
-
-#, python-format
-msgid "Incorrect value for the 'onbackenderror' directive in section [%s]"
-msgstr ""
-
-#, python-format
-msgid "The real backend produced an error, we will try again in %s seconds."
-msgstr ""
-
-#, python-format
-msgid "Job %s interrupted by the administrator !"
-msgstr ""
-
-#, python-format
-msgid ""
-"pkbcodes v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"A billing codes Manager for PyKota.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  pkbcodes [options] code1 code2 code3 ... codeN\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints pkbcodes version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -a | --add           Adds billing codes if they don't exist in PyKota's\n"
-"                       database. If they exist, they are modified\n"
-"                       unless -s|--skipexisting is also used.\n"
-"\n"
-"  -d | --delete        Deletes billing codes from PyKota's database.\n"
-"                       NB : the history entries with this billing code\n"
-"                       are not deleted, voluntarily.\n"
-"\n"
-"  -D | --description d Adds a textual description to billing codes.\n"
-"\n"
-"  -l | --list          List informations about the billing codes.\n"
-"\n"
-"  -r | --reset         Resets the billing codes' balance and page counters\n"
-"                       to 0.\n"
-"\n"
-"  -s | --skipexisting  In combination with the --add option above, tells\n"
-"                       pkbcodes to not modify existing billing codes.\n"
-"\n"
-"  code1 through codeN can contain wildcards if the --add option\n"
-"  is not set.\n"
-"\n"
-"examples :                              \n"
-"\n"
-"  $ pkbcodes --add -D \"My project\" myproj\n"
-"\n"
-"  Will create the myproj billing code with \"My project\"\n"
-"  as the description.\n"
-"\n"
-"  $ pkbcodes --delete \"*\"\n"
-"\n"
-"  This will completely delete all the billing codes, but without\n"
-"  removing any matching job from the history. USE WITH CARE ANYWAY !\n"
-"  \n"
-"  $ pkbcodes --list \"my*\"\n"
-"  \n"
-"  This will list all billing codes which name begins with 'my'.\n"
-msgstr ""
-
-#, python-format
-msgid "There's no billingcode matching %s"
-msgstr ""
-
-msgid "pages"
-msgstr ""
-
-msgid "and"
-msgstr ""
-
-msgid "credits"
-msgstr ""
-
-#, python-format
-msgid "Billing code [%s] already exists, skipping."
-msgstr ""
-
-#, python-format
-msgid "Billing code [%s] already exists, will be modified."
-msgstr ""
-
-msgid "You have to pass billing codes on the command line"
+msgid "Result of your commands"
 msgstr ""
 
@@ -1124,5 +1242,6 @@
 "examples :                    \n"
 "\n"
-"  pknotify -d client:7654 --noremote CONTINUE --confirm \"This job costs 10 credits\"\n"
+"  pknotify -d client:7654 --noremote CONTINUE --confirm \"This job costs 10 "
+"credits\"\n"
 "  \n"
 "  Would display the cost of the print job and asks for confirmation.\n"
@@ -1165,4 +1284,10 @@
 msgstr ""
 
+#, python-format
+msgid ""
+"Are you sure that PyKotIcon is running and accepting incoming connections on "
+"%s:%s ?"
+msgstr ""
+
 msgid "Connection error"
 msgstr ""
@@ -1171,556 +1296,8 @@
 msgstr ""
 
+msgid "incorrect value for the --noremote command line switch, see help."
+msgstr ""
+
 msgid "some options require arguments, see help."
-msgstr ""
-
-#, python-format
-msgid ""
-"pkusers v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"An Users and Groups Manager for PyKota.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  pkusers [options] user1 user2 user3 ... userN\n"
-"  \n"
-"or :  \n"
-"\n"
-"  pkusers --groups [options] group1 group2 group3 ... groupN\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints pkusers's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -a | --add           Adds users if they don't exist on the database.\n"
-"                       If they exist, they are modified unless\n"
-"                       -s|--skipexisting is also used.\n"
-"                       \n"
-"  -d | --delete        Deletes users from the quota storage.\n"
-"\n"
-"  -e | --email addr    Sets the email address for the users.\n"
-"                       If the addr parameter begins with @, then\n"
-"                       the username is prepended to addr to form\n"
-"                       a valid email address.\n"
-"\n"
-"  -D | --description d Adds a textual description to users or groups.\n"
-"                       \n"
-"  -g | --groups        Edit users groups instead of users.\n"
-"                          \n"
-"  -o | --overcharge f  Sets the overcharging factor applied to the user \n"
-"                       when computing the cost of a print job. Positive or \n"
-"                       negative floating point values are allowed,\n"
-"                       this allows you to do some really creative\n"
-"                       things like giving money to an user whenever\n"
-"                       he prints. The number of pages in a print job\n"
-"                       is not modified by this coefficient, only the\n"
-"                       cost of the job for a particular user.\n"
-"                       Only users have such a coefficient.\n"
-"  \n"
-"  -i | --ingroups g1[,g2...]  Puts the users into each of the groups\n"
-"                              listed, separated by commas. The groups\n"
-"                              must already exist in the Quota Storage.\n"
-"                       \n"
-"  -L | --list          Lists users or groups.\n"
-"  \n"
-"  -l | --limitby l     Choose if the user/group is limited in "
-"printing                     \n"
-"                       by its account balance or by its page quota.\n"
-"                       The default value is 'quota'. Allowed values\n"
-"                       are 'quota' 'balance' 'noquota' 'noprint' \n"
-"                       and 'nochange' :\n"
-"                       \n"
-"                         - quota : limit by number of pages per printer.\n"
-"                         - balance : limit by number of credits in account.\n"
-"                         - noquota : no limit, accounting still done.\n"
-"                         - nochange : no limit, accounting not done. \n"
-"                         - noprint : printing is denied. \n"
-"                       NB : nochange and noprint are not supported for "
-"groups.\n"
-"                       \n"
-"  -b | --balance b     Sets the user's account balance to "
-"b.                     \n"
-"                       Account balance may be increase or decreased\n"
-"                       if b is prefixed with + or -.\n"
-"                       WARNING : when decreasing account balance,\n"
-"                       the total paid so far by the user is decreased\n"
-"                       too.\n"
-"                       Groups don't have a real balance, but the\n"
-"                       sum of their users' account balance.\n"
-"                       \n"
-"  -C | --comment txt   Defines some informational text to be associated\n"
-"                       with a change to an user's account balance.\n"
-"                       Only meaningful if -b | --balance is also used.\n"
-"                       \n"
-"                       \n"
-"  -r | --remove        In combination with the --ingroups option "
-"above,                       \n"
-"                       remove users from the specified users groups.\n"
-"                       \n"
-"  -s | --skipexisting  In combination with the --add option above, tells\n"
-"                       pkusers to not modify existing users.\n"
-"                       \n"
-"  user1 through userN and group1 through groupN can use wildcards\n"
-"  if the --add option is not set.\n"
-"  \n"
-"examples :                              \n"
-"\n"
-"  $ pkusers --add john paul george ringo/ringo@example.com\n"
-"  \n"
-"  This will add users john, paul, george and ringo to the quota\n"
-"  database. User ringo's email address will also be set to \n"
-"  'ringo@example.com'\n"
-"  \n"
-"  $ pkusers --ingroups coders,it jerome\n"
-"  \n"
-"  User jerome is put into the groups \"coders\" and \"it\" which must\n"
-"  already exist in the quota database.\n"
-"            \n"
-"  $ pkusers --limitby balance jerome\n"
-"  \n"
-"  This will tell PyKota to limit jerome by his account's balance\n"
-"  when printing.\n"
-"  \n"
-"  $ pkusers --balance +10.0 --comment \"He paid with his blood !\" jerome\n"
-"  \n"
-"  This will increase jerome's account balance by 10.0 (in your\n"
-"  own currency). You can decrease the account balance with a\n"
-"  dash prefix, and set it to a fixed amount with no prefix.\n"
-"  A comment will be stored for this balance change.\n"
-"  \n"
-"  $ pkusers --delete jerome rachel\n"
-"  \n"
-"  This will completely delete jerome and rachel from the quota\n"
-"  database. All their quotas and jobs will be deleted too.\n"
-"  \n"
-"  $ pkusers --overcharge 2.5 poorstudent\n"
-"  \n"
-"  This will overcharge the poorstudent user by a factor of 2.5.\n"
-"  \n"
-"  $ pkusers --overcharge -1 jerome\n"
-"  \n"
-"  User jerome will actually earn money whenever he prints.\n"
-"  \n"
-"  $ pkusers --overcharge 0 boss\n"
-"  \n"
-"  User boss can print at will, it won't cost him anything because the\n"
-"  cost of each print job will be multiplied by zero before charging\n"
-"  his account.\n"
-"\n"
-"  $ pkusers --email @example.com\n"
-"\n"
-"  This will set the email address for each user to username@example.com\n"
-msgstr ""
-
-#, python-format
-msgid "There's no %s matching %s"
-msgstr ""
-
-#, python-format
-msgid "Limited by : %s"
-msgstr ""
-
-#, python-format
-msgid "Account balance : %.2f"
-msgstr ""
-
-#, python-format
-msgid "Total paid so far : %.2f"
-msgstr ""
-
-#, python-format
-msgid "Overcharging factor : %.2f"
-msgstr ""
-
-#, python-format
-msgid "Group balance : %.2f"
-msgstr ""
-
-#, python-format
-msgid "Invalid limitby value %s"
-msgstr ""
-
-#, python-format
-msgid "Invalid overcharge value %s"
-msgstr ""
-
-#, python-format
-msgid "Invalid balance value %s"
-msgstr ""
-
-#, python-format
-msgid "There's no users group matching %s"
-msgstr ""
-
-#, python-format
-msgid "Invalid email address %s"
-msgstr ""
-
-#, python-format
-msgid "Unknown group %s"
-msgstr ""
-
-#, python-format
-msgid "Unknown user %s"
-msgstr ""
-
-#, python-format
-msgid "%s %s already exists, skipping."
-msgstr ""
-
-#, python-format
-msgid "%s %s already exists, will be modified."
-msgstr ""
-
-#, python-format
-msgid "Invalid name %s"
-msgstr ""
-
-msgid "You have to pass user groups names on the command line"
-msgstr ""
-
-#, python-format
-msgid ""
-"pykotme v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"Gives print quotes to users.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  pykotme  [options]  [files]\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints pykotme's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -P | --printer p     Gives a quote for this printer only. Actually p can\n"
-"                       use wildcards characters to select only\n"
-"                       some printers. The default value is *, meaning\n"
-"                       all printers.\n"
-"                       You can specify several names or wildcards, \n"
-"                       by separating them with commas.\n"
-"  \n"
-"examples :                              \n"
-"\n"
-"  $ pykotme --printer apple file1.ps file2.ps\n"
-"  \n"
-"  This will give a print quote to the current user. The quote will show\n"
-"  the price and size of a job consisting in file1.ps and file2.ps \n"
-"  which would be sent to the apple printer.\n"
-"  \n"
-"  $ pykotme --printer apple,hplaser <file1.ps\n"
-"  \n"
-"  This will give a print quote to the current user. The quote will show\n"
-"  the price and size of a job consisting in file1.ps as read from\n"
-"  standard input, which would be sent to the apple or hplaser\n"
-"  printer.\n"
-"\n"
-"  $ pykotme \n"
-"  \n"
-"  This will give a quote for a job consisting of what is on standard \n"
-"  input. The quote will list the job size, and the price the job\n"
-"  would cost on each printer.\n"
-msgstr ""
-
-#, python-format
-msgid "Your account balance : %.2f"
-msgstr ""
-
-#, python-format
-msgid "Job size : %i pages"
-msgstr ""
-
-#, python-format
-msgid "Cost on printer %s : %.2f"
-msgstr ""
-
-msgid "won't be charged, printer is in passthrough mode"
-msgstr ""
-
-msgid "won't be charged, your account is immutable"
-msgstr ""
-
-#, python-format
-msgid ""
-"warnpykota v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"Sends mail to users over print quota.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  warnpykota  [options]  [names]\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints warnpykota's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -u | --users         Warns users over their print quota, this is the \n"
-"                       default.\n"
-"  \n"
-"  -g | --groups        Warns users whose groups quota are over limit.\n"
-"  \n"
-"  -P | --printer p     Verify quotas on this printer only. Actually p can\n"
-"                       use wildcards characters to select only\n"
-"                       some printers. The default value is *, meaning\n"
-"                       all printers.\n"
-"                       You can specify several names or wildcards, \n"
-"                       by separating them with commas.\n"
-"  \n"
-"examples :                              \n"
-"\n"
-"  $ warnpykota --printer lp\n"
-"  \n"
-"  This will warn all users of the lp printer who have exceeded their\n"
-"  print quota.\n"
-"\n"
-"  $ warnpykota \n"
-"  \n"
-"  This will warn all users  who have exceeded their print quota on\n"
-"  any printer.\n"
-"\n"
-"  $ warnpykota --groups --printer \"laserjet*\" \"dev*\"\n"
-"  \n"
-"  This will warn all users of groups which names begins with \"dev\" and\n"
-"  who have exceeded their print quota on any printer which name begins \n"
-"  with \"laserjet\"\n"
-"  \n"
-"  If launched by an user who is not a PyKota administrator, additionnal\n"
-"  arguments representing users or groups names are ignored, and only the\n"
-"  current user/group is reported.\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"dumpykota v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"Dumps PyKota database's content.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  dumpykota [options] [filterexpr]\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints dumpykota's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -d | --data type     Dumps 'type' datas. Allowed types are :\n"
-"                       \n"
-"                         - history : dumps the jobs history.\n"
-"                         - users : dumps users.\n"
-"                         - groups : dumps user groups.\n"
-"                         - printers : dump printers.\n"
-"                         - upquotas : dump user quotas.\n"
-"                         - gpquotas : dump user groups quotas.\n"
-"                         - payments : dumps user payments.\n"
-"                         - pmembers : dumps printer groups members.\n"
-"                         - umembers : dumps user groups members.\n"
-"                         - billingcodes : dumps billing codes.\n"
-"                         - all : dumps all PyKota datas. The output format\n"
-"                                 is always XML in this case.\n"
-"                         \n"
-"                       NB : the -d | --data command line option   \n"
-"                       is MANDATORY.\n"
-"  \n"
-"  -f | --format fmt    Dumps datas in the 'fmt' format. When not specified,\n"
-"                       the format is to dump datas in the csv format (comma\n"
-"                       separated values). All data dumped is between double\n"
-"                       quotes. Allowed formats are :\n"
-"                       \n"
-"                         - csv : separate datas with commas\n"
-"                         - ssv : separate datas with semicolons\n"
-"                         - tsv : separate datas with tabs\n"
-"                         - xml : dump data as XML \n"
-"                         - cups : dump datas in CUPS' page_log format :\n"
-"                                  ONLY AVAILABLE WITH --data history\n"
-"                         \n"
-"  -o | --output fname  All datas will be dumped to the file instead of\n"
-"                       to the standard output. The special '-' filename\n"
-"                       is the default value and means stdout.\n"
-"                       WARNING : existing files are truncated !\n"
-"\n"
-"  -s | --sum           Summarize the selected datas.\n"
-"                           ONLY AVAILABLE WITH --data history or payments\n"
-"\n"
-"  Use the filter expressions to extract only parts of the \n"
-"  datas. Allowed filters are of the form :\n"
-"                \n"
-"         key=value\n"
-"                         \n"
-"  Allowed keys for now are :  \n"
-"                       \n"
-"         username       User's name\n"
-"         groupname      Users group's name\n"
-"         printername    Printer's name\n"
-"         pgroupname     Printers group's name\n"
-"         hostname       Client's hostname\n"
-"         jobid          Job's Id\n"
-"         billingcode    Job's billing code\n"
-"         start          Job's date of printing\n"
-"         end            Job's date of printing\n"
-"         \n"
-"  Dates formatting with 'start' and 'end' filter keys :\n"
-"  \n"
-"    YYYY : year boundaries\n"
-"    YYYYMM : month boundaries\n"
-"    YYYYMMDD : day boundaries\n"
-"    YYYYMMDDhh : hour boundaries\n"
-"    YYYYMMDDhhmm : minute boundaries\n"
-"    YYYYMMDDhhmmss : second boundaries\n"
-"    yesterday[+-NbDays] : yesterday more or less N days (e.g. : yesterday-15)\n"
-"    today[+-NbDays] : today more or less N days (e.g. : today-15)\n"
-"    tomorrow[+-NbDays] : tomorrow more or less N days (e.g. : tomorrow-15)\n"
-"    now[+-NbDays] : now more or less N days (e.g. now-15)\n"
-"\n"
-"  'now' and 'today' are not exactly the same since today represents the first\n"
-"  or last second of the day depending on if it's used in a start= or end=\n"
-"  date expression. The utility to be able to specify dates in the future is\n"
-"  a question which remains to be answered :-)\n"
-"  \n"
-"  Contrary to other PyKota management tools, wildcard characters are not \n"
-"  expanded, so you can't use them.\n"
-"  \n"
-"  NB : not all keys are allowed for each data type, so the result may be \n"
-"  empty if you use a key not available for a particular data type.\n"
-"  \n"
-"Examples :\n"
-"\n"
-"  $ dumpykota --data history --format csv >myfile.csv\n"
-"  \n"
-"  This dumps the history in a comma separated values file, for possible\n"
-"  use in a spreadsheet.\n"
-"  \n"
-"  $ dumpykota --data users --format xml -o users.xml\n"
-"  \n"
-"  Dumps all users datas to the users.xml file.\n"
-"  \n"
-"  $ dumpykota --data history printername=HP2100 username=jerome\n"
-"  \n"
-"  Dumps the job history for user jerome on printer HP2100 only.\n"
-"  \n"
-"  $ dumpykota --data history start=200503 end=20050730234615\n"
-"  \n"
-"  Dumps all jobs printed between March 1st 2005 at midnight and\n"
-"  July 30th 2005 at 23 hours 46 minutes and 15 secondes included.\n"
-msgstr ""
-
-msgid "The -d | --data command line option is mandatory, see help."
-msgstr ""
-
-#, python-format
-msgid ""
-"pkinvoice v%(__version__)s (c) %(__years__)s %(__author__)s\n"
-"\n"
-"An invoice generator for PyKota.\n"
-"\n"
-"command line usage :\n"
-"\n"
-"  pkinvoice [options] user1 user2 ... userN\n"
-"\n"
-"options :\n"
-"\n"
-"  -v | --version       Prints pkinvoice's version number then exits.\n"
-"  -h | --help          Prints this message then exits.\n"
-"  \n"
-"  -l | --logo img      Use the image as the invoice's logo. The logo will\n"
-"                       be drawn at the center top of the page. The default\n"
-"                       logo is /usr/share/pykota/logos/pykota.jpeg\n"
-"                       \n"
-"  -p | --pagesize sz   Sets sz as the page size. Most well known\n"
-"                       page sizes are recognized, like 'A4' or 'Letter'\n"
-"                       to name a few. The default size is A4.\n"
-"                       \n"
-"  -n | --number N      Sets the number of the first invoice. This number\n"
-"                       will automatically be incremented for each invoice.\n"
-"                       \n"
-"  -o | --output f.pdf  Defines the name of the invoice file which will\n"
-"                       be generated as a PDF document. If not set or\n"
-"                       set to '-', the PDF document is sent to standard\n"
-"                       output. \n"
-"                       \n"
-"  -u | --unit u        Defines the name of the unit to use on the "
-"invoice.                       \n"
-"                       The default unit is 'Credits', optionally translated\n"
-"                       to your native language if it is supported by "
-"PyKota.\n"
-"  \n"
-"  -V | --vat p         Sets the percent value of the applicable VAT to be\n"
-"                       exposed. The default is 0.0, meaning no VAT\n"
-"                       information will be included.\n"
-"                       \n"
-"  -s | --start date    Sets the starting date for the print jobs invoiced.\n"
-"  \n"
-"  -e | --end date      Sets the ending date for the print jobs invoiced.\n"
-"                       \n"
-"  user1 through userN can use wildcards if needed. If no user argument is\n"
-"  used, a wildcard of '*' is assumed, meaning include all users.\n"
-"  \n"
-"  Dates formatting with --start and --end :\n"
-"  \n"
-"    YYYY : year boundaries\n"
-"    YYYYMM : month boundaries\n"
-"    YYYYMMDD : day boundaries\n"
-"    YYYYMMDDhh : hour boundaries\n"
-"    YYYYMMDDhhmm : minute boundaries\n"
-"    YYYYMMDDhhmmss : second boundaries\n"
-"    yesterday[+-NbDays] : yesterday more or less N days (e.g. : yesterday-"
-"15)\n"
-"    today[+-NbDays] : today more or less N days (e.g. : today-15)\n"
-"    tomorrow[+-NbDays] : tomorrow more or less N days (e.g. : tomorrow-15)\n"
-"    now[+-NbDays] : now more or less N days (e.g. now-15)\n"
-"\n"
-"  'now' and 'today' are not exactly the same since today represents the "
-"first\n"
-"  or last second of the day depending on if it's used in a start= or end=\n"
-"  date expression. The utility to be able to specify dates in the future is\n"
-"  a question which remains to be answered :-)\n"
-"                                        \n"
-"examples :                       \n"
-"\n"
-"  $ pkinvoice --unit EURO --output invoices.pdf --start=now-30\n"
-"  \n"
-"  Will generate a PDF document containing invoices for all users\n"
-"  who have spent some credits last month. Invoices will be done in\n"
-"  EURO.  No VAT information will be included.\n"
-msgstr ""
-
-msgid "Invoice"
-msgstr ""
-
-msgid "Since"
-msgstr ""
-
-msgid "Until"
-msgstr ""
-
-msgid "Edited on"
-msgstr ""
-
-msgid "Number of pages printed"
-msgstr ""
-
-msgid "Amount due"
-msgstr ""
-
-msgid "Included VAT"
-msgstr ""
-
-msgid "Here's the invoice for your printouts"
-msgstr ""
-
-#, python-format
-msgid "Incorrect value '%s' for the --vat command line option"
-msgstr ""
-
-#, python-format
-msgid "Incorrect value '%s' for the --number command line option"
-msgstr ""
-
-msgid "Generating invoices"
-msgstr ""
-
-msgid "Credits"
 msgstr ""
 
@@ -1828,8 +1405,12 @@
 msgstr ""
 
-msgid "ON"
-msgstr ""
-
-msgid "OFF"
+#, python-format
+msgid "Routed through PyKota : %s"
+msgstr ""
+
+msgid "YES"
+msgstr ""
+
+msgid "NO"
 msgstr ""
 
@@ -1837,4 +1418,7 @@
 msgstr ""
 
+msgid "Rerouting printers to CUPS"
+msgstr ""
+
 #, python-format
 msgid "Invalid charge amount value %s"
@@ -1861,4 +1445,651 @@
 
 msgid "You have to pass printer names on the command line"
+msgstr ""
+
+#, python-format
+msgid ""
+"pkrefund v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"Refunds jobs.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pkrefund [options] [filterexpr]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pkrefund's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -f | --force         Doesn't ask for confirmation before refunding jobs.\n"
+"  -r | --reason txt    Sets textual information to explain the refunding.\n"
+"\n"
+"  -l | --logo img      Use the image as the receipt's logo. The logo will\n"
+"                       be drawn at the center top of the page. The default\n"
+"                       logo is /usr/share/pykota/logos/pykota.jpeg\n"
+"\n"
+"  -p | --pagesize sz   Sets sz as the page size. Most well known\n"
+"                       page sizes are recognized, like 'A4' or 'Letter'\n"
+"                       to name a few. The default size is A4.\n"
+"\n"
+"  -n | --number N      Sets the number of the first receipt. This number\n"
+"                       will automatically be incremented for each receipt.\n"
+"\n"
+"  -o | --output f.pdf  Defines the name of the PDF file which will contain\n"
+"                       the receipts. If not set, then no PDF file will\n"
+"                       be created. If set to '-', then --force is assumed,\n"
+"                       and the PDF document is sent to standard output.\n"
+"\n"
+"  -u | --unit u        Defines the name of the unit to use on the receipts.\n"
+"                       The default unit is 'Credits', optionally translated\n"
+"                       to your native language if it is supported by "
+"PyKota.\n"
+"  \n"
+"\n"
+"  Use the filter expressions to extract only parts of the \n"
+"  datas. Allowed filters are of the form :\n"
+"                \n"
+"         key=value\n"
+"                         \n"
+"  Allowed keys for now are :  \n"
+"                       \n"
+"         username       User's name\n"
+"         printername    Printer's name\n"
+"         hostname       Client's hostname\n"
+"         jobid          Job's Id\n"
+"         billingcode    Job's billing code\n"
+"         start          Job's date of printing\n"
+"         end            Job's date of printing\n"
+"         \n"
+"  Dates formatting with 'start' and 'end' filter keys :\n"
+"  \n"
+"    YYYY : year boundaries\n"
+"    YYYYMM : month boundaries\n"
+"    YYYYMMDD : day boundaries\n"
+"    YYYYMMDDhh : hour boundaries\n"
+"    YYYYMMDDhhmm : minute boundaries\n"
+"    YYYYMMDDhhmmss : second boundaries\n"
+"    yesterday[+-NbDays] : yesterday more or less N days (e.g. : yesterday-"
+"15)\n"
+"    today[+-NbDays] : today more or less N days (e.g. : today-15)\n"
+"    tomorrow[+-NbDays] : tomorrow more or less N days (e.g. : tomorrow-15)\n"
+"    now[+-NbDays] : now more or less N days (e.g. now-15)\n"
+"\n"
+"  'now' and 'today' are not exactly the same since today represents the "
+"first\n"
+"  or last second of the day depending on if it's used in a start= or end=\n"
+"  date expression. The utility to be able to specify dates in the future is\n"
+"  a question which remains to be answered :-)\n"
+"  \n"
+"  Contrary to other PyKota management tools, wildcard characters are not \n"
+"  expanded, so you can't use them.\n"
+"  \n"
+"Examples :\n"
+"\n"
+"  $ pkrefund --output /tmp/receipts.pdf jobid=503\n"
+"  \n"
+"  This will refund all jobs which Id is 503. BEWARE : installing CUPS\n"
+"  afresh will reset the first job id at 1, so you probably want to use\n"
+"  a more precise filter as explained below. A confirmation will\n"
+"  be asked for each job to refund, and a PDF file named /tmp/receipts.pdf\n"
+"  will be created which will contain printable receipts.\n"
+"  \n"
+"  $ pkrefund --reason \"Hardware problem\" jobid=503 start=today-7\n"
+"  \n"
+"  Refunds all jobs which id is 503 but which were printed during the\n"
+"  past week. The reason will be marked as being an hardware problem.\n"
+"  \n"
+"  $ pkrefund --force username=jerome printername=HP2100\n"
+"  \n"
+"  Refunds all jobs printed by user jerome on printer HP2100. No\n"
+"  confirmation will be asked.\n"
+"  \n"
+"  $ pkrefund --force printername=HP2100 start=200602 end=yesterday\n"
+"  \n"
+"  Refunds all jobs printed on printer HP2100 between February 1st 2006\n"
+"  and yesterday. No confirmation will be asked.\n"
+msgstr ""
+
+msgid "Refunding receipt"
+msgstr ""
+
+msgid "Jobs refunded"
+msgstr ""
+
+msgid "Pages refunded"
+msgstr ""
+
+msgid "Amount refunded"
+msgstr ""
+
+msgid "Reason"
+msgstr ""
+
+msgid "Here's the receipt for the refunding of your print jobs"
+msgstr ""
+
+msgid "Generating receipts"
+msgstr ""
+
+msgid ""
+"Refunding for no reason is forbidden. Please use the --reason command line "
+"option."
+msgstr ""
+
+msgid ""
+"The PDF file containing the receipts will be sent to stdout. --force is "
+"assumed."
+msgstr ""
+
+#, python-format
+msgid "Date : %s"
+msgstr ""
+
+#, python-format
+msgid "JobId : %s"
+msgstr ""
+
+#, python-format
+msgid "Username : %s"
+msgstr ""
+
+#, python-format
+msgid "Printername : %s"
+msgstr ""
+
+#, python-format
+msgid "Billing code : %s"
+msgstr ""
+
+#, python-format
+msgid "Pages : %i"
+msgstr ""
+
+#, python-format
+msgid "Credits : %.3f"
+msgstr ""
+
+#, python-format
+msgid "Title : %s"
+msgstr ""
+
+msgid "Refund (Y/N)"
+msgstr ""
+
+msgid "Y"
+msgstr ""
+
+msgid "N"
+msgstr ""
+
+#, python-format
+msgid "Refunded %i users for %i jobs, %i pages and %.3f credits"
+msgstr ""
+
+#, python-format
+msgid ""
+"pkturnkey v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"A turn key tool for PyKota. When launched, this command will initialize\n"
+"PyKota's database with all existing print queues and some or all users.\n"
+"For now, no prices or limits are set, so printing is fully accounted\n"
+"for, but not limited. That's why you'll probably want to also use\n"
+"edpykota once the database has been initialized.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pkturnkey [options] [printqueues names]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pkturnkey version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -c | --doconf        Give hints about what to put into pykota.conf\n"
+"  \n"
+"  -d | --dousers       Manages users accounts as well.\n"
+"  \n"
+"  -D | --dogroups      Manages users groups as well.\n"
+"                       Implies -d | --dousers.\n"
+"  \n"
+"  -e | --emptygroups   Includes empty groups.\n"
+"  \n"
+"  -f | --force         Modifies the database instead of printing what\n"
+"                       it would do.\n"
+"                       \n"
+"  -u | --uidmin uid    Only adds users whose uid is greater than or equal "
+"to\n"
+"                       uid. You can pass an username there as well, and its\n"
+"                       uid will be used automatically.\n"
+"                       If not set, 0 will be used automatically.\n"
+"                       Implies -d | --dousers.\n"
+"                       \n"
+"  -U | --uidmax uid    Only adds users whose uid is lesser than or equal to\n"
+"                       uid. You can pass an username there as well, and its\n"
+"                       uid will be used automatically.\n"
+"                       If not set, a large value will be used "
+"automatically.\n"
+"                       Implies -d | --dousers.\n"
+"\n"
+"  -g | --gidmin gid    Only adds groups whose gid is greater than or equal "
+"to\n"
+"                       gid. You can pass a groupname there as well, and its\n"
+"                       gid will be used automatically.\n"
+"                       If not set, 0 will be used automatically.\n"
+"                       Implies -D | --dogroups.\n"
+"                       \n"
+"  -G | --gidmax gid    Only adds groups whose gid is lesser than or equal "
+"to\n"
+"                       gid. You can pass a groupname there as well, and its\n"
+"                       gid will be used automatically.\n"
+"                       If not set, a large value will be used "
+"automatically.\n"
+"                       Implies -D | --dogroups.\n"
+"\n"
+"examples :                              \n"
+"\n"
+"  $ pkturnkey --dousers --uidmin jerome\n"
+"\n"
+"  Will simulate the initialization of PyKota's database will all existing\n"
+"  printers and print accounts for all users whose uid is greater than\n"
+"  or equal to jerome's one. Won't manage any users group.\n"
+"  \n"
+"  To REALLY initialize the database instead of simulating it, please\n"
+"  use the -f | --force command line switch.\n"
+"  \n"
+"  You can limit the initialization to only a subset of the existing\n"
+"  printers, by passing their names at the end of the command line.\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"Printer %s is not managed by PyKota yet. Please modify printers.conf and "
+"restart CUPS."
+msgstr ""
+
+msgid "Please be patient..."
+msgstr ""
+
+msgid "Don't worry, the database WILL NOT BE MODIFIED."
+msgstr ""
+
+msgid "Please WORRY NOW, the database WILL BE MODIFIED."
+msgstr ""
+
+msgid "System users will have a print account as well !"
+msgstr ""
+
+#, python-format
+msgid "Unknown username %s : %s"
+msgstr ""
+
+msgid "System groups will have a print account as well !"
+msgstr ""
+
+#, python-format
+msgid "Unknown groupname %s : %s"
+msgstr ""
+
+msgid "Simulation terminated."
+msgstr ""
+
+msgid "Database initialized !"
+msgstr ""
+
+msgid "The --uidmin or --uidmax command line option implies --dousers as well."
+msgstr ""
+
+msgid ""
+"The --gidmin or --gidmax command line option implies --dogroups as well."
+msgstr ""
+
+msgid "The --dogroups command line option implies --dousers as well."
+msgstr ""
+
+#, python-format
+msgid ""
+"pkusers v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"An Users and Groups Manager for PyKota.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pkusers [options] user1 user2 user3 ... userN\n"
+"  \n"
+"or :  \n"
+"\n"
+"  pkusers --groups [options] group1 group2 group3 ... groupN\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pkusers's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -a | --add           Adds users if they don't exist on the database.\n"
+"                       If they exist, they are modified unless\n"
+"                       -s|--skipexisting is also used.\n"
+"                       \n"
+"  -d | --delete        Deletes users from the quota storage.\n"
+"\n"
+"  -e | --email addr    Sets the email address for the users.\n"
+"                       If the addr parameter begins with @, then\n"
+"                       the username is prepended to addr to form\n"
+"                       a valid email address.\n"
+"\n"
+"  -D | --description d Adds a textual description to users or groups.\n"
+"                       \n"
+"  -g | --groups        Edit users groups instead of users.\n"
+"                          \n"
+"  -o | --overcharge f  Sets the overcharging factor applied to the user \n"
+"                       when computing the cost of a print job. Positive or \n"
+"                       negative floating point values are allowed,\n"
+"                       this allows you to do some really creative\n"
+"                       things like giving money to an user whenever\n"
+"                       he prints. The number of pages in a print job\n"
+"                       is not modified by this coefficient, only the\n"
+"                       cost of the job for a particular user.\n"
+"                       Only users have such a coefficient.\n"
+"  \n"
+"  -i | --ingroups g1[,g2...]  Puts the users into each of the groups\n"
+"                              listed, separated by commas. The groups\n"
+"                              must already exist in the Quota Storage.\n"
+"                       \n"
+"  -L | --list          Lists users or groups.\n"
+"  \n"
+"  -l | --limitby l     Choose if the user/group is limited in "
+"printing                     \n"
+"                       by its account balance or by its page quota.\n"
+"                       The default value is 'quota'. Allowed values\n"
+"                       are 'quota' 'balance' 'noquota' 'noprint' \n"
+"                       and 'nochange' :\n"
+"                       \n"
+"                         - quota : limit by number of pages per printer.\n"
+"                         - balance : limit by number of credits in account.\n"
+"                         - noquota : no limit, accounting still done.\n"
+"                         - nochange : no limit, accounting not done. \n"
+"                         - noprint : printing is denied. \n"
+"                       NB : nochange and noprint are not supported for "
+"groups.\n"
+"                       \n"
+"  -b | --balance b     Sets the user's account balance to "
+"b.                     \n"
+"                       Account balance may be increase or decreased\n"
+"                       if b is prefixed with + or -.\n"
+"                       WARNING : when decreasing account balance,\n"
+"                       the total paid so far by the user is decreased\n"
+"                       too.\n"
+"                       Groups don't have a real balance, but the\n"
+"                       sum of their users' account balance.\n"
+"                       \n"
+"  -C | --comment txt   Defines some informational text to be associated\n"
+"                       with a change to an user's account balance.\n"
+"                       Only meaningful if -b | --balance is also used.\n"
+"                       \n"
+"                       \n"
+"  -r | --remove        In combination with the --ingroups option "
+"above,                       \n"
+"                       remove users from the specified users groups.\n"
+"                       \n"
+"  -s | --skipexisting  In combination with the --add option above, tells\n"
+"                       pkusers to not modify existing users.\n"
+"                       \n"
+"  user1 through userN and group1 through groupN can use wildcards\n"
+"  if the --add option is not set.\n"
+"  \n"
+"examples :                              \n"
+"\n"
+"  $ pkusers --add john paul george ringo/ringo@example.com\n"
+"  \n"
+"  This will add users john, paul, george and ringo to the quota\n"
+"  database. User ringo's email address will also be set to \n"
+"  'ringo@example.com'\n"
+"  \n"
+"  $ pkusers --ingroups coders,it jerome\n"
+"  \n"
+"  User jerome is put into the groups \"coders\" and \"it\" which must\n"
+"  already exist in the quota database.\n"
+"            \n"
+"  $ pkusers --limitby balance jerome\n"
+"  \n"
+"  This will tell PyKota to limit jerome by his account's balance\n"
+"  when printing.\n"
+"  \n"
+"  $ pkusers --balance +10.0 --comment \"He paid with his blood !\" jerome\n"
+"  \n"
+"  This will increase jerome's account balance by 10.0 (in your\n"
+"  own currency). You can decrease the account balance with a\n"
+"  dash prefix, and set it to a fixed amount with no prefix.\n"
+"  A comment will be stored for this balance change.\n"
+"  \n"
+"  $ pkusers --delete jerome rachel\n"
+"  \n"
+"  This will completely delete jerome and rachel from the quota\n"
+"  database. All their quotas and jobs will be deleted too.\n"
+"  \n"
+"  $ pkusers --overcharge 2.5 poorstudent\n"
+"  \n"
+"  This will overcharge the poorstudent user by a factor of 2.5.\n"
+"  \n"
+"  $ pkusers --overcharge -1 jerome\n"
+"  \n"
+"  User jerome will actually earn money whenever he prints.\n"
+"  \n"
+"  $ pkusers --overcharge 0 boss\n"
+"  \n"
+"  User boss can print at will, it won't cost him anything because the\n"
+"  cost of each print job will be multiplied by zero before charging\n"
+"  his account.\n"
+"\n"
+"  $ pkusers --email @example.com\n"
+"\n"
+"  This will set the email address for each user to username@example.com\n"
+msgstr ""
+
+#, python-format
+msgid "Invalid email address %s"
+msgstr ""
+
+#, python-format
+msgid "There's no %s matching %s"
+msgstr ""
+
+#, python-format
+msgid "Limited by : %s"
+msgstr ""
+
+#, python-format
+msgid "Account balance : %.2f"
+msgstr ""
+
+#, python-format
+msgid "Total paid so far : %.2f"
+msgstr ""
+
+#, python-format
+msgid "Overcharging factor : %.2f"
+msgstr ""
+
+#, python-format
+msgid "Group balance : %.2f"
+msgstr ""
+
+#, python-format
+msgid "Invalid limitby value %s"
+msgstr ""
+
+#, python-format
+msgid "Invalid overcharge value %s"
+msgstr ""
+
+#, python-format
+msgid "Invalid balance value %s"
+msgstr ""
+
+#, python-format
+msgid "There's no users group matching %s"
+msgstr ""
+
+#, python-format
+msgid "Unknown group %s"
+msgstr ""
+
+#, python-format
+msgid "Unknown user %s"
+msgstr ""
+
+#, python-format
+msgid "%s %s already exists, skipping."
+msgstr ""
+
+#, python-format
+msgid "%s %s already exists, will be modified."
+msgstr ""
+
+#, python-format
+msgid "Invalid name %s"
+msgstr ""
+
+msgid "You have to pass user groups names on the command line"
+msgstr ""
+
+#, python-format
+msgid ""
+"pykosd v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"An OSD quota monitor for PyKota.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pykosd [options]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pykosd's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -c | --color #rrggbb Sets the color to use for display as an hexadecimal\n"
+"                       triplet, for example #FF0000 is 100%% red.\n"
+"                       Defaults to 100%% green (#00FF00).\n"
+"                       \n"
+"  -d | --duration d    Sets the duration of the display in seconds. \n"
+"                       Defaults to 3 seconds.\n"
+"                       \n"
+"  -f | --font f        Sets the font to use for "
+"display.                      \n"
+"                       Defaults to the Python OSD library's default.\n"
+"  \n"
+"  -l | --loop n        Sets the number of times the info will be displayed.\n"
+"                       Defaults to 0, which means loop forever.\n"
+"                       \n"
+"  -s | --sleep s       Sets the sleeping duration between two displays \n"
+"                       in seconds. Defaults to 180 seconds (3 minutes).\n"
+"                       \n"
+"  \n"
+"examples :                              \n"
+"\n"
+"  $ pykosd -s 60 --loop 5\n"
+"  \n"
+"  Will launch pykosd. Display will be refreshed every 60 seconds,\n"
+"  and will last for 3 seconds (the default) each time. After five\n"
+"  iterations, the program will exit.\n"
+msgstr ""
+
+#, python-format
+msgid "Invalid duration option %s"
+msgstr ""
+
+#, python-format
+msgid "Invalid loop option %s"
+msgstr ""
+
+#, python-format
+msgid "Invalid sleep option %s"
+msgstr ""
+
+#, python-format
+msgid "Invalid color option %s"
+msgstr ""
+
+#, python-format
+msgid "User %s doesn't exist in PyKota's database"
+msgstr ""
+
+#, python-format
+msgid "Pages used on %s : %s"
+msgstr ""
+
+#, python-format
+msgid "PyKota Units left : %.2f"
+msgstr ""
+
+msgid "Printing denied."
+msgstr ""
+
+msgid "Printing not limited."
+msgstr ""
+
+msgid "Printing not limited, no accounting."
+msgstr ""
+
+#, python-format
+msgid ""
+"pykotme v%(__version__)s (c) %(__years__)s %(__author__)s\n"
+"\n"
+"Gives print quotes to users.\n"
+"\n"
+"command line usage :\n"
+"\n"
+"  pykotme  [options]  [files]\n"
+"\n"
+"options :\n"
+"\n"
+"  -v | --version       Prints pykotme's version number then exits.\n"
+"  -h | --help          Prints this message then exits.\n"
+"  \n"
+"  -P | --printer p     Gives a quote for this printer only. Actually p can\n"
+"                       use wildcards characters to select only\n"
+"                       some printers. The default value is *, meaning\n"
+"                       all printers.\n"
+"                       You can specify several names or wildcards, \n"
+"                       by separating them with commas.\n"
+"  \n"
+"examples :                              \n"
+"\n"
+"  $ pykotme --printer apple file1.ps file2.ps\n"
+"  \n"
+"  This will give a print quote to the current user. The quote will show\n"
+"  the price and size of a job consisting in file1.ps and file2.ps \n"
+"  which would be sent to the apple printer.\n"
+"  \n"
+"  $ pykotme --printer apple,hplaser <file1.ps\n"
+"  \n"
+"  This will give a print quote to the current user. The quote will show\n"
+"  the price and size of a job consisting in file1.ps as read from\n"
+"  standard input, which would be sent to the apple or hplaser\n"
+"  printer.\n"
+"\n"
+"  $ pykotme \n"
+"  \n"
+"  This will give a quote for a job consisting of what is on standard \n"
+"  input. The quote will list the job size, and the price the job\n"
+"  would cost on each printer.\n"
+msgstr ""
+
+#, python-format
+msgid "Your account balance : %.2f"
+msgstr ""
+
+#, python-format
+msgid "Job size : %i pages"
+msgstr ""
+
+#, python-format
+msgid "Cost on printer %s : %.2f"
+msgstr ""
+
+msgid "won't be charged, printer is in passthrough mode"
+msgstr ""
+
+msgid "won't be charged, your account is immutable"
 msgstr ""
 
@@ -1982,4 +2213,8 @@
 
 #, python-format
+msgid "Incorrect value %s for the noprintingmaxdelay directive in section %s"
+msgstr ""
+
+#, python-format
 msgid "Option accountbanner in section %s only supports values in %s"
 msgstr ""
@@ -2047,8 +2282,4 @@
 
 #, python-format
-msgid "Invalid filter value [%s], see help."
-msgstr ""
-
-#, python-format
 msgid "Invalid modifier [%s] for --format command line option, see help."
 msgstr ""
@@ -2113,4 +2344,8 @@
 
 #, python-format
+msgid "Refunded %i pages and %.3f credits by %s (%s) on %s"
+msgstr ""
+
+#, python-format
 msgid "Unsupported quota storage backend %s"
 msgstr ""
@@ -2235,4 +2470,8 @@
 msgstr ""
 
+msgid ""
+"Your version of python-mysqldb is too old. Please install a newer release."
+msgstr ""
+
 #, python-format
 msgid "A problem occured while reading printer %s's internal page counter."
@@ -2286,4 +2525,10 @@
 
 #, python-format
+msgid ""
+"Unable to precompute the job's size and ink coverage with the generic PDL "
+"analyzer : %s"
+msgstr ""
+
+#, python-format
 msgid "Problem during connection to %s:%s : %s"
 msgstr ""
@@ -2312,16 +2557,4 @@
 
 #, python-format
-msgid "Network error while doing SNMP queries on printer %s : %s"
-msgstr ""
-
-#, python-format
-msgid "SNMP message decoding error for printer %s : %s"
-msgstr ""
-
-#, python-format
-msgid "Problem encountered while doing SNMP queries on printer %s : %s"
-msgstr ""
-
-#, python-format
 msgid ""
 "SNMP querying stage interrupted. Using latest value seen for internal page "
@@ -2330,4 +2563,16 @@
 
 #, python-format
+msgid "Network error while doing SNMP queries on printer %s : %s"
+msgstr ""
+
+#, python-format
+msgid "SNMP message decoding error for printer %s : %s"
+msgstr ""
+
+#, python-format
+msgid "Problem encountered while doing SNMP queries on printer %s : %s"
+msgstr ""
+
+#, python-format
 msgid "Unable to precompute the job's size with the generic PDL analyzer : %s"
 msgstr ""
@@ -2351,2 +2596,106 @@
 msgid "Totals may be inaccurate if some users are members of several groups."
 msgstr ""
+
+msgid "PyKota Data Dumper"
+msgstr ""
+
+msgid "Dump"
+msgstr ""
+
+msgid "Please click on the above button"
+msgstr ""
+
+msgid "Data Type"
+msgstr ""
+
+msgid "Output Format"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Summarize"
+msgstr ""
+
+msgid "only for payments or history"
+msgstr ""
+
+msgid "PyKota Reports"
+msgstr ""
+
+msgid "Report"
+msgstr ""
+
+msgid "Printer"
+msgstr ""
+
+msgid "User / Group names mask"
+msgstr ""
+
+msgid "Groups report"
+msgstr ""
+
+msgid "Empty"
+msgstr ""
+
+msgid "Action"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "Hostname"
+msgstr ""
+
+msgid "JobId"
+msgstr ""
+
+msgid "Number of pages"
+msgstr ""
+
+msgid "Cost"
+msgstr ""
+
+msgid "Copies"
+msgstr ""
+
+msgid "Number of bytes"
+msgstr ""
+
+msgid "Printer's internal counter"
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "MD5Sum"
+msgstr ""
+
+msgid "Billing code"
+msgstr ""
+
+msgid "Precomputed number of pages"
+msgstr ""
+
+msgid "Precomputed cost"
+msgstr ""
+
+msgid "Pages details"
+msgstr ""
+
+msgid "(not supported yet)"
+msgstr ""
+
+msgid "Previous page"
+msgstr ""
+
+msgid "PyKota Quotes"
+msgstr ""
+
+msgid "Quote"
+msgstr ""
+
+msgid ""
+"The exact cost of a print job can only be determined for a particular user. "
+"Please retry while logged-in."
+msgstr ""
