Francisco Souza avatar Francisco Souza committed 8f7d9c9

Adição dos arquivos da aplicação usuarios.

Apenas estes arquivos estão inclusos, para utilizar, é necessário baixar
o web2py no site oficial.

Comments (0)

Files changed (72)

+syntax:glob
+*.pyc
+*.py~
+*.db
+.project
+.pydev*
+.settin*
+*.html~
+*.css~
+*.mako~
+*.sqlite
+*.sh
+*.txt
+*.table
+applications/examples
+applications/admin
+applications/welcome
+*.w2p
+gluon
+README.txt
+web2py is an open source full-stack Enterprise Framework for agile development 
+of secure database-driven web-based applications, written and programmable in 
+Python. 
+
+Created by Massimo Di Pierro <mdipierro@cs.depaul.edu>
+
+Copyright (c) 2007, 2008, 2009 by Massimo Di Pierro
+All rights reserved.
+
+web2py is Licensed under GPL version 2.0 
+<http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
+
+### Commercial Exception
+
+We allow the redistribution of unmodified binary versions of web2py provided
+that they contain a link to the official web2py site.
+
+This means you can redistribute web2py in binary or other closed source form
+together with the applications you develop as long as you acknowledge the 
+author. If you make any modifcation to web2py you must distribute it together
+with the modified source code according to GPLv2.0.
+
+You can distribute web2py app under any license you like as long they do not
+contain web2py code.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+### Licenses for third party contributed software
+
+#### gluon.contrib.simplejson LICENSE
+
+Copyright (c) 2006 Bob Ippolito - Permission is hereby granted, free of charge, 
+to any person obtaining a copy of this software and associated documentation 
+files (the "Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom 
+the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+#### gluon.contrib.rss2.py (originally PyRSS2Gen) LICENSE
+
+This is copyright (c) by Dalke Scientific Software, LLC and released under the
+BSD license.  See the file LICENSE in the distribution or 
+<http://www.opensource.org/licenses/bsd-license.php> for details.
+
+#### gluon.contrib.markdown (markdown2) LICENSE
+
+MIT License from from <http://code.google.com/p/python-markdown2/>
+
+#### gluon.contrib.feedparser LICENSE
+
+Copyright (c) 2002-2005, Mark Pilgrim
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted provided that the following conditions 
+are met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+#### gluon.wsgiserver.py LICENSE (borrowed from cherrypy)
+
+Copyright (c) 2004, CherryPy Team (team@cherrypy.org)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, 
+      this list of conditions and the following disclaimer in the documentation 
+      and/or other materials provided with the distribution.
+    * Neither the name of the CherryPy Team nor the names of its contributors 
+      may be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#### The javascript licenses are in the code itself
+
+clean:
+	rm -f httpserver.log 
+	rm -f parameters*.py 
+	rm -f -r applications/*/compiled     	
+	find ./ -name '*~' -exec rm -f {} \; 
+	find ./ -name '#*' -exec rm -f {} \;
+	find ./gluon/ -name '.*' -exec rm -f {} \;
+	find ./gluon/ -name '*class' -exec rm -f {} \; 
+	find ./applications/admin/ -name '.*' -exec rm -f {} \; 
+	find ./applications/examples/ -name '.*' -exec rm -f {} \; 
+	find ./applications/welcome/ -name '.*' -exec rm -f {} \; 
+	find ./ -name '*.pyc' -exec rm -f {} \;
+all:
+	echo "The Makefile is used to build the distribution."
+	echo "In order to run web2py you do not need to make anything."
+	echo "just run web2py.py"
+epydoc:
+	### build epydoc
+	rm -f -r applications/examples/static/epydoc/ 
+	epydoc --config epydoc.conf
+	cp applications/examples/static/title.png applications/examples/static/epydoc
+src:
+	echo 'Version 1.74.3 ('`date +%Y-%m-%d\ %H:%M:%S`')' > VERSION
+	### rm -f all junk files
+	make clean
+	### clean up baisc apps
+	rm -f routes.py 
+	rm -f applications/*/sessions/*       
+	rm -f applications/*/errors/* | echo 'too many files'
+	rm -f applications/*/cache/*                  
+	rm -f applications/admin/databases/*                 
+	rm -f applications/welcome/databases/*               
+	rm -f applications/examples/databases/*             
+	rm -f applications/admin/uploads/*                 
+	rm -f applications/welcome/uploads/*               
+	rm -f applications/examples/uploads/*             
+	### make admin layout and appadmin the default
+	cp applications/admin/views/appadmin.html applications/welcome/views
+	cp applications/admin/views/appadmin.html applications/examples/views
+	cp applications/admin/controllers/appadmin.py applications/welcome/controllers
+	cp applications/admin/controllers/appadmin.py applications/examples/controllers	
+	### update the license
+	cp ABOUT applications/admin/
+	cp ABOUT applications/examples/
+	cp LICENSE applications/admin/
+	cp LICENSE applications/examples/
+	### build web2py_src.zip
+	echo '' > NEWINSTALL
+	mv web2py_src.zip web2py_src_old.zip | echo 'no old'
+	cd ..; zip -r web2py/web2py_src.zip web2py/gluon/*.py web2py/gluon/contrib/* web2py/*.py web2py/ABOUT  web2py/LICENSE web2py/README web2py/NEWINSTALL web2py/VERSION web2py/Makefile web2py/epydoc.css web2py/epydoc.conf web2py/app.yaml web2py/queue.yaml web2py/scripts/*.sh web2py/scripts/*.py web2py/applications/admin web2py/applications/examples/ web2py/applications/welcome web2py/applicaitons/__init__.py
+
+mdp:
+	make epydoc
+	make src
+	make app
+	make win
+app:
+	python2.5 -c 'import compileall; compileall.compile_dir("gluon/")'
+	#python web2py.py -S welcome -R __exit__.py
+	find gluon -path '*.pyc' -exec cp {} ../web2py_osx/site-packages/{} \;
+	cd ../web2py_osx/site-packages/; zip -r ../site-packages.zip *
+	mv ../web2py_osx/site-packages.zip ../web2py_osx/web2py/web2py.app/Contents/Resources/lib/python2.5
+	cp ABOUT ../web2py_osx/web2py/web2py.app/Contents/Resources
+	cp NEWINSTALL ../web2py_osx/web2py/web2py.app/Contents/Resources
+	cp LICENSE ../web2py_osx/web2py/web2py.app/Contents/Resources
+	cp VERSION ../web2py_osx/web2py/web2py.app/Contents/Resources
+	cp README ../web2py_osx/web2py/web2py.app/Contents/Resources
+	cp -r applications/admin ../web2py_osx/web2py/web2py.app/Contents/Resources/applications
+	cp -r applications/welcome ../web2py_osx/web2py/web2py.app/Contents/Resources/applications
+	cp -r applications/examples ../web2py_osx/web2py/web2py.app/Contents/Resources/applications
+	cp applications/__init__.py ../web2py_osx/web2py/web2py.app/Contents/Resources/applications
+	cd ../web2py_osx; zip -r web2py_osx.zip web2py
+	mv ../web2py_osx/web2py_osx.zip .
+win:
+	python2.5 -c 'import compileall; compileall.compile_dir("gluon/")'
+	find gluon -path '*.pyc' -exec cp {} ../web2py_win/library/{} \;
+	cd ../web2py_win/library/; zip -r ../library.zip *
+	mv ../web2py_win/library.zip ../web2py_win/web2py
+	cp ABOUT ../web2py_win/web2py/
+	cp NEWINSTALL ../web2py_win/web2py/
+	cp LICENSE ../web2py_win/web2py/
+	cp VERSION ../web2py_win/web2py/
+	cp README ../web2py_win/web2py/
+	cp -r applications/admin ../web2py_win/web2py/applications
+	cp -r applications/welcome ../web2py_win/web2py/applications
+	cp -r applications/examples ../web2py_win/web2py/applications
+	cp applications/__init__.py ../web2py_win/web2py/applications
+	cd ../web2py_win; zip -r web2py_win.zip web2py
+	mv ../web2py_win/web2py_win.zip .
+run:
+	python2.5 web2py.py -a hello
+push:
+	make clean
+	echo '' > NEWINSTALL
+	less .hg/hgrc
+	hg push
+	bzr push bzr+ssh://mdipierro@bazaar.launchpad.net/~mdipierro/web2py/devel --use-existing-dir
+post:
+	rsync -avz --partial --progress -e ssh web2py_src.zip web2py_osx.zip web2py_win.zip user@www.web2py.com:~/
+#web2py file structure
+
+    \project
+	README
+	LICENSE
+        TODO                               
+        Makefile                   # make all and make app
+	web2py.py                   # the startup script (*)
+        parameters.py              # created at startup 
+        admin.tar                  # the admin app (*)
+        examples.tar               # examples and documentation app (*)
+        welcome.tar                # the welcome app (entry point) (*)
+	\gluon                     # the core libraries (*)
+        \deposit                   # used for zip and install apps
+        setup_app.py               # used by py2app to make OSX executable
+        setup_exe.py               # used by py2app to make Winows executble
+        wsgihandler.py             # to use Gluon with mod_wsgi
+        \dist                      # used by py2app, py2exe
+        \build                     # used by py2app, py2exe
+        \tests                     # under development stuff
+        \docs                      # in progress documentation
+	\applications              # are the apps
+		\welcome           # application welcome, for example
+			\models
+			\views
+			\controllers
+			\sessions
+			\errors
+			\cache
+			\static
+                        \uploads
+                        \modules
+
+
+#EWF v1.5 -> v1.6 
+load and save .py in ascii, avoids problem with LF+CR on windows
+added path.join in compileapp, fixed problem with Windows compileapp
+
+#EWF v1.6 -> v1.7
+in paths replace '\' with '/' to fix problem with windows paths
+using limitby in database administration
+replaced mime/miltupart with multipart/form-data to fix a windows problem
+
+#EWF v1.7 -> Gluon v1.0
+Name change 
+Improved layout.html
+
+#Gluon v1.0 -> v1.1
+bug in sqlhtml with JOINS queries
+
+#Gluon v1.1 -> v1.2
+fixed some typos in examples
+IS_IN_SET now supports labels
+cleanup in sql.py does not cleanup, just checks valid field and table names
+
+#Gluon v1.3
+added IS_IN_DB, IS_NOT_IN_DB and updated examples accordingly
+
+#Gluon v1.4
+fixed problem with IS_INT_IN_RANGE and IS_FLOAT_IN_RANGE. Now an error in a validator is reported as a ticket. Good validators should not raise Exceptions.
+IS_IN_DB displays "label (id)"
+it can upload files without extension
+migration is now optional (define_table has migrate=False option)
+
+#Gluon v1.5
+<form> -> <form method="post"> in errors.html
+replace('//','////') in sub in template.py
+
+#Gluon v1.8
+no more chdir (thread unsafe)
+no more sys.stdout (thread unsafe)
+response.body is StringIO()
+admin/default/site informs about upgrade
+response.locker (optional)
+
+#Gluon v1.9
+allow "count(*)" in select
+db.execute()
+fixed problem with continue and return in template
+removed try: ... except in sql.py
+fixed '\t'
+
+#Gluon v1.10
+fixed concurrency problems with SQLDB._instances and SQLDB._folders, now use lock
+now, by default, edit SQLFORMs retain uploaded files
+
+#Gluon v1.11
+appadmin allows to keep or delete uploaded files
+
+#Gluon v1.12
+in sql.py 
+handles NULL values properly
+unicode support (data always stored in utf-8)
+'date' -> datetime.date ,'time' -> datetime.time, 'datetime' -> datetime.datetime, 'boolean' -> True/False
+most types have default validators
+SQLField(...,required=True) option.
+SQLRows has __str__ that serializes in CSV and xml() that serializes in HTML
+SQLTable has import_from_csv_file(...)
+gluon.simplejson for AJAX
+in validators.py
+IS_IN_DB(db,..) -  db can be an SQLSet or an SQLDB
+better error messages
+in admin
+new import/export in csv, update and delete interface.
+in appadmin
+edit form allows to keep stored encrypted password
+in main.py
+http://host not defaults to http://host/init/default/index
+New third party modules
+gluon.simplejson(.dumps, .loads)
+gluon.pyrtf(.dumps)
+gluon.rss2(.dumps)
+
+#Gluon v1.13
+(this is one of the biggest revisions ever)
+Improved sql.py has support MySQL, cxOracle (experimental), extract, like and better testing
+SQLDB.tables and SQLTable.fields are now SQLCalableList objects
+Fixed bug with editing integer fields storing zero
+Admin interface now says "insert new [tablename]" and display insert, select or update properly in the title.
+Added a cache mechamism. Works for data, controllers, views and SQLRows.
+main.py now uses a request.folder absolute path when not os.name in ['nt','posix']. Seems to work on windowsce devices, except no file locking has consequences.
+Now you can put modules in applications/[anyapp]/modules and import them with
+import applications.[anyapp].modules.[module] as [module]
+Fixed problem with init
+New applications/examples/controller/global.py controller for docs.
+
+#Gluon v1.14
+Fixed a bug fix in URLs
+
+#Gluon v1.15
+New try:... except. in gluon/main.py for when sessions cannot be saved
+Now validator/formatter method allows IS_DATE('%d/%m/%Y')
+
+#web2py v1.16
+yes we changed the name! Turns out Gluon was trademarked by somebody else.
+Although we are not infringing the trademark since this is a non-commercial
+product we could have run into some issues. So we have been professional
+and changed the name to web2py.
+Now SQLFORMs and FORM can have a formname and multiple forms are allowed 
+per page.
+A new examples/default/index page.
+web2py.py instead of runme.py
+mysql sets utf8 encoding.
+input integer field values are automatically converted int().
+
+#web2py v1.17
+I posted v1.16 too soon. v1.17 was released after 1h to fix some bugs.
+
+#web2py v1.18
+removed vulnerability in accept_languages and session_id
+Minor bug fixes. Typos and cleanup cache. Textarea now clears.
+Support for PyAMF.
+T returns a class, not a string
+new template parser (faster?)
+got rid of sintaxhighlighter in favor of server side CODE
+fix problem with cacheondisk locking
+fix 'None' instead of NULL in IS_NOT_IN_DB (I think)
+gluon.contrib.markdown
+notnull and unique in SQLField now supported (tested on sqlite mysql and postgresql)
+Storage now has __getstate__ and __setstate__ needed for pickling.
+session files are now locked to make it work better with asynchronous requests
+cxoracle should work, apart for limitby
+.../examples is now mapped to .../examples/default/index etc.
+.../init is now mapped to .../welcome if init is not present
+
+#web2py 1.19
+minor typos
+
+#web2py 1.20
+new IFRAME, LABEL, FIELDSET validators 
+P(..cr2br=True) option
+FORM and SQLFORM have hidden=dict(...) option for REST
+testing framework.
+improved examples pages
+
+#web2py 1.21
+replaced paste.httpserver with cherrypy.wsgi server
+temporary sessions are no longer saved
+widget has [stop] button and graph
+logging is done by main by appfactory
+fixed a bug in sql belongs
+
+#web2py 1.22-1.25
+fixed minor bugs, added IS_NULL_OR
+
+#web2py 1.26
+added shell.py (thanks Limodou!)
+added memcache support
+
+#web2py 1.27
+IS_NULL_OR now works will all fields
+admin creates paths to static files
+wsgiserver options are passed to HttpServer
+faking limitby for oracle to make appadmin work
+all objects inherit from object
+fixed bug in app names with .
+fixed bug in created RestrictedError object on windows
+shell is now in gluon and accessible via web2py.py
+
+#web2py 1.28
+fixed bug with belongs, faster sql.py
+included jquery.js
+minor aestetical fixes
+sortable.js is gone
+
+#web2py 1.29
+Now selet mutliple works with get, so does is IS_LENGTH
+Added IS_LIST_OF
+fixed problem with admin from windows and localhost
+
+#web2py 1.30
+added flv to contenttype
+added support for appengine
+
+#web2py 1.31-1.41
+some bug fixes, mostly better appengine support
+mssql support
+firebird support
+widgets support
+connection pools
+
+#1.42
+fixed security issue by removing slash escape in mysql
+removed random everywhere
+use uuid for session and tickets
+use http_x_forward_for to figure out the client causing a ticket
+use longtext and longblob for mysql
+main now really catches all exceptions
+no more warnings on GAE
+
+#1.43-1.48
+html.py rewrite (better support for custom forms) (Bill Ferrett)
+new stickers in examples (thanks Mateusz)
+on windows can run in taskbar (Mark Larsen)
+in admin|edit page link to edit|controller (Nathan Freeze)
+better error codes and routes_onerror (Timothy Farrell)
+DAL support for groupy and having
+DAL support for expressions instead of values
+DAL has experimental Informix support
+fixed bug with non-printable chars in DAL
+'text' fields limited to 2**16 (to avoid mysql problems)
+widget has -quiet and -debug (Attila Csipa)
+web2py_session uses BLOB instead of TEXT
+improved IS_URL
+Runs with python 2.6 (Tim)
+On GAE uses GAE for static files (Robin)
+
+
+#1.49
+fixed a bug with taskbar widget, thanks Mark
+fixed a bug with form.latest
+made many DIV methods private (_)
+
+
+#1.50
+Fixed some bugs introduced in 1.49
+
+#1.51
+Fixed more bugs introduced in 1.49 (sql _extra and html select)
+support for sqlite:memory:
+
+#1.52
+Fixed a minor bug with _extra[key] and key not str.
+check for upgrade via ajax
+
+#1.53
+On GAE upload data goes automatically in datastore (blob created automatically)
+New appadmin runs on GAE (most of it, not all)
+Martin Hufsky patch allow slicing of fields in DAL expressions
+
+#1.54
+fixed minor bugs
+
+#1.55?
+rowcount
+fixed bug when IS_IN_DB involved multiple fields on GAE
+T.set_current_languages
+better unittests
+response.custom_commit and response.custom_rollback
+you can next cache calls (like cache a controller that caches a select). Thanks Iceberg
+db(....id==None).select() no longer returns an error but an empty SQLRows on GAE
+db(...).delete(delete_uploads=True) and SQLFORM.accepts(....delete_uploads=True) will delete all referenced uploaded files
+DIV.element and DIV.update
+sqlrows.json()
+SQLFORM.widgets
+URL(r=request,args=0)
+IS_IN_DB(...,multiple=True) for Many2Many (sort of)
+In URL(...,f) f is url encoded
+In routes_in=[['a/b/c/','a/b/c/?var=value']]
+simplejson 2.0.7
+
+
+#1.56
+Consider the following table:
+
+db.define_table('cirlce',
+   db.Field('radius','double'),
+   db.Field('area','double'),
+   db.Field('modified_on','datetime'))
+
+now you can do:
+
+# add a comment in the forms
+db.circle.area.comment="(this is a comment)"
+
+# do not show area in create/edit forms
+db.circle.area.writable=False
+
+ # do not show now in display forms
+db.circle.modified_on.readable=False
+
+# automatically timestamp when record cretaed
+db.circle.modified_on.default=request.now
+
+# automatically timestamp when record is modified
+db.circle.modified_on.update=request.now
+
+# make the radius appear in bold in display and table
+db.circle.radius.represent=lambda value: B(value)
+
+# make a form that automatically computes area
+pi=3.1415
+form=SQLFOM(db.circle)
+if form.accepts(request.vars,
+onvalidation=lambda form: form.vars.area=pi*form.vars.radius**2): ...
+
+# make a create form in two possible ways:
+form=SQLFORM(db.circle)
+form=SQLFORM(db.circle,0)
+
+# make an update form in two possible ways:
+form=SQLFORM(db.circle,record)
+form=SQLFORM(db.circle,record_id)
+
+# make a display form in two possible ways:
+form=SQLFORM(db.circle,record,readonly=True)
+form=SQLFORM(db.circle,record_id,readonly=True)
+
+# so now you can do...
+
+form=SQLFORM(db.circle,request.args[-1])
+
+and you get a create form if the URL ends in /0, you get an update
+form if the URL ends in /[valid_record_id]
+
+#you can also define once for all
+
+timestamp=SQLTable(None,'timestamp',
+            SQLField('created_on','datetime',
+                          writable=False,
+                          default=request.now),
+            SQLField('modified_on','datetime',
+                          writable=False,
+                          default=request.now,update=request.now))
+
+#and use it in all your tables
+
+db.define_table('mytable',db.Field('somefield'),timestamp) 
+
+###
+
+One more feature in trunk....
+
+    db.define_table('image',SQLField('file','upload'))
+
+    db.image.file.authorize=lambda row: True or False
+
+then controller
+    def download(): return response.download(request,db)
+id' is now a hidden field sqlform
+gql references converted to long
+admin login has autofocus
+new notation proposed by Robin, db.table[id]
+new UploadWidget shows images
+new generic.html shows request, response, session
+new LEGEND helper (thanks Marcus)
+fixed doctests in sql (thanks Robin)
+new notation for DB
+
+record=db.table[id]
+db.table[id]=dict(...)
+del db.table[id]
+
+request.env.web2py_version
+new class gluon.storage.Settings has lock_keys, lock_values
+jquery 1.3.1
+PEP8 compliance
+new examples application
+runs on jython (no database drivers yet, thanks Phyo)
+fixed bugs in tests
+passes all unittest but test_rewite (not sure it should pass that one)
+
+Lots of patches from Fran Boone (about tools) and Dougla Soares de Andarde (Python 2.6 compliance, user use of hashlib instead of md5, new markdown2.py)
+
+#1.56.1-1.56.4
+fixing lots of small bugs with tool and languages
+jquery.1.3.2
+
+#1.57
+New ajax edit with keepalive (no longer logged out when editing code)
+Fixed conflict resolution page.
+Removed /user/bin/python from models/controllers
+
+#1.58
+Fixed some CRON bugs
+Fixed a bug with new ajax edit
+Experimental DB2 support in DAL
+Customizable font size in admin edit page
+New welcome/models/db.py shows how to memcache sessions on GAE with MEMDB
+More expressive titles in admin
+DB2 support. Thanks Denes!
+
+#1.59-1.60
+fixed lots of small bugs
+routes_in can filter by http_host
+
+#1.61
+fixed some typos
+auth.add_permissions(0,....) 0 indicates group of current user
+crud.update has deletable=True or False
+fixed issue with GAE detection -> gluon.settings.web2py_runtime -> request
+
+#1.62
+SQLFORMS and crud now show readble fields
+Better WingIDE support
+Languages are automatically translated
+T.force and lazyT works better, optional T.lazy=False
+gluon.storage.Messages are now translated without T
+if routes.py then request.env.web2py_original_uri
+db.table.field.isattachment = True
+internationalizaiton of admin by Yair
+admin.py by Alvaro
+new MENU helper
+new w2p file format
+new welcome app with auth, service and crud turned on
+
+#1.63-1.63.4
+no more import gluon.
+support for generic.xxx
+simplejson can handle datetime date and time
+
+#1.63.5
+You can do jQuery.noConflict() without breaking web2py_ajax
+Wigets can have attributes (thanks Hans)
+Lots of internal cleanup and better code reusage (thanks Hans)
+
+#1.64
+Models 2-3 times faster (thanks Alexey)
+Better LDAP support
+Works with Jython (including sqlite and postgresql with zxJDBC):
+
+  download jython-2.5rc3.jar
+  download qlite-jdbc-3.6.14.2.jar
+  java -jar jython-xxx.jar
+  export CLASSPATH=$CLASSPATH:/Users/mdipierro/jython2.5rc3/sqlite-jdbc-3.6.14.2.jar
+  cd web2py
+  ../jython2.5rc3/jython web2py.py
+
+#1.64.2
+New IS_COMPLEX validator, thank Mr. Freeze
+Experimental Informix support
+Autologin on registration
+
+#1.64.3
+Some bug fixes
+
+#1.64.4
+Som bug fixes
+Informix Support
+response.render(stream)
+SQLFORM.factory
+SQLFORM.widgets.radio and SQLFORM.widgets.checkboxes
+
+#1.65
+reST docstrings for Sphinx, thanks Hans
+gluon/conrtib/login_methods/gae_google_account.py for google CAS login on GAE, thanks Hans
+fixed problem with Auth and Firebird 'password' issue
+new auth.settings.create_user_groups
+tickets stored on datastore on GAE and also logged, thanks Hans
+imporved IS_LENGTH with max and min, thanks Mateusz
+improved IS_EMAIL with filters, thanks Mateusz
+new IS_IMAGE checks for format and size, thanks Mateusz
+new IS_IPV4, thanks Mateusz
+
+#1.65.1
+spreadsheet
+shell history, thanks sherdim
+crontab editor, thanks Angelo
+gluon/contrib/login_methods/cas_auth.py (thanks Hans)
+DAL(...) instead of SQLDB(...)
+DAL('gae') instead of GQLDB()
+Field instead of SQLField
+(the old syntax still works)
+
+#1.65.2
+Fixed some small auth bugs
+Field.store(...)
+
+#1.65.3-10
+Fixed some small bugs and typos in the docstrings
+Fixed AMF3 support
+
+#1.65.11
+Fixed a sqlhtml bug with image upload
+
+#1.65.12
+lables in auth auto-translate (thanks Alvaro)
+better ldap_auth (thanks Fran)
+auth chacks locally for blocked accounts even for alternate login methods (thanks Fran)
+
+#1.65.13
+request.url (thanks Jonathan)
+restored uploadfield_newfilename
+new examples layout nad logo (thanks Mateusz)
+
+#1.66
+new doctypes
+form.vars.newfilename
+new HTML and XHTML helpers
+better IS_LENGTH
+
+#1.67.0
+Python 2.4 support (again)
+New layout for welcome
+changed defauld field sizes to 512
+Field(uploadfolder="...")
+appadmin works on GAE (again, somehting got broken at some point)
+new wsgiserver 3.2.0 should fix recurrent broken download problems
+
+#1.67.1
+Bux fixed
+
+#1.67.2
+Security fix in markdown
+
+#1.68.1
+New official markdown with security fix
+rows.first()
+rows.last()
+New cron
+New hindi and spanish translation
+cached uploads allow for progress bars (thanks AndCycle)
+ingres support (thanks Chris)
+legacy database support for db2, mssql with non-int primary keys (thanks Denes)
+default setting of content-type (this may cause strange behavior in old apps when downloading images)
+IS_UPPER and IS_LOWER works with unicode
+CLENUP not takes regex of allowed/now allowed chartares
+New rewrite.py allows dynamic routes
+Better error messages for IS_INT_* and IS_FLOAT_*
+
+#1.68.2
+Fixing bug with admin and missing crontab
+Fixing bug with rewrite.load on GAE (thanks Willian Wang)
+
+#1.69.1
+Fixed a bug introduced in 1.68 about inserting unicode in DAL
+Fixed other small bugs
+Better support for legacy databases (thank Denes)
+response.meta replaces response.author, response.keywords, response.description
+response.files stets dependes in plugins
+better admin for packing/unpacking plugins
+reference fiels nor evaluate to DALRef with lazy evaluation (cool, thanks Mr Freeze)
+can insert a record in place of a reference
+record[e] instead of record._extra[e] (tentatively!)
+record.update_record() with no args
+rows.find()  (thanks Mr Freeze)
+rows.exclude()
+rows.sort()
+rows[:]
+
+#1.70.1
+Fixed bug with Rows.as_list and DALRef
+Added Rows.as_dict (thanks Mr Freeze and Thedeus)
+Added request.wsgi (thanks hcvst) allows running wsgi apps under web2py and applying wegi middleware to regular web2py actions that return strings.
+Experimental distributed transactions between postgresql, mysql and firebird
+Finally local_import is here!
+
+#1.71.1
+Complete rewrite of Rows
+renamed DALStorage->Rows, DALRef->Reference
+Experimental serializarion of Row and Rows (get serialized to dict and list of dict)
+DAL(...,folder) and template.render(content=, context=) make it more modular
+
+#1.72.1 - 1.72.3
+Better support for legacy databases
+
+#1.73.1
+Fixed problem with storage and comparison of Row objects
+Fixed problem with mail on GAE
+Fixed problem with T in IS_DATE(TIME) error_message and format
+Rows[i].delete_record()
+Even better support for legacy databases
+Experimantal support for non UTF8 encoding in DB
+Better IPV4 (thanks Thandeus)
+T.current_languages default to 'en' and new T.set_current_languages(...) (thanks Yarko)
+INPUT(...,hideerror=False) used to fix rare chechbox widget problem
+Admin allows change of admin password
+New gluon/contrib/populate.py
+Size of input/textarea set by CSS no more by jQuery  (thanks Iceberg)
+Customizable CSV  (thanks Thandeus)
+More bug fixed (thanks Thandeus)
+Better regex for template fixed Jython problem (thank Jonathan)
+
+#1.74.1
+Moved to mercurial
+Default validators use the new define_table(....,format='...')
+New get_vars and post_vars compatible in 2.5 and 2.6 (thanks Tim)
+Major rewrite of gql.py extends DAL syntax on GAE
+No more *.w2p, welcome.w2p is create automatically, base apps are always upgraded
+export_to_csv(delimiter = ',', quotechar = '"', quoting = csv.QUOTE_MINIMAL), thanks Thadeus 
+Version 1.74.3 (2009-12-16 15:11:54)

Empty file added.

+application: web2py
+version: 1
+api_version: 1
+runtime: python
+
+handlers:
+
+- url: /(?P<a>.+?)/static/(?P<b>.+)
+  static_files: applications/\1/static/\2
+  upload: applications/(.+?)/static/(.+)
+  secure: optional
+
+- url: /admin-gae/.*
+  script: $PYTHON_LIB/google/appengine/ext/admin
+  login: admin
+ 
+- url: /_ah/queue/default
+  script: gaehandler.py
+  login: admin
+
+- url: .*
+  script: gaehandler.py  
+  secure: optional
+
+skip_files: |
+ ^(.*/)?(
+ (app\.yaml)|
+ (app\.yml)|
+ (index\.yaml)|
+ (index\.yml)|
+ (#.*#)|
+ (.*~)|
+ (.*\.py[co])|
+ (.*/RCS/.*)|
+ (\..*)|
+ ((admin|examples|welcome)\.tar)|
+ (applications/(admin|examples)/.*)|
+ (applications/.*?/databases/.*) |
+ (applications/.*?/errors/.*)|
+ (applications/.*?/cache/.*)|
+ (applications/.*?/sessions/.*)|
+ )$
Add a comment to this file

applications/__init__.py

Empty file added.

applications/usuarios/ABOUT

+Write something about this app.
+Developed with web2py.

applications/usuarios/LICENSE

+This is a sample license. You can write here anything you want 
+as long as you do not violate web2py copyright, trademark and license.
Add a comment to this file

applications/usuarios/__init__.py

Empty file added.

applications/usuarios/controllers/appadmin.py

+# -*- coding: utf-8 -*-
+
+# ##########################################################
+# ## make sure administrator is on localhost
+# ###########################################################
+
+import os
+import socket
+import datetime
+import copy
+import gluon.contenttype
+import gluon.fileutils
+
+# ## critical --- make a copy of the environment
+
+global_env = copy.copy(globals())
+global_env['datetime'] = datetime
+
+http_host = request.env.http_host.split(':')[0]
+remote_addr = request.env.remote_addr
+try:
+    hosts = (http_host, socket.gethostname(),
+             socket.gethostbyname(http_host),
+             '::1','127.0.0.1','::ffff:127.0.0.1')   
+except:
+    hosts = (http_host, )
+
+if request.env.http_x_forwarded_for or request.env.wsgi_url_scheme\
+     in ['https', 'HTTPS']:
+    session.secure()
+elif remote_addr not in hosts:
+    raise HTTP(200, T('appadmin is disabled because insecure channel'))
+if not gluon.fileutils.check_credentials(request):
+    redirect(URL(a='admin', c='default', f='index'))
+
+ignore_rw = True
+response.view = 'appadmin.html'
+response.menu = [[T('design'), False, URL('admin', 'default', 'design',
+                 args=[request.application])], [T('db'), False,
+                 URL(r=request, f='index')], [T('state'), False,
+                 URL(r=request, f='state')]]
+
+# ##########################################################
+# ## auxiliary functions
+# ###########################################################
+
+
+def get_databases(request):
+    dbs = {}
+    for (key, value) in global_env.items():
+        cond = False
+        try:
+            cond = isinstance(value, GQLDB)
+        except:
+            cond = isinstance(value, SQLDB)
+        if cond:
+            dbs[key] = value
+    return dbs
+
+
+databases = get_databases(None)
+
+
+def eval_in_global_env(text):
+    exec ('_ret=%s' % text, {}, global_env)
+    return global_env['_ret']
+
+
+def get_database(request):
+    if request.args and request.args[0] in databases:
+        return eval_in_global_env(request.args[0])
+    else:
+        session.flash = T('invalid request')
+        redirect(URL(r=request, f='index'))
+
+
+def get_table(request):
+    db = get_database(request)
+    if len(request.args) > 1 and request.args[1] in db.tables:
+        return (db, request.args[1])
+    else:
+        session.flash = T('invalid request')
+        redirect(URL(r=request, f='index'))
+
+
+def get_query(request):
+    try:
+        return eval_in_global_env(request.vars.query)
+    except Exception:
+        return None
+
+
+def query_by_table_type(tablename,db,request=request):
+    keyed = hasattr(db[tablename],'_primarykey')
+    if keyed:
+        firstkey = db[tablename][db[tablename]._primarykey[0]]
+        cond = '>0'
+        if firstkey.type in ['string', 'text']:
+            cond = '!=""'
+        qry = '%s.%s.%s%s' % (request.args[0], request.args[1], firstkey.name, cond)
+    else:
+        qry = '%s.%s.id>0' % tuple(request.args[:2])
+    return qry
+
+
+
+# ##########################################################
+# ## list all databases and tables
+# ###########################################################
+
+
+def index():
+    return dict(databases=databases)
+
+
+# ##########################################################
+# ## insert a new record
+# ###########################################################
+
+
+def insert():
+    (db, table) = get_table(request)
+    form = SQLFORM(db[table], ignore_rw=ignore_rw)
+    if form.accepts(request.vars, session):
+        response.flash = T('new record inserted')
+    return dict(form=form,table=db[table])
+
+
+# ##########################################################
+# ## list all records in table and insert new record
+# ###########################################################
+
+
+def download():
+    import os
+    db = get_database(request)
+    return response.download(request,db)
+
+def csv():
+    import gluon.contenttype
+    response.headers['Content-Type'] = \
+        gluon.contenttype.contenttype('.csv')
+    db = get_database(request)
+    query = get_query(request)
+    if not query:
+        return None
+    response.headers['Content-disposition'] = 'attachment; filename=%s_%s.csv'\
+         % tuple(request.vars.query.split('.')[:2])
+    return str(db(query).select())
+
+
+def import_csv(table, file):
+    table.import_from_csv_file(file)
+
+def select():
+    import re
+    db = get_database(request)
+    dbname = request.args[0]
+    regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
+    if len(request.args)>1 and hasattr(db[request.args[1]],'_primarykey'):
+        regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
+    if request.vars.query:
+        match = regex.match(request.vars.query)
+        if match:
+            request.vars.query = '%s.%s.%s==%s' % (request.args[0],
+                    match.group('table'), match.group('field'),
+                    match.group('value'))
+    else:
+        request.vars.query = session.last_query
+    query = get_query(request)
+    if request.vars.start:
+        start = int(request.vars.start)
+    else:
+        start = 0
+    nrows = 0
+    stop = start + 100
+    table = None
+    rows = []
+    orderby = request.vars.orderby
+    if orderby:
+        orderby = dbname + '.' + orderby
+        if orderby == session.last_orderby:
+            if orderby[0] == '~':
+                orderby = orderby[1:]
+            else:
+                orderby = '~' + orderby
+    session.last_orderby = orderby
+    session.last_query = request.vars.query
+    form = FORM(TABLE(TR(T('Query:'), '', INPUT(_style='width:400px',
+                _name='query', _value=request.vars.query or '',
+                requires=IS_NOT_EMPTY(error_message=T("Cannot be empty")))), TR(T('Update:'),
+                INPUT(_name='update_check', _type='checkbox',
+                value=False), INPUT(_style='width:400px',
+                _name='update_fields', _value=request.vars.update_fields
+                 or '')), TR(T('Delete:'), INPUT(_name='delete_check',
+                _class='delete', _type='checkbox', value=False), ''),
+                TR('', '', INPUT(_type='submit', _value='submit'))),
+                _action=URL(r=request,args=request.args))
+    if request.vars.csvfile != None:
+        try:
+            import_csv(db[request.vars.table],
+                       request.vars.csvfile.file)
+            response.flash = T('data uploaded')
+        except:
+            response.flash = T('unable to parse csv file')
+    if form.accepts(request.vars, formname=None):
+#         regex = re.compile(request.args[0] + '\.(?P<table>\w+)\.id\>0')
+        regex = re.compile(request.args[0] + '\.(?P<table>\w+)\..+')
+        
+        match = regex.match(form.vars.query.strip())
+        if match:
+            table = match.group('table')
+        try:
+            nrows = db(query).count()
+            if form.vars.update_check and form.vars.update_fields:
+                db(query).update(**eval_in_global_env('dict(%s)'
+                                  % form.vars.update_fields))
+                response.flash = T('%s rows updated', nrows)
+            elif form.vars.delete_check:
+                db(query).delete()
+                response.flash = T('%s rows deleted', nrows)
+            nrows = db(query).count()
+            if orderby:
+                rows = db(query).select(limitby=(start, stop),
+                        orderby=eval_in_global_env(orderby))
+            else:
+                rows = db(query).select(limitby=(start, stop))
+        except Exception, e:
+            (rows, nrows) = ([], 0)
+            response.flash = DIV(T('Invalid Query'),PRE(str(e)))
+    return dict(
+        form=form,
+        table=table,
+        start=start,
+        stop=stop,
+        nrows=nrows,
+        rows=rows,
+        query=request.vars.query,
+        )
+
+
+# ##########################################################
+# ## edit delete one record
+# ###########################################################
+
+
+def update():
+    (db, table) = get_table(request)
+    keyed = hasattr(db[table],'_primarykey')
+    norec = True
+    if keyed:
+        key = [f for f in request.vars if f in db[table]._primarykey]
+        if key:
+            try:
+              records = db(db[table][key[0]] == request.vars[key[0]]).select()
+              if records:
+                  record = records[0]
+                  norec = False
+            except:
+                pass
+        else:
+            qry = query_by_table_type(table, db)
+    else:
+        try:
+            id = int(request.args[2])
+            record = db(db[table].id == id).select()[0]
+            norec = False
+        except:
+            qry = query_by_table_type(table, db)
+
+    if norec:
+        session.flash = T('record does not exist')
+        redirect(URL(r=request, f='select', args=request.args[:1],
+                     vars=dict(query=qry)))
+    
+    if keyed:
+        for k in db[table]._primarykey: 
+            db[table][k].writable=False
+    
+    form = SQLFORM(db[table], record, deletable=True, delete_label=T('Check to delete'), 
+                   ignore_rw=ignore_rw and not keyed,
+                   linkto=URL(r=request, f='select',
+                   args=request.args[:1]), upload=URL(r=request,
+                   f='download', args=request.args[:1]))
+
+    if form.accepts(request.vars, session):
+        session.flash = T('done!')
+        qry = query_by_table_type(table, db)
+        redirect(URL(r=request, f='select', args=request.args[:1],
+                 vars=dict(query=qry)))
+    return dict(form=form,table=db[table])
+
+
+# ##########################################################
+# ## get global variables
+# ###########################################################
+
+
+def state():
+    return dict()
+
+

applications/usuarios/controllers/default.py

+# -*- coding: utf-8 -*- 
+
+#########################################################################
+## This is a samples controller
+## - index is the default action of any application
+## - user is required for authentication and authorization
+## - download is for downloading files uploaded in the db (does streaming)
+## - call exposes all registered services (none by default)
+#########################################################################  
+
+def index():
+    """
+    example action using the internationalization operator T and flash
+    rendered by views/default/index.html or views/generic.html
+    """
+    response.flash = T('Welcome to web2py')
+    return dict(message=T('Hello World'))
+
+
+def user():
+    """
+    exposes:
+    http://..../[app]/default/user/login 
+    http://..../[app]/default/user/logout
+    http://..../[app]/default/user/register
+    http://..../[app]/default/user/profile
+    http://..../[app]/default/user/retrieve_password
+    http://..../[app]/default/user/change_password
+    use @auth.requires_login()
+        @auth.requires_membership('group name')
+        @auth.requires_permission('read','table name',record_id)
+    to decorate functions that need access control
+    """
+    return dict(form=auth())
+
+def meu_crud():
+    return dict(form=crud())
+
+def download():
+    """
+    allows downloading of uploaded files
+    http://..../[app]/default/download/[filename]
+    """
+    return response.download(request,db)
+
+
+def call():
+    """
+    exposes services. for example:
+    http://..../[app]/default/call/jsonrpc
+    decorate with @services.jsonrpc the functions to expose
+    supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
+    """
+    session.forget()
+    return service()
+    
+

applications/usuarios/cron/crontab

+#crontab

applications/usuarios/databases/sql.log

+timestamp: 2009-12-18T19:38:11.041881
+CREATE TABLE auth_user(
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    first_name CHAR(128),
+    last_name CHAR(128),
+    email CHAR(512),
+    password CHAR(512),
+    registration_key CHAR(512)
+);
+success!
+timestamp: 2009-12-18T19:38:11.077974
+CREATE TABLE auth_group(
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    role CHAR(512),
+    description TEXT
+);
+success!
+timestamp: 2009-12-18T19:38:11.084679
+CREATE TABLE auth_membership(
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    user_id REFERENCES auth_user(id) ON DELETE CASCADE,
+    group_id REFERENCES auth_group(id) ON DELETE CASCADE
+);
+success!
+timestamp: 2009-12-18T19:38:11.093752
+CREATE TABLE auth_permission(
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    group_id REFERENCES auth_group(id) ON DELETE CASCADE,
+    name CHAR(512),
+    table_name CHAR(512),
+    record_id INTEGER
+);
+success!
+timestamp: 2009-12-18T19:38:11.111733
+CREATE TABLE auth_event(
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    time_stamp TIMESTAMP,
+    client_ip CHAR(512),
+    user_id REFERENCES auth_user(id) ON DELETE CASCADE,
+    origin CHAR(512),
+    description TEXT
+);
+success!
+timestamp: 2009-12-18T19:38:11.120567
+CREATE TABLE usuarios(
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    nome CHAR(512),
+    idade CHAR(512)
+);
+success!

applications/usuarios/languages/es-es.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresi\xc3\xb3n opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s filas eliminadas',
+'%s rows updated': '%s filas actualizadas',
+'(something like "it-it")': '(algo como "it-it")',
+'A new version of web2py is available': 'Hay una nueva versi\xc3\xb3n de web2py disponible',
+'A new version of web2py is available: %s': 'Hay una nueva versi\xc3\xb3n de web2py disponible: %s',
+'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesi\xc3\xb3n requiere una conexi\xc3\xb3n segura (HTTPS) o localhost.',
+'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENCION: NO EJECUTE VARIAS PRUEBAS SIMULTANEAMENTE, NO SON THREAD SAFE.',
+'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicaci\xc3\xb3n que se ejecuta!',
+'About': 'Acerca de',
+'About application': 'Acerca de la aplicaci\xc3\xb3n',
+'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro',
+'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro',
+'Administrator Password:': 'Contrase\xc3\xb1a del Administrador:',
+'Are you sure you want to delete file "%s"?': '\xc2\xbfEst\xc3\xa1 seguro que desea eliminar el archivo "%s"?',
+'Are you sure you want to uninstall application "%s"': '\xc2\xbfEst\xc3\xa1 seguro que desea desinstalar la aplicaci\xc3\xb3n "%s"',
+'Are you sure you want to uninstall application "%s"?': '\xc2\xbfEst\xc3\xa1 seguro que desea desinstalar la aplicaci\xc3\xb3n "%s"?',
+'Authentication': 'Autenticaci\xc3\xb3n',
+'Available databases and tables': 'Bases de datos y tablas disponibles',
+'Cannot be empty': 'No puede estar vac\xc3\xado',
+'Cannot compile: there are errors in your app.        Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicaci\xc3\xb3n. Depure, corrija errores y vuelva a intentarlo.',
+'Change Password': 'Cambie Contrase\xc3\xb1a',
+'Check to delete': 'Marque para eliminar',
+'Client IP': 'IP del Cliente',
+'Controller': 'Controlador',
+'Controllers': 'Controladores',
+'Copyright': 'Derechos de autor',
+'Create new application': 'Cree una nueva aplicaci\xc3\xb3n',
+'Current request': 'Solicitud en curso',
+'Current response': 'Respuesta en curso',
+'Current session': 'Sesi\xc3\xb3n en curso',
+'DB Model': 'Modelo "db"',
+'DESIGN': 'DISE\xc3\x91O',
+'Database': 'Base de datos',
+'Date and Time': 'Fecha y Hora',
+'Delete': 'Elimine',
+'Delete:': 'Elimine:',
+'Deploy on Google App Engine': 'Instale en Google App Engine',
+'Description': 'Descripci\xc3\xb3n',
+'Design for': 'Dise\xc3\xb1o para',
+'E-mail': 'Correo electr\xc3\xb3nico',
+'EDIT': 'EDITAR',
+'Edit': 'Editar',
+'Edit Profile': 'Editar Perfil',
+'Edit This App': 'Edite esta App',
+'Edit application': 'Editar aplicaci\xc3\xb3n',
+'Edit current record': 'Edite el registro actual',
+'Editing file': 'Editando archivo',
+'Editing file "%s"': 'Editando archivo "%s"',
+'Error logs for "%(app)s"': 'Bit\xc3\xa1cora de errores en "%(app)s"',
+'First name': 'Nombre',
+'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
+'Group ID': 'ID de Grupo',
+'Hello World': 'Hola Mundo',
+'Import/Export': 'Importar/Exportar',
+'Index': 'Indice',
+'Installed applications': 'Aplicaciones instaladas',
+'Internal State': 'Estado Interno',
+'Invalid Query': 'Consulta inv\xc3\xa1lida',
+'Invalid action': 'Acci\xc3\xb3n inv\xc3\xa1lida',
+'Invalid email': 'Correo inv\xc3\xa1lido',
+'Language files (static strings) updated': 'Archivos de lenguaje (cadenas est\xc3\xa1ticas) actualizados',
+'Languages': 'Lenguajes',
+'Last name': 'Apellido',
+'Last saved on:': 'Guardado en:',
+'Layout': 'Layout',
+'License for': 'Licencia para',
+'Login': 'Inicio de sesi\xc3\xb3n',
+'Login to the Administrative Interface': 'Inicio de sesi\xc3\xb3n para la Interfaz Administrativa',
+'Logout': 'Fin de sesi\xc3\xb3n',
+'Lost Password': 'Contrase\xc3\xb1a perdida',
+'Main Menu': 'Men\xc3\xba principal',
+'Menu Model': 'Modelo "menu"',
+'Models': 'Modelos',
+'Modules': 'M\xc3\xb3dulos',
+'NO': 'NO',
+'Name': 'Nombre',
+'New Record': 'Registro nuevo',
+'No databases in this application': 'No hay bases de datos en esta aplicaci\xc3\xb3n',
+'Origin': 'Origen',
+'Original/Translation': 'Original/Traducci\xc3\xb3n',
+'Password': 'Contrase\xc3\xb1a',
+'Peeking at file': 'Visualizando archivo',
+'Powered by': 'Este sitio usa',
+'Query:': 'Consulta:',
+'Record ID': 'ID de Registro',
+'Register': 'Registrese',
+'Registration key': 'Contrase\xc3\xb1a de Registro',
+'Resolve Conflict file': 'archivo Resoluci\xc3\xb3n de Conflicto',
+'Role': 'Rol',
+'Rows in table': 'Filas en la tabla',
+'Rows selected': 'Filas seleccionadas',
+'Saved file hash:': 'Hash del archivo guardado:',
+'Static files': 'Archivos est\xc3\xa1ticos',
+'Stylesheet': 'Hoja de estilo',
+'Sure you want to delete this object?': '\xc2\xbfEst\xc3\xa1 seguro que desea eliminar este objeto?',
+'Table name': 'Nombre de la tabla',
+'Testing application': 'Probando aplicaci\xc3\xb3n',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "consulta" es una condici\xc3\xb3n como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
+'There are no controllers': 'No hay controladores',
+'There are no models': 'No hay modelos',
+'There are no modules': 'No hay m\xc3\xb3dulos',
+'There are no static files': 'No hay archivos est\xc3\xa1ticos',
+'There are no translators, only default language is supported': 'No hay traductores, s\xc3\xb3lo el lenguaje por defecto es soportado',
+'There are no views': 'No hay vistas',
+'This is the %(filename)s template': 'Esta es la plantilla %(filename)s',
+'Ticket': 'Tiquete',
+'Timestamp': 'Timestamp',
+'Unable to check for upgrades': 'No es posible verificar la existencia de actualizaciones',
+'Unable to download': 'No es posible la descarga',
+'Unable to download app': 'No es posible descarga la aplicaci\xc3\xb3n',
+'Update:': 'Actualice:',
+'Upload existing application': 'Suba esta aplicaci\xc3\xb3n',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para crear consultas m\xc3\xa1s complejas.',
+'User ID': 'ID de Usuario',
+'View': 'Vista',
+'Views': 'Vistas',
+'Welcome to web2py': 'Bienvenido a web2py',
+'YES': 'SI',
+'about': 'acerca de',
+'additional code for your application': 'c\xc3\xb3digo adicional para su aplicaci\xc3\xb3n',
+'admin disabled because no admin password': ' por falta de contrase\xc3\xb1a',
+'admin disabled because not supported on google apps engine': 'admin deshabilitado, no es soportado en GAE',
+'admin disabled because unable to access password file': 'admin deshabilitado, imposible acceder al archivo con la contrase\xc3\xb1a',
+'and rename it (required):': 'y renombrela (requerido):',
+'and rename it:': ' y renombrelo:',
+'appadmin': 'appadmin',
+'appadmin is disabled because insecure channel': 'admin deshabilitado, el canal no es seguro',
+'application "%s" uninstalled': 'aplicaci\xc3\xb3n "%s" desinstalada',
+'application compiled': 'aplicaci\xc3\xb3n compilada',
+'application is compiled and cannot be designed': 'la aplicaci\xc3\xb3n est\xc3\xa1 compilada y no puede ser modificada',
+'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
+'cannot create file': 'no es posible crear archivo',
+'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"',
+'check all': 'marcar todos',
+'clean': 'limpiar',
+'click here for online examples': 'haga clic aqu\xc3\xad para ver ejemplos en l\xc3\xadnea',
+'click here for the administrative interface': 'haga clic aqu\xc3\xad para usar la interfaz administrativa',
+'click to check for upgrades': 'haga clic para buscar actualizaciones',
+'compile': 'compilar',
+'compiled application removed': 'aplicaci\xc3\xb3n compilada removida',
+'controllers': 'controladores',
+'create file with filename:': 'cree archivo con nombre:',
+'create new application:': 'nombre de la nueva aplicaci\xc3\xb3n:',
+'crontab': 'crontab',
+'currently saved or': 'actualmente guardado o',
+'customize me!': 'Adaptame!',
+'data uploaded': 'datos subidos',
+'database': 'base de datos',
+'database %s select': 'selecci\xc3\xb3n en base de datos %s',
+'database administration': 'administraci\xc3\xb3n base de datos',
+'db': 'db',
+'defines tables': 'define tablas',
+'delete': 'eliminar',
+'delete all checked': 'eliminar marcados',
+'design': 'modificar',
+'done!': 'listo!',
+'edit': 'editar',
+'edit controller': 'editar controlador',
+'errors': 'errores',
+'export as csv file': 'exportar como archivo CSV',
+'exposes': 'expone',
+'extends': 'extiende',
+'failed to reload module': 'recarga del m\xc3\xb3dulo ha fallado',
+'file "%(filename)s" created': 'archivo "%(filename)s" creado',
+'file "%(filename)s" deleted': 'archivo "%(filename)s" eliminado',
+'file "%(filename)s" uploaded': 'archivo "%(filename)s" subido',
+'file "%(filename)s" was not deleted': 'archivo "%(filename)s" no fu\xc3\xa9 eliminado',
+'file "%s" of %s restored': 'archivo "%s" de %s restaurado',
+'file changed on disk': 'archivo modificado en el disco',
+'file does not exist': 'archivo no existe',
+'file saved on %(time)s': 'archivo guardado %(time)s',
+'file saved on %s': 'archivo guardado %s',
+'help': 'ayuda',
+'htmledit': 'htmledit',
+'includes': 'incluye',
+'insert new': 'inserte nuevo',
+'insert new %s': 'inserte nuevo %s',
+'internal error': 'error interno',
+'invalid password': 'contrase\xc3\xb1a inv\xc3\xa1lida',
+'invalid request': 'solicitud inv\xc3\xa1lida',
+'invalid ticket': 'tiquete inv\xc3\xa1lido',
+'language file "%(filename)s" created/updated': 'archivo de lenguaje "%(filename)s" creado/actualizado',
+'languages': 'lenguajes',
+'languages updated': 'lenguajes actualizados',
+'loading...': 'cargando...',
+'login': 'inicio de sesi\xc3\xb3n',
+'logout': 'fin de sesi\xc3\xb3n',
+'merge': 'combinar',
+'models': 'modelos',
+'modules': 'm\xc3\xb3dulos',
+'new application "%s" created': 'nueva aplicaci\xc3\xb3n "%s" creada',
+'new record inserted': 'nuevo registro insertado',
+'next 100 rows': '100 filas siguientes',
+'or import from csv file': 'o importar desde archivo CSV',
+'or provide application url:': 'o provea URL de la aplicaci\xc3\xb3n:',
+'pack all': 'empaquetar todo',
+'pack compiled': 'empaquete compiladas',
+'previous 100 rows': '100 filas anteriores',
+'record does not exist': 'el registro no existe',
+'record id': 'id de registro',
+'remove compiled': 'eliminar compiladas',
+'restore': 'restaurar',
+'revert': 'revertir',
+'save': 'guardar',
+'selected': 'seleccionado(s)',
+'session expired': 'sesi\xc3\xb3n expirada',
+'shell': 'shell',
+'site': 'sitio',
+'some files could not be removed': 'algunos archivos no pudieron ser removidos',
+'state': 'estado',
+'static': 'est\xc3\xa1ticos',
+'table': 'tabla',
+'test': 'probar',
+'the application logic, each URL path is mapped in one exposed function in the controller': 'la l\xc3\xb3gica de la aplicaci\xc3\xb3n, cada ruta URL se mapea en una funci\xc3\xb3n expuesta en el controlador',
+'the data representation, define database tables and sets': 'la representaci\xc3\xb3n de datos, define tablas y conjuntos de base de datos',
+'the presentations layer, views are also known as templates': 'la capa de presentaci\xc3\xb3n, las vistas tambi\xc3\xa9n son llamadas plantillas',
+'these files are served without processing, your images go here': 'estos archivos son servidos sin procesar, sus im\xc3\xa1genes van aqu\xc3\xad',
+'to  previous version.': 'a la versi\xc3\xb3n previa.',
+'translation strings for the application': 'cadenas de caracteres de traducci\xc3\xb3n para la aplicaci\xc3\xb3n',
+'try': 'intente',
+'try something like': 'intente algo como',
+'unable to create application "%s"': 'no es posible crear la aplicaci\xc3\xb3n "%s"',
+'unable to delete file "%(filename)s"': 'no es posible eliminar el archivo "%(filename)s"',
+'unable to parse csv file': 'no es posible analizar el archivo CSV',
+'unable to uninstall "%s"': 'no es posible instalar "%s"',
+'uncheck all': 'desmarcar todos',
+'uninstall': 'desinstalar',
+'update': 'actualizar',
+'update all languages': 'actualizar todos los lenguajes',
+'upload application:': 'subir aplicaci\xc3\xb3n:',
+'upload file:': 'suba archivo:',
+'versioning': 'versiones',
+'view': 'vista',
+'views': 'vistas',
+'web2py Recent Tweets': 'Tweets Recientes de web2py',
+'web2py is up to date': 'web2py est\xc3\xa1 actualizado',
+}

applications/usuarios/languages/fr-fr.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s rang\xc3\xa9es effac\xc3\xa9es',
+'%s rows updated': '%s rang\xc3\xa9es mises \xc3\xa0 jour',
+'Authentication': 'Authentication',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Bonjour Monde',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Requ\xc3\xaate Invalide',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Layout',
+'Login': 'Login',
+'Lost Password': 'Lost Password',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'Name': 'Name',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Record ID': 'Record ID',
+'Register': 'Register',
+'Registration key': 'Registration key',
+'Role': 'Role',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Souhaitez vous vraiment effacercet objet?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'View',
+'Welcome to web2py': 'Bienvenue sur web2py',
+'click here for online examples': 'cliquez ici pour voir des exemples enligne',
+'click here for the administrative interface': "cliquez ici pour aller\xc3\xa0 l'interface d'administration",
+'customize me!': 'customize me!',
+'data uploaded': 'donn\xc3\xa9es t\xc3\xa9l\xc3\xa9charg\xc3\xa9es',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'design',
+'done!': 'fait!',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'requ\xc3\xaate invalide',
+'new record inserted': 'nouvelle archive ins\xc3\xa9r\xc3\xa9e',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record does not exist': "l'archive n'existe pas",
+'record id': 'record id',
+'selected': 'selected',
+'state': '\xc3\xa9tat',
+'table': 'table',
+'unable to parse csv file': "incapable d'analyser le fichier cvs",
+}

applications/usuarios/languages/hi-hi.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\x8f\xe0\xa4\x81',
+'%s rows updated': '%s \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81  \xe0\xa4\x85\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xa4\xe0\xa4\xa8',
+'Available databases and tables': '\xe0\xa4\x89\xe0\xa4\xaa\xe0\xa4\xb2\xe0\xa4\xac\xe0\xa5\x8d\xe0\xa4\xa7  \xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\x94\xe0\xa4\xb0 \xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe',
+'Cannot be empty': '\xe0\xa4\x96\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x80 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\xb8\xe0\xa4\x95\xe0\xa4\xa4\xe0\xa4\xbe',
+'Change Password': '\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xac\xe0\xa4\xa6\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'Check to delete': '\xe0\xa4\xb9\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x82',
+'Current request': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa7',
+'Current response': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe',
+'Current session': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb8\xe0\xa5\x87\xe0\xa4\xb6\xe0\xa4\xa8',
+'Delete:': '\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe:',
+'Edit Profile': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'Edit current record': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82 ',
+'Hello from MyApp': 'Hello from MyApp',
+'Import/Export': '\xe0\xa4\x86\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4 / \xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'Internal State': '\xe0\xa4\x86\xe0\xa4\x82\xe0\xa4\xa4\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95  \xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
+'Invalid Query': '\xe0\xa4\x85\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xaf  \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8',
+'Login': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x87\xe0\xa4\xa8',
+'Logout': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x86\xe0\xa4\x89\xe0\xa4\x9f',
+'Lost Password': '\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\x96\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe',
+'New Record': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1',
+'No databases in this application': '\xe0\xa4\x87\xe0\xa4\xb8  \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x97 \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x95\xe0\xa5\x8b\xe0\xa4\x88 \xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82',
+'Query:': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8:',
+'Register': '\xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x9c\xe0\xa5\x80\xe0\xa4\x95\xe0\xa5\x83\xe0\xa4\xa4 (\xe0\xa4\xb0\xe0\xa4\x9c\xe0\xa4\xbf\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa4\xb0) \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa4\xbe ',
+'Rows in table': '\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 ',
+'Rows selected': '\xe0\xa4\x9a\xe0\xa4\xaf\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xa4 (\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa5\x87) \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 ',
+'Sure you want to delete this object?': '\xe0\xa4\xb8\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\x9a\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82 \xe0\xa4\x95\xe0\xa4\xbf \xe0\xa4\x86\xe0\xa4\xaa \xe0\xa4\x87\xe0\xa4\xb8 \xe0\xa4\xb5\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa5\x81 \xe0\xa4\x95\xe0\xa5\x8b \xe0\xa4\xb9\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xa4\xe0\xa5\x87 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': '\xe0\xa4\x85\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xa4\xe0\xa4\xa8 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa4\xbe:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.',
+'Welcome to web2py': '\xe0\xa4\xb5\xe0\xa5\x87\xe0\xa4\xac\xe0\xa5\xa8\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\x87 (web2py)  \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x86\xe0\xa4\xaa\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88',
+'appadmin is disabled because insecure channel': '\xe0\xa4\x85\xe0\xa4\xaa \xe0\xa4\x86\xe0\xa4\xa1\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\xa8 (appadmin) \xe0\xa4\x85\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xae \xe0\xa4\xb9\xe0\xa5\x88 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\x95\xe0\xa4\xbf \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x9a\xe0\xa5\x88\xe0\xa4\xa8\xe0\xa4\xb2',
+'click here for online examples': '\xe0\xa4\x91\xe0\xa4\xa8\xe0\xa4\xb2\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xa8 \xe0\xa4\x89\xe0\xa4\xa6\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xb0\xe0\xa4\xa3 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'click here for the administrative interface': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x87\xe0\xa4\x82\xe0\xa4\x9f\xe0\xa4\xb0\xe0\xa4\xab\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'customize me!': '\xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\x9d\xe0\xa5\x87 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\x95\xe0\xa5\x82\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\xa4 (\xe0\xa4\x95\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\x9c\xe0\xa4\xbc) \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82!',
+'data uploaded': '\xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\x9f\xe0\xa4\xbe \xe0\xa4\x85\xe0\xa4\xaa\xe0\xa4\xb2\xe0\xa5\x8b\xe0\xa4\xa1 \xe0\xa4\xb8\xe0\xa4\xae\xe0\xa5\x8d\xe0\xa4\xaa\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xa8 ',
+'database': '\xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8',
+'database %s select': '\xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8  %s \xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x80 \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x88',
+'db': 'db',
+'design': '\xe0\xa4\xb0\xe0\xa4\x9a\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'done!': '\xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe!',
+'export as csv file': 'csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb0\xe0\xa5\x82\xe0\xa4\xaa \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'insert new': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'insert new %s': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe   %s  \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'invalid request': '\xe0\xa4\x85\xe0\xa4\xb5\xe0\xa5\x88\xe0\xa4\xa7 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa7',
+'new record inserted': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbe',
+'next 100 rows': '\xe0\xa4\x85\xe0\xa4\x97\xe0\xa4\xb2\xe0\xa5\x87 100 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81',
+'or import from csv file': '\xe0\xa4\xaf\xe0\xa4\xbe  csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa5\x87 \xe0\xa4\x86\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'previous 100 rows': '\xe0\xa4\xaa\xe0\xa4\xbf\xe0\xa4\x9b\xe0\xa4\xb2\xe0\xa5\x87 100 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81',
+'record does not exist': '\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xae\xe0\xa5\x8c\xe0\xa4\x9c\xe0\xa5\x82\xe0\xa4\xa6 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x88',
+'record id': '\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xaa\xe0\xa4\xb9\xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbe (\xe0\xa4\x86\xe0\xa4\x88\xe0\xa4\xa1\xe0\xa5\x80)',
+'selected': '\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x86',
+'state': '\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
+'table': '\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe',
+'unable to parse csv file': 'csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xb8 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa5',
+}

applications/usuarios/languages/it-it.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s records cancellati',
+'%s rows updated': '*** %s records modificati',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'Delete:': 'Delete:',
+'Edit current record': 'Edit current record',
+'Hello World': 'Salve Mondo',
+'Import/Export': 'Import/Export',
+'Internal State': 'Internal State',
+'Invalid Query': 'Query invalida',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Sure you want to delete this object?': 'Sicuro che vuoi cancellare questo oggetto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.',
+'Welcome to web2py': 'Ciao da wek2py',
+'click here for online examples': 'clicca per vedere gli esempi',
+'click here for the administrative interface': "clicca per l'interfaccia administrativa",
+'data uploaded': 'dati caricati',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'progetta',
+'done!': 'fatto!',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'richiesta invalida!',
+'new record inserted': 'nuovo record inserito',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record does not exist': 'il record non esiste',
+'record id': 'record id',
+'selected': 'selected',
+'state': 'stato',
+'table': 'table',
+'unable to parse csv file': 'non so leggere questo csv file',
+}

applications/usuarios/languages/it.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s records cancellati',
+'%s rows updated': '*** %s records modificati',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'Delete:': 'Delete:',
+'Edit current record': 'Edit current record',
+'Hello World': 'Salve Mondo',
+'Import/Export': 'Import/Export',
+'Internal State': 'Internal State',
+'Invalid Query': 'Query invalida',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Sure you want to delete this object?': 'Sicuro che vuoi cancellare questo oggetto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.',
+'Welcome to web2py': 'Ciao da wek2py',
+'click here for online examples': 'clicca per vedere gli esempi',
+'click here for the administrative interface': "clicca per l'interfaccia administrativa",
+'data uploaded': 'dati caricati',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'progetta',
+'done!': 'fatto!',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'richiesta invalida!',
+'new record inserted': 'nuovo record inserito',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record does not exist': 'il record non esiste',
+'record id': 'record id',
+'selected': 'selected',
+'state': 'stato',
+'table': 'table',
+'unable to parse csv file': 'non so leggere questo csv file',
+}

applications/usuarios/languages/pl-pl.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyra\xc5\xbceniem postaci "pole1=\'nowawarto\xc5\x9b\xc4\x87\'". Nie mo\xc5\xbcesz uaktualni\xc4\x87 lub usun\xc4\x85\xc4\x87 wynik\xc3\xb3w z JOIN:',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
+'%s rows updated': 'Wierszy uaktualnionych: %s',
+'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
+'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
+'Change Password': 'Change Password',
+'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
+'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
+'Current response': 'Aktualna odpowied\xc5\xba',
+'Current session': 'Aktualna sesja',
+'Delete:': 'Usu\xc5\x84:',
+'Edit Profile': 'Edit Profile',
+'Edit current record': 'Edytuj aktualny rekord',
+'Hello World': 'Witaj \xc5\x9awiecie',
+'Import/Export': 'Importuj/eksportuj',
+'Internal State': 'Stan wewn\xc4\x99trzny',
+'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
+'Login': 'Zaloguj',
+'Logout': 'Logout',
+'Lost Password': 'Przypomnij has\xc5\x82o',
+'New Record': 'Nowy rekord',
+'No databases in this application': 'Brak baz danych w tej aplikacji',
+'Query:': 'Zapytanie:',
+'Register': 'Zarejestruj',
+'Rows in table': 'Wiersze w tabeli',
+'Rows selected': 'Wybrane wiersze',
+'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'warto\xc5\x9b\xc4\x87\'". Takie co\xc5\x9b jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
+'Update:': 'Uaktualnij:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'U\xc5\xbcyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...)  jako NOT do tworzenia bardziej skomplikowanych zapyta\xc5\x84.',
+'Welcome to web2py': 'Witaj w web2py',
+'click here for online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
+'click here for the administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
+'customize me!': 'dostosuj mnie!',
+'data uploaded': 'dane wys\xc5\x82ane',
+'database': 'baza danych',
+'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
+'db': 'baza danych',
+'design': 'projektuj',
+'done!': 'zrobione!',
+'export as csv file': 'eksportuj jako plik csv',
+'insert new': 'wstaw nowy rekord tabeli',
+'insert new %s': 'wstaw nowy rekord do tabeli %s',
+'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
+'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
+'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
+'or import from csv file': 'lub zaimportuj z pliku csv',
+'previous 100 rows': 'poprzednie 100 wierszy',
+'record does not exist': 'rekord nie istnieje',
+'record id': 'id rekordu',
+'selected': 'wybranych',
+'state': 'stan',
+'table': 'tabela',
+'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
+}

applications/usuarios/languages/pl.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyra\xc5\xbceniem postaci "pole1=\'nowawarto\xc5\x9b\xc4\x87\'". Nie mo\xc5\xbcesz uaktualni\xc4\x87 lub usun\xc4\x85\xc4\x87 wynik\xc3\xb3w z JOIN:',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
+'%s rows updated': 'Wierszy uaktualnionych: %s',
+'Authentication': 'Uwierzytelnienie',
+'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
+'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
+'Change Password': 'Zmie\xc5\x84 has\xc5\x82o',
+'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
+'Check to delete:': 'Zaznacz aby usun\xc4\x85\xc4\x87:',
+'Client IP': 'IP klienta',
+'Controller': 'Kontroler',
+'Copyright': 'Copyright',
+'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
+'Current response': 'Aktualna odpowied\xc5\xba',
+'Current session': 'Aktualna sesja',
+'DB Model': 'Model bazy danych',
+'Database': 'Baza danych',
+'Delete:': 'Usu\xc5\x84:',
+'Description': 'Opis',
+'E-mail': 'Adres e-mail',
+'Edit': 'Edycja',
+'Edit Profile': 'Edytuj profil',
+'Edit This App': 'Edytuj t\xc4\x99 aplikacj\xc4\x99',
+'Edit current record': 'Edytuj obecny rekord',
+'First name': 'Imi\xc4\x99',
+'Function disabled': 'Funkcja wyłączona',
+'Group ID': 'ID grupy',
+'Hello World': 'Witaj \xc5\x9awiecie',
+'Import/Export': 'Importuj/eksportuj',
+'Index': 'Indeks',
+'Internal State': 'Stan wewn\xc4\x99trzny',
+'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
+'Invalid email': 'B\xc5\x82\xc4\x99dny adres email',
+'Last name': 'Nazwisko',
+'Layout': 'Uk\xc5\x82ad',
+'Login': 'Zaloguj',
+'Logout': 'Wyloguj',
+'Lost Password': 'Przypomnij has\xc5\x82o',
+'Main Menu': 'Menu g\xc5\x82\xc3\xb3wne',
+'Menu Model': 'Model menu',
+'Name': 'Nazwa',
+'New Record': 'Nowy rekord',
+'No databases in this application': 'Brak baz danych w tej aplikacji',
+'Origin': '\xc5\xb9r\xc3\xb3d\xc5\x82o',
+'Password': 'Has\xc5\x82o',
+"Password fields don't match": 'Pola has\xc5\x82a nie s\xc4\x85 zgodne ze sob\xc4\x85',
+'Powered by': 'Zasilane przez',
+'Query:': 'Zapytanie:',
+'Record ID': 'ID rekordu',
+'Register': 'Zarejestruj',
+'Registration key': 'Klucz rejestracji',
+'Role': 'Rola',
+'Rows in table': 'Wiersze w tabeli',
+'Rows selected': 'Wybrane wiersze',
+'Stylesheet': 'Arkusz styl\xc3\xb3w',
+'Submit': 'Wy\xc5\x9blij',
+'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
+'Table name': 'Nazwa tabeli',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'warto\xc5\x9b\xc4\x87\'". Takie co\xc5\x9b jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
+'Timestamp': 'Znacznik czasu',
+'Update:': 'Uaktualnij:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'U\xc5\xbcyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...)  jako NOT do tworzenia bardziej skomplikowanych zapyta\xc5\x84.',
+'User %(id)s Registered': 'U\xc5\xbcytkownik %(id)s zosta\xc5\x82 zarejestrowany',
+'User ID': 'ID u\xc5\xbcytkownika',
+'Verify Password': 'Potwierd\xc5\xba has\xc5\x82o',
+'View': 'Widok',
+'Welcome to web2py': 'Witaj w web2py',
+'appadmin is disabled because insecure channel': 'administracja aplikacji wy\xc5\x82\xc4\x85czona z powodu braku bezpiecznego po\xc5\x82\xc4\x85czenia',
+'click here for online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
+'click here for the administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
+'customize me!': 'dostosuj mnie!',
+'data uploaded': 'dane wys\xc5\x82ane',
+'database': 'baza danych',
+'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
+'db': 'baza danych',
+'design': 'projektuj',
+'done!': 'zrobione!',
+'export as csv file': 'eksportuj jako plik csv',
+'insert new': 'wstaw nowy rekord tabeli',
+'insert new %s': 'wstaw nowy rekord do tabeli %s',
+'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
+'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
+'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
+'or import from csv file': 'lub zaimportuj z pliku csv',
+'previous 100 rows': 'poprzednie 100 wierszy',
+'record': 'rekord',
+'record does not exist': 'rekord nie istnieje',
+'record id': 'id rekordu',
+'selected': 'wybranych',
+'state': 'stan',
+'table': 'tabela',
+'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
+}

applications/usuarios/languages/pt-br.py

+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" \xc3\xa9 uma express\xc3\xa3o opcional como "campo1=\'novovalor\'". Voc\xc3\xaa n\xc3\xa3o pode atualizar ou apagar os resultados de um JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas apagadas',
+'%s rows updated': '%s linhas atualizadas',
+'Available databases and tables': 'Bancos de dados e tabelas dispon\xc3\xadveis',
+'Cannot be empty': 'N\xc3\xa3o pode ser vazio',
+'Check to delete': 'Marque para apagar',
+'Current request': 'Requisi\xc3\xa7\xc3\xa3o atual',
+'Current response': 'Resposta atual',
+'Current session': 'Sess\xc3\xa3o atual',
+'Delete:': 'Apagar:',
+'Edit current record': 'Editar o registro atual',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Importar/Exportar',
+'Internal State': 'Estado Interno',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Login': 'Autentique-se',
+'Lost Password': 'Esqueceu sua senha?',
+'New Record': 'Novo Registro',
+'No databases in this application': 'Sem bancos de dados nesta aplica\xc3\xa7\xc3\xa3o',
+'Query:': 'Consulta:',
+'Register': 'Registre-se',
+'Rows in table': 'Linhas na tabela',
+'Rows selected': 'Linhas selecionadas',
+'Sure you want to delete this object?': 'Est\xc3\xa1 certo(a) que deseja apagar esse objeto ?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'Uma "consulta" \xc3\xa9 uma condi\xc3\xa7\xc3\xa3o como "db.tabela1.campo1==\'valor\'". Express\xc3\xb5es como "db.tabela1.campo1==db.tabela2.campo2" resultam em um JOIN SQL.',
+'Update:': 'Atualizar:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, e ~(...)  para NOT para construir consultas mais complexas.',
+'Welcome to web2py': 'Bem vindo ao web2py',
+'click here for online examples': 'clique aqui para ver alguns exemplos',
+'click here for the administrative interface': 'clique aqui para acessar a interface administrativa',
+'customize me!': 'Personalize-me!',
+'data uploaded': 'dados enviados',
+'database': 'banco de dados',