Merge github.com:web2py/web2py into HEAD
This commit is contained in:
commit
21387a5b8b
141 files changed
+32709
-2510
No files matched your search
@@ -114,12 +114,12 @@ pip:
|
|||||||
run:
|
run:
|
||||||
python2.5 web2py.py -a hello
|
python2.5 web2py.py -a hello
|
||||||
commit:
|
commit:
|
||||||
|
python web2py.py --run_system_tests
|
||||||
make src
|
make src
|
||||||
echo '' > NEWINSTALL
|
echo '' > NEWINSTALL
|
||||||
hg commit -m "$(S)"
|
hg commit -m "$(S)"
|
||||||
#bzr commit -m "$(S)"
|
#bzr commit -m "$(S)"
|
||||||
git commit -a -m "$(S)"
|
git commit -a -m "$(S)"
|
||||||
python web2py.py --run_system_tests
|
|
||||||
push:
|
push:
|
||||||
hg push
|
hg push
|
||||||
git push
|
git push
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-07-06 11:47:22) dev
|
Version 2.00.0 (2012-07-19 16:56:40) dev
|
||||||
@@ -197,7 +197,7 @@ def select():
|
|||||||
_name='update_fields', _value=request.vars.update_fields
|
_name='update_fields', _value=request.vars.update_fields
|
||||||
or '')), TR(T('Delete:'), INPUT(_name='delete_check',
|
or '')), TR(T('Delete:'), INPUT(_name='delete_check',
|
||||||
_class='delete', _type='checkbox', value=False), ''),
|
_class='delete', _type='checkbox', value=False), ''),
|
||||||
TR('', '', INPUT(_type='submit', _value='submit'))),
|
TR('', '', INPUT(_type='submit', _value=T('submit')))),
|
||||||
_action=URL(r=request,args=request.args))
|
_action=URL(r=request,args=request.args))
|
||||||
if request.vars.csvfile != None:
|
if request.vars.csvfile != None:
|
||||||
try:
|
try:
|
||||||
@@ -218,10 +218,10 @@ def select():
|
|||||||
if form.vars.update_check and form.vars.update_fields:
|
if form.vars.update_check and form.vars.update_fields:
|
||||||
db(query).update(**eval_in_global_env('dict(%s)'
|
db(query).update(**eval_in_global_env('dict(%s)'
|
||||||
% form.vars.update_fields))
|
% form.vars.update_fields))
|
||||||
response.flash = T('%s rows updated', nrows)
|
response.flash = T('%s %%{row} updated', nrows)
|
||||||
elif form.vars.delete_check:
|
elif form.vars.delete_check:
|
||||||
db(query).delete()
|
db(query).delete()
|
||||||
response.flash = T('%s rows deleted', nrows)
|
response.flash = T('%s %%{row} deleted', nrows)
|
||||||
nrows = db(query).count()
|
nrows = db(query).count()
|
||||||
if orderby:
|
if orderby:
|
||||||
rows = db(query,ignore_common_filters=True).select(limitby=(start, stop), orderby=eval_in_global_env(orderby))
|
rows = db(query,ignore_common_filters=True).select(limitby=(start, stop), orderby=eval_in_global_env(orderby))
|
||||||
|
|||||||
@@ -8,11 +8,16 @@ if EXPERIMENTAL_STUFF:
|
|||||||
response.view = response.view.replace('default/','default.mobile/')
|
response.view = response.view.replace('default/','default.mobile/')
|
||||||
response.menu = []
|
response.menu = []
|
||||||
|
|
||||||
|
import re
|
||||||
from gluon.admin import *
|
from gluon.admin import *
|
||||||
from gluon.fileutils import abspath, read_file, write_file
|
from gluon.fileutils import abspath, read_file, write_file
|
||||||
from glob import glob
|
from glob import glob
|
||||||
import shutil
|
import shutil
|
||||||
import platform
|
import platform
|
||||||
|
from gluon.languages import (regex_language, read_possible_languages,
|
||||||
|
read_possible_plurals, lang_sampling,
|
||||||
|
read_dict, write_dict, read_plural_dict,
|
||||||
|
write_plural_dict)
|
||||||
|
|
||||||
if DEMO_MODE and request.function in ['change_password','pack','pack_plugin','upgrade_web2py','uninstall','cleanup','compile_app','remove_compiled_app','delete','delete_plugin','create_file','upload_file','update_languages','reload_routes']:
|
if DEMO_MODE and request.function in ['change_password','pack','pack_plugin','upgrade_web2py','uninstall','cleanup','compile_app','remove_compiled_app','delete','delete_plugin','create_file','upload_file','update_languages','reload_routes']:
|
||||||
session.flash = T('disabled in demo mode')
|
session.flash = T('disabled in demo mode')
|
||||||
@@ -186,14 +191,14 @@ def site():
|
|||||||
elif file_or_appurl and request.vars.filename:
|
elif file_or_appurl and request.vars.filename:
|
||||||
# fetch an application via URL or file upload
|
# fetch an application via URL or file upload
|
||||||
f = None
|
f = None
|
||||||
if request.vars.appurl is not '':
|
if request.vars.appurl:
|
||||||
try:
|
try:
|
||||||
f = urllib.urlopen(request.vars.appurl)
|
f = urllib.urlopen(request.vars.appurl)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
session.flash = DIV(T('Unable to download app because:'),PRE(str(e)))
|
session.flash = DIV(T('Unable to download app because:'),PRE(str(e)))
|
||||||
redirect(URL(r=request))
|
redirect(URL(r=request))
|
||||||
fname = request.vars.appurl
|
fname = request.vars.appurl
|
||||||
elif request.vars.file is not '':
|
elif request.vars.file:
|
||||||
f = request.vars.file.file
|
f = request.vars.file.file
|
||||||
fname = request.vars.file.filename
|
fname = request.vars.file.filename
|
||||||
|
|
||||||
@@ -357,7 +362,7 @@ def delete():
|
|||||||
sender = sender[0]
|
sender = sender[0]
|
||||||
|
|
||||||
if 'nodelete' in request.vars:
|
if 'nodelete' in request.vars:
|
||||||
redirect(URL(sender))
|
redirect(URL(sender, anchor=request.vars.id))
|
||||||
elif 'delete' in request.vars:
|
elif 'delete' in request.vars:
|
||||||
try:
|
try:
|
||||||
full_path = apath(filename, r=request)
|
full_path = apath(filename, r=request)
|
||||||
@@ -369,7 +374,7 @@ def delete():
|
|||||||
except Exception:
|
except Exception:
|
||||||
session.flash = T('unable to delete file "%(filename)s"',
|
session.flash = T('unable to delete file "%(filename)s"',
|
||||||
dict(filename=filename))
|
dict(filename=filename))
|
||||||
redirect(URL(sender))
|
redirect(URL(sender, anchor=request.vars.id2))
|
||||||
return dict(filename=filename, sender=sender)
|
return dict(filename=filename, sender=sender)
|
||||||
|
|
||||||
def enable():
|
def enable():
|
||||||
@@ -384,22 +389,25 @@ def enable():
|
|||||||
|
|
||||||
def peek():
|
def peek():
|
||||||
""" Visualize object code """
|
""" Visualize object code """
|
||||||
app = get_app()
|
app = get_app(request.vars.app)
|
||||||
filename = '/'.join(request.args)
|
filename = '/'.join(request.args)
|
||||||
|
if request.vars.app:
|
||||||
|
path = abspath(filename, gluon=False)
|
||||||
|
else:
|
||||||
|
path = apath(filename, r=request)
|
||||||
try:
|
try:
|
||||||
data = safe_read(apath(filename, r=request)).replace('\r','')
|
data = safe_read(path).replace('\r','')
|
||||||
except IOError:
|
except IOError:
|
||||||
session.flash = T('file does not exist')
|
session.flash = T('file does not exist')
|
||||||
redirect(URL('site'))
|
redirect(URL('site'))
|
||||||
|
|
||||||
extension = filename[filename.rfind('.') + 1:].lower()
|
extension = filename[filename.rfind('.') + 1:].lower()
|
||||||
|
|
||||||
return dict(app=request.args[0],
|
return dict(app=app,
|
||||||
filename=filename,
|
filename=filename,
|
||||||
data=data,
|
data=data,
|
||||||
extension=extension)
|
extension=extension)
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
""" Execute controller tests """
|
""" Execute controller tests """
|
||||||
app = get_app()
|
app = get_app()
|
||||||
@@ -428,14 +436,18 @@ def search():
|
|||||||
files2 = glob(os.path.join(path,'*/*.html'))
|
files2 = glob(os.path.join(path,'*/*.html'))
|
||||||
files3 = glob(os.path.join(path,'*/*/*.html'))
|
files3 = glob(os.path.join(path,'*/*/*.html'))
|
||||||
files=[x[len(path)+1:].replace('\\','/') for x in files1+files2+files3 if match(x,keywords)]
|
files=[x[len(path)+1:].replace('\\','/') for x in files1+files2+files3 if match(x,keywords)]
|
||||||
return response.json({'files':files})
|
return response.json(dict(files=files, message=T.M('Searching: **%s** %%{file}', len(files))))
|
||||||
|
|
||||||
def edit():
|
def edit():
|
||||||
""" File edit handler """
|
""" File edit handler """
|
||||||
# Load json only if it is ajax edited...
|
# Load json only if it is ajax edited...
|
||||||
app = get_app()
|
app = get_app(request.vars.app)
|
||||||
filename = '/'.join(request.args)
|
filename = '/'.join(request.args)
|
||||||
# Try to discover the file type
|
if request.vars.app:
|
||||||
|
path = abspath(filename)
|
||||||
|
else:
|
||||||
|
path = apath(filename, r=request)
|
||||||
|
# Try to discover the file type
|
||||||
if filename[-3:] == '.py':
|
if filename[-3:] == '.py':
|
||||||
filetype = 'python'
|
filetype = 'python'
|
||||||
elif filename[-5:] == '.html':
|
elif filename[-5:] == '.html':
|
||||||
@@ -450,9 +462,6 @@ def edit():
|
|||||||
filetype = 'html'
|
filetype = 'html'
|
||||||
|
|
||||||
# ## check if file is not there
|
# ## check if file is not there
|
||||||
|
|
||||||
path = apath(filename, r=request)
|
|
||||||
|
|
||||||
if ('revert' in request.vars) and os.path.exists(path + '.bak'):
|
if ('revert' in request.vars) and os.path.exists(path + '.bak'):
|
||||||
try:
|
try:
|
||||||
data = safe_read(path + '.bak')
|
data = safe_read(path + '.bak')
|
||||||
@@ -526,8 +535,8 @@ def edit():
|
|||||||
except:
|
except:
|
||||||
ex_name = 'unknown exception!'
|
ex_name = 'unknown exception!'
|
||||||
response.flash = DIV(T('failed to compile file because:'), BR(),
|
response.flash = DIV(T('failed to compile file because:'), BR(),
|
||||||
B(ex_name), T(' at line %s') % e.lineno,
|
B(ex_name), ' '+T('at line %s', e.lineno),
|
||||||
offset and T(' at char %s') % offset or '',
|
offset and ' '+T('at char %s', offset) or '',
|
||||||
PRE(str(e)))
|
PRE(str(e)))
|
||||||
|
|
||||||
if data_or_revert and request.args[1] == 'modules':
|
if data_or_revert and request.args[1] == 'modules':
|
||||||
@@ -568,7 +577,7 @@ def edit():
|
|||||||
for v in viewlist:
|
for v in viewlist:
|
||||||
vf = os.path.split(v)[-1]
|
vf = os.path.split(v)[-1]
|
||||||
vargs = "/".join([viewpath.replace(os.sep,"/"),vf])
|
vargs = "/".join([viewpath.replace(os.sep,"/"),vf])
|
||||||
editviewlinks.append(A(T(vf.split(".")[0]),\
|
editviewlinks.append(A(vf.split(".")[0],\
|
||||||
_href=URL('edit',args=[vargs])))
|
_href=URL('edit',args=[vargs])))
|
||||||
|
|
||||||
if len(request.args) > 2 and request.args[1] == 'controllers':
|
if len(request.args) > 2 and request.args[1] == 'controllers':
|
||||||
@@ -672,29 +681,39 @@ def edit_language():
|
|||||||
""" Edit language file """
|
""" Edit language file """
|
||||||
app = get_app()
|
app = get_app()
|
||||||
filename = '/'.join(request.args)
|
filename = '/'.join(request.args)
|
||||||
from gluon.languages import read_dict, write_dict
|
|
||||||
strings = read_dict(apath(filename, r=request))
|
strings = read_dict(apath(filename, r=request))
|
||||||
keys = sorted(strings.keys(),lambda x,y: cmp(x.lower(), y.lower()))
|
|
||||||
|
if '__corrupted__' in strings:
|
||||||
|
form = SPAN(strings['__corrupted__'],_class='error')
|
||||||
|
return dict(filename=filename, form=form)
|
||||||
|
|
||||||
|
keys = sorted(strings.keys(),lambda x,y: cmp(unicode(x,'utf-8').lower(), unicode(y,'utf-8').lower()))
|
||||||
rows = []
|
rows = []
|
||||||
rows.append(H2(T('Original/Translation')))
|
rows.append(H2(T('Original/Translation')))
|
||||||
|
|
||||||
for key in keys:
|
for key in keys:
|
||||||
name = md5_hash(key)
|
name = md5_hash(key)
|
||||||
if key==strings[key]:
|
s = strings[key]
|
||||||
_class='untranslated'
|
(prefix, sep, key) = key.partition('\x01')
|
||||||
|
if sep:
|
||||||
|
prefix = SPAN(prefix+': ', _style='color: blue;')
|
||||||
|
k = key
|
||||||
else:
|
else:
|
||||||
_class='translated'
|
(k, prefix) = (prefix, '')
|
||||||
|
|
||||||
|
_class='untranslated' if k==s else 'translated'
|
||||||
|
|
||||||
if len(key) <= 40:
|
if len(key) <= 40:
|
||||||
elem = INPUT(_type='text', _name=name,value=strings[key],
|
elem = INPUT(_type='text', _name=name, value=s,
|
||||||
_size=70,_class=_class)
|
_size=70,_class=_class)
|
||||||
else:
|
else:
|
||||||
elem = TEXTAREA(_name=name, value=strings[key], _cols=70,
|
elem = TEXTAREA(_name=name, value=s, _cols=70,
|
||||||
_rows=5, _class=_class)
|
_rows=5, _class=_class)
|
||||||
|
|
||||||
# Making the short circuit compatible with <= python2.4
|
# Making the short circuit compatible with <= python2.4
|
||||||
k = (strings[key] != key) and key or B(key)
|
k = (s != k) and k or B(k)
|
||||||
|
|
||||||
rows.append(P(k, BR(), elem, TAG.BUTTON(T('delete'),
|
rows.append(P(prefix, k, BR(), elem, TAG.BUTTON(T('delete'),
|
||||||
_onclick='return delkey("%s")' % name), _id=name))
|
_onclick='return delkey("%s")' % name), _id=name))
|
||||||
|
|
||||||
rows.append(INPUT(_type='submit', _value=T('update')))
|
rows.append(INPUT(_type='submit', _value=T('update')))
|
||||||
@@ -710,6 +729,53 @@ def edit_language():
|
|||||||
redirect(URL(r=request,args=request.args))
|
redirect(URL(r=request,args=request.args))
|
||||||
return dict(app=request.args[0], filename=filename, form=form)
|
return dict(app=request.args[0], filename=filename, form=form)
|
||||||
|
|
||||||
|
def edit_plurals():
|
||||||
|
""" Edit plurals file """
|
||||||
|
#import ipdb; ipdb.set_trace()
|
||||||
|
app = get_app()
|
||||||
|
filename = '/'.join(request.args)
|
||||||
|
plurals = read_plural_dict(apath(filename, r=request)) # plural forms dictionary
|
||||||
|
nplurals = int(request.vars.nplurals)-1 # plural forms quantity
|
||||||
|
xnplurals = xrange(nplurals)
|
||||||
|
|
||||||
|
if '__corrupted__' in plurals:
|
||||||
|
# show error message and exit
|
||||||
|
form = SPAN(plurals['__corrupted__'],_class='error')
|
||||||
|
return dict(filename=filename, form=form)
|
||||||
|
|
||||||
|
keys = sorted(plurals.keys(),lambda x,y: cmp(unicode(x,'utf-8').lower(), unicode(y,'utf-8').lower()))
|
||||||
|
rows = []
|
||||||
|
|
||||||
|
row=[T("Singular Form")]
|
||||||
|
row.extend([T("Plural Form #%s", n+1) for n in xnplurals])
|
||||||
|
table=TABLE(THEAD(TR(row)))
|
||||||
|
|
||||||
|
for key in keys:
|
||||||
|
name = md5_hash(key)
|
||||||
|
forms = plurals[key]
|
||||||
|
|
||||||
|
if len(forms) < nplurals:
|
||||||
|
forms.extend(None for i in xrange(nplurals-len(forms)))
|
||||||
|
|
||||||
|
row = [B(key)]
|
||||||
|
row.extend([INPUT(_type='text', _name=name+'_'+str(n), value=forms[n], _size=20) for n in xnplurals])
|
||||||
|
row.append(TD(TAG.BUTTON(T('delete'), _onclick='return delkey("%s")' % name)))
|
||||||
|
rows.append(TR(row, _id=name))
|
||||||
|
if rows:
|
||||||
|
table.append(TBODY(rows))
|
||||||
|
rows=[table, INPUT(_type='submit', _value=T('update'))]
|
||||||
|
form = FORM(*rows)
|
||||||
|
if form.accepts(request.vars, keepvalues=True):
|
||||||
|
new_plurals = dict()
|
||||||
|
for key in keys:
|
||||||
|
name = md5_hash(key)
|
||||||
|
if form.vars[name+'_0']==chr(127): continue
|
||||||
|
new_plurals[key] = [form.vars[name+'_'+str(n)] for n in xnplurals]
|
||||||
|
write_plural_dict(apath(filename, r=request), new_plurals)
|
||||||
|
session.flash = T('file saved on %(time)s', dict(time=time.ctime()))
|
||||||
|
redirect(URL(r=request, args=request.args, vars=dict(nplurals=request.vars.nplurals)))
|
||||||
|
return dict(app=request.args[0], filename=filename, form=form)
|
||||||
|
|
||||||
|
|
||||||
def about():
|
def about():
|
||||||
""" Read about info """
|
""" Read about info """
|
||||||
@@ -794,7 +860,30 @@ def design():
|
|||||||
statics.sort()
|
statics.sort()
|
||||||
|
|
||||||
# Get all languages
|
# Get all languages
|
||||||
languages = listdir(apath('%s/languages/' % app, r=request), '[\w-]*\.py')
|
all_languages=dict([(lang+'.py',info[0]) for lang,info
|
||||||
|
in read_possible_languages(apath(app, r=request)).iteritems()
|
||||||
|
if info[2]!=0]) # info[2] is langfile_mtime:
|
||||||
|
# get only existed files
|
||||||
|
languages = sorted(all_languages)
|
||||||
|
|
||||||
|
plural_rules={}
|
||||||
|
all_plurals=read_possible_plurals()
|
||||||
|
for langfile,lang in all_languages.iteritems():
|
||||||
|
lang=lang.strip()
|
||||||
|
match_language = regex_language.match(lang)
|
||||||
|
if match_language:
|
||||||
|
match_language = tuple(part
|
||||||
|
for part in match_language.groups()
|
||||||
|
if part)
|
||||||
|
plang = lang_sampling(match_language, all_plurals.keys())
|
||||||
|
if plang:
|
||||||
|
plural=all_plurals[plang]
|
||||||
|
plural_rules[langfile]=(plural[0],plang,plural[1],plural[3])
|
||||||
|
else:
|
||||||
|
plural_rules[langfile]=(0,lang,'plural_rules-%s.py'%lang,'')
|
||||||
|
|
||||||
|
plurals = listdir(apath('%s/languages/' % app, r=request),
|
||||||
|
'^plural-[\w-]+\.py$')
|
||||||
|
|
||||||
#Get crontab
|
#Get crontab
|
||||||
cronfolder = apath('%s/cron' % app, r=request)
|
cronfolder = apath('%s/cron' % app, r=request)
|
||||||
@@ -821,6 +910,8 @@ def design():
|
|||||||
include=include,
|
include=include,
|
||||||
statics=filter_plugins(statics,plugins),
|
statics=filter_plugins(statics,plugins),
|
||||||
languages=languages,
|
languages=languages,
|
||||||
|
plurals=plurals,
|
||||||
|
plural_rules=plural_rules,
|
||||||
crontab=crontab,
|
crontab=crontab,
|
||||||
plugins=plugins)
|
plugins=plugins)
|
||||||
|
|
||||||
@@ -830,7 +921,7 @@ def delete_plugin():
|
|||||||
plugin = request.args(1)
|
plugin = request.args(1)
|
||||||
plugin_name='plugin_'+plugin
|
plugin_name='plugin_'+plugin
|
||||||
if 'nodelete' in request.vars:
|
if 'nodelete' in request.vars:
|
||||||
redirect(URL('design',args=app))
|
redirect(URL('design', args=app, anchor=request.vars.id))
|
||||||
elif 'delete' in request.vars:
|
elif 'delete' in request.vars:
|
||||||
try:
|
try:
|
||||||
for folder in ['models','views','controllers','static','modules']:
|
for folder in ['models','views','controllers','static','modules']:
|
||||||
@@ -847,7 +938,7 @@ def delete_plugin():
|
|||||||
except Exception:
|
except Exception:
|
||||||
session.flash = T('unable to delete file plugin "%(plugin)s"',
|
session.flash = T('unable to delete file plugin "%(plugin)s"',
|
||||||
dict(plugin=plugin))
|
dict(plugin=plugin))
|
||||||
redirect(URL('design',args=request.args(0)))
|
redirect(URL('design', args=request.args(0), anchor=request.vars.id2))
|
||||||
return dict(plugin=plugin)
|
return dict(plugin=plugin)
|
||||||
|
|
||||||
def plugin():
|
def plugin():
|
||||||
@@ -909,7 +1000,10 @@ def plugin():
|
|||||||
statics.sort()
|
statics.sort()
|
||||||
|
|
||||||
# Get all languages
|
# Get all languages
|
||||||
languages = listdir(apath('%s/languages/' % app, r=request), '[\w-]*\.py')
|
languages = sorted([lang+'.py' for lang, info in
|
||||||
|
T.get_possible_languages_info().iteritems()
|
||||||
|
if info[2]!=0]) # info[2] is langfile_mtime:
|
||||||
|
# get only existed files
|
||||||
|
|
||||||
#Get crontab
|
#Get crontab
|
||||||
crontab = apath('%s/cron/crontab' % app, r=request)
|
crontab = apath('%s/cron/crontab' % app, r=request)
|
||||||
@@ -937,24 +1031,56 @@ def plugin():
|
|||||||
def create_file():
|
def create_file():
|
||||||
""" Create files handler """
|
""" Create files handler """
|
||||||
try:
|
try:
|
||||||
app = get_app(name=request.vars.location.split('/')[0])
|
anchor='#'+request.vars.id if request.vars.id else ''
|
||||||
path = apath(request.vars.location, r=request)
|
if request.vars.app:
|
||||||
|
app = get_app(request.vars.app)
|
||||||
|
path = abspath(request.vars.location, gluon=False)
|
||||||
|
else:
|
||||||
|
app = get_app(name=request.vars.location.split('/')[0])
|
||||||
|
path = apath(request.vars.location, r=request)
|
||||||
filename = re.sub('[^\w./-]+', '_', request.vars.filename)
|
filename = re.sub('[^\w./-]+', '_', request.vars.filename)
|
||||||
|
if path[-7:] == '/rules/':
|
||||||
|
# Handle plural rules files
|
||||||
|
if len(filename) == 0:
|
||||||
|
raise SyntaxError
|
||||||
|
if not filename[-3:] == '.py':
|
||||||
|
filename += '.py'
|
||||||
|
lang = re.match('^plural_rules-(.*)\.py$',filename).group(1)
|
||||||
|
langinfo = read_possible_languages(apath(app, r=request))[lang]
|
||||||
|
text = dedent("""
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf8 -*-
|
||||||
|
# Plural-Forms for %(lang)s (%(langname)s)
|
||||||
|
|
||||||
if path[-11:] == '/languages/':
|
nplurals=2 # for example, English language has 2 forms:
|
||||||
|
# 1 singular and 1 plural
|
||||||
|
|
||||||
|
# Determine plural_id for number *n* as sequence of positive
|
||||||
|
# integers: 0,1,...
|
||||||
|
# NOTE! For singular form ALWAYS return plural_id = 0
|
||||||
|
get_plural_id = lambda n: int(n != 1)
|
||||||
|
|
||||||
|
# Construct and return plural form of *word* using
|
||||||
|
# *plural_id* (which ALWAYS>0). This function will be executed
|
||||||
|
# for words (or phrases) not found in plural_dict dictionary.
|
||||||
|
# By default this function simply returns word in singular:
|
||||||
|
construct_plural_form = lambda word, plural_id: word
|
||||||
|
""")[1:] % dict(lang=langinfo[0], langname=langinfo[1])
|
||||||
|
|
||||||
|
elif path[-11:] == '/languages/':
|
||||||
# Handle language files
|
# Handle language files
|
||||||
if len(filename) == 0:
|
if len(filename) == 0:
|
||||||
raise SyntaxError
|
raise SyntaxError
|
||||||
if not filename[-3:] == '.py':
|
if not filename[-3:] == '.py':
|
||||||
filename += '.py'
|
filename += '.py'
|
||||||
app = path.split('/')[-3]
|
|
||||||
path=os.path.join(apath(app, r=request),'languages',filename)
|
path=os.path.join(apath(app, r=request),'languages',filename)
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
safe_write(path, '')
|
safe_write(path, '')
|
||||||
|
# create language xx[-yy].py file:
|
||||||
findT(apath(app, r=request), filename[:-3])
|
findT(apath(app, r=request), filename[:-3])
|
||||||
session.flash = T('language file "%(filename)s" created/updated',
|
session.flash = T('language file "%(filename)s" created/updated',
|
||||||
dict(filename=filename))
|
dict(filename=filename))
|
||||||
redirect(request.vars.sender)
|
redirect(request.vars.sender+anchor)
|
||||||
|
|
||||||
elif path[-8:] == '/models/':
|
elif path[-8:] == '/models/':
|
||||||
# Handle python models
|
# Handle python models
|
||||||
@@ -988,13 +1114,12 @@ def create_file():
|
|||||||
if len(filename) == 5:
|
if len(filename) == 5:
|
||||||
raise SyntaxError
|
raise SyntaxError
|
||||||
|
|
||||||
msg = T('This is the %(filename)s template',
|
msg = T('This is the %(filename)s template', dict(filename=filename))
|
||||||
dict(filename=filename))
|
|
||||||
if extension == 'html':
|
if extension == 'html':
|
||||||
text = dedent("""
|
text = dedent("""
|
||||||
{{extend 'layout.html'}}
|
{{extend 'layout.html'}}
|
||||||
<h1>%s</h1>
|
<h1>%s</h1>
|
||||||
{{=BEAUTIFY(response._vars)}}""" % msg)
|
{{=BEAUTIFY(response._vars)}}""" % msg)[1:]
|
||||||
else:
|
else:
|
||||||
generic = os.path.join(path,'generic.'+extension)
|
generic = os.path.join(path,'generic.'+extension)
|
||||||
if os.path.exists(generic):
|
if os.path.exists(generic):
|
||||||
@@ -1015,14 +1140,14 @@ def create_file():
|
|||||||
text = dedent("""
|
text = dedent("""
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# coding: utf8
|
# coding: utf8
|
||||||
from gluon import *\n""")
|
from gluon import *\n""")[1:]
|
||||||
|
|
||||||
elif path[-8:] == '/static/':
|
elif path[-8:] == '/static/':
|
||||||
if request.vars.plugin and not filename.startswith('plugin_%s/' % request.vars.plugin):
|
if request.vars.plugin and not filename.startswith('plugin_%s/' % request.vars.plugin):
|
||||||
filename = 'plugin_%s/%s' % (request.vars.plugin, filename)
|
filename = 'plugin_%s/%s' % (request.vars.plugin, filename)
|
||||||
text = ''
|
text = ''
|
||||||
else:
|
else:
|
||||||
redirect(request.vars.sender)
|
redirect(request.vars.sender+anchor)
|
||||||
|
|
||||||
full_filename = os.path.join(path, filename)
|
full_filename = os.path.join(path, filename)
|
||||||
dirpath = os.path.dirname(full_filename)
|
dirpath = os.path.dirname(full_filename)
|
||||||
@@ -1037,18 +1162,20 @@ def create_file():
|
|||||||
log_progress(app,'CREATE',filename)
|
log_progress(app,'CREATE',filename)
|
||||||
session.flash = T('file "%(filename)s" created',
|
session.flash = T('file "%(filename)s" created',
|
||||||
dict(filename=full_filename[len(path):]))
|
dict(filename=full_filename[len(path):]))
|
||||||
|
vars={}
|
||||||
|
if request.vars.id: vars['id']=request.vars.id
|
||||||
|
if request.vars.app: vars['app']=request.vars.app
|
||||||
redirect(URL('edit',
|
redirect(URL('edit',
|
||||||
args=[os.path.join(request.vars.location, filename)]))
|
args=[os.path.join(request.vars.location, filename)], vars=vars))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
if not isinstance(e,HTTP):
|
if not isinstance(e,HTTP):
|
||||||
session.flash = T('cannot create file')
|
session.flash = T('cannot create file')
|
||||||
|
|
||||||
redirect(request.vars.sender)
|
redirect(request.vars.sender+anchor)
|
||||||
|
|
||||||
|
|
||||||
def upload_file():
|
def upload_file():
|
||||||
""" File uploading handler """
|
""" File uploading handler """
|
||||||
|
|
||||||
try:
|
try:
|
||||||
filename = None
|
filename = None
|
||||||
app = get_app(name=request.vars.location.split('/')[0])
|
app = get_app(name=request.vars.location.split('/')[0])
|
||||||
@@ -1121,7 +1248,7 @@ def errors():
|
|||||||
|
|
||||||
hash2error = dict()
|
hash2error = dict()
|
||||||
|
|
||||||
for fn in listdir(errors_path, '^\w.*'):
|
for fn in listdir(errors_path, '^[a-fA-F0-9.\-]+$'):
|
||||||
fullpath = os.path.join(errors_path, fn)
|
fullpath = os.path.join(errors_path, fn)
|
||||||
if not os.path.isfile(fullpath): continue
|
if not os.path.isfile(fullpath): continue
|
||||||
try:
|
try:
|
||||||
@@ -1368,7 +1495,7 @@ def twitter():
|
|||||||
try:
|
try:
|
||||||
if TWITTER_HASH:
|
if TWITTER_HASH:
|
||||||
page = urllib.urlopen("http://search.twitter.com/search.json?q=%%40%s" % TWITTER_HASH).read()
|
page = urllib.urlopen("http://search.twitter.com/search.json?q=%%40%s" % TWITTER_HASH).read()
|
||||||
data = sj.loads(page , encoding="utf-8")['results']
|
data = sj.loads(page, encoding="utf-8")['results']
|
||||||
d = dict()
|
d = dict()
|
||||||
for e in data:
|
for e in data:
|
||||||
d[e["id"]] = e
|
d[e["id"]] = e
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ def commit():
|
|||||||
path = apath(app, r=request)
|
path = apath(app, r=request)
|
||||||
repo = hg_repo(path)
|
repo = hg_repo(path)
|
||||||
form = FORM('Comment:',INPUT(_name='comment',requires=IS_NOT_EMPTY()),
|
form = FORM('Comment:',INPUT(_name='comment',requires=IS_NOT_EMPTY()),
|
||||||
INPUT(_type='submit',_value='Commit'))
|
INPUT(_type='submit',_value=T('Commit')))
|
||||||
if form.accepts(request.vars,session):
|
if form.accepts(request.vars,session):
|
||||||
oldid = repo[repo.lookup('.')]
|
oldid = repo[repo.lookup('.')]
|
||||||
addremove(repo)
|
addremove(repo)
|
||||||
@@ -69,7 +69,7 @@ def revision():
|
|||||||
repo = hg_repo(path)
|
repo = hg_repo(path)
|
||||||
revision = request.args(1)
|
revision = request.args(1)
|
||||||
ctx=repo.changectx(revision)
|
ctx=repo.changectx(revision)
|
||||||
form=FORM(INPUT(_type='submit',_value='revert'))
|
form=FORM(INPUT(_type='submit',_value=T('Revert')))
|
||||||
if form.accepts(request.vars):
|
if form.accepts(request.vars):
|
||||||
hg.update(repo, revision)
|
hg.update(repo, revision)
|
||||||
session.flash = "reverted to revision %s" % ctx.rev()
|
session.flash = "reverted to revision %s" % ctx.rev()
|
||||||
|
|||||||
@@ -3,15 +3,15 @@ from distutils import dir_util
|
|||||||
try:
|
try:
|
||||||
from git import *
|
from git import *
|
||||||
except ImportError:
|
except ImportError:
|
||||||
session.flash = 'requires python-git, but not installed'
|
session.flash = T('requires python-git, but not installed')
|
||||||
redirect(URL('default','site'))
|
redirect(URL('default','site'))
|
||||||
|
|
||||||
def deploy():
|
def deploy():
|
||||||
apps = sorted(file for file in os.listdir(apath(r=request)))
|
apps = sorted(file for file in os.listdir(apath(r=request)))
|
||||||
form = SQLFORM.factory(
|
form = SQLFORM.factory(
|
||||||
Field('osrepo',default='/tmp',label='Path to local openshift repo root.',
|
Field('osrepo',default='/tmp',label=T('Path to local openshift repo root.'),
|
||||||
requires=EXISTS(error_message=T('directory not found'))),
|
requires=EXISTS(error_message=T('directory not found'))),
|
||||||
Field('osname',default='web2py',label='WSGI reference name'),
|
Field('osname',default='web2py',label=T('WSGI reference name')),
|
||||||
Field('applications','list:string',
|
Field('applications','list:string',
|
||||||
requires=IS_IN_SET(apps,multiple=True),
|
requires=IS_IN_SET(apps,multiple=True),
|
||||||
label=T('web2py apps to deploy')))
|
label=T('web2py apps to deploy')))
|
||||||
|
|||||||
@@ -1,27 +1,46 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'af',
|
||||||
|
'!langname!': 'Afrikaanse',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
|
'%s %%{row} deleted': '%s rows deleted',
|
||||||
|
'%s %%{row} updated': '%s rows updated',
|
||||||
'(requires internet access)': '(vereis internet toegang)',
|
'(requires internet access)': '(vereis internet toegang)',
|
||||||
'(something like "it-it")': '(iets soos "it-it")',
|
'(something like "it-it")': '(iets soos "it-it")',
|
||||||
'About': 'Oor',
|
'@markmin\x01Searching: **%s** %%{file}': 'Soek: **%s** lêre',
|
||||||
|
'About': 'oor',
|
||||||
'About application': 'Oor program',
|
'About application': 'Oor program',
|
||||||
'Additional code for your application': 'Additionele kode vir u application',
|
'Additional code for your application': 'Additionele kode vir u application',
|
||||||
'Admin language': 'Admin taal',
|
'Admin language': 'Admin taal',
|
||||||
'Application name:': 'Program naam:',
|
'Application name:': 'Program naam:',
|
||||||
|
'Change admin password': 'verander admin wagwoord',
|
||||||
|
'Check for upgrades': 'soek vir upgrades',
|
||||||
|
'Clean': 'maak skoon',
|
||||||
|
'Compile': 'kompileer',
|
||||||
'Controllers': 'Beheerders',
|
'Controllers': 'Beheerders',
|
||||||
|
'Create': 'skep',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'Stuur na Google App Engine toe',
|
'Deploy on Google App Engine': 'Stuur na Google App Engine toe',
|
||||||
|
'Edit': 'wysig',
|
||||||
'Edit application': 'Wysig program',
|
'Edit application': 'Wysig program',
|
||||||
|
'Errors': 'foute',
|
||||||
|
'Help': 'hulp',
|
||||||
|
'Install': 'installeer',
|
||||||
'Installed applications': 'Geinstalleerde apps',
|
'Installed applications': 'Geinstalleerde apps',
|
||||||
'Languages': 'Tale',
|
'Languages': 'Tale',
|
||||||
'License for': 'Lisensie vir',
|
'License for': 'Lisensie vir',
|
||||||
|
'Logout': 'logout',
|
||||||
'Models': 'Modelle',
|
'Models': 'Modelle',
|
||||||
'Modules': 'Modules',
|
'Modules': 'Modules',
|
||||||
'New application wizard': 'Nuwe app wizard',
|
'New application wizard': 'Nuwe app wizard',
|
||||||
'New simple application': 'Nuwe eenvoudige app',
|
'New simple application': 'Nuwe eenvoudige app',
|
||||||
|
'Overwrite installed app': 'skryf oor geinstalleerde program',
|
||||||
|
'Pack all': 'pack alles',
|
||||||
'Plugins': 'Plugins',
|
'Plugins': 'Plugins',
|
||||||
'Powered by': 'Aangedryf deur',
|
'Powered by': 'Aangedryf deur',
|
||||||
'Searching:': 'Soek:',
|
'Site': 'site',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'Static files',
|
'Static files': 'Static files',
|
||||||
'Sure you want to delete this object?': 'Is jy seker jy will hierde object verwyder?',
|
'Sure you want to delete this object?': 'Is jy seker jy will hierde object verwyder?',
|
||||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller',
|
'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller',
|
||||||
@@ -29,54 +48,37 @@
|
|||||||
'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates',
|
'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates',
|
||||||
'There are no plugins': 'Daar is geen plugins',
|
'There are no plugins': 'Daar is geen plugins',
|
||||||
'These files are served without processing, your images go here': 'Hierdie lêre is sonder veranderinge geserved, jou images gaan hier',
|
'These files are served without processing, your images go here': 'Hierdie lêre is sonder veranderinge geserved, jou images gaan hier',
|
||||||
'To create a plugin, name a file/folder plugin_[name]': 'Om ''n plugin te skep, noem ''n lêer/gids plugin_[name]',
|
'To create a plugin, name a file/folder plugin_[name]': 'Om n plugin te skep, noem n lêer/gids plugin_[name]',
|
||||||
'Translation strings for the application': 'Vertaling woorde vir die program',
|
'Translation strings for the application': 'Vertaling woorde vir die program',
|
||||||
|
'Uninstall': 'verwyder',
|
||||||
'Upload & install packed application': 'Oplaai & install gepakte program',
|
'Upload & install packed application': 'Oplaai & install gepakte program',
|
||||||
'Upload a package:': 'Oplaai ''n package:',
|
'Upload a package:': 'Oplaai n package:',
|
||||||
'Use an url:': 'Gebruik n url:',
|
'Use an url:': 'Gebruik n url:',
|
||||||
'Views': 'Views',
|
'Views': 'Views',
|
||||||
'About': 'oor',
|
|
||||||
'administrative interface': 'administrative interface',
|
'administrative interface': 'administrative interface',
|
||||||
'and rename it:': 'en verander die naam:',
|
'and rename it:': 'en verander die naam:',
|
||||||
'Change admin password': 'verander admin wagwoord',
|
|
||||||
'Check for upgrades': 'soek vir upgrades',
|
|
||||||
'Clean': 'maak skoon',
|
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'Compile': 'kompileer',
|
|
||||||
'controllers': 'beheerders',
|
'controllers': 'beheerders',
|
||||||
'Create': 'skep',
|
|
||||||
'create file with filename:': 'skep lêer met naam:',
|
'create file with filename:': 'skep lêer met naam:',
|
||||||
'created by': 'geskep deur',
|
'created by': 'geskep deur',
|
||||||
'crontab': 'crontab',
|
'crontab': 'crontab',
|
||||||
'currently running': 'loop tans',
|
'currently running': 'loop tans',
|
||||||
'database administration': 'database administration',
|
'database administration': 'database administration',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'download layouts': 'aflaai layouts',
|
'download layouts': 'aflaai layouts',
|
||||||
'download plugins': 'aflaai plugins',
|
'download plugins': 'aflaai plugins',
|
||||||
'Edit': 'wysig',
|
|
||||||
'Errors': 'foute',
|
|
||||||
'exposes': 'exposes',
|
'exposes': 'exposes',
|
||||||
'extends': 'extends',
|
'extends': 'extends',
|
||||||
'files': 'lêre',
|
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'hulp',
|
|
||||||
'includes': 'includes',
|
'includes': 'includes',
|
||||||
'Install': 'installeer',
|
|
||||||
'languages': 'tale',
|
'languages': 'tale',
|
||||||
'loading...': 'laai...',
|
'loading...': 'laai...',
|
||||||
'Logout': 'logout',
|
|
||||||
'models': 'modelle',
|
'models': 'modelle',
|
||||||
'modules': 'modules',
|
'modules': 'modules',
|
||||||
'Overwrite installed app': 'skryf oor geinstalleerde program',
|
|
||||||
'Pack all': 'pack alles',
|
|
||||||
'plugins': 'plugins',
|
'plugins': 'plugins',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'Site': 'site',
|
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'static': 'static',
|
'static': 'static',
|
||||||
'test': 'toets',
|
'test': 'toets',
|
||||||
'Uninstall': 'verwyder',
|
|
||||||
'update all languages': 'update all languages',
|
'update all languages': 'update all languages',
|
||||||
'upload': 'oplaai',
|
'upload': 'oplaai',
|
||||||
'upload file:': 'oplaai lêer:',
|
'upload file:': 'oplaai lêer:',
|
||||||
@@ -85,5 +87,3 @@
|
|||||||
'views': 'views',
|
'views': 'views',
|
||||||
'web2py Recent Tweets': 'web2py Onlangse Tweets',
|
'web2py Recent Tweets': 'web2py Onlangse Tweets',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,18 +1,21 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'bg',
|
||||||
|
'!langname!': 'Български',
|
||||||
'"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',
|
'"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': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s записите бяха изтрити',
|
'%s %%{row} deleted': '%s записите бяха изтрити',
|
||||||
'%s rows updated': '%s записите бяха обновени',
|
'%s %%{row} updated': '%s записите бяха обновени',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(something like "it-it")',
|
'(something like "it-it")': '(something like "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': 'A new version of web2py is available',
|
'A new version of web2py is available': 'A new version of web2py is available',
|
||||||
'A new version of web2py is available: %s': 'A new version of web2py is available: %s',
|
'A new version of web2py is available: %s': 'A new version of web2py is available: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.',
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.',
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.',
|
||||||
'ATTENTION: you cannot edit the running application!': 'ATTENTION: you cannot edit the running application!',
|
'ATTENTION: you cannot edit the running application!': 'ATTENTION: you cannot edit the running application!',
|
||||||
'About': 'About',
|
'About': 'about',
|
||||||
'About application': 'About application',
|
'About application': 'About application',
|
||||||
'Additional code for your application': 'Additional code for your application',
|
'Additional code for your application': 'Additional code for your application',
|
||||||
'Admin is disabled because insecure channel': 'Admin is disabled because insecure channel',
|
'Admin is disabled because insecure channel': 'Admin is disabled because insecure channel',
|
||||||
@@ -22,6 +25,7 @@
|
|||||||
'Application name:': 'Application name:',
|
'Application name:': 'Application name:',
|
||||||
'Are you sure you want to delete file "%s"?': 'Are you sure you want to delete file "%s"?',
|
'Are you sure you want to delete file "%s"?': 'Are you sure you want to delete file "%s"?',
|
||||||
'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?',
|
'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?',
|
||||||
|
'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?',
|
||||||
'Are you sure you want to uninstall application "%s"': 'Are you sure you want to uninstall application "%s"',
|
'Are you sure you want to uninstall application "%s"': 'Are you sure you want to uninstall application "%s"',
|
||||||
'Are you sure you want to uninstall application "%s"?': 'Are you sure you want to uninstall application "%s"?',
|
'Are you sure you want to uninstall application "%s"?': 'Are you sure you want to uninstall application "%s"?',
|
||||||
'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?',
|
'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?',
|
||||||
@@ -29,20 +33,30 @@
|
|||||||
'Cannot be empty': 'Cannot be empty',
|
'Cannot be empty': 'Cannot be empty',
|
||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.',
|
||||||
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
||||||
|
'Change admin password': 'change admin password',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': 'Check to delete',
|
'Check to delete': 'Check to delete',
|
||||||
'Checking for upgrades...': 'Checking for upgrades...',
|
'Checking for upgrades...': 'Checking for upgrades...',
|
||||||
|
'Clean': 'clean',
|
||||||
|
'Compile': 'compile',
|
||||||
'Controllers': 'Controllers',
|
'Controllers': 'Controllers',
|
||||||
|
'Create': 'create',
|
||||||
'Create new simple application': 'Create new simple application',
|
'Create new simple application': 'Create new simple application',
|
||||||
'Current request': 'Current request',
|
'Current request': 'Current request',
|
||||||
'Current response': 'Current response',
|
'Current response': 'Current response',
|
||||||
'Current session': 'Current session',
|
'Current session': 'Current session',
|
||||||
'DESIGN': 'DESIGN',
|
'DESIGN': 'DESIGN',
|
||||||
'Date and Time': 'Date and Time',
|
'Date and Time': 'Date and Time',
|
||||||
|
'Debug': 'Debug',
|
||||||
'Delete': 'Delete',
|
'Delete': 'Delete',
|
||||||
'Delete:': 'Delete:',
|
'Delete:': 'Delete:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'Deploy on Google App Engine',
|
'Deploy on Google App Engine': 'Deploy on Google App Engine',
|
||||||
|
'Deploy to OpenShift': 'Deploy to OpenShift',
|
||||||
'Design for': 'Design for',
|
'Design for': 'Design for',
|
||||||
|
'Disable': 'Disable',
|
||||||
'EDIT': 'EDIT',
|
'EDIT': 'EDIT',
|
||||||
|
'Edit': 'edit',
|
||||||
'Edit application': 'Edit application',
|
'Edit application': 'Edit application',
|
||||||
'Edit current record': 'Edit current record',
|
'Edit current record': 'Edit current record',
|
||||||
'Editing Language file': 'Editing Language file',
|
'Editing Language file': 'Editing Language file',
|
||||||
@@ -50,11 +64,15 @@
|
|||||||
'Editing file "%s"': 'Editing file "%s"',
|
'Editing file "%s"': 'Editing file "%s"',
|
||||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||||
'Error logs for "%(app)s"': 'Error logs for "%(app)s"',
|
'Error logs for "%(app)s"': 'Error logs for "%(app)s"',
|
||||||
|
'Errors': 'errors',
|
||||||
'Exception instance attributes': 'Exception instance attributes',
|
'Exception instance attributes': 'Exception instance attributes',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'Functions with no doctests will result in [passed] tests.',
|
'Functions with no doctests will result in [passed] tests.': 'Functions with no doctests will result in [passed] tests.',
|
||||||
|
'Get from URL:': 'Get from URL:',
|
||||||
'Hello World': 'Здравей, свят',
|
'Hello World': 'Здравей, свят',
|
||||||
|
'Help': 'help',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||||
'Import/Export': 'Import/Export',
|
'Import/Export': 'Import/Export',
|
||||||
|
'Install': 'install',
|
||||||
'Installed applications': 'Installed applications',
|
'Installed applications': 'Installed applications',
|
||||||
'Internal State': 'Internal State',
|
'Internal State': 'Internal State',
|
||||||
'Invalid Query': 'Невалидна заявка',
|
'Invalid Query': 'Невалидна заявка',
|
||||||
@@ -65,6 +83,7 @@
|
|||||||
'License for': 'License for',
|
'License for': 'License for',
|
||||||
'Login': 'Login',
|
'Login': 'Login',
|
||||||
'Login to the Administrative Interface': 'Login to the Administrative Interface',
|
'Login to the Administrative Interface': 'Login to the Administrative Interface',
|
||||||
|
'Logout': 'logout',
|
||||||
'Models': 'Models',
|
'Models': 'Models',
|
||||||
'Modules': 'Modules',
|
'Modules': 'Modules',
|
||||||
'NO': 'NO',
|
'NO': 'NO',
|
||||||
@@ -73,17 +92,24 @@
|
|||||||
'New simple application': 'New simple application',
|
'New simple application': 'New simple application',
|
||||||
'No databases in this application': 'No databases in this application',
|
'No databases in this application': 'No databases in this application',
|
||||||
'Original/Translation': 'Original/Translation',
|
'Original/Translation': 'Original/Translation',
|
||||||
|
'Overwrite installed app': 'overwrite installed app',
|
||||||
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
||||||
|
'Pack all': 'pack all',
|
||||||
|
'Pack compiled': 'pack compiled',
|
||||||
'Peeking at file': 'Peeking at file',
|
'Peeking at file': 'Peeking at file',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" in application',
|
'Plugin "%s" in application': 'Plugin "%s" in application',
|
||||||
'Plugins': 'Plugins',
|
'Plugins': 'Plugins',
|
||||||
'Powered by': 'Powered by',
|
'Powered by': 'Powered by',
|
||||||
'Query:': 'Query:',
|
'Query:': 'Query:',
|
||||||
|
'Reload routes': 'Reload routes',
|
||||||
|
'Remove compiled': 'remove compiled',
|
||||||
'Resolve Conflict file': 'Resolve Conflict file',
|
'Resolve Conflict file': 'Resolve Conflict file',
|
||||||
'Rows in table': 'Rows in table',
|
'Rows in table': 'Rows in table',
|
||||||
'Rows selected': 'Rows selected',
|
'Rows selected': 'Rows selected',
|
||||||
|
'Running on %s': 'Running on %s',
|
||||||
'Saved file hash:': 'Saved file hash:',
|
'Saved file hash:': 'Saved file hash:',
|
||||||
'Searching:': 'Searching:',
|
'Site': 'site',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'Static files',
|
'Static files': 'Static files',
|
||||||
'Sure you want to delete this object?': 'Сигурен ли си, че искаш да изтриеш този обект?',
|
'Sure you want to delete this object?': 'Сигурен ли си, че искаш да изтриеш този обект?',
|
||||||
'TM': 'TM',
|
'TM': 'TM',
|
||||||
@@ -108,17 +134,19 @@
|
|||||||
'Unable to download': 'Unable to download',
|
'Unable to download': 'Unable to download',
|
||||||
'Unable to download app because:': 'Unable to download app because:',
|
'Unable to download app because:': 'Unable to download app because:',
|
||||||
'Unable to download because': 'Unable to download because',
|
'Unable to download because': 'Unable to download because',
|
||||||
|
'Uninstall': 'uninstall',
|
||||||
'Update:': 'Update:',
|
'Update:': 'Update:',
|
||||||
'Upload & install packed application': 'Upload & install packed application',
|
'Upload & install packed application': 'Upload & install packed application',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
|
'Upload and install packed application': 'Upload and install packed application',
|
||||||
'Upload existing application': 'Upload existing application',
|
'Upload existing application': 'Upload existing application',
|
||||||
'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.',
|
||||||
'Use an url:': 'Use an url:',
|
'Use an url:': 'Use an url:',
|
||||||
'Version': 'Version',
|
'Version': 'Version',
|
||||||
'Views': 'Views',
|
'Views': 'Views',
|
||||||
|
'Web Framework': 'Web Framework',
|
||||||
'Welcome to web2py': 'Добре дошъл в web2py',
|
'Welcome to web2py': 'Добре дошъл в web2py',
|
||||||
'YES': 'YES',
|
'YES': 'YES',
|
||||||
'About': 'about',
|
|
||||||
'additional code for your application': 'additional code for your application',
|
'additional code for your application': 'additional code for your application',
|
||||||
'admin disabled because no admin password': 'admin disabled because no admin password',
|
'admin disabled because no admin password': 'admin disabled because no admin password',
|
||||||
'admin disabled because not supported on google app engine': 'admin disabled because not supported on google apps engine',
|
'admin disabled because not supported on google app engine': 'admin disabled because not supported on google apps engine',
|
||||||
@@ -137,19 +165,14 @@
|
|||||||
'cache, errors and sessions cleaned': 'cache, errors and sessions cleaned',
|
'cache, errors and sessions cleaned': 'cache, errors and sessions cleaned',
|
||||||
'cannot create file': 'cannot create file',
|
'cannot create file': 'cannot create file',
|
||||||
'cannot upload file "%(filename)s"': 'cannot upload file "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'cannot upload file "%(filename)s"',
|
||||||
'Change admin password': 'change admin password',
|
|
||||||
'check all': 'check all',
|
'check all': 'check all',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': 'clean',
|
|
||||||
'click here for online examples': 'щракни тук за онлайн примери',
|
'click here for online examples': 'щракни тук за онлайн примери',
|
||||||
'click here for the administrative interface': 'щракни тук за административния интерфейс',
|
'click here for the administrative interface': 'щракни тук за административния интерфейс',
|
||||||
'click to check for upgrades': 'click to check for upgrades',
|
'click to check for upgrades': 'click to check for upgrades',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'Compile': 'compile',
|
|
||||||
'compiled application removed': 'compiled application removed',
|
'compiled application removed': 'compiled application removed',
|
||||||
'controllers': 'controllers',
|
'controllers': 'controllers',
|
||||||
'Create': 'create',
|
|
||||||
'create file with filename:': 'create file with filename:',
|
'create file with filename:': 'create file with filename:',
|
||||||
'create new application:': 'create new application:',
|
'create new application:': 'create new application:',
|
||||||
'created by': 'created by',
|
'created by': 'created by',
|
||||||
@@ -165,16 +188,13 @@
|
|||||||
'delete': 'delete',
|
'delete': 'delete',
|
||||||
'delete all checked': 'delete all checked',
|
'delete all checked': 'delete all checked',
|
||||||
'delete plugin': 'delete plugin',
|
'delete plugin': 'delete plugin',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': 'дизайн',
|
'design': 'дизайн',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'done!': 'готово!',
|
'done!': 'готово!',
|
||||||
'download layouts': 'download layouts',
|
'download layouts': 'download layouts',
|
||||||
'download plugins': 'download plugins',
|
'download plugins': 'download plugins',
|
||||||
'Edit': 'edit',
|
|
||||||
'edit controller': 'edit controller',
|
'edit controller': 'edit controller',
|
||||||
'edit views:': 'edit views:',
|
'edit views:': 'edit views:',
|
||||||
'Errors': 'errors',
|
|
||||||
'export as csv file': 'export as csv file',
|
'export as csv file': 'export as csv file',
|
||||||
'exposes': 'exposes',
|
'exposes': 'exposes',
|
||||||
'extends': 'extends',
|
'extends': 'extends',
|
||||||
@@ -189,14 +209,11 @@
|
|||||||
'file does not exist': 'file does not exist',
|
'file does not exist': 'file does not exist',
|
||||||
'file saved on %(time)s': 'file saved on %(time)s',
|
'file saved on %(time)s': 'file saved on %(time)s',
|
||||||
'file saved on %s': 'file saved on %s',
|
'file saved on %s': 'file saved on %s',
|
||||||
'files': 'files',
|
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'help',
|
|
||||||
'htmledit': 'htmledit',
|
'htmledit': 'htmledit',
|
||||||
'includes': 'includes',
|
'includes': 'includes',
|
||||||
'insert new': 'insert new',
|
'insert new': 'insert new',
|
||||||
'insert new %s': 'insert new %s',
|
'insert new %s': 'insert new %s',
|
||||||
'Install': 'install',
|
|
||||||
'internal error': 'internal error',
|
'internal error': 'internal error',
|
||||||
'invalid password': 'invalid password',
|
'invalid password': 'invalid password',
|
||||||
'invalid request': 'невалидна заявка',
|
'invalid request': 'невалидна заявка',
|
||||||
@@ -206,7 +223,6 @@
|
|||||||
'languages updated': 'languages updated',
|
'languages updated': 'languages updated',
|
||||||
'loading...': 'loading...',
|
'loading...': 'loading...',
|
||||||
'login': 'login',
|
'login': 'login',
|
||||||
'Logout': 'logout',
|
|
||||||
'merge': 'merge',
|
'merge': 'merge',
|
||||||
'models': 'models',
|
'models': 'models',
|
||||||
'modules': 'modules',
|
'modules': 'modules',
|
||||||
@@ -218,9 +234,6 @@
|
|||||||
'or import from csv file': 'or import from csv file',
|
'or import from csv file': 'or import from csv file',
|
||||||
'or provide app url:': 'or provide app url:',
|
'or provide app url:': 'or provide app url:',
|
||||||
'or provide application url:': 'or provide application url:',
|
'or provide application url:': 'or provide application url:',
|
||||||
'Overwrite installed app': 'overwrite installed app',
|
|
||||||
'Pack all': 'pack all',
|
|
||||||
'Pack compiled': 'pack compiled',
|
|
||||||
'pack plugin': 'pack plugin',
|
'pack plugin': 'pack plugin',
|
||||||
'password changed': 'password changed',
|
'password changed': 'password changed',
|
||||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted',
|
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted',
|
||||||
@@ -229,16 +242,13 @@
|
|||||||
'record': 'record',
|
'record': 'record',
|
||||||
'record does not exist': 'записът не съществува',
|
'record does not exist': 'записът не съществува',
|
||||||
'record id': 'record id',
|
'record id': 'record id',
|
||||||
'Remove compiled': 'remove compiled',
|
|
||||||
'restore': 'restore',
|
'restore': 'restore',
|
||||||
'revert': 'revert',
|
'revert': 'revert',
|
||||||
'save': 'save',
|
'save': 'save',
|
||||||
'selected': 'selected',
|
'selected': 'selected',
|
||||||
'session expired': 'session expired',
|
'session expired': 'session expired',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'Site': 'site',
|
|
||||||
'some files could not be removed': 'some files could not be removed',
|
'some files could not be removed': 'some files could not be removed',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': 'състояние',
|
'state': 'състояние',
|
||||||
'static': 'static',
|
'static': 'static',
|
||||||
'submit': 'submit',
|
'submit': 'submit',
|
||||||
@@ -259,7 +269,6 @@
|
|||||||
'unable to uninstall "%s"': 'unable to uninstall "%s"',
|
'unable to uninstall "%s"': 'unable to uninstall "%s"',
|
||||||
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
||||||
'uncheck all': 'uncheck all',
|
'uncheck all': 'uncheck all',
|
||||||
'Uninstall': 'uninstall',
|
|
||||||
'update': 'update',
|
'update': 'update',
|
||||||
'update all languages': 'update all languages',
|
'update all languages': 'update all languages',
|
||||||
'upgrade web2py now': 'upgrade web2py now',
|
'upgrade web2py now': 'upgrade web2py now',
|
||||||
@@ -275,5 +284,3 @@
|
|||||||
'web2py is up to date': 'web2py is up to date',
|
'web2py is up to date': 'web2py is up to date',
|
||||||
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'de',
|
||||||
|
'!langname!': 'Deutsch',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Update" ist ein optionaler Ausdruck wie "Feld1 = \'newvalue". JOIN Ergebnisse können nicht aktualisiert oder gelöscht werden',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Update" ist ein optionaler Ausdruck wie "Feld1 = \'newvalue". JOIN Ergebnisse können nicht aktualisiert oder gelöscht werden',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s Zeilen gelöscht',
|
'%s %%{row} deleted': '%s Zeilen gelöscht',
|
||||||
'%s rows updated': '%s Zeilen aktualisiert',
|
'%s %%{row} updated': '%s Zeilen aktualisiert',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(so etwas wie "it-it")',
|
'(something like "it-it")': '(so etwas wie "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': 'Eine neue Version von web2py ist verfügbar',
|
'A new version of web2py is available': 'Eine neue Version von web2py ist verfügbar',
|
||||||
'A new version of web2py is available: %s': 'Eine neue Version von web2py ist verfügbar: %s',
|
'A new version of web2py is available: %s': 'Eine neue Version von web2py ist verfügbar: %s',
|
||||||
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Eine neue Version von web2py ist verfügbar: Version 1.85.3 (2010-09-18 07:07:46)\n',
|
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Eine neue Version von web2py ist verfügbar: Version 1.85.3 (2010-09-18 07:07:46)\n',
|
||||||
@@ -32,12 +35,17 @@
|
|||||||
'Cannot be empty': 'Darf nicht leer sein',
|
'Cannot be empty': 'Darf nicht leer sein',
|
||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nicht Kompilierbar:Es sind Fehler in der Anwendung. Beseitigen Sie die Fehler und versuchen Sie es erneut.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nicht Kompilierbar:Es sind Fehler in der Anwendung. Beseitigen Sie die Fehler und versuchen Sie es erneut.',
|
||||||
'Change Password': 'Passwort ändern',
|
'Change Password': 'Passwort ändern',
|
||||||
|
'Change admin password': 'Administrator-Passwort ändern',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': 'Markiere zum löschen',
|
'Check to delete': 'Markiere zum löschen',
|
||||||
'Checking for upgrades...': 'Auf Updates überprüfen...',
|
'Checking for upgrades...': 'Auf Updates überprüfen...',
|
||||||
|
'Clean': 'löschen',
|
||||||
'Client IP': 'Client IP',
|
'Client IP': 'Client IP',
|
||||||
|
'Compile': 'kompilieren',
|
||||||
'Controller': 'Controller',
|
'Controller': 'Controller',
|
||||||
'Controllers': 'Controller',
|
'Controllers': 'Controller',
|
||||||
'Copyright': 'Urheberrecht',
|
'Copyright': 'Urheberrecht',
|
||||||
|
'Create': 'erstellen',
|
||||||
'Create new simple application': 'Erzeuge neue Anwendung',
|
'Create new simple application': 'Erzeuge neue Anwendung',
|
||||||
'Current request': 'Aktuelle Anfrage (request)',
|
'Current request': 'Aktuelle Anfrage (request)',
|
||||||
'Current response': 'Aktuelle Antwort (response)',
|
'Current response': 'Aktuelle Antwort (response)',
|
||||||
@@ -48,12 +56,13 @@
|
|||||||
'Date and Time': 'Datum und Uhrzeit',
|
'Date and Time': 'Datum und Uhrzeit',
|
||||||
'Delete': 'Löschen',
|
'Delete': 'Löschen',
|
||||||
'Delete:': 'Löschen:',
|
'Delete:': 'Löschen:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'Auf Google App Engine installieren',
|
'Deploy on Google App Engine': 'Auf Google App Engine installieren',
|
||||||
'Description': 'Beschreibung',
|
'Description': 'Beschreibung',
|
||||||
'Design for': 'Design für',
|
'Design for': 'Design für',
|
||||||
'E-mail': 'E-mail',
|
'E-mail': 'E-mail',
|
||||||
'EDIT': 'BEARBEITEN',
|
'EDIT': 'BEARBEITEN',
|
||||||
'Edit': 'Bearbeiten',
|
'Edit': 'bearbeiten',
|
||||||
'Edit Profile': 'Bearbeite Profil',
|
'Edit Profile': 'Bearbeite Profil',
|
||||||
'Edit This App': 'Bearbeite diese Anwendung',
|
'Edit This App': 'Bearbeite diese Anwendung',
|
||||||
'Edit application': 'Bearbeite Anwendung',
|
'Edit application': 'Bearbeite Anwendung',
|
||||||
@@ -63,6 +72,7 @@
|
|||||||
'Editing file "%s"': 'Bearbeite Datei "%s"',
|
'Editing file "%s"': 'Bearbeite Datei "%s"',
|
||||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||||
'Error logs for "%(app)s"': 'Fehlerprotokoll für "%(app)s"',
|
'Error logs for "%(app)s"': 'Fehlerprotokoll für "%(app)s"',
|
||||||
|
'Errors': 'Fehler',
|
||||||
'Exception instance attributes': 'Atribute der Ausnahmeinstanz',
|
'Exception instance attributes': 'Atribute der Ausnahmeinstanz',
|
||||||
'Expand Abbreviation': 'Kürzel erweitern',
|
'Expand Abbreviation': 'Kürzel erweitern',
|
||||||
'First name': 'Vorname',
|
'First name': 'Vorname',
|
||||||
@@ -70,11 +80,13 @@
|
|||||||
'Go to Matching Pair': 'gehe zum übereinstimmenden Paar',
|
'Go to Matching Pair': 'gehe zum übereinstimmenden Paar',
|
||||||
'Group ID': 'Gruppen ID',
|
'Group ID': 'Gruppen ID',
|
||||||
'Hello World': 'Hallo Welt',
|
'Hello World': 'Hallo Welt',
|
||||||
|
'Help': 'Hilfe',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Falls der obere Test eine Fehler-Ticketnummer enthält deutet das auf einen Fehler in der Ausführung des Controllers hin, noch bevor der Doctest ausgeführt werden konnte. Gewöhnlich führen fehlerhafte Einrückungen oder fehlerhafter Code ausserhalb der Funktion zu solchen Fehlern. Ein grüner Titel deutet darauf hin, dass alle Test(wenn sie vorhanden sind) erfolgreich durchlaufen wurden. In diesem Fall werden die Testresultate nicht angezeigt.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Falls der obere Test eine Fehler-Ticketnummer enthält deutet das auf einen Fehler in der Ausführung des Controllers hin, noch bevor der Doctest ausgeführt werden konnte. Gewöhnlich führen fehlerhafte Einrückungen oder fehlerhafter Code ausserhalb der Funktion zu solchen Fehlern. Ein grüner Titel deutet darauf hin, dass alle Test(wenn sie vorhanden sind) erfolgreich durchlaufen wurden. In diesem Fall werden die Testresultate nicht angezeigt.',
|
||||||
'If you answer "yes", be patient, it may take a while to download': '',
|
'If you answer "yes", be patient, it may take a while to download': '',
|
||||||
'If you answer yes, be patient, it may take a while to download': 'If you answer yes, be patient, it may take a while to download',
|
'If you answer yes, be patient, it may take a while to download': 'If you answer yes, be patient, it may take a while to download',
|
||||||
'Import/Export': 'Importieren/Exportieren',
|
'Import/Export': 'Importieren/Exportieren',
|
||||||
'Index': 'Index',
|
'Index': 'Index',
|
||||||
|
'Install': 'installieren',
|
||||||
'Installed applications': 'Installierte Anwendungen',
|
'Installed applications': 'Installierte Anwendungen',
|
||||||
'Internal State': 'interner Status',
|
'Internal State': 'interner Status',
|
||||||
'Invalid Query': 'Ungültige Abfrage',
|
'Invalid Query': 'Ungültige Abfrage',
|
||||||
@@ -90,7 +102,7 @@
|
|||||||
'License for': 'Lizenz für',
|
'License for': 'Lizenz für',
|
||||||
'Login': 'Anmelden',
|
'Login': 'Anmelden',
|
||||||
'Login to the Administrative Interface': 'An das Administrations-Interface anmelden',
|
'Login to the Administrative Interface': 'An das Administrations-Interface anmelden',
|
||||||
'Logout': 'Abmeldung',
|
'Logout': 'abmelden',
|
||||||
'Lost Password': 'Passwort vergessen',
|
'Lost Password': 'Passwort vergessen',
|
||||||
'Main Menu': 'Menú principal',
|
'Main Menu': 'Menú principal',
|
||||||
'Match Pair': 'Paare finden',
|
'Match Pair': 'Paare finden',
|
||||||
@@ -107,6 +119,9 @@
|
|||||||
'No databases in this application': 'Keine Datenbank in dieser Anwendung',
|
'No databases in this application': 'Keine Datenbank in dieser Anwendung',
|
||||||
'Origin': 'Herkunft',
|
'Origin': 'Herkunft',
|
||||||
'Original/Translation': 'Original/Übersetzung',
|
'Original/Translation': 'Original/Übersetzung',
|
||||||
|
'Overwrite installed app': 'installierte Anwendungen überschreiben',
|
||||||
|
'Pack all': 'verpacke alles',
|
||||||
|
'Pack compiled': 'Verpacke kompiliert',
|
||||||
'Password': 'Passwort',
|
'Password': 'Passwort',
|
||||||
'Peeking at file': 'Dateiansicht',
|
'Peeking at file': 'Dateiansicht',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" in Anwendung',
|
'Plugin "%s" in application': 'Plugin "%s" in Anwendung',
|
||||||
@@ -117,6 +132,7 @@
|
|||||||
'Record ID': 'Datensatz ID',
|
'Record ID': 'Datensatz ID',
|
||||||
'Register': 'registrieren',
|
'Register': 'registrieren',
|
||||||
'Registration key': 'Registrierungsschlüssel',
|
'Registration key': 'Registrierungsschlüssel',
|
||||||
|
'Remove compiled': 'kompilat gelöscht',
|
||||||
'Reset Password key': 'Passwortschlüssel zurücksetzen',
|
'Reset Password key': 'Passwortschlüssel zurücksetzen',
|
||||||
'Resolve Conflict file': 'bereinige Konflikt-Datei',
|
'Resolve Conflict file': 'bereinige Konflikt-Datei',
|
||||||
'Role': 'Rolle',
|
'Role': 'Rolle',
|
||||||
@@ -124,7 +140,8 @@
|
|||||||
'Rows selected': 'Zeilen ausgewählt',
|
'Rows selected': 'Zeilen ausgewählt',
|
||||||
'Save via Ajax': 'via Ajax sichern',
|
'Save via Ajax': 'via Ajax sichern',
|
||||||
'Saved file hash:': 'Gespeicherter Datei-Hash:',
|
'Saved file hash:': 'Gespeicherter Datei-Hash:',
|
||||||
'Searching:': 'Searching:',
|
'Site': 'Seite',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'statische Dateien',
|
'Static files': 'statische Dateien',
|
||||||
'Stylesheet': 'Stylesheet',
|
'Stylesheet': 'Stylesheet',
|
||||||
'Sure you want to delete this object?': 'Wollen Sie das Objekt wirklich löschen?',
|
'Sure you want to delete this object?': 'Wollen Sie das Objekt wirklich löschen?',
|
||||||
@@ -154,6 +171,7 @@
|
|||||||
'Unable to check for upgrades': 'überprüfen von Upgrades nicht möglich',
|
'Unable to check for upgrades': 'überprüfen von Upgrades nicht möglich',
|
||||||
'Unable to download': 'herunterladen nicht möglich',
|
'Unable to download': 'herunterladen nicht möglich',
|
||||||
'Unable to download app': 'herunterladen der Anwendung nicht möglich',
|
'Unable to download app': 'herunterladen der Anwendung nicht möglich',
|
||||||
|
'Uninstall': 'deinstallieren',
|
||||||
'Update:': 'Aktualisiere:',
|
'Update:': 'Aktualisiere:',
|
||||||
'Upload & install packed application': 'Verpackte Anwendung hochladen und installieren',
|
'Upload & install packed application': 'Verpackte Anwendung hochladen und installieren',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
@@ -172,7 +190,6 @@
|
|||||||
'You are successfully running web2py': 'web2by wird erfolgreich ausgeführt',
|
'You are successfully running web2py': 'web2by wird erfolgreich ausgeführt',
|
||||||
'You can modify this application and adapt it to your needs': 'Sie können diese Anwendung verändern und Ihren Bedürfnissen anpassen',
|
'You can modify this application and adapt it to your needs': 'Sie können diese Anwendung verändern und Ihren Bedürfnissen anpassen',
|
||||||
'You visited the url': 'Sie besuchten die URL',
|
'You visited the url': 'Sie besuchten die URL',
|
||||||
'About': 'Über',
|
|
||||||
'additional code for your application': 'zusätzlicher Code für Ihre Anwendung',
|
'additional code for your application': 'zusätzlicher Code für Ihre Anwendung',
|
||||||
'admin disabled because no admin password': ' admin ist deaktiviert, weil kein Admin-Passwort gesetzt ist',
|
'admin disabled because no admin password': ' admin ist deaktiviert, weil kein Admin-Passwort gesetzt ist',
|
||||||
'admin disabled because not supported on google apps engine': 'admin ist deaktiviert, es existiert dafür keine Unterstützung auf der google apps engine',
|
'admin disabled because not supported on google apps engine': 'admin ist deaktiviert, es existiert dafür keine Unterstützung auf der google apps engine',
|
||||||
@@ -193,20 +210,15 @@
|
|||||||
'call': 'call',
|
'call': 'call',
|
||||||
'cannot create file': 'Kann Datei nicht erstellen',
|
'cannot create file': 'Kann Datei nicht erstellen',
|
||||||
'cannot upload file "%(filename)s"': 'Kann Datei nicht Hochladen "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'Kann Datei nicht Hochladen "%(filename)s"',
|
||||||
'Change admin password': 'Administrator-Passwort ändern',
|
|
||||||
'change password': 'Passwort ändern',
|
'change password': 'Passwort ändern',
|
||||||
'check all': 'alles auswählen',
|
'check all': 'alles auswählen',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': 'löschen',
|
|
||||||
'click here for online examples': 'hier klicken für online Beispiele',
|
'click here for online examples': 'hier klicken für online Beispiele',
|
||||||
'click here for the administrative interface': 'hier klicken für die Administrationsoberfläche ',
|
'click here for the administrative interface': 'hier klicken für die Administrationsoberfläche ',
|
||||||
'click to check for upgrades': 'hier klicken um nach Upgrades zu suchen',
|
'click to check for upgrades': 'hier klicken um nach Upgrades zu suchen',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'Compile': 'kompilieren',
|
|
||||||
'compiled application removed': 'kompilierte Anwendung gelöscht',
|
'compiled application removed': 'kompilierte Anwendung gelöscht',
|
||||||
'controllers': 'Controllers',
|
'controllers': 'Controllers',
|
||||||
'Create': 'erstellen',
|
|
||||||
'create file with filename:': 'erzeuge Datei mit Dateinamen:',
|
'create file with filename:': 'erzeuge Datei mit Dateinamen:',
|
||||||
'create new application:': 'erzeuge neue Anwendung:',
|
'create new application:': 'erzeuge neue Anwendung:',
|
||||||
'created by': 'created by',
|
'created by': 'created by',
|
||||||
@@ -223,18 +235,15 @@
|
|||||||
'delete': 'löschen',
|
'delete': 'löschen',
|
||||||
'delete all checked': 'lösche alle markierten',
|
'delete all checked': 'lösche alle markierten',
|
||||||
'delete plugin': 'Plugin löschen',
|
'delete plugin': 'Plugin löschen',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': 'design',
|
'design': 'design',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'documentation': 'Dokumentation',
|
'documentation': 'Dokumentation',
|
||||||
'done!': 'fertig!',
|
'done!': 'fertig!',
|
||||||
'download layouts': 'download layouts',
|
'download layouts': 'download layouts',
|
||||||
'download plugins': 'download plugins',
|
'download plugins': 'download plugins',
|
||||||
'Edit': 'bearbeiten',
|
|
||||||
'edit controller': 'Bearbeite Controller',
|
'edit controller': 'Bearbeite Controller',
|
||||||
'edit profile': 'bearbeite Profil',
|
'edit profile': 'bearbeite Profil',
|
||||||
'edit views:': 'Views bearbeiten:',
|
'edit views:': 'Views bearbeiten:',
|
||||||
'Errors': 'Fehler',
|
|
||||||
'escape': 'escape',
|
'escape': 'escape',
|
||||||
'export as csv file': 'Exportieren als CSV-Datei',
|
'export as csv file': 'Exportieren als CSV-Datei',
|
||||||
'exposes': 'stellt zur Verfügung',
|
'exposes': 'stellt zur Verfügung',
|
||||||
@@ -249,15 +258,12 @@
|
|||||||
'file does not exist': 'Datei existiert nicht',
|
'file does not exist': 'Datei existiert nicht',
|
||||||
'file saved on %(time)s': 'Datei gespeichert am %(time)s',
|
'file saved on %(time)s': 'Datei gespeichert am %(time)s',
|
||||||
'file saved on %s': 'Datei gespeichert auf %s',
|
'file saved on %s': 'Datei gespeichert auf %s',
|
||||||
'files': 'files',
|
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'Hilfe',
|
|
||||||
'htmledit': 'htmledit',
|
'htmledit': 'htmledit',
|
||||||
'includes': 'Einfügen',
|
'includes': 'Einfügen',
|
||||||
'index': 'index',
|
'index': 'index',
|
||||||
'insert new': 'neu einfügen',
|
'insert new': 'neu einfügen',
|
||||||
'insert new %s': 'neu einfügen %s',
|
'insert new %s': 'neu einfügen %s',
|
||||||
'Install': 'installieren',
|
|
||||||
'internal error': 'interner Fehler',
|
'internal error': 'interner Fehler',
|
||||||
'invalid password': 'Ungültiges Passwort',
|
'invalid password': 'Ungültiges Passwort',
|
||||||
'invalid request': 'ungültige Anfrage',
|
'invalid request': 'ungültige Anfrage',
|
||||||
@@ -268,7 +274,6 @@
|
|||||||
'loading...': 'lade...',
|
'loading...': 'lade...',
|
||||||
'located in the file': 'located in Datei',
|
'located in the file': 'located in Datei',
|
||||||
'login': 'anmelden',
|
'login': 'anmelden',
|
||||||
'Logout': 'abmelden',
|
|
||||||
'lost password?': 'Passwort vergessen?',
|
'lost password?': 'Passwort vergessen?',
|
||||||
'merge': 'verbinden',
|
'merge': 'verbinden',
|
||||||
'models': 'Modelle',
|
'models': 'Modelle',
|
||||||
@@ -279,9 +284,6 @@
|
|||||||
'or import from csv file': 'oder importieren von cvs Datei',
|
'or import from csv file': 'oder importieren von cvs Datei',
|
||||||
'or provide app url:': 'oder geben Sie eine Anwendungs-URL an:',
|
'or provide app url:': 'oder geben Sie eine Anwendungs-URL an:',
|
||||||
'or provide application url:': 'oder geben Sie eine Anwendungs-URL an:',
|
'or provide application url:': 'oder geben Sie eine Anwendungs-URL an:',
|
||||||
'Overwrite installed app': 'installierte Anwendungen überschreiben',
|
|
||||||
'Pack all': 'verpacke alles',
|
|
||||||
'Pack compiled': 'Verpacke kompiliert',
|
|
||||||
'pack plugin': 'Plugin verpacken',
|
'pack plugin': 'Plugin verpacken',
|
||||||
'please wait!': 'bitte warten!',
|
'please wait!': 'bitte warten!',
|
||||||
'plugins': 'plugins',
|
'plugins': 'plugins',
|
||||||
@@ -290,16 +292,13 @@
|
|||||||
'record does not exist': 'Datensatz existiert nicht',
|
'record does not exist': 'Datensatz existiert nicht',
|
||||||
'record id': 'Datensatz id',
|
'record id': 'Datensatz id',
|
||||||
'register': 'Registrierung',
|
'register': 'Registrierung',
|
||||||
'Remove compiled': 'kompilat gelöscht',
|
|
||||||
'restore': 'wiederherstellen',
|
'restore': 'wiederherstellen',
|
||||||
'revert': 'zurückkehren',
|
'revert': 'zurückkehren',
|
||||||
'save': 'sichern',
|
'save': 'sichern',
|
||||||
'selected': 'ausgewählt(e)',
|
'selected': 'ausgewählt(e)',
|
||||||
'session expired': 'Sitzung Abgelaufen',
|
'session expired': 'Sitzung Abgelaufen',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'Site': 'Seite',
|
|
||||||
'some files could not be removed': 'einige Dateien konnten nicht gelöscht werden',
|
'some files could not be removed': 'einige Dateien konnten nicht gelöscht werden',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': 'Status',
|
'state': 'Status',
|
||||||
'static': 'statische Dateien',
|
'static': 'statische Dateien',
|
||||||
'submit': 'Absenden',
|
'submit': 'Absenden',
|
||||||
@@ -322,7 +321,6 @@
|
|||||||
'unable to parse csv file': 'analysieren der cvs Datei nicht möglich',
|
'unable to parse csv file': 'analysieren der cvs Datei nicht möglich',
|
||||||
'unable to uninstall "%s"': 'deinstallieren von "%s" nicht möglich',
|
'unable to uninstall "%s"': 'deinstallieren von "%s" nicht möglich',
|
||||||
'uncheck all': 'alles demarkieren',
|
'uncheck all': 'alles demarkieren',
|
||||||
'Uninstall': 'deinstallieren',
|
|
||||||
'update': 'aktualisieren',
|
'update': 'aktualisieren',
|
||||||
'update all languages': 'aktualisiere alle Sprachen',
|
'update all languages': 'aktualisiere alle Sprachen',
|
||||||
'upgrade web2py now': 'jetzt web2py upgraden',
|
'upgrade web2py now': 'jetzt web2py upgraden',
|
||||||
@@ -339,5 +337,3 @@
|
|||||||
'web2py is up to date': 'web2py ist auf dem neuesten Stand',
|
'web2py is up to date': 'web2py ist auf dem neuesten Stand',
|
||||||
'xml': 'xml',
|
'xml': 'xml',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# coding: utf8
|
||||||
|
{
|
||||||
|
'!langcode!': 'en-us',
|
||||||
|
'!langname!': 'English (US)',
|
||||||
|
'%Y-%m-%d': '%m-%d-%Y',
|
||||||
|
'%Y-%m-%d %H:%M:%S': '%m-%d-%Y %H:%M:%S',
|
||||||
|
'back': '<<back',
|
||||||
|
}
|
||||||
@@ -1,17 +1,20 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'es',
|
||||||
|
'!langname!': 'Español',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s filas eliminadas',
|
'%s %%{row} deleted': '%s filas eliminadas',
|
||||||
'%s rows updated': '%s filas actualizadas',
|
'%s %%{row} updated': '%s filas actualizadas',
|
||||||
'(something like "it-it")': '(algo como "it-it")',
|
'(something like "it-it")': '(algo como "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': 'Hay una nueva versión de web2py disponible',
|
'A new version of web2py is available': 'Hay una nueva versión de web2py disponible',
|
||||||
'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
|
'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesión requiere una conexión segura (HTTPS) o localhost.',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesión requiere una conexión 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: 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ón que se ejecuta!',
|
'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicación que se ejecuta!',
|
||||||
'About': 'Acerca de',
|
'About': 'acerca de',
|
||||||
'About application': 'Acerca de la aplicación',
|
'About application': 'Acerca de la aplicación',
|
||||||
'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro',
|
'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',
|
'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro',
|
||||||
@@ -26,12 +29,16 @@
|
|||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicación. Depure, corrija errores y vuelva a intentarlo.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicación. Depure, corrija errores y vuelva a intentarlo.',
|
||||||
'Cannot compile: there are errors in your app:': 'No se puede compilar: hay errores en su aplicación:',
|
'Cannot compile: there are errors in your app:': 'No se puede compilar: hay errores en su aplicación:',
|
||||||
'Change Password': 'Cambie Contraseña',
|
'Change Password': 'Cambie Contraseña',
|
||||||
|
'Change admin password': 'cambie contraseña admin',
|
||||||
'Check to delete': 'Marque para eliminar',
|
'Check to delete': 'Marque para eliminar',
|
||||||
'Checking for upgrades...': 'Buscando actulizaciones...',
|
'Checking for upgrades...': 'Buscando actulizaciones...',
|
||||||
|
'Clean': 'limpiar',
|
||||||
'Click row to expand traceback': 'Click row to expand traceback',
|
'Click row to expand traceback': 'Click row to expand traceback',
|
||||||
'Client IP': 'IP del Cliente',
|
'Client IP': 'IP del Cliente',
|
||||||
|
'Compile': 'compilar',
|
||||||
'Controllers': 'Controladores',
|
'Controllers': 'Controladores',
|
||||||
'Count': 'Count',
|
'Count': 'Count',
|
||||||
|
'Create': 'crear',
|
||||||
'Create new application using the Wizard': 'Create new application using the Wizard',
|
'Create new application using the Wizard': 'Create new application using the Wizard',
|
||||||
'Create new simple application': 'Cree una nueva aplicación',
|
'Create new simple application': 'Cree una nueva aplicación',
|
||||||
'Current request': 'Solicitud en curso',
|
'Current request': 'Solicitud en curso',
|
||||||
@@ -46,6 +53,7 @@
|
|||||||
'Design for': 'Diseño para',
|
'Design for': 'Diseño para',
|
||||||
'E-mail': 'Correo electrónico',
|
'E-mail': 'Correo electrónico',
|
||||||
'EDIT': 'EDITAR',
|
'EDIT': 'EDITAR',
|
||||||
|
'Edit': 'editar',
|
||||||
'Edit Profile': 'Editar Perfil',
|
'Edit Profile': 'Editar Perfil',
|
||||||
'Edit application': 'Editar aplicación',
|
'Edit application': 'Editar aplicación',
|
||||||
'Edit current record': 'Edite el registro actual',
|
'Edit current record': 'Edite el registro actual',
|
||||||
@@ -55,14 +63,17 @@
|
|||||||
'Enterprise Web Framework': 'Armazón Empresarial para Internet',
|
'Enterprise Web Framework': 'Armazón Empresarial para Internet',
|
||||||
'Error': 'Error',
|
'Error': 'Error',
|
||||||
'Error logs for "%(app)s"': 'Bitácora de errores en "%(app)s"',
|
'Error logs for "%(app)s"': 'Bitácora de errores en "%(app)s"',
|
||||||
|
'Errors': 'errores',
|
||||||
'Exception instance attributes': 'Atributos de la instancia de Excepción',
|
'Exception instance attributes': 'Atributos de la instancia de Excepción',
|
||||||
'File': 'File',
|
'File': 'File',
|
||||||
'First name': 'Nombre',
|
'First name': 'Nombre',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
|
'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
|
||||||
'Group ID': 'ID de Grupo',
|
'Group ID': 'ID de Grupo',
|
||||||
'Hello World': 'Hola Mundo',
|
'Hello World': 'Hola Mundo',
|
||||||
|
'Help': 'ayuda',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Si el reporte anterior contiene un número de tiquete este indica un falla en la ejecución del controlador, antes de cualquier intento de ejecutat doctests. Esto generalmente se debe a un error en la indentación o un error por fuera del código de la función.\r\nUn titulo verde indica que todas las pruebas pasaron (si existen). En dicho caso los resultados no se muestran.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Si el reporte anterior contiene un número de tiquete este indica un falla en la ejecución del controlador, antes de cualquier intento de ejecutat doctests. Esto generalmente se debe a un error en la indentación o un error por fuera del código de la función.\r\nUn titulo verde indica que todas las pruebas pasaron (si existen). En dicho caso los resultados no se muestran.',
|
||||||
'Import/Export': 'Importar/Exportar',
|
'Import/Export': 'Importar/Exportar',
|
||||||
|
'Install': 'instalar',
|
||||||
'Installed applications': 'Aplicaciones instaladas',
|
'Installed applications': 'Aplicaciones instaladas',
|
||||||
'Internal State': 'Estado Interno',
|
'Internal State': 'Estado Interno',
|
||||||
'Invalid Query': 'Consulta inválida',
|
'Invalid Query': 'Consulta inválida',
|
||||||
@@ -75,7 +86,7 @@
|
|||||||
'License for': 'Licencia para',
|
'License for': 'Licencia para',
|
||||||
'Login': 'Inicio de sesión',
|
'Login': 'Inicio de sesión',
|
||||||
'Login to the Administrative Interface': 'Inicio de sesión para la Interfaz Administrativa',
|
'Login to the Administrative Interface': 'Inicio de sesión para la Interfaz Administrativa',
|
||||||
'Logout': 'Fin de sesión',
|
'Logout': 'fin de sesión',
|
||||||
'Lost Password': 'Contraseña perdida',
|
'Lost Password': 'Contraseña perdida',
|
||||||
'Models': 'Modelos',
|
'Models': 'Modelos',
|
||||||
'Modules': 'Módulos',
|
'Modules': 'Módulos',
|
||||||
@@ -85,7 +96,10 @@
|
|||||||
'No databases in this application': 'No hay bases de datos en esta aplicación',
|
'No databases in this application': 'No hay bases de datos en esta aplicación',
|
||||||
'Origin': 'Origen',
|
'Origin': 'Origen',
|
||||||
'Original/Translation': 'Original/Traducción',
|
'Original/Translation': 'Original/Traducción',
|
||||||
|
'Overwrite installed app': 'sobreescriba aplicación instalada',
|
||||||
'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, no puede cambiar la contraseña aquí',
|
'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, no puede cambiar la contraseña aquí',
|
||||||
|
'Pack all': 'empaquetar todo',
|
||||||
|
'Pack compiled': 'empaquete compiladas',
|
||||||
'Password': 'Contraseña',
|
'Password': 'Contraseña',
|
||||||
'Peeking at file': 'Visualizando archivo',
|
'Peeking at file': 'Visualizando archivo',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" en aplicación',
|
'Plugin "%s" in application': 'Plugin "%s" en aplicación',
|
||||||
@@ -95,11 +109,13 @@
|
|||||||
'Record ID': 'ID de Registro',
|
'Record ID': 'ID de Registro',
|
||||||
'Register': 'Registrese',
|
'Register': 'Registrese',
|
||||||
'Registration key': 'Contraseña de Registro',
|
'Registration key': 'Contraseña de Registro',
|
||||||
|
'Remove compiled': 'eliminar compiladas',
|
||||||
'Resolve Conflict file': 'archivo Resolución de Conflicto',
|
'Resolve Conflict file': 'archivo Resolución de Conflicto',
|
||||||
'Role': 'Rol',
|
'Role': 'Rol',
|
||||||
'Rows in table': 'Filas en la tabla',
|
'Rows in table': 'Filas en la tabla',
|
||||||
'Rows selected': 'Filas seleccionadas',
|
'Rows selected': 'Filas seleccionadas',
|
||||||
'Saved file hash:': 'Hash del archivo guardado:',
|
'Saved file hash:': 'Hash del archivo guardado:',
|
||||||
|
'Site': 'sitio',
|
||||||
'Static files': 'Archivos estáticos',
|
'Static files': 'Archivos estáticos',
|
||||||
'Sure you want to delete this object?': '¿Está seguro que desea eliminar este objeto?',
|
'Sure you want to delete this object?': '¿Está seguro que desea eliminar este objeto?',
|
||||||
'TM': 'MR',
|
'TM': 'MR',
|
||||||
@@ -121,6 +137,7 @@
|
|||||||
'Unable to download app': 'No es posible descargar la aplicación',
|
'Unable to download app': 'No es posible descargar la aplicación',
|
||||||
'Unable to download app because:': 'No es posible descargar la aplicación porque:',
|
'Unable to download app because:': 'No es posible descargar la aplicación porque:',
|
||||||
'Unable to download because': 'No es posible descargar porque',
|
'Unable to download because': 'No es posible descargar porque',
|
||||||
|
'Uninstall': 'desinstalar',
|
||||||
'Update:': 'Actualice:',
|
'Update:': 'Actualice:',
|
||||||
'Upload & install packed application': 'Suba e instale aplicación empaquetada',
|
'Upload & install packed application': 'Suba e instale aplicación empaquetada',
|
||||||
'Upload existing application': 'Suba esta aplicación',
|
'Upload existing application': 'Suba esta aplicación',
|
||||||
@@ -130,7 +147,6 @@
|
|||||||
'Views': 'Vistas',
|
'Views': 'Vistas',
|
||||||
'Welcome to web2py': 'Bienvenido a web2py',
|
'Welcome to web2py': 'Bienvenido a web2py',
|
||||||
'YES': 'SI',
|
'YES': 'SI',
|
||||||
'About': 'acerca de',
|
|
||||||
'additional code for your application': 'código adicional para su aplicación',
|
'additional code for your application': 'código adicional para su aplicación',
|
||||||
'admin disabled because no admin password': ' por falta de contraseña',
|
'admin disabled because no admin password': ' por falta de contraseña',
|
||||||
'admin disabled because not supported on google app engine': 'admin deshabilitado, no es soportado en GAE',
|
'admin disabled because not supported on google app engine': 'admin deshabilitado, no es soportado en GAE',
|
||||||
@@ -149,19 +165,15 @@
|
|||||||
'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
|
'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
|
||||||
'cannot create file': 'no es posible crear archivo',
|
'cannot create file': 'no es posible crear archivo',
|
||||||
'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"',
|
||||||
'Change admin password': 'cambie contraseña admin',
|
|
||||||
'check all': 'marcar todos',
|
'check all': 'marcar todos',
|
||||||
'Clean': 'limpiar',
|
|
||||||
'click here for online examples': 'haga clic aquí para ver ejemplos en línea',
|
'click here for online examples': 'haga clic aquí para ver ejemplos en línea',
|
||||||
'click here for the administrative interface': 'haga clic aquí para usar la interfaz administrativa',
|
'click here for the administrative interface': 'haga clic aquí para usar la interfaz administrativa',
|
||||||
'click to check for upgrades': 'haga clic para buscar actualizaciones',
|
'click to check for upgrades': 'haga clic para buscar actualizaciones',
|
||||||
'click to open': 'click to open',
|
'click to open': 'click to open',
|
||||||
'code': 'código',
|
'code': 'código',
|
||||||
'commit (mercurial)': 'commit (mercurial)',
|
'commit (mercurial)': 'commit (mercurial)',
|
||||||
'Compile': 'compilar',
|
|
||||||
'compiled application removed': 'aplicación compilada removida',
|
'compiled application removed': 'aplicación compilada removida',
|
||||||
'controllers': 'controladores',
|
'controllers': 'controladores',
|
||||||
'Create': 'crear',
|
|
||||||
'create file with filename:': 'cree archivo con nombre:',
|
'create file with filename:': 'cree archivo con nombre:',
|
||||||
'create new application:': 'nombre de la nueva aplicación:',
|
'create new application:': 'nombre de la nueva aplicación:',
|
||||||
'created by': 'creado por',
|
'created by': 'creado por',
|
||||||
@@ -180,10 +192,8 @@
|
|||||||
'design': 'modificar',
|
'design': 'modificar',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'done!': 'listo!',
|
'done!': 'listo!',
|
||||||
'Edit': 'editar',
|
|
||||||
'edit controller': 'editar controlador',
|
'edit controller': 'editar controlador',
|
||||||
'edit views:': 'editar vistas:',
|
'edit views:': 'editar vistas:',
|
||||||
'Errors': 'errores',
|
|
||||||
'export as csv file': 'exportar como archivo CSV',
|
'export as csv file': 'exportar como archivo CSV',
|
||||||
'exposes': 'expone',
|
'exposes': 'expone',
|
||||||
'extends': 'extiende',
|
'extends': 'extiende',
|
||||||
@@ -198,12 +208,10 @@
|
|||||||
'file does not exist': 'archivo no existe',
|
'file does not exist': 'archivo no existe',
|
||||||
'file saved on %(time)s': 'archivo guardado %(time)s',
|
'file saved on %(time)s': 'archivo guardado %(time)s',
|
||||||
'file saved on %s': 'archivo guardado %s',
|
'file saved on %s': 'archivo guardado %s',
|
||||||
'Help': 'ayuda',
|
|
||||||
'htmledit': 'htmledit',
|
'htmledit': 'htmledit',
|
||||||
'includes': 'incluye',
|
'includes': 'incluye',
|
||||||
'insert new': 'inserte nuevo',
|
'insert new': 'inserte nuevo',
|
||||||
'insert new %s': 'inserte nuevo %s',
|
'insert new %s': 'inserte nuevo %s',
|
||||||
'Install': 'instalar',
|
|
||||||
'internal error': 'error interno',
|
'internal error': 'error interno',
|
||||||
'invalid password': 'contraseña inválida',
|
'invalid password': 'contraseña inválida',
|
||||||
'invalid request': 'solicitud inválida',
|
'invalid request': 'solicitud inválida',
|
||||||
@@ -213,7 +221,6 @@
|
|||||||
'languages updated': 'lenguajes actualizados',
|
'languages updated': 'lenguajes actualizados',
|
||||||
'loading...': 'cargando...',
|
'loading...': 'cargando...',
|
||||||
'login': 'inicio de sesión',
|
'login': 'inicio de sesión',
|
||||||
'Logout': 'fin de sesión',
|
|
||||||
'manage': 'manage',
|
'manage': 'manage',
|
||||||
'merge': 'combinar',
|
'merge': 'combinar',
|
||||||
'models': 'modelos',
|
'models': 'modelos',
|
||||||
@@ -226,9 +233,6 @@
|
|||||||
'or import from csv file': 'o importar desde archivo CSV',
|
'or import from csv file': 'o importar desde archivo CSV',
|
||||||
'or provide app url:': 'o provea URL de la aplicación:',
|
'or provide app url:': 'o provea URL de la aplicación:',
|
||||||
'or provide application url:': 'o provea URL de la aplicación:',
|
'or provide application url:': 'o provea URL de la aplicación:',
|
||||||
'Overwrite installed app': 'sobreescriba aplicación instalada',
|
|
||||||
'Pack all': 'empaquetar todo',
|
|
||||||
'Pack compiled': 'empaquete compiladas',
|
|
||||||
'pack plugin': 'empaquetar plugin',
|
'pack plugin': 'empaquetar plugin',
|
||||||
'password changed': 'contraseña cambiada',
|
'password changed': 'contraseña cambiada',
|
||||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado',
|
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado',
|
||||||
@@ -236,14 +240,12 @@
|
|||||||
'record': 'registro',
|
'record': 'registro',
|
||||||
'record does not exist': 'el registro no existe',
|
'record does not exist': 'el registro no existe',
|
||||||
'record id': 'id de registro',
|
'record id': 'id de registro',
|
||||||
'Remove compiled': 'eliminar compiladas',
|
|
||||||
'restore': 'restaurar',
|
'restore': 'restaurar',
|
||||||
'revert': 'revertir',
|
'revert': 'revertir',
|
||||||
'save': 'guardar',
|
'save': 'guardar',
|
||||||
'selected': 'seleccionado(s)',
|
'selected': 'seleccionado(s)',
|
||||||
'session expired': 'sesión expirada',
|
'session expired': 'sesión expirada',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'Site': 'sitio',
|
|
||||||
'some files could not be removed': 'algunos archivos no pudieron ser removidos',
|
'some files could not be removed': 'algunos archivos no pudieron ser removidos',
|
||||||
'state': 'estado',
|
'state': 'estado',
|
||||||
'static': 'estáticos',
|
'static': 'estáticos',
|
||||||
@@ -265,7 +267,6 @@
|
|||||||
'unable to uninstall "%s"': 'no es posible instalar "%s"',
|
'unable to uninstall "%s"': 'no es posible instalar "%s"',
|
||||||
'unable to upgrade because "%s"': 'no es posible actualizar porque "%s"',
|
'unable to upgrade because "%s"': 'no es posible actualizar porque "%s"',
|
||||||
'uncheck all': 'desmarcar todos',
|
'uncheck all': 'desmarcar todos',
|
||||||
'Uninstall': 'desinstalar',
|
|
||||||
'update': 'actualizar',
|
'update': 'actualizar',
|
||||||
'update all languages': 'actualizar todos los lenguajes',
|
'update all languages': 'actualizar todos los lenguajes',
|
||||||
'upgrade web2py now': 'actualize web2py ahora',
|
'upgrade web2py now': 'actualize web2py ahora',
|
||||||
@@ -280,5 +281,3 @@
|
|||||||
'web2py is up to date': 'web2py está actualizado',
|
'web2py is up to date': 'web2py está actualizado',
|
||||||
'web2py upgraded; please restart it': 'web2py actualizado; favor reiniciar',
|
'web2py upgraded; please restart it': 'web2py actualizado; favor reiniciar',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,18 +1,21 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'fr',
|
||||||
|
'!langname!': 'Français',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression en option tels que "field1 = \'newvalue\'". Vous ne pouvez pas mettre à jour ou supprimer les résultats d\'une jointure "a JOIN"',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression en option tels que "field1 = \'newvalue\'". Vous ne pouvez pas mettre à jour ou supprimer les résultats d\'une jointure "a JOIN"',
|
||||||
'%Y-%m-%d': '%d-%m-%Y',
|
'%Y-%m-%d': '%d-%m-%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S',
|
||||||
'%s rows deleted': 'lignes %s supprimé',
|
'%s %%{row} deleted': 'lignes %s supprimé',
|
||||||
'%s rows updated': 'lignes %s mis à jour',
|
'%s %%{row} updated': 'lignes %s mis à jour',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(quelque chose comme "it-it") ',
|
'(something like "it-it")': '(quelque chose comme "it-it") ',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available: %s': 'Une nouvelle version de web2py est disponible: %s ',
|
'A new version of web2py is available: %s': 'Une nouvelle version de web2py est disponible: %s ',
|
||||||
'A new version of web2py is available: Version 1.68.2 (2009-10-21 09:59:29)\n': 'Une nouvelle version de web2py est disponible: Version 1.68.2 (2009-10-21 09:59:29)\r\n',
|
'A new version of web2py is available: Version 1.68.2 (2009-10-21 09:59:29)\n': 'Une nouvelle version de web2py est disponible: Version 1.68.2 (2009-10-21 09:59:29)\r\n',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATTENTION: nécessite une connexion sécurisée (HTTPS) ou être en localhost. ',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATTENTION: nécessite une connexion sécurisée (HTTPS) ou être en localhost. ',
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: les tests ne sont pas thread-safe DONC NE PAS EFFECTUER DES TESTS MULTIPLES SIMULTANÉMENT.',
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: les tests ne sont pas thread-safe DONC NE PAS EFFECTUER DES TESTS MULTIPLES SIMULTANÉMENT.',
|
||||||
'ATTENTION: you cannot edit the running application!': "ATTENTION: vous ne pouvez pas modifier l'application qui tourne!",
|
'ATTENTION: you cannot edit the running application!': "ATTENTION: vous ne pouvez pas modifier l'application qui tourne!",
|
||||||
'About': 'À propos',
|
'About': 'à propos',
|
||||||
'About application': "A propos de l'application",
|
'About application': "A propos de l'application",
|
||||||
'Additional code for your application': 'Additional code for your application',
|
'Additional code for your application': 'Additional code for your application',
|
||||||
'Admin is disabled because insecure channel': 'Admin est désactivé parce que canal non sécurisé',
|
'Admin is disabled because insecure channel': 'Admin est désactivé parce que canal non sécurisé',
|
||||||
@@ -28,9 +31,14 @@
|
|||||||
'Cannot be empty': 'Ne peut pas être vide',
|
'Cannot be empty': 'Ne peut pas être vide',
|
||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Ne peut pas compiler: il y a des erreurs dans votre application. corriger les erreurs et essayez à nouveau.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Ne peut pas compiler: il y a des erreurs dans votre application. corriger les erreurs et essayez à nouveau.',
|
||||||
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
||||||
|
'Change admin password': 'change admin password',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': 'Cocher pour supprimer',
|
'Check to delete': 'Cocher pour supprimer',
|
||||||
'Checking for upgrades...': 'Vérification des mises à jour ... ',
|
'Checking for upgrades...': 'Vérification des mises à jour ... ',
|
||||||
|
'Clean': 'nettoyer',
|
||||||
|
'Compile': 'compiler',
|
||||||
'Controllers': 'Contrôleurs',
|
'Controllers': 'Contrôleurs',
|
||||||
|
'Create': 'create',
|
||||||
'Create new simple application': 'Créer une nouvelle application',
|
'Create new simple application': 'Créer une nouvelle application',
|
||||||
'Current request': 'Requête actuel',
|
'Current request': 'Requête actuel',
|
||||||
'Current response': 'Réponse actuelle',
|
'Current response': 'Réponse actuelle',
|
||||||
@@ -39,8 +47,10 @@
|
|||||||
'Delete': 'Supprimer',
|
'Delete': 'Supprimer',
|
||||||
'Delete this file (you will be asked to confirm deletion)': 'Delete this file (you will be asked to confirm deletion)',
|
'Delete this file (you will be asked to confirm deletion)': 'Delete this file (you will be asked to confirm deletion)',
|
||||||
'Delete:': 'Supprimer:',
|
'Delete:': 'Supprimer:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'Déployer sur Google App Engine',
|
'Deploy on Google App Engine': 'Déployer sur Google App Engine',
|
||||||
'EDIT': 'MODIFIER',
|
'EDIT': 'MODIFIER',
|
||||||
|
'Edit': 'modifier',
|
||||||
'Edit application': "Modifier l'application",
|
'Edit application': "Modifier l'application",
|
||||||
'Edit current record': 'Modifier cet entrée',
|
'Edit current record': 'Modifier cet entrée',
|
||||||
'Editing Language file': 'Modifier le fichier de langue',
|
'Editing Language file': 'Modifier le fichier de langue',
|
||||||
@@ -48,10 +58,13 @@
|
|||||||
'Editing file "%s"': 'Modifier le fichier "% s" ',
|
'Editing file "%s"': 'Modifier le fichier "% s" ',
|
||||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||||
'Error logs for "%(app)s"': 'Journal d\'erreurs pour "%(app)s"',
|
'Error logs for "%(app)s"': 'Journal d\'erreurs pour "%(app)s"',
|
||||||
|
'Errors': 'erreurs',
|
||||||
'Exception instance attributes': 'Exception instance attributes',
|
'Exception instance attributes': 'Exception instance attributes',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'Des fonctions sans doctests entraînera tests [passed] .',
|
'Functions with no doctests will result in [passed] tests.': 'Des fonctions sans doctests entraînera tests [passed] .',
|
||||||
|
'Help': 'aide',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': "Si le rapport ci-dessus contient un numéro de ticket, cela indique une défaillance dans l'exécution du contrôleur, avant toute tentative d'exécuter les doctests. Cela est généralement dû à une erreur d'indentation ou une erreur à l'extérieur du code de la fonction.\r\nUn titre verte indique que tous les tests (si définie) passed. Dans ce cas, les résultats des essais ne sont pas affichées.",
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': "Si le rapport ci-dessus contient un numéro de ticket, cela indique une défaillance dans l'exécution du contrôleur, avant toute tentative d'exécuter les doctests. Cela est généralement dû à une erreur d'indentation ou une erreur à l'extérieur du code de la fonction.\r\nUn titre verte indique que tous les tests (si définie) passed. Dans ce cas, les résultats des essais ne sont pas affichées.",
|
||||||
'Import/Export': 'Importer/Exporter',
|
'Import/Export': 'Importer/Exporter',
|
||||||
|
'Install': 'install',
|
||||||
'Installed applications': 'Les applications installées',
|
'Installed applications': 'Les applications installées',
|
||||||
'Internal State': 'État Interne',
|
'Internal State': 'État Interne',
|
||||||
'Invalid Query': 'Requête non valide',
|
'Invalid Query': 'Requête non valide',
|
||||||
@@ -62,6 +75,7 @@
|
|||||||
'License for': 'Licence pour',
|
'License for': 'Licence pour',
|
||||||
'Login': 'Connexion',
|
'Login': 'Connexion',
|
||||||
'Login to the Administrative Interface': "Se connecter à l'interface d'administration",
|
'Login to the Administrative Interface': "Se connecter à l'interface d'administration",
|
||||||
|
'Logout': 'déconnexion',
|
||||||
'Models': 'Modèles',
|
'Models': 'Modèles',
|
||||||
'Modules': 'Modules',
|
'Modules': 'Modules',
|
||||||
'NO': 'NON',
|
'NO': 'NON',
|
||||||
@@ -70,19 +84,24 @@
|
|||||||
'New simple application': 'New simple application',
|
'New simple application': 'New simple application',
|
||||||
'No databases in this application': 'Aucune base de données dans cette application',
|
'No databases in this application': 'Aucune base de données dans cette application',
|
||||||
'Original/Translation': 'Original / Traduction',
|
'Original/Translation': 'Original / Traduction',
|
||||||
|
'Overwrite installed app': 'overwrite installed app',
|
||||||
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
||||||
|
'Pack all': 'tout empaqueter',
|
||||||
|
'Pack compiled': 'paquet compilé',
|
||||||
'Peeking at file': 'Jeter un oeil au fichier',
|
'Peeking at file': 'Jeter un oeil au fichier',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" dans l\'application',
|
'Plugin "%s" in application': 'Plugin "%s" dans l\'application',
|
||||||
'Plugins': 'Plugins',
|
'Plugins': 'Plugins',
|
||||||
'Powered by': 'Propulsé par',
|
'Powered by': 'Propulsé par',
|
||||||
'Query:': 'Requête: ',
|
'Query:': 'Requête: ',
|
||||||
|
'Remove compiled': 'retirer compilé',
|
||||||
'Resolve Conflict file': 'Résoudre les conflits de fichiers',
|
'Resolve Conflict file': 'Résoudre les conflits de fichiers',
|
||||||
'Rows in table': 'Lignes de la table',
|
'Rows in table': 'Lignes de la table',
|
||||||
'Rows selected': 'Lignes sélectionnées',
|
'Rows selected': 'Lignes sélectionnées',
|
||||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')",
|
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')",
|
||||||
'Save': 'Save',
|
'Save': 'Save',
|
||||||
'Saved file hash:': 'Hash du Fichier enregistré:',
|
'Saved file hash:': 'Hash du Fichier enregistré:',
|
||||||
'Searching:': 'Searching:',
|
'Site': 'site',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'Fichiers statiques',
|
'Static files': 'Fichiers statiques',
|
||||||
'Sure you want to delete this object?': 'Vous êtes sûr de vouloir supprimer cet objet? ',
|
'Sure you want to delete this object?': 'Vous êtes sûr de vouloir supprimer cet objet? ',
|
||||||
'TM': 'MD',
|
'TM': 'MD',
|
||||||
@@ -108,6 +127,7 @@
|
|||||||
'Unable to download app': 'Impossible de télécharger app',
|
'Unable to download app': 'Impossible de télécharger app',
|
||||||
'Unable to download app because:': 'Unable to download app because:',
|
'Unable to download app because:': 'Unable to download app because:',
|
||||||
'Unable to download because': 'Unable to download because',
|
'Unable to download because': 'Unable to download because',
|
||||||
|
'Uninstall': 'désinstaller',
|
||||||
'Update:': 'Mise à jour:',
|
'Update:': 'Mise à jour:',
|
||||||
'Upload & install packed application': 'Upload & install packed application',
|
'Upload & install packed application': 'Upload & install packed application',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
@@ -118,7 +138,6 @@
|
|||||||
'Views': 'Vues',
|
'Views': 'Vues',
|
||||||
'Web Framework': 'Web Framework',
|
'Web Framework': 'Web Framework',
|
||||||
'YES': 'OUI',
|
'YES': 'OUI',
|
||||||
'About': 'à propos',
|
|
||||||
'additional code for your application': 'code supplémentaire pour votre application',
|
'additional code for your application': 'code supplémentaire pour votre application',
|
||||||
'admin disabled because no admin password': 'admin désactivé car aucun mot de passe admin',
|
'admin disabled because no admin password': 'admin désactivé car aucun mot de passe admin',
|
||||||
'admin disabled because not supported on google app engine': 'admin désactivé car non pris en charge sur Google Apps engine',
|
'admin disabled because not supported on google app engine': 'admin désactivé car non pris en charge sur Google Apps engine',
|
||||||
@@ -138,17 +157,12 @@
|
|||||||
'cache, errors and sessions cleaned': 'cache, erreurs et sessions nettoyé',
|
'cache, errors and sessions cleaned': 'cache, erreurs et sessions nettoyé',
|
||||||
'cannot create file': 'ne peu pas créer de fichier',
|
'cannot create file': 'ne peu pas créer de fichier',
|
||||||
'cannot upload file "%(filename)s"': 'ne peu pas charger le fichier "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'ne peu pas charger le fichier "%(filename)s"',
|
||||||
'Change admin password': 'change admin password',
|
|
||||||
'check all': 'tous vérifier ',
|
'check all': 'tous vérifier ',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': 'nettoyer',
|
|
||||||
'click to check for upgrades': 'Cliquez pour vérifier les mises à niveau',
|
'click to check for upgrades': 'Cliquez pour vérifier les mises à niveau',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'Compile': 'compiler',
|
|
||||||
'compiled application removed': 'application compilée enlevé',
|
'compiled application removed': 'application compilée enlevé',
|
||||||
'controllers': 'contrôleurs',
|
'controllers': 'contrôleurs',
|
||||||
'Create': 'create',
|
|
||||||
'create file with filename:': 'créer un fichier avec nom de fichier:',
|
'create file with filename:': 'créer un fichier avec nom de fichier:',
|
||||||
'create new application:': 'créer une nouvelle application:',
|
'create new application:': 'créer une nouvelle application:',
|
||||||
'created by': 'créé par',
|
'created by': 'créé par',
|
||||||
@@ -164,17 +178,14 @@
|
|||||||
'delete': 'supprimer',
|
'delete': 'supprimer',
|
||||||
'delete all checked': 'supprimer tout ce qui est cocher',
|
'delete all checked': 'supprimer tout ce qui est cocher',
|
||||||
'delete plugin': ' supprimer plugin',
|
'delete plugin': ' supprimer plugin',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': 'conception',
|
'design': 'conception',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'docs': 'docs',
|
'docs': 'docs',
|
||||||
'done!': 'fait!',
|
'done!': 'fait!',
|
||||||
'download layouts': 'download layouts',
|
'download layouts': 'download layouts',
|
||||||
'download plugins': 'download plugins',
|
'download plugins': 'download plugins',
|
||||||
'Edit': 'modifier',
|
|
||||||
'edit controller': 'modifier contrôleur',
|
'edit controller': 'modifier contrôleur',
|
||||||
'edit views:': 'edit views:',
|
'edit views:': 'edit views:',
|
||||||
'Errors': 'erreurs',
|
|
||||||
'export as csv file': 'exportation au format CSV',
|
'export as csv file': 'exportation au format CSV',
|
||||||
'exposes': 'expose',
|
'exposes': 'expose',
|
||||||
'exposes:': 'exposes:',
|
'exposes:': 'exposes:',
|
||||||
@@ -189,15 +200,12 @@
|
|||||||
'file does not exist': "fichier n'existe pas",
|
'file does not exist': "fichier n'existe pas",
|
||||||
'file saved on %(time)s': 'fichier enregistré le %(time)s',
|
'file saved on %(time)s': 'fichier enregistré le %(time)s',
|
||||||
'file saved on %s': 'fichier enregistré le %s',
|
'file saved on %s': 'fichier enregistré le %s',
|
||||||
'files': 'files',
|
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'aide',
|
|
||||||
'htmledit': 'edition html',
|
'htmledit': 'edition html',
|
||||||
'includes': 'inclus',
|
'includes': 'inclus',
|
||||||
'index': 'index',
|
'index': 'index',
|
||||||
'insert new': 'insérer nouveau',
|
'insert new': 'insérer nouveau',
|
||||||
'insert new %s': 'insérer nouveau %s',
|
'insert new %s': 'insérer nouveau %s',
|
||||||
'Install': 'install',
|
|
||||||
'internal error': 'erreur interne',
|
'internal error': 'erreur interne',
|
||||||
'invalid password': 'mot de passe invalide',
|
'invalid password': 'mot de passe invalide',
|
||||||
'invalid request': 'Demande incorrecte',
|
'invalid request': 'Demande incorrecte',
|
||||||
@@ -206,7 +214,6 @@
|
|||||||
'languages': 'langues',
|
'languages': 'langues',
|
||||||
'loading...': 'Chargement ...',
|
'loading...': 'Chargement ...',
|
||||||
'login': 'connexion',
|
'login': 'connexion',
|
||||||
'Logout': 'déconnexion',
|
|
||||||
'merge': 'fusionner',
|
'merge': 'fusionner',
|
||||||
'models': 'modèles',
|
'models': 'modèles',
|
||||||
'modules': 'modules',
|
'modules': 'modules',
|
||||||
@@ -218,9 +225,6 @@
|
|||||||
'or import from csv file': 'ou importer depuis un fichier CSV ',
|
'or import from csv file': 'ou importer depuis un fichier CSV ',
|
||||||
'or provide app url:': 'or provide app url:',
|
'or provide app url:': 'or provide app url:',
|
||||||
'or provide application url:': "ou fournir l'URL de l'application:",
|
'or provide application url:': "ou fournir l'URL de l'application:",
|
||||||
'Overwrite installed app': 'overwrite installed app',
|
|
||||||
'Pack all': 'tout empaqueter',
|
|
||||||
'Pack compiled': 'paquet compilé',
|
|
||||||
'pack plugin': 'paquet plugin',
|
'pack plugin': 'paquet plugin',
|
||||||
'password changed': 'password changed',
|
'password changed': 'password changed',
|
||||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" supprimé',
|
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" supprimé',
|
||||||
@@ -229,16 +233,13 @@
|
|||||||
'record': 'entrée',
|
'record': 'entrée',
|
||||||
'record does not exist': "l'entrée n'existe pas",
|
'record does not exist': "l'entrée n'existe pas",
|
||||||
'record id': 'id entrée',
|
'record id': 'id entrée',
|
||||||
'Remove compiled': 'retirer compilé',
|
|
||||||
'restore': 'restaurer',
|
'restore': 'restaurer',
|
||||||
'revert': 'revenir',
|
'revert': 'revenir',
|
||||||
'save': 'sauver',
|
'save': 'sauver',
|
||||||
'selected': 'sélectionnés',
|
'selected': 'sélectionnés',
|
||||||
'session expired': 'la session a expiré ',
|
'session expired': 'la session a expiré ',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'Site': 'site',
|
|
||||||
'some files could not be removed': 'certains fichiers ne peuvent pas être supprimés',
|
'some files could not be removed': 'certains fichiers ne peuvent pas être supprimés',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': 'état',
|
'state': 'état',
|
||||||
'static': 'statiques',
|
'static': 'statiques',
|
||||||
'submit': 'envoyer',
|
'submit': 'envoyer',
|
||||||
@@ -259,7 +260,6 @@
|
|||||||
'unable to uninstall "%s"': 'impossible de désinstaller "%s"',
|
'unable to uninstall "%s"': 'impossible de désinstaller "%s"',
|
||||||
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
||||||
'uncheck all': 'tout décocher',
|
'uncheck all': 'tout décocher',
|
||||||
'Uninstall': 'désinstaller',
|
|
||||||
'update': 'mettre à jour',
|
'update': 'mettre à jour',
|
||||||
'update all languages': 'mettre à jour toutes les langues',
|
'update all languages': 'mettre à jour toutes les langues',
|
||||||
'upgrade now': 'upgrade now',
|
'upgrade now': 'upgrade now',
|
||||||
@@ -277,5 +277,3 @@
|
|||||||
'web2py is up to date': 'web2py est à jour',
|
'web2py is up to date': 'web2py est à jour',
|
||||||
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'he-il',
|
||||||
|
'!langname!': 'עברית',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"עדכן" הוא ביטוי אופציונאלי, כגון "field1=newvalue". אינך יוכל להשתמש בjoin, בעת שימוש ב"עדכן" או "מחק".',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"עדכן" הוא ביטוי אופציונאלי, כגון "field1=newvalue". אינך יוכל להשתמש בjoin, בעת שימוש ב"עדכן" או "מחק".',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s רשומות נמחקו',
|
'%s %%{row} deleted': '%s רשומות נמחקו',
|
||||||
'%s rows updated': '%s רשומות עודכנו',
|
'%s %%{row} updated': '%s רשומות עודכנו',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(למשל "it-it")',
|
'(something like "it-it")': '(למשל "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available: %s': 'גירסא חדשה של web2py זמינה: %s',
|
'A new version of web2py is available: %s': 'גירסא חדשה של web2py זמינה: %s',
|
||||||
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\r\n',
|
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\r\n',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'לתשומת ליבך: ניתן להתחבר רק בערוץ מאובטח (HTTPS) או מlocalhost',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'לתשומת ליבך: ניתן להתחבר רק בערוץ מאובטח (HTTPS) או מlocalhost',
|
||||||
@@ -26,9 +29,14 @@
|
|||||||
'Available databases and tables': 'מסדי נתונים וטבלאות זמינים',
|
'Available databases and tables': 'מסדי נתונים וטבלאות זמינים',
|
||||||
'Cannot be empty': 'אינו יכול להישאר ריק',
|
'Cannot be empty': 'אינו יכול להישאר ריק',
|
||||||
'Cannot compile: there are errors in your app:': 'לא ניתן לקמפל: ישנן שגיאות באפליקציה שלך:',
|
'Cannot compile: there are errors in your app:': 'לא ניתן לקמפל: ישנן שגיאות באפליקציה שלך:',
|
||||||
|
'Change admin password': 'סיסמת מנהל שונתה',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': 'סמן כדי למחוק',
|
'Check to delete': 'סמן כדי למחוק',
|
||||||
'Checking for upgrades...': 'מחפש עדכונים',
|
'Checking for upgrades...': 'מחפש עדכונים',
|
||||||
|
'Clean': 'נקה',
|
||||||
|
'Compile': 'קמפל',
|
||||||
'Controllers': 'בקרים',
|
'Controllers': 'בקרים',
|
||||||
|
'Create': 'צור',
|
||||||
'Create new simple application': 'צור אפליקציה חדשה',
|
'Create new simple application': 'צור אפליקציה חדשה',
|
||||||
'Current request': 'בקשה נוכחית',
|
'Current request': 'בקשה נוכחית',
|
||||||
'Current response': 'מענה נוכחי',
|
'Current response': 'מענה נוכחי',
|
||||||
@@ -36,9 +44,11 @@
|
|||||||
'Date and Time': 'תאריך ושעה',
|
'Date and Time': 'תאריך ושעה',
|
||||||
'Delete': 'מחק',
|
'Delete': 'מחק',
|
||||||
'Delete:': 'מחק:',
|
'Delete:': 'מחק:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'העלה ל Google App Engine',
|
'Deploy on Google App Engine': 'העלה ל Google App Engine',
|
||||||
'Detailed traceback description': 'Detailed traceback description',
|
'Detailed traceback description': 'Detailed traceback description',
|
||||||
'EDIT': 'ערוך!',
|
'EDIT': 'ערוך!',
|
||||||
|
'Edit': 'ערוך',
|
||||||
'Edit application': 'ערוך אפליקציה',
|
'Edit application': 'ערוך אפליקציה',
|
||||||
'Edit current record': 'ערוך רשומה נוכחית',
|
'Edit current record': 'ערוך רשומה נוכחית',
|
||||||
'Editing Language file': 'עורך את קובץ השפה',
|
'Editing Language file': 'עורך את קובץ השפה',
|
||||||
@@ -47,11 +57,14 @@
|
|||||||
'Error logs for "%(app)s"': 'דו"ח שגיאות עבור אפליקציה "%(app)s"',
|
'Error logs for "%(app)s"': 'דו"ח שגיאות עבור אפליקציה "%(app)s"',
|
||||||
'Error snapshot': 'Error snapshot',
|
'Error snapshot': 'Error snapshot',
|
||||||
'Error ticket': 'Error ticket',
|
'Error ticket': 'Error ticket',
|
||||||
|
'Errors': 'שגיאות',
|
||||||
'Exception instance attributes': 'נתוני החריגה',
|
'Exception instance attributes': 'נתוני החריגה',
|
||||||
'Frames': 'Frames',
|
'Frames': 'Frames',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'פונקציות שלא הוגדר להן doctest ירשמו כבדיקות ש[עברו בהצלחה].',
|
'Functions with no doctests will result in [passed] tests.': 'פונקציות שלא הוגדר להן doctest ירשמו כבדיקות ש[עברו בהצלחה].',
|
||||||
|
'Help': 'עזרה',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'אם בדו"ח לעיל מופיע מספר דו"ח שגיאה, זה מצביע על שגיאה בבקר, עוד לפני שניתן היה להריץ את הdoctest. לרוב מדובר בשגיאת הזחה, או שגיאה שאינה בקוד של הפונקציה.\r\nכותרת ירוקה מצביע על כך שכל הבדיקות (אם הוגדרו) עברו בהצלחה, במידה ותוצאות הבדיקה אינן מופיעות.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'אם בדו"ח לעיל מופיע מספר דו"ח שגיאה, זה מצביע על שגיאה בבקר, עוד לפני שניתן היה להריץ את הdoctest. לרוב מדובר בשגיאת הזחה, או שגיאה שאינה בקוד של הפונקציה.\r\nכותרת ירוקה מצביע על כך שכל הבדיקות (אם הוגדרו) עברו בהצלחה, במידה ותוצאות הבדיקה אינן מופיעות.',
|
||||||
'Import/Export': 'יבא\יצא',
|
'Import/Export': 'יבא\יצא',
|
||||||
|
'Install': 'התקן',
|
||||||
'Installed applications': 'אפליקציות מותקנות',
|
'Installed applications': 'אפליקציות מותקנות',
|
||||||
'Internal State': 'מצב מובנה',
|
'Internal State': 'מצב מובנה',
|
||||||
'Invalid Query': 'שאילתה לא תקינה',
|
'Invalid Query': 'שאילתה לא תקינה',
|
||||||
@@ -62,6 +75,7 @@
|
|||||||
'License for': 'רשיון עבור',
|
'License for': 'רשיון עבור',
|
||||||
'Login': 'התחבר',
|
'Login': 'התחבר',
|
||||||
'Login to the Administrative Interface': 'התחבר לממשק המנהל',
|
'Login to the Administrative Interface': 'התחבר לממשק המנהל',
|
||||||
|
'Logout': 'התנתק',
|
||||||
'Models': 'מבני נתונים',
|
'Models': 'מבני נתונים',
|
||||||
'Modules': 'מודולים',
|
'Modules': 'מודולים',
|
||||||
'NO': 'לא',
|
'NO': 'לא',
|
||||||
@@ -70,16 +84,22 @@
|
|||||||
'New simple application': 'New simple application',
|
'New simple application': 'New simple application',
|
||||||
'No databases in this application': 'אין מסדי נתונים לאפליקציה זו',
|
'No databases in this application': 'אין מסדי נתונים לאפליקציה זו',
|
||||||
'Original/Translation': 'מקור\תרגום',
|
'Original/Translation': 'מקור\תרגום',
|
||||||
|
'Overwrite installed app': 'התקן על גבי אפלקציה מותקנת',
|
||||||
'PAM authenticated user, cannot change password here': 'שינוי סיסמא באמצעות PAM אינו יכול להתבצע כאן',
|
'PAM authenticated user, cannot change password here': 'שינוי סיסמא באמצעות PAM אינו יכול להתבצע כאן',
|
||||||
|
'Pack all': 'ארוז הכל',
|
||||||
|
'Pack compiled': 'ארוז מקומפל',
|
||||||
'Peeking at file': 'מעיין בקובץ',
|
'Peeking at file': 'מעיין בקובץ',
|
||||||
'Plugin "%s" in application': 'פלאגין "%s" של אפליקציה',
|
'Plugin "%s" in application': 'פלאגין "%s" של אפליקציה',
|
||||||
'Plugins': 'תוספים',
|
'Plugins': 'תוספים',
|
||||||
'Powered by': 'מופעל ע"י',
|
'Powered by': 'מופעל ע"י',
|
||||||
'Query:': 'שאילתה:',
|
'Query:': 'שאילתה:',
|
||||||
|
'Remove compiled': 'הסר מקומפל',
|
||||||
'Resolve Conflict file': 'הסר קובץ היוצר קונפליקט',
|
'Resolve Conflict file': 'הסר קובץ היוצר קונפליקט',
|
||||||
'Rows in table': 'רשומות בטבלה',
|
'Rows in table': 'רשומות בטבלה',
|
||||||
'Rows selected': 'רשומות נבחרו',
|
'Rows selected': 'רשומות נבחרו',
|
||||||
'Saved file hash:': 'גיבוב הקובץ השמור:',
|
'Saved file hash:': 'גיבוב הקובץ השמור:',
|
||||||
|
'Site': 'אתר',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'קבצים סטאטיים',
|
'Static files': 'קבצים סטאטיים',
|
||||||
'Sure you want to delete this object?': 'האם אתה בטוח שברצונך למחוק אובייקט זה?',
|
'Sure you want to delete this object?': 'האם אתה בטוח שברצונך למחוק אובייקט זה?',
|
||||||
'TM': 'סימן רשום',
|
'TM': 'סימן רשום',
|
||||||
@@ -105,6 +125,7 @@
|
|||||||
'Unable to check for upgrades': 'לא ניתן היה לבדוק אם יש שדרוגים',
|
'Unable to check for upgrades': 'לא ניתן היה לבדוק אם יש שדרוגים',
|
||||||
'Unable to download app because:': 'לא ניתן היה להוריד את האפליקציה כי:',
|
'Unable to download app because:': 'לא ניתן היה להוריד את האפליקציה כי:',
|
||||||
'Unable to download because': 'לא הצלחתי להוריד כי',
|
'Unable to download because': 'לא הצלחתי להוריד כי',
|
||||||
|
'Uninstall': 'הסר התקנה',
|
||||||
'Update:': 'עדכן:',
|
'Update:': 'עדכן:',
|
||||||
'Upload & install packed application': 'העלה והתקן אפליקציה ארוזה',
|
'Upload & install packed application': 'העלה והתקן אפליקציה ארוזה',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
@@ -113,7 +134,6 @@
|
|||||||
'Version': 'גירסא',
|
'Version': 'גירסא',
|
||||||
'Views': 'מראה',
|
'Views': 'מראה',
|
||||||
'YES': 'כן',
|
'YES': 'כן',
|
||||||
'About': 'אודות',
|
|
||||||
'additional code for your application': 'קוד נוסף עבור האפליקציה שלך',
|
'additional code for your application': 'קוד נוסף עבור האפליקציה שלך',
|
||||||
'admin disabled because no admin password': 'ממשק המנהל מנוטרל כי לא הוגדרה סיסמת מנהל',
|
'admin disabled because no admin password': 'ממשק המנהל מנוטרל כי לא הוגדרה סיסמת מנהל',
|
||||||
'admin disabled because not supported on google app engine': 'ממשק המנהל נוטרל, כי אין תמיכה בGoogle app engine',
|
'admin disabled because not supported on google app engine': 'ממשק המנהל נוטרל, כי אין תמיכה בGoogle app engine',
|
||||||
@@ -132,17 +152,12 @@
|
|||||||
'cache, errors and sessions cleaned': 'מטמון, שגיאות וסשן נוקו',
|
'cache, errors and sessions cleaned': 'מטמון, שגיאות וסשן נוקו',
|
||||||
'cannot create file': 'לא מצליח ליצור קובץ',
|
'cannot create file': 'לא מצליח ליצור קובץ',
|
||||||
'cannot upload file "%(filename)s"': 'לא הצלחתי להעלות את הקובץ "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'לא הצלחתי להעלות את הקובץ "%(filename)s"',
|
||||||
'Change admin password': 'סיסמת מנהל שונתה',
|
|
||||||
'check all': 'סמן הכל',
|
'check all': 'סמן הכל',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': 'נקה',
|
|
||||||
'click to check for upgrades': 'לחץ כדי לחפש עדכונים',
|
'click to check for upgrades': 'לחץ כדי לחפש עדכונים',
|
||||||
'code': 'קוד',
|
'code': 'קוד',
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'Compile': 'קמפל',
|
|
||||||
'compiled application removed': 'אפליקציה מקומפלת הוסרה',
|
'compiled application removed': 'אפליקציה מקומפלת הוסרה',
|
||||||
'controllers': 'בקרים',
|
'controllers': 'בקרים',
|
||||||
'Create': 'צור',
|
|
||||||
'create file with filename:': 'צור קובץ בשם:',
|
'create file with filename:': 'צור קובץ בשם:',
|
||||||
'create new application:': 'צור אפליקציה חדשה:',
|
'create new application:': 'צור אפליקציה חדשה:',
|
||||||
'created by': 'נוצר ע"י',
|
'created by': 'נוצר ע"י',
|
||||||
@@ -158,16 +173,13 @@
|
|||||||
'delete': 'מחק',
|
'delete': 'מחק',
|
||||||
'delete all checked': 'סמן הכל למחיקה',
|
'delete all checked': 'סמן הכל למחיקה',
|
||||||
'delete plugin': 'מחק תוסף',
|
'delete plugin': 'מחק תוסף',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': 'עיצוב',
|
'design': 'עיצוב',
|
||||||
'direction: ltr': 'direction: rtl',
|
'direction: ltr': 'direction: rtl',
|
||||||
'done!': 'הסתיים!',
|
'done!': 'הסתיים!',
|
||||||
'download layouts': 'download layouts',
|
'download layouts': 'download layouts',
|
||||||
'download plugins': 'download plugins',
|
'download plugins': 'download plugins',
|
||||||
'Edit': 'ערוך',
|
|
||||||
'edit controller': 'ערוך בקר',
|
'edit controller': 'ערוך בקר',
|
||||||
'edit views:': 'ערוך קיבצי תצוגה:',
|
'edit views:': 'ערוך קיבצי תצוגה:',
|
||||||
'Errors': 'שגיאות',
|
|
||||||
'export as csv file': 'יצא לקובץ csv',
|
'export as csv file': 'יצא לקובץ csv',
|
||||||
'exposes': 'חושף את',
|
'exposes': 'חושף את',
|
||||||
'extends': 'הרחבה של',
|
'extends': 'הרחבה של',
|
||||||
@@ -181,13 +193,11 @@
|
|||||||
'file saved on %(time)s': 'הקובץ נשמר בשעה %(time)s',
|
'file saved on %(time)s': 'הקובץ נשמר בשעה %(time)s',
|
||||||
'file saved on %s': 'הקובץ נשמר ב%s',
|
'file saved on %s': 'הקובץ נשמר ב%s',
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'עזרה',
|
|
||||||
'htmledit': 'עורך ויזואלי',
|
'htmledit': 'עורך ויזואלי',
|
||||||
'includes': 'מכיל',
|
'includes': 'מכיל',
|
||||||
'insert new': 'הכנס נוסף',
|
'insert new': 'הכנס נוסף',
|
||||||
'insert new %s': 'הכנס %s נוסף',
|
'insert new %s': 'הכנס %s נוסף',
|
||||||
'inspect attributes': 'inspect attributes',
|
'inspect attributes': 'inspect attributes',
|
||||||
'Install': 'התקן',
|
|
||||||
'internal error': 'שגיאה מובנית',
|
'internal error': 'שגיאה מובנית',
|
||||||
'invalid password': 'סיסמא שגויה',
|
'invalid password': 'סיסמא שגויה',
|
||||||
'invalid request': 'בקשה לא תקינה',
|
'invalid request': 'בקשה לא תקינה',
|
||||||
@@ -197,7 +207,6 @@
|
|||||||
'loading...': 'טוען...',
|
'loading...': 'טוען...',
|
||||||
'locals': 'locals',
|
'locals': 'locals',
|
||||||
'login': 'התחבר',
|
'login': 'התחבר',
|
||||||
'Logout': 'התנתק',
|
|
||||||
'merge': 'מזג',
|
'merge': 'מזג',
|
||||||
'models': 'מבני נתונים',
|
'models': 'מבני נתונים',
|
||||||
'modules': 'מודולים',
|
'modules': 'מודולים',
|
||||||
@@ -208,9 +217,6 @@
|
|||||||
'no match': 'לא נמצאה התאמה',
|
'no match': 'לא נמצאה התאמה',
|
||||||
'or import from csv file': 'או יבא מקובץ csv',
|
'or import from csv file': 'או יבא מקובץ csv',
|
||||||
'or provide app url:': 'או ספק כתובת url של אפליקציה',
|
'or provide app url:': 'או ספק כתובת url של אפליקציה',
|
||||||
'Overwrite installed app': 'התקן על גבי אפלקציה מותקנת',
|
|
||||||
'Pack all': 'ארוז הכל',
|
|
||||||
'Pack compiled': 'ארוז מקומפל',
|
|
||||||
'pack plugin': 'ארוז תוסף',
|
'pack plugin': 'ארוז תוסף',
|
||||||
'password changed': 'סיסמא שונתה',
|
'password changed': 'סיסמא שונתה',
|
||||||
'plugin "%(plugin)s" deleted': 'תוסף "%(plugin)s" נמחק',
|
'plugin "%(plugin)s" deleted': 'תוסף "%(plugin)s" נמחק',
|
||||||
@@ -219,7 +225,6 @@
|
|||||||
'record': 'רשומה',
|
'record': 'רשומה',
|
||||||
'record does not exist': 'הרשומה אינה קיימת',
|
'record does not exist': 'הרשומה אינה קיימת',
|
||||||
'record id': 'מזהה רשומה',
|
'record id': 'מזהה רשומה',
|
||||||
'Remove compiled': 'הסר מקומפל',
|
|
||||||
'request': 'request',
|
'request': 'request',
|
||||||
'response': 'response',
|
'response': 'response',
|
||||||
'restore': 'שחזר',
|
'restore': 'שחזר',
|
||||||
@@ -228,9 +233,7 @@
|
|||||||
'session': 'session',
|
'session': 'session',
|
||||||
'session expired': 'תם הסשן',
|
'session expired': 'תם הסשן',
|
||||||
'shell': 'שורת פקודה',
|
'shell': 'שורת פקודה',
|
||||||
'Site': 'אתר',
|
|
||||||
'some files could not be removed': 'לא ניתן היה להסיר חלק מהקבצים',
|
'some files could not be removed': 'לא ניתן היה להסיר חלק מהקבצים',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': 'מצב',
|
'state': 'מצב',
|
||||||
'static': 'קבצים סטאטיים',
|
'static': 'קבצים סטאטיים',
|
||||||
'submit': 'שלח',
|
'submit': 'שלח',
|
||||||
@@ -251,7 +254,6 @@
|
|||||||
'unable to uninstall "%s"': 'לא ניתן להסיר את "%s"',
|
'unable to uninstall "%s"': 'לא ניתן להסיר את "%s"',
|
||||||
'unable to upgrade because "%s"': 'לא ניתן היה לשדרג כי "%s"',
|
'unable to upgrade because "%s"': 'לא ניתן היה לשדרג כי "%s"',
|
||||||
'uncheck all': 'הסר סימון מהכל',
|
'uncheck all': 'הסר סימון מהכל',
|
||||||
'Uninstall': 'הסר התקנה',
|
|
||||||
'update': 'עדכן',
|
'update': 'עדכן',
|
||||||
'update all languages': 'עדכן את כלל קיבצי השפה',
|
'update all languages': 'עדכן את כלל קיבצי השפה',
|
||||||
'upgrade now': 'upgrade now',
|
'upgrade now': 'upgrade now',
|
||||||
@@ -268,5 +270,3 @@
|
|||||||
'web2py is up to date': 'web2py מותקנת בגירסתה האחרונה',
|
'web2py is up to date': 'web2py מותקנת בגירסתה האחרונה',
|
||||||
'web2py upgraded; please restart it': 'web2py שודרגה; נא אתחל אותה',
|
'web2py upgraded; please restart it': 'web2py שודרגה; נא אתחל אותה',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,17 +1,20 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'it',
|
||||||
|
'!langname!': 'Italiano',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" è un\'espressione opzionale come "campo1=\'nuovo valore\'". Non si può fare "update" o "delete" dei risultati di un JOIN ',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" è un\'espressione opzionale come "campo1=\'nuovo valore\'". Non si può fare "update" o "delete" dei risultati di un JOIN ',
|
||||||
'%Y-%m-%d': '%d/%m/%Y',
|
'%Y-%m-%d': '%d/%m/%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
|
||||||
'%s rows deleted': '%s righe ("record") cancellate',
|
'%s %%{row} deleted': '%s righe ("record") cancellate',
|
||||||
'%s rows updated': '%s righe ("record") modificate',
|
'%s %%{row} updated': '%s righe ("record") modificate',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(qualcosa simile a "it-it")',
|
'(something like "it-it")': '(qualcosa simile a "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available: %s': 'È disponibile una nuova versione di web2py: %s',
|
'A new version of web2py is available: %s': 'È disponibile una nuova versione di web2py: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': "ATTENZIONE: L'accesso richiede una connessione sicura (HTTPS) o l'esecuzione di web2py in locale (connessione su localhost)",
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': "ATTENZIONE: L'accesso richiede una connessione sicura (HTTPS) o l'esecuzione di web2py in locale (connessione su localhost)",
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTZIONE: NON ESEGUIRE PIÙ TEST IN PARALLELO (I TEST NON SONO "THREAD SAFE")',
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTZIONE: NON ESEGUIRE PIÙ TEST IN PARALLELO (I TEST NON SONO "THREAD SAFE")',
|
||||||
'ATTENTION: you cannot edit the running application!': "ATTENZIONE: non puoi modificare l'applicazione correntemente in uso ",
|
'ATTENTION: you cannot edit the running application!': "ATTENZIONE: non puoi modificare l'applicazione correntemente in uso ",
|
||||||
'About': 'Informazioni',
|
'About': 'informazioni',
|
||||||
'About application': "Informazioni sull'applicazione",
|
'About application': "Informazioni sull'applicazione",
|
||||||
'Admin is disabled because insecure channel': 'amministrazione disabilitata: comunicazione non sicura',
|
'Admin is disabled because insecure channel': 'amministrazione disabilitata: comunicazione non sicura',
|
||||||
'Admin language': 'Admin language',
|
'Admin language': 'Admin language',
|
||||||
@@ -24,11 +27,16 @@
|
|||||||
'Available databases and tables': 'Database e tabelle disponibili',
|
'Available databases and tables': 'Database e tabelle disponibili',
|
||||||
'Cannot be empty': 'Non può essere vuoto',
|
'Cannot be empty': 'Non può essere vuoto',
|
||||||
'Cannot compile: there are errors in your app:': "Compilazione fallita: ci sono errori nell'applicazione.",
|
'Cannot compile: there are errors in your app:': "Compilazione fallita: ci sono errori nell'applicazione.",
|
||||||
|
'Change admin password': 'change admin password',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': 'Seleziona per cancellare',
|
'Check to delete': 'Seleziona per cancellare',
|
||||||
'Checking for upgrades...': 'Controllo aggiornamenti in corso...',
|
'Checking for upgrades...': 'Controllo aggiornamenti in corso...',
|
||||||
|
'Clean': 'pulisci',
|
||||||
|
'Compile': 'compila',
|
||||||
'Controller': 'Controller',
|
'Controller': 'Controller',
|
||||||
'Controllers': 'Controllers',
|
'Controllers': 'Controllers',
|
||||||
'Copyright': 'Copyright',
|
'Copyright': 'Copyright',
|
||||||
|
'Create': 'crea',
|
||||||
'Create new simple application': 'Crea nuova applicazione',
|
'Create new simple application': 'Crea nuova applicazione',
|
||||||
'Current request': 'Richiesta (request) corrente',
|
'Current request': 'Richiesta (request) corrente',
|
||||||
'Current response': 'Risposta (response) corrente',
|
'Current response': 'Risposta (response) corrente',
|
||||||
@@ -38,9 +46,10 @@
|
|||||||
'Date and Time': 'Data and Ora',
|
'Date and Time': 'Data and Ora',
|
||||||
'Delete': 'Cancella',
|
'Delete': 'Cancella',
|
||||||
'Delete:': 'Cancella:',
|
'Delete:': 'Cancella:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'Installa su Google App Engine',
|
'Deploy on Google App Engine': 'Installa su Google App Engine',
|
||||||
'EDIT': 'MODIFICA',
|
'EDIT': 'MODIFICA',
|
||||||
'Edit': 'Modifica',
|
'Edit': 'modifica',
|
||||||
'Edit This App': 'Modifica questa applicazione',
|
'Edit This App': 'Modifica questa applicazione',
|
||||||
'Edit application': 'Modifica applicazione',
|
'Edit application': 'Modifica applicazione',
|
||||||
'Edit current record': 'Modifica record corrente',
|
'Edit current record': 'Modifica record corrente',
|
||||||
@@ -48,12 +57,15 @@
|
|||||||
'Editing file "%s"': 'Modifica del file "%s"',
|
'Editing file "%s"': 'Modifica del file "%s"',
|
||||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||||
'Error logs for "%(app)s"': 'Log degli errori per "%(app)s"',
|
'Error logs for "%(app)s"': 'Log degli errori per "%(app)s"',
|
||||||
|
'Errors': 'errori',
|
||||||
'Exception instance attributes': 'Exception instance attributes',
|
'Exception instance attributes': 'Exception instance attributes',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'I test delle funzioni senza "doctests" risulteranno sempre [passed].',
|
'Functions with no doctests will result in [passed] tests.': 'I test delle funzioni senza "doctests" risulteranno sempre [passed].',
|
||||||
'Hello World': 'Salve Mondo',
|
'Hello World': 'Salve Mondo',
|
||||||
|
'Help': 'aiuto',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||||
'Import/Export': 'Importa/Esporta',
|
'Import/Export': 'Importa/Esporta',
|
||||||
'Index': 'Indice',
|
'Index': 'Indice',
|
||||||
|
'Install': 'installa',
|
||||||
'Installed applications': 'Applicazioni installate',
|
'Installed applications': 'Applicazioni installate',
|
||||||
'Internal State': 'Stato interno',
|
'Internal State': 'Stato interno',
|
||||||
'Invalid Query': 'Richiesta (query) non valida',
|
'Invalid Query': 'Richiesta (query) non valida',
|
||||||
@@ -65,6 +77,7 @@
|
|||||||
'License for': 'Licenza relativa a',
|
'License for': 'Licenza relativa a',
|
||||||
'Login': 'Accesso',
|
'Login': 'Accesso',
|
||||||
'Login to the Administrative Interface': "Accesso all'interfaccia amministrativa",
|
'Login to the Administrative Interface': "Accesso all'interfaccia amministrativa",
|
||||||
|
'Logout': 'uscita',
|
||||||
'Main Menu': 'Menu principale',
|
'Main Menu': 'Menu principale',
|
||||||
'Menu Model': 'Menu Modelli',
|
'Menu Model': 'Menu Modelli',
|
||||||
'Models': 'Modelli',
|
'Models': 'Modelli',
|
||||||
@@ -75,16 +88,22 @@
|
|||||||
'New simple application': 'New simple application',
|
'New simple application': 'New simple application',
|
||||||
'No databases in this application': 'Nessun database presente in questa applicazione',
|
'No databases in this application': 'Nessun database presente in questa applicazione',
|
||||||
'Original/Translation': 'Originale/Traduzione',
|
'Original/Translation': 'Originale/Traduzione',
|
||||||
|
'Overwrite installed app': 'sovrascrivi applicazione installata',
|
||||||
'PAM authenticated user, cannot change password here': 'utente autenticato tramite PAM, impossibile modificare password qui',
|
'PAM authenticated user, cannot change password here': 'utente autenticato tramite PAM, impossibile modificare password qui',
|
||||||
|
'Pack all': 'crea pacchetto',
|
||||||
|
'Pack compiled': 'crea pacchetto del codice compilato',
|
||||||
'Peeking at file': 'Uno sguardo al file',
|
'Peeking at file': 'Uno sguardo al file',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" nell\'applicazione',
|
'Plugin "%s" in application': 'Plugin "%s" nell\'applicazione',
|
||||||
'Plugins': 'I Plugins',
|
'Plugins': 'I Plugins',
|
||||||
'Powered by': 'Powered by',
|
'Powered by': 'Powered by',
|
||||||
'Query:': 'Richiesta (query):',
|
'Query:': 'Richiesta (query):',
|
||||||
|
'Remove compiled': 'rimozione codice compilato',
|
||||||
'Resolve Conflict file': 'File di risoluzione conflitto',
|
'Resolve Conflict file': 'File di risoluzione conflitto',
|
||||||
'Rows in table': 'Righe nella tabella',
|
'Rows in table': 'Righe nella tabella',
|
||||||
'Rows selected': 'Righe selezionate',
|
'Rows selected': 'Righe selezionate',
|
||||||
'Saved file hash:': 'Hash del file salvato:',
|
'Saved file hash:': 'Hash del file salvato:',
|
||||||
|
'Site': 'sito',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'Files statici',
|
'Static files': 'Files statici',
|
||||||
'Stylesheet': 'Foglio di stile (stylesheet)',
|
'Stylesheet': 'Foglio di stile (stylesheet)',
|
||||||
'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',
|
'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',
|
||||||
@@ -104,6 +123,7 @@
|
|||||||
'Unable to download app because:': 'Impossibile scaricare applicazione perché',
|
'Unable to download app because:': 'Impossibile scaricare applicazione perché',
|
||||||
'Unable to download because': 'Impossibile scaricare perché',
|
'Unable to download because': 'Impossibile scaricare perché',
|
||||||
'Unable to download because:': 'Unable to download because:',
|
'Unable to download because:': 'Unable to download because:',
|
||||||
|
'Uninstall': 'disinstalla',
|
||||||
'Update:': 'Aggiorna:',
|
'Update:': 'Aggiorna:',
|
||||||
'Upload & install packed application': 'Carica ed installa pacchetto con applicazione',
|
'Upload & install packed application': 'Carica ed installa pacchetto con applicazione',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
@@ -115,7 +135,6 @@
|
|||||||
'Welcome %s': 'Benvenuto %s',
|
'Welcome %s': 'Benvenuto %s',
|
||||||
'Welcome to web2py': 'Benvenuto su web2py',
|
'Welcome to web2py': 'Benvenuto su web2py',
|
||||||
'YES': 'SI',
|
'YES': 'SI',
|
||||||
'About': 'informazioni',
|
|
||||||
'additional code for your application': 'righe di codice aggiuntive per la tua applicazione',
|
'additional code for your application': 'righe di codice aggiuntive per la tua applicazione',
|
||||||
'admin disabled because no admin password': 'amministrazione disabilitata per mancanza di password amministrativa',
|
'admin disabled because no admin password': 'amministrazione disabilitata per mancanza di password amministrativa',
|
||||||
'admin disabled because not supported on google app engine': 'amministrazione non supportata da Google Apps Engine',
|
'admin disabled because not supported on google app engine': 'amministrazione non supportata da Google Apps Engine',
|
||||||
@@ -134,19 +153,14 @@
|
|||||||
'cache, errors and sessions cleaned': 'pulitura cache, errori and sessioni ',
|
'cache, errors and sessions cleaned': 'pulitura cache, errori and sessioni ',
|
||||||
'cannot create file': 'impossibile creare il file',
|
'cannot create file': 'impossibile creare il file',
|
||||||
'cannot upload file "%(filename)s"': 'impossibile caricare il file "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'impossibile caricare il file "%(filename)s"',
|
||||||
'Change admin password': 'change admin password',
|
|
||||||
'change password': 'cambia password',
|
'change password': 'cambia password',
|
||||||
'check all': 'controlla tutto',
|
'check all': 'controlla tutto',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': 'pulisci',
|
|
||||||
'click here for online examples': 'clicca per vedere gli esempi',
|
'click here for online examples': 'clicca per vedere gli esempi',
|
||||||
'click here for the administrative interface': "clicca per l'interfaccia amministrativa",
|
'click here for the administrative interface': "clicca per l'interfaccia amministrativa",
|
||||||
'click to check for upgrades': 'clicca per controllare presenza di aggiornamenti',
|
'click to check for upgrades': 'clicca per controllare presenza di aggiornamenti',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'Compile': 'compila',
|
|
||||||
'compiled application removed': "rimosso il codice compilato dell'applicazione",
|
'compiled application removed': "rimosso il codice compilato dell'applicazione",
|
||||||
'controllers': 'controllers',
|
'controllers': 'controllers',
|
||||||
'Create': 'crea',
|
|
||||||
'create file with filename:': 'crea un file col nome:',
|
'create file with filename:': 'crea un file col nome:',
|
||||||
'create new application:': 'create new application:',
|
'create new application:': 'create new application:',
|
||||||
'created by': 'creato da',
|
'created by': 'creato da',
|
||||||
@@ -163,15 +177,12 @@
|
|||||||
'delete': 'Cancella',
|
'delete': 'Cancella',
|
||||||
'delete all checked': 'cancella tutti i selezionati',
|
'delete all checked': 'cancella tutti i selezionati',
|
||||||
'delete plugin': 'cancella plugin',
|
'delete plugin': 'cancella plugin',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': 'progetta',
|
'design': 'progetta',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'done!': 'fatto!',
|
'done!': 'fatto!',
|
||||||
'Edit': 'modifica',
|
|
||||||
'edit controller': 'modifica controller',
|
'edit controller': 'modifica controller',
|
||||||
'edit profile': 'modifica profilo',
|
'edit profile': 'modifica profilo',
|
||||||
'edit views:': 'modifica viste (view):',
|
'edit views:': 'modifica viste (view):',
|
||||||
'Errors': 'errori',
|
|
||||||
'export as csv file': 'esporta come file CSV',
|
'export as csv file': 'esporta come file CSV',
|
||||||
'exposes': 'espone',
|
'exposes': 'espone',
|
||||||
'extends': 'estende',
|
'extends': 'estende',
|
||||||
@@ -184,12 +195,10 @@
|
|||||||
'file does not exist': 'file inesistente',
|
'file does not exist': 'file inesistente',
|
||||||
'file saved on %(time)s': "file salvato nell'istante %(time)s",
|
'file saved on %(time)s': "file salvato nell'istante %(time)s",
|
||||||
'file saved on %s': 'file salvato: %s',
|
'file saved on %s': 'file salvato: %s',
|
||||||
'Help': 'aiuto',
|
|
||||||
'htmledit': 'modifica come html',
|
'htmledit': 'modifica come html',
|
||||||
'includes': 'include',
|
'includes': 'include',
|
||||||
'insert new': 'inserisci nuovo',
|
'insert new': 'inserisci nuovo',
|
||||||
'insert new %s': 'inserisci nuovo %s',
|
'insert new %s': 'inserisci nuovo %s',
|
||||||
'Install': 'installa',
|
|
||||||
'internal error': 'errore interno',
|
'internal error': 'errore interno',
|
||||||
'invalid password': 'password non valida',
|
'invalid password': 'password non valida',
|
||||||
'invalid request': 'richiesta non valida',
|
'invalid request': 'richiesta non valida',
|
||||||
@@ -198,7 +207,6 @@
|
|||||||
'languages': 'linguaggi',
|
'languages': 'linguaggi',
|
||||||
'loading...': 'caricamento...',
|
'loading...': 'caricamento...',
|
||||||
'login': 'accesso',
|
'login': 'accesso',
|
||||||
'Logout': 'uscita',
|
|
||||||
'merge': 'unisci',
|
'merge': 'unisci',
|
||||||
'models': 'modelli',
|
'models': 'modelli',
|
||||||
'modules': 'moduli',
|
'modules': 'moduli',
|
||||||
@@ -209,9 +217,6 @@
|
|||||||
'no match': 'nessuna corrispondenza',
|
'no match': 'nessuna corrispondenza',
|
||||||
'or import from csv file': 'oppure importa da file CSV',
|
'or import from csv file': 'oppure importa da file CSV',
|
||||||
'or provide app url:': "oppure fornisci url dell'applicazione:",
|
'or provide app url:': "oppure fornisci url dell'applicazione:",
|
||||||
'Overwrite installed app': 'sovrascrivi applicazione installata',
|
|
||||||
'Pack all': 'crea pacchetto',
|
|
||||||
'Pack compiled': 'crea pacchetto del codice compilato',
|
|
||||||
'pack plugin': 'crea pacchetto del plugin',
|
'pack plugin': 'crea pacchetto del plugin',
|
||||||
'password changed': 'password modificata',
|
'password changed': 'password modificata',
|
||||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" cancellato',
|
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" cancellato',
|
||||||
@@ -220,15 +225,12 @@
|
|||||||
'record does not exist': 'il record non esiste',
|
'record does not exist': 'il record non esiste',
|
||||||
'record id': 'ID del record',
|
'record id': 'ID del record',
|
||||||
'register': 'registrazione',
|
'register': 'registrazione',
|
||||||
'Remove compiled': 'rimozione codice compilato',
|
|
||||||
'restore': 'ripristino',
|
'restore': 'ripristino',
|
||||||
'revert': 'versione precedente',
|
'revert': 'versione precedente',
|
||||||
'selected': 'selezionato',
|
'selected': 'selezionato',
|
||||||
'session expired': 'sessions scaduta',
|
'session expired': 'sessions scaduta',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'Site': 'sito',
|
|
||||||
'some files could not be removed': 'non è stato possibile rimuovere alcuni files',
|
'some files could not be removed': 'non è stato possibile rimuovere alcuni files',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': 'stato',
|
'state': 'stato',
|
||||||
'static': 'statico',
|
'static': 'statico',
|
||||||
'submit': 'invia',
|
'submit': 'invia',
|
||||||
@@ -249,7 +251,6 @@
|
|||||||
'unable to uninstall "%s"': 'impossibile disinstallare "%s"',
|
'unable to uninstall "%s"': 'impossibile disinstallare "%s"',
|
||||||
'unable to upgrade because "%s"': 'impossibile aggiornare perché "%s"',
|
'unable to upgrade because "%s"': 'impossibile aggiornare perché "%s"',
|
||||||
'uncheck all': 'smarca tutti',
|
'uncheck all': 'smarca tutti',
|
||||||
'Uninstall': 'disinstalla',
|
|
||||||
'update': 'aggiorna',
|
'update': 'aggiorna',
|
||||||
'update all languages': 'aggiorna tutti i linguaggi',
|
'update all languages': 'aggiorna tutti i linguaggi',
|
||||||
'upgrade web2py now': 'upgrade web2py now',
|
'upgrade web2py now': 'upgrade web2py now',
|
||||||
@@ -264,5 +265,3 @@
|
|||||||
'web2py is up to date': 'web2py è aggiornato',
|
'web2py is up to date': 'web2py è aggiornato',
|
||||||
'web2py upgraded; please restart it': 'web2py aggiornato; prego riavviarlo',
|
'web2py upgraded; please restart it': 'web2py aggiornato; prego riavviarlo',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,154 +1,95 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'!langcode!': 'ja-jp',
|
||||||
|
'!langname!': '日本語',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
|
'%s %%{row} deleted': '%s rows deleted',
|
||||||
|
'%s %%{row} updated': '%s rows updated',
|
||||||
'(requires internet access)': '(インターネットアクセスが必要)',
|
'(requires internet access)': '(インターネットアクセスが必要)',
|
||||||
'(something like "it-it")': '(例: "it-it")',
|
'(something like "it-it")': '(例: "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': '検索中: **%s** ファイル',
|
||||||
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '注意: 安全(HTTPS)な接続でログインするかlocalhostで実行されている必要があります。',
|
||||||
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': '注意: テストはスレッドセーフではないので複数のテストを同時に実行しないでください。',
|
||||||
|
'ATTENTION: you cannot edit the running application!': '注意: 実行中のアプリケーションは編集できません!',
|
||||||
'Abort': '中断',
|
'Abort': '中断',
|
||||||
'About application': 'アプリケーションについて',
|
|
||||||
'About': 'About',
|
'About': 'About',
|
||||||
|
'About application': 'アプリケーションについて',
|
||||||
'Additional code for your application': 'アプリケーションに必要な追加記述',
|
'Additional code for your application': 'アプリケーションに必要な追加記述',
|
||||||
'Admin language': '管理画面の言語',
|
'Admin language': '管理画面の言語',
|
||||||
'administrative interface': '管理画面',
|
|
||||||
'Administrator Password:': '管理者パスワード:',
|
'Administrator Password:': '管理者パスワード:',
|
||||||
'and rename it:': 'ファイル名を変更:',
|
|
||||||
'appadmin': 'アプリ管理画面',
|
|
||||||
'application "%s" uninstalled': '"%s"アプリケーションが削除されました',
|
|
||||||
'application compiled': 'アプリケーションがコンパイルされました',
|
|
||||||
'Application name:': 'アプリケーション名:',
|
'Application name:': 'アプリケーション名:',
|
||||||
'Are you sure you want to delete plugin "%s"?': '"%s"プラグインを削除してもよろしいですか?',
|
'Are you sure you want to delete plugin "%s"?': '"%s"プラグインを削除してもよろしいですか?',
|
||||||
'Are you sure you want to delete this object?': 'このオブジェクトを削除してもよろしいですか?',
|
'Are you sure you want to delete this object?': 'このオブジェクトを削除してもよろしいですか?',
|
||||||
'Are you sure you want to uninstall application "%s"?': '"%s"アプリケーションを削除してもよろしいですか?',
|
'Are you sure you want to uninstall application "%s"?': '"%s"アプリケーションを削除してもよろしいですか?',
|
||||||
'arguments': '引数',
|
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '注意: 安全(HTTPS)な接続でログインするかlocalhostで実行されている必要があります。',
|
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': '注意: テストはスレッドセーフではないので複数のテストを同時に実行しないでください。',
|
|
||||||
'ATTENTION: you cannot edit the running application!': '注意: 実行中のアプリケーションは編集できません!',
|
|
||||||
'Available databases and tables': '利用可能なデータベースとテーブル一覧',
|
'Available databases and tables': '利用可能なデータベースとテーブル一覧',
|
||||||
'back': '戻る',
|
|
||||||
'Basics': '基本情報',
|
'Basics': '基本情報',
|
||||||
'Begin': '開始',
|
'Begin': '開始',
|
||||||
'cache': 'cache',
|
|
||||||
'cannot upload file "%(filename)s"': '"%(filename)s"ファイルをアップロードできません',
|
|
||||||
'Change admin password': '管理者パスワード変更',
|
'Change admin password': '管理者パスワード変更',
|
||||||
'check all': '全てを選択',
|
|
||||||
'Check for upgrades': '更新チェック',
|
'Check for upgrades': '更新チェック',
|
||||||
'Checking for upgrades...': '更新を確認中...',
|
'Checking for upgrades...': '更新を確認中...',
|
||||||
'Clean': '一時データ削除',
|
'Clean': '一時データ削除',
|
||||||
'Click row to expand traceback': '列をクリックしてトレースバックを展開',
|
'Click row to expand traceback': '列をクリックしてトレースバックを展開',
|
||||||
'code': 'コード',
|
|
||||||
'collapse/expand all': '全て開閉する',
|
|
||||||
'Compile': 'コンパイル',
|
'Compile': 'コンパイル',
|
||||||
'compiled application removed': 'コンパイル済みのアプリケーションが削除されました',
|
|
||||||
'Controllers': 'コントローラ',
|
'Controllers': 'コントローラ',
|
||||||
'controllers': 'コントローラ',
|
|
||||||
'Count': '回数',
|
'Count': '回数',
|
||||||
'create file with filename:': 'ファイル名:',
|
|
||||||
'Create': '作成',
|
'Create': '作成',
|
||||||
'created by': '作成者',
|
|
||||||
'crontab': 'crontab',
|
|
||||||
'currently running': '現在実行中',
|
|
||||||
'currently saved or': '現在保存されているデータ または',
|
|
||||||
'database administration': 'データベース管理',
|
|
||||||
'db': 'db',
|
|
||||||
'defines tables': 'テーブル定義',
|
|
||||||
'delete all checked': '選択したデータを全て削除',
|
|
||||||
'delete plugin': 'プラグイン削除',
|
|
||||||
'Delete this file (you will be asked to confirm deletion)': 'ファイルの削除(確認画面が出ます)',
|
|
||||||
'Delete': '削除',
|
'Delete': '削除',
|
||||||
'Deploy on Google App Engine': 'Google App Engineにデプロイ',
|
'Delete this file (you will be asked to confirm deletion)': 'ファイルの削除(確認画面が出ます)',
|
||||||
'Deploy': 'デプロイ',
|
'Deploy': 'デプロイ',
|
||||||
'design': 'デザイン',
|
'Deploy on Google App Engine': 'Google App Engineにデプロイ',
|
||||||
'Detailed traceback description': '詳細なトレースバック内容',
|
'Detailed traceback description': '詳細なトレースバック内容',
|
||||||
'details': '詳細',
|
|
||||||
'direction: ltr': 'direction: ltr',
|
|
||||||
'Disable': '無効',
|
'Disable': '無効',
|
||||||
'docs': 'ドキュメント',
|
|
||||||
'download layouts': 'レイアウトのダウンロード',
|
|
||||||
'download plugins': 'プラグインのダウンロード',
|
|
||||||
'edit all': '全て編集',
|
|
||||||
'Edit application': 'アプリケーションを編集',
|
|
||||||
'edit views:': 'ビューの編集:',
|
|
||||||
'Edit': '編集',
|
'Edit': '編集',
|
||||||
|
'Edit application': 'アプリケーションを編集',
|
||||||
'Editing file "%s"': '"%s"ファイルを編集中',
|
'Editing file "%s"': '"%s"ファイルを編集中',
|
||||||
'Enable': '有効',
|
'Enable': '有効',
|
||||||
|
'Error': 'エラー',
|
||||||
'Error logs for "%(app)s"': '"%(app)s"のエラーログ',
|
'Error logs for "%(app)s"': '"%(app)s"のエラーログ',
|
||||||
'Error snapshot': 'エラー発生箇所',
|
'Error snapshot': 'エラー発生箇所',
|
||||||
'Error ticket': 'エラーチケット',
|
'Error ticket': 'エラーチケット',
|
||||||
'Error': 'エラー',
|
|
||||||
'Errors': 'エラー',
|
'Errors': 'エラー',
|
||||||
'Exception instance attributes': '例外インスタンス引数',
|
'Exception instance attributes': '例外インスタンス引数',
|
||||||
'exposes': '公開',
|
|
||||||
'exposes:': '公開:',
|
|
||||||
'extends': '継承',
|
|
||||||
'File': 'ファイル',
|
'File': 'ファイル',
|
||||||
'files': 'ファイル',
|
|
||||||
'filter': 'フィルタ',
|
|
||||||
'Frames': 'フレーム',
|
'Frames': 'フレーム',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'doctestsのない関数は自動的にテストをパスします。',
|
'Functions with no doctests will result in [passed] tests.': 'doctestsのない関数は自動的にテストをパスします。',
|
||||||
'Generate': 'アプリ生成',
|
'Generate': 'アプリ生成',
|
||||||
'Get from URL:': 'URLから取得:',
|
'Get from URL:': 'URLから取得:',
|
||||||
'go!': '実行!',
|
|
||||||
'Help': 'ヘルプ',
|
'Help': 'ヘルプ',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'もし上記のレポートにチケット番号が含まれる場合は、doctestを実行する前に、コントローラの実行で問題があったことを示します。これはインデントの問題やその関数の外部で問題があった場合に起きるが一般的です。\n緑色のタイトルは全てのテスト(もし定義されていれば)をパスしたことを示します。その場合、テスト結果は表示されません。',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'もし上記のレポートにチケット番号が含まれる場合は、doctestを実行する前に、コントローラの実行で問題があったことを示します。これはインデントの問題やその関数の外部で問題があった場合に起きるが一般的です。\n緑色のタイトルは全てのテスト(もし定義されていれば)をパスしたことを示します。その場合、テスト結果は表示されません。',
|
||||||
'includes': 'インクルード',
|
|
||||||
'index': 'index',
|
|
||||||
'inspect attributes': '引数の検査',
|
|
||||||
'Install': 'インストール',
|
'Install': 'インストール',
|
||||||
'Installed applications': 'アプリケーション一覧',
|
'Installed applications': 'アプリケーション一覧',
|
||||||
'Languages': '言語',
|
'Languages': '言語',
|
||||||
'languages': '言語',
|
|
||||||
'Last saved on:': '最終保存日時:',
|
'Last saved on:': '最終保存日時:',
|
||||||
'License for': 'License for',
|
'License for': 'License for',
|
||||||
'loading...': 'ロードしています...',
|
|
||||||
'locals': 'ローカル',
|
|
||||||
'Login to the Administrative Interface': '管理画面へログイン',
|
|
||||||
'Login': 'ログイン',
|
'Login': 'ログイン',
|
||||||
|
'Login to the Administrative Interface': '管理画面へログイン',
|
||||||
'Logout': 'ログアウト',
|
'Logout': 'ログアウト',
|
||||||
'Models': 'モデル',
|
'Models': 'モデル',
|
||||||
'models': 'モデル',
|
|
||||||
'Modules': 'モジュール',
|
'Modules': 'モジュール',
|
||||||
'modules': 'モジュール',
|
'NO': 'いいえ',
|
||||||
'New Application Wizard': '新規アプリケーション作成ウィザード',
|
'New Application Wizard': '新規アプリケーション作成ウィザード',
|
||||||
'New application wizard': '新規アプリケーション作成ウィザード',
|
'New application wizard': '新規アプリケーション作成ウィザード',
|
||||||
'new plugin installed': '新しいプラグインがインストールされました',
|
|
||||||
'New simple application': '新規アプリケーション',
|
'New simple application': '新規アプリケーション',
|
||||||
'No databases in this application': 'このアプリケーションにはデータベースが存在しません',
|
'No databases in this application': 'このアプリケーションにはデータベースが存在しません',
|
||||||
'NO': 'いいえ',
|
|
||||||
'online designer': 'オンラインデザイナー',
|
|
||||||
'Overwrite installed app': 'アプリケーションを上書き',
|
'Overwrite installed app': 'アプリケーションを上書き',
|
||||||
'Pack all': 'パッケージ化',
|
'Pack all': 'パッケージ化',
|
||||||
'Pack compiled': 'コンパイルデータのパッケージ化',
|
'Pack compiled': 'コンパイルデータのパッケージ化',
|
||||||
'pack plugin': 'プラグインのパッケージ化',
|
|
||||||
'Peeking at file': 'ファイルを参照',
|
'Peeking at file': 'ファイルを参照',
|
||||||
'plugin "%(plugin)s" deleted': '"%(plugin)s"プラグインは削除されました',
|
|
||||||
'Plugin "%s" in application': '"%s"プラグイン',
|
'Plugin "%s" in application': '"%s"プラグイン',
|
||||||
'Plugins': 'プラグイン',
|
'Plugins': 'プラグイン',
|
||||||
'plugins': 'プラグイン',
|
|
||||||
'Powered by': 'Powered by',
|
'Powered by': 'Powered by',
|
||||||
'Reload routes': 'ルーティング再読み込み',
|
'Reload routes': 'ルーティング再読み込み',
|
||||||
'Remove compiled': 'コンパイルデータの削除',
|
'Remove compiled': 'コンパイルデータの削除',
|
||||||
'request': 'リクエスト',
|
|
||||||
'response': 'レスポンス',
|
|
||||||
'restart': '最初からやり直し',
|
|
||||||
'restore': '復元',
|
|
||||||
'revert': '一つ前に戻す',
|
|
||||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "このファイルのテストを実行(全てのファイルに対して実行する場合は、'テスト'というボタンを使用できます)",
|
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "このファイルのテストを実行(全てのファイルに対して実行する場合は、'テスト'というボタンを使用できます)",
|
||||||
'Save': '保存',
|
'Save': '保存',
|
||||||
'Saved file hash:': '保存されたファイルハッシュ:',
|
'Saved file hash:': '保存されたファイルハッシュ:',
|
||||||
'Searching:': '検索中:',
|
|
||||||
'session expired': 'セッションの有効期限が切れました',
|
|
||||||
'session': 'セッション',
|
|
||||||
'shell': 'shell',
|
|
||||||
'Site': 'サイト',
|
'Site': 'サイト',
|
||||||
'skip to generate': 'スキップしてアプリ生成画面へ移動',
|
|
||||||
'Sorry, could not find mercurial installed': 'インストールされているmercurialが見つかりません',
|
'Sorry, could not find mercurial installed': 'インストールされているmercurialが見つかりません',
|
||||||
'Start a new app': '新規アプリの作成',
|
'Start a new app': '新規アプリの作成',
|
||||||
'Start wizard': 'ウィザードの開始',
|
'Start wizard': 'ウィザードの開始',
|
||||||
'state': 'state',
|
|
||||||
'Static files': '静的ファイル',
|
'Static files': '静的ファイル',
|
||||||
'static': '静的ファイル',
|
|
||||||
'Step': 'ステップ',
|
'Step': 'ステップ',
|
||||||
'test': 'テスト',
|
|
||||||
'Testing application': 'アプリケーションをテスト中',
|
'Testing application': 'アプリケーションをテスト中',
|
||||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'アプリケーションロジック、それぞれのURLパスはコントローラで公開されている各関数にマッピングされています',
|
'The application logic, each URL path is mapped in one exposed function in the controller': 'アプリケーションロジック、それぞれのURLパスはコントローラで公開されている各関数にマッピングされています',
|
||||||
'The data representation, define database tables and sets': 'データの表示方法, テーブルとセットの定義',
|
'The data representation, define database tables and sets': 'データの表示方法, テーブルとセットの定義',
|
||||||
@@ -160,27 +101,89 @@
|
|||||||
'There are no views': 'ビューがありません',
|
'There are no views': 'ビューがありません',
|
||||||
'These files are served without processing, your images go here': 'これらのファイルは直接参照されます, ここに画像が入ります',
|
'These files are served without processing, your images go here': 'これらのファイルは直接参照されます, ここに画像が入ります',
|
||||||
'Ticket ID': 'チケットID',
|
'Ticket ID': 'チケットID',
|
||||||
'to previous version.': '前のバージョンへ戻す。',
|
|
||||||
'To create a plugin, name a file/folder plugin_[name]': 'ファイル名/フォルダ名 plugin_[名称]としてプラグインを作成してください',
|
'To create a plugin, name a file/folder plugin_[name]': 'ファイル名/フォルダ名 plugin_[名称]としてプラグインを作成してください',
|
||||||
'Traceback': 'トレースバック',
|
'Traceback': 'トレースバック',
|
||||||
'Translation strings for the application': 'アプリケーションの翻訳文字列',
|
'Translation strings for the application': 'アプリケーションの翻訳文字列',
|
||||||
'Unable to download because:': '以下の理由でダウンロードできません:',
|
'Unable to download because:': '以下の理由でダウンロードできません:',
|
||||||
'uncheck all': '全ての選択を解除',
|
|
||||||
'Uninstall': 'アプリ削除',
|
'Uninstall': 'アプリ削除',
|
||||||
'update all languages': '全ての言語を更新',
|
|
||||||
'Upload a package:': 'パッケージをアップロード:',
|
'Upload a package:': 'パッケージをアップロード:',
|
||||||
'Upload and install packed application': 'パッケージのアップロードとインストール',
|
'Upload and install packed application': 'パッケージのアップロードとインストール',
|
||||||
'upload file:': 'ファイルをアップロード:',
|
|
||||||
'upload plugin file:': 'プラグインファイルをアップロード:',
|
|
||||||
'upload': 'アップロード',
|
|
||||||
'user': 'ユーザー',
|
|
||||||
'variables': '変数',
|
|
||||||
'Version': 'バージョン',
|
'Version': 'バージョン',
|
||||||
'Versioning': 'バージョン管理',
|
'Versioning': 'バージョン管理',
|
||||||
'Views': 'ビュー',
|
'Views': 'ビュー',
|
||||||
'views': 'ビュー',
|
|
||||||
'Web Framework': 'Web Framework',
|
'Web Framework': 'Web Framework',
|
||||||
'web2py is up to date': 'web2pyは最新です',
|
|
||||||
'web2py Recent Tweets': '最近のweb2pyTweets',
|
|
||||||
'YES': 'はい',
|
'YES': 'はい',
|
||||||
|
'administrative interface': '管理画面',
|
||||||
|
'and rename it:': 'ファイル名を変更:',
|
||||||
|
'appadmin': 'アプリ管理画面',
|
||||||
|
'application "%s" uninstalled': '"%s"アプリケーションが削除されました',
|
||||||
|
'application compiled': 'アプリケーションがコンパイルされました',
|
||||||
|
'arguments': '引数',
|
||||||
|
'back': '戻る',
|
||||||
|
'cache': 'cache',
|
||||||
|
'cannot upload file "%(filename)s"': '"%(filename)s"ファイルをアップロードできません',
|
||||||
|
'check all': '全てを選択',
|
||||||
|
'code': 'コード',
|
||||||
|
'collapse/expand all': '全て開閉する',
|
||||||
|
'compiled application removed': 'コンパイル済みのアプリケーションが削除されました',
|
||||||
|
'controllers': 'コントローラ',
|
||||||
|
'create file with filename:': 'ファイル名:',
|
||||||
|
'created by': '作成者',
|
||||||
|
'crontab': 'crontab',
|
||||||
|
'currently running': '現在実行中',
|
||||||
|
'currently saved or': '現在保存されているデータ または',
|
||||||
|
'database administration': 'データベース管理',
|
||||||
|
'db': 'db',
|
||||||
|
'defines tables': 'テーブル定義',
|
||||||
|
'delete all checked': '選択したデータを全て削除',
|
||||||
|
'delete plugin': 'プラグイン削除',
|
||||||
|
'design': 'デザイン',
|
||||||
|
'details': '詳細',
|
||||||
|
'direction: ltr': 'direction: ltr',
|
||||||
|
'docs': 'ドキュメント',
|
||||||
|
'download layouts': 'レイアウトのダウンロード',
|
||||||
|
'download plugins': 'プラグインのダウンロード',
|
||||||
|
'edit all': '全て編集',
|
||||||
|
'edit views:': 'ビューの編集:',
|
||||||
|
'exposes': '公開',
|
||||||
|
'exposes:': '公開:',
|
||||||
|
'extends': '継承',
|
||||||
|
'filter': 'フィルタ',
|
||||||
|
'go!': '実行!',
|
||||||
|
'includes': 'インクルード',
|
||||||
|
'index': 'index',
|
||||||
|
'inspect attributes': '引数の検査',
|
||||||
|
'languages': '言語',
|
||||||
|
'loading...': 'ロードしています...',
|
||||||
|
'locals': 'ローカル',
|
||||||
|
'models': 'モデル',
|
||||||
|
'modules': 'モジュール',
|
||||||
|
'new plugin installed': '新しいプラグインがインストールされました',
|
||||||
|
'online designer': 'オンラインデザイナー',
|
||||||
|
'pack plugin': 'プラグインのパッケージ化',
|
||||||
|
'plugin "%(plugin)s" deleted': '"%(plugin)s"プラグインは削除されました',
|
||||||
|
'plugins': 'プラグイン',
|
||||||
|
'request': 'リクエスト',
|
||||||
|
'response': 'レスポンス',
|
||||||
|
'restart': '最初からやり直し',
|
||||||
|
'restore': '復元',
|
||||||
|
'revert': '一つ前に戻す',
|
||||||
|
'session': 'セッション',
|
||||||
|
'session expired': 'セッションの有効期限が切れました',
|
||||||
|
'shell': 'shell',
|
||||||
|
'skip to generate': 'スキップしてアプリ生成画面へ移動',
|
||||||
|
'state': 'state',
|
||||||
|
'static': '静的ファイル',
|
||||||
|
'test': 'テスト',
|
||||||
|
'to previous version.': '前のバージョンへ戻す。',
|
||||||
|
'uncheck all': '全ての選択を解除',
|
||||||
|
'update all languages': '全ての言語を更新',
|
||||||
|
'upload': 'アップロード',
|
||||||
|
'upload file:': 'ファイルをアップロード:',
|
||||||
|
'upload plugin file:': 'プラグインファイルをアップロード:',
|
||||||
|
'user': 'ユーザー',
|
||||||
|
'variables': '変数',
|
||||||
|
'views': 'ビュー',
|
||||||
|
'web2py Recent Tweets': '最近のweb2pyTweets',
|
||||||
|
'web2py is up to date': 'web2pyは最新です',
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,21 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'pl',
|
||||||
|
'!langname!': 'Polska',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyrażeniem postaci "pole1=\'nowawartość\'". Nie możesz uaktualnić lub usunąć wyników z JOIN:',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyrażeniem postaci "pole1=\'nowawartość\'". Nie możesz uaktualnić lub usunąć wyników z JOIN:',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': 'Wierszy usuniętych: %s',
|
'%s %%{row} deleted': 'Wierszy usuniętych: %s',
|
||||||
'%s rows updated': 'Wierszy uaktualnionych: %s',
|
'%s %%{row} updated': 'Wierszy uaktualnionych: %s',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(coś podobnego do "it-it")',
|
'(something like "it-it")': '(coś podobnego do "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': 'Nowa wersja web2py jest dostępna',
|
'A new version of web2py is available': 'Nowa wersja web2py jest dostępna',
|
||||||
'A new version of web2py is available: %s': 'Nowa wersja web2py jest dostępna: %s',
|
'A new version of web2py is available: %s': 'Nowa wersja web2py jest dostępna: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'UWAGA: Wymagane jest bezpieczne (HTTPS) połączenie lub połączenie z lokalnego adresu.',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'UWAGA: Wymagane jest bezpieczne (HTTPS) połączenie lub połączenie z lokalnego adresu.',
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'UWAGA: TESTOWANIE NIE JEST BEZPIECZNE W ŚRODOWISKU WIELOWĄTKOWYM, TAK WIĘC NIE URUCHAMIAJ WIELU TESTÓW JEDNOCZEŚNIE.',
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'UWAGA: TESTOWANIE NIE JEST BEZPIECZNE W ŚRODOWISKU WIELOWĄTKOWYM, TAK WIĘC NIE URUCHAMIAJ WIELU TESTÓW JEDNOCZEŚNIE.',
|
||||||
'ATTENTION: you cannot edit the running application!': 'UWAGA: nie można edytować uruchomionych aplikacji!',
|
'ATTENTION: you cannot edit the running application!': 'UWAGA: nie można edytować uruchomionych aplikacji!',
|
||||||
'About': 'Informacje o',
|
'About': 'informacje',
|
||||||
'About application': 'Informacje o aplikacji',
|
'About application': 'Informacje o aplikacji',
|
||||||
'Additional code for your application': 'Additional code for your application',
|
'Additional code for your application': 'Additional code for your application',
|
||||||
'Admin is disabled because insecure channel': 'Panel administracyjny wyłączony z powodu braku bezpiecznego połączenia',
|
'Admin is disabled because insecure channel': 'Panel administracyjny wyłączony z powodu braku bezpiecznego połączenia',
|
||||||
@@ -28,9 +31,14 @@
|
|||||||
'Cannot be empty': 'Nie może być puste',
|
'Cannot be empty': 'Nie może być puste',
|
||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nie można skompilować: w Twojej aplikacji są błędy . Znajdź je, popraw a następnie spróbój ponownie.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nie można skompilować: w Twojej aplikacji są błędy . Znajdź je, popraw a następnie spróbój ponownie.',
|
||||||
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
||||||
|
'Change admin password': 'change admin password',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': 'Zaznacz aby usunąć',
|
'Check to delete': 'Zaznacz aby usunąć',
|
||||||
'Checking for upgrades...': 'Sprawdzanie aktualizacji...',
|
'Checking for upgrades...': 'Sprawdzanie aktualizacji...',
|
||||||
|
'Clean': 'oczyść',
|
||||||
|
'Compile': 'skompiluj',
|
||||||
'Controllers': 'Kontrolery',
|
'Controllers': 'Kontrolery',
|
||||||
|
'Create': 'create',
|
||||||
'Create new simple application': 'Utwórz nową aplikację',
|
'Create new simple application': 'Utwórz nową aplikację',
|
||||||
'Current request': 'Aktualne żądanie',
|
'Current request': 'Aktualne żądanie',
|
||||||
'Current response': 'Aktualna odpowiedź',
|
'Current response': 'Aktualna odpowiedź',
|
||||||
@@ -39,9 +47,11 @@
|
|||||||
'Date and Time': 'Data i godzina',
|
'Date and Time': 'Data i godzina',
|
||||||
'Delete': 'Usuń',
|
'Delete': 'Usuń',
|
||||||
'Delete:': 'Usuń:',
|
'Delete:': 'Usuń:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': 'Umieść na Google App Engine',
|
'Deploy on Google App Engine': 'Umieść na Google App Engine',
|
||||||
'Design for': 'Projekt dla',
|
'Design for': 'Projekt dla',
|
||||||
'EDIT': 'EDYTUJ',
|
'EDIT': 'EDYTUJ',
|
||||||
|
'Edit': 'edytuj',
|
||||||
'Edit application': 'Edycja aplikacji',
|
'Edit application': 'Edycja aplikacji',
|
||||||
'Edit current record': 'Edytuj aktualny rekord',
|
'Edit current record': 'Edytuj aktualny rekord',
|
||||||
'Editing Language file': 'Edytuj plik tłumaczeń',
|
'Editing Language file': 'Edytuj plik tłumaczeń',
|
||||||
@@ -49,11 +59,14 @@
|
|||||||
'Editing file "%s"': 'Edycja pliku "%s"',
|
'Editing file "%s"': 'Edycja pliku "%s"',
|
||||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||||
'Error logs for "%(app)s"': 'Wpisy błędów dla "%(app)s"',
|
'Error logs for "%(app)s"': 'Wpisy błędów dla "%(app)s"',
|
||||||
|
'Errors': 'błędy',
|
||||||
'Exception instance attributes': 'Exception instance attributes',
|
'Exception instance attributes': 'Exception instance attributes',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'Funkcje bez doctestów będą dołączone do [zaliczonych] testów.',
|
'Functions with no doctests will result in [passed] tests.': 'Funkcje bez doctestów będą dołączone do [zaliczonych] testów.',
|
||||||
'Hello World': 'Witaj Świecie',
|
'Hello World': 'Witaj Świecie',
|
||||||
|
'Help': 'pomoc',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Jeżeli powyższy raport zawiera numer biletu błędu, oznacza to błąd podczas wykonywania kontrolera przez próbą uruchomienia doctestów. Zazwyczaj jest to spowodowane nieprawidłowymi wcięciami linii kodu lub błędami w module poza ciałem funkcji.\nTytuł w kolorze zielonym oznacza, ze wszystkie (zdefiniowane) testy zakończyły się sukcesem. W tej sytuacji ich wyniki nie są pokazane.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Jeżeli powyższy raport zawiera numer biletu błędu, oznacza to błąd podczas wykonywania kontrolera przez próbą uruchomienia doctestów. Zazwyczaj jest to spowodowane nieprawidłowymi wcięciami linii kodu lub błędami w module poza ciałem funkcji.\nTytuł w kolorze zielonym oznacza, ze wszystkie (zdefiniowane) testy zakończyły się sukcesem. W tej sytuacji ich wyniki nie są pokazane.',
|
||||||
'Import/Export': 'Importuj/eksportuj',
|
'Import/Export': 'Importuj/eksportuj',
|
||||||
|
'Install': 'install',
|
||||||
'Installed applications': 'Zainstalowane aplikacje',
|
'Installed applications': 'Zainstalowane aplikacje',
|
||||||
'Internal State': 'Stan wewnętrzny',
|
'Internal State': 'Stan wewnętrzny',
|
||||||
'Invalid Query': 'Błędne zapytanie',
|
'Invalid Query': 'Błędne zapytanie',
|
||||||
@@ -64,6 +77,7 @@
|
|||||||
'License for': 'Licencja dla',
|
'License for': 'Licencja dla',
|
||||||
'Login': 'Zaloguj',
|
'Login': 'Zaloguj',
|
||||||
'Login to the Administrative Interface': 'Logowanie do panelu administracyjnego',
|
'Login to the Administrative Interface': 'Logowanie do panelu administracyjnego',
|
||||||
|
'Logout': 'wyloguj',
|
||||||
'Models': 'Modele',
|
'Models': 'Modele',
|
||||||
'Modules': 'Moduły',
|
'Modules': 'Moduły',
|
||||||
'NO': 'NIE',
|
'NO': 'NIE',
|
||||||
@@ -72,17 +86,22 @@
|
|||||||
'New simple application': 'New simple application',
|
'New simple application': 'New simple application',
|
||||||
'No databases in this application': 'Brak baz danych w tej aplikacji',
|
'No databases in this application': 'Brak baz danych w tej aplikacji',
|
||||||
'Original/Translation': 'Oryginał/tłumaczenie',
|
'Original/Translation': 'Oryginał/tłumaczenie',
|
||||||
|
'Overwrite installed app': 'overwrite installed app',
|
||||||
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
||||||
|
'Pack all': 'spakuj wszystko',
|
||||||
|
'Pack compiled': 'spakuj skompilowane',
|
||||||
'Peeking at file': 'Podgląd pliku',
|
'Peeking at file': 'Podgląd pliku',
|
||||||
'Plugin "%s" in application': 'Wtyczka "%s" w aplikacji',
|
'Plugin "%s" in application': 'Wtyczka "%s" w aplikacji',
|
||||||
'Plugins': 'Wtyczki',
|
'Plugins': 'Wtyczki',
|
||||||
'Powered by': 'Zasilane przez',
|
'Powered by': 'Zasilane przez',
|
||||||
'Query:': 'Zapytanie:',
|
'Query:': 'Zapytanie:',
|
||||||
|
'Remove compiled': 'usuń skompilowane',
|
||||||
'Resolve Conflict file': 'Rozwiąż konflikt plików',
|
'Resolve Conflict file': 'Rozwiąż konflikt plików',
|
||||||
'Rows in table': 'Wiersze w tabeli',
|
'Rows in table': 'Wiersze w tabeli',
|
||||||
'Rows selected': 'Wierszy wybranych',
|
'Rows selected': 'Wierszy wybranych',
|
||||||
'Saved file hash:': 'Suma kontrolna zapisanego pliku:',
|
'Saved file hash:': 'Suma kontrolna zapisanego pliku:',
|
||||||
'Searching:': 'Searching:',
|
'Site': 'strona główna',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': 'Pliki statyczne',
|
'Static files': 'Pliki statyczne',
|
||||||
'Sure you want to delete this object?': 'Czy na pewno chcesz usunąć ten obiekt?',
|
'Sure you want to delete this object?': 'Czy na pewno chcesz usunąć ten obiekt?',
|
||||||
'TM': 'TM',
|
'TM': 'TM',
|
||||||
@@ -108,6 +127,7 @@
|
|||||||
'Unable to download app': 'Nie można ściągnąć aplikacji',
|
'Unable to download app': 'Nie można ściągnąć aplikacji',
|
||||||
'Unable to download app because:': 'Unable to download app because:',
|
'Unable to download app because:': 'Unable to download app because:',
|
||||||
'Unable to download because': 'Unable to download because',
|
'Unable to download because': 'Unable to download because',
|
||||||
|
'Uninstall': 'odinstaluj',
|
||||||
'Update:': 'Uaktualnij:',
|
'Update:': 'Uaktualnij:',
|
||||||
'Upload & install packed application': 'Upload & install packed application',
|
'Upload & install packed application': 'Upload & install packed application',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
@@ -118,7 +138,6 @@
|
|||||||
'Views': 'Widoki',
|
'Views': 'Widoki',
|
||||||
'Welcome to web2py': 'Witaj w web2py',
|
'Welcome to web2py': 'Witaj w web2py',
|
||||||
'YES': 'TAK',
|
'YES': 'TAK',
|
||||||
'About': 'informacje',
|
|
||||||
'additional code for your application': 'dodatkowy kod Twojej aplikacji',
|
'additional code for your application': 'dodatkowy kod Twojej aplikacji',
|
||||||
'admin disabled because no admin password': 'panel administracyjny wyłączony z powodu braku hasła administracyjnego',
|
'admin disabled because no admin password': 'panel administracyjny wyłączony z powodu braku hasła administracyjnego',
|
||||||
'admin disabled because not supported on google app engine': 'panel administracyjny wyłączony z powodu braku wsparcia na google apps engine',
|
'admin disabled because not supported on google app engine': 'panel administracyjny wyłączony z powodu braku wsparcia na google apps engine',
|
||||||
@@ -137,19 +156,14 @@
|
|||||||
'cache, errors and sessions cleaned': 'pamięć podręczna, bilety błędów oraz pliki sesji zostały wyczyszczone',
|
'cache, errors and sessions cleaned': 'pamięć podręczna, bilety błędów oraz pliki sesji zostały wyczyszczone',
|
||||||
'cannot create file': 'nie można utworzyć pliku',
|
'cannot create file': 'nie można utworzyć pliku',
|
||||||
'cannot upload file "%(filename)s"': 'nie można wysłać pliku "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'nie można wysłać pliku "%(filename)s"',
|
||||||
'Change admin password': 'change admin password',
|
|
||||||
'check all': 'zaznacz wszystko',
|
'check all': 'zaznacz wszystko',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': 'oczyść',
|
|
||||||
'click here for online examples': 'kliknij aby przejść do interaktywnych przykładów',
|
'click here for online examples': 'kliknij aby przejść do interaktywnych przykładów',
|
||||||
'click here for the administrative interface': 'kliknij aby przejść do panelu administracyjnego',
|
'click here for the administrative interface': 'kliknij aby przejść do panelu administracyjnego',
|
||||||
'click to check for upgrades': 'kliknij aby sprawdzić aktualizacje',
|
'click to check for upgrades': 'kliknij aby sprawdzić aktualizacje',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'Compile': 'skompiluj',
|
|
||||||
'compiled application removed': 'skompilowana aplikacja została usunięta',
|
'compiled application removed': 'skompilowana aplikacja została usunięta',
|
||||||
'controllers': 'kontrolery',
|
'controllers': 'kontrolery',
|
||||||
'Create': 'create',
|
|
||||||
'create file with filename:': 'utwórz plik o nazwie:',
|
'create file with filename:': 'utwórz plik o nazwie:',
|
||||||
'create new application:': 'utwórz nową aplikację:',
|
'create new application:': 'utwórz nową aplikację:',
|
||||||
'created by': 'utworzone przez',
|
'created by': 'utworzone przez',
|
||||||
@@ -165,16 +179,13 @@
|
|||||||
'delete': 'usuń',
|
'delete': 'usuń',
|
||||||
'delete all checked': 'usuń wszystkie zaznaczone',
|
'delete all checked': 'usuń wszystkie zaznaczone',
|
||||||
'delete plugin': 'usuń wtyczkę',
|
'delete plugin': 'usuń wtyczkę',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': 'projektuj',
|
'design': 'projektuj',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'done!': 'zrobione!',
|
'done!': 'zrobione!',
|
||||||
'download layouts': 'download layouts',
|
'download layouts': 'download layouts',
|
||||||
'download plugins': 'download plugins',
|
'download plugins': 'download plugins',
|
||||||
'Edit': 'edytuj',
|
|
||||||
'edit controller': 'edytuj kontroler',
|
'edit controller': 'edytuj kontroler',
|
||||||
'edit views:': 'edit views:',
|
'edit views:': 'edit views:',
|
||||||
'Errors': 'błędy',
|
|
||||||
'export as csv file': 'eksportuj jako plik csv',
|
'export as csv file': 'eksportuj jako plik csv',
|
||||||
'exposes': 'eksponuje',
|
'exposes': 'eksponuje',
|
||||||
'extends': 'rozszerza',
|
'extends': 'rozszerza',
|
||||||
@@ -189,14 +200,11 @@
|
|||||||
'file does not exist': 'plik nie istnieje',
|
'file does not exist': 'plik nie istnieje',
|
||||||
'file saved on %(time)s': 'plik zapisany o %(time)s',
|
'file saved on %(time)s': 'plik zapisany o %(time)s',
|
||||||
'file saved on %s': 'plik zapisany o %s',
|
'file saved on %s': 'plik zapisany o %s',
|
||||||
'files': 'files',
|
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'pomoc',
|
|
||||||
'htmledit': 'edytuj HTML',
|
'htmledit': 'edytuj HTML',
|
||||||
'includes': 'zawiera',
|
'includes': 'zawiera',
|
||||||
'insert new': 'wstaw nowy rekord tabeli',
|
'insert new': 'wstaw nowy rekord tabeli',
|
||||||
'insert new %s': 'wstaw nowy rekord do tabeli %s',
|
'insert new %s': 'wstaw nowy rekord do tabeli %s',
|
||||||
'Install': 'install',
|
|
||||||
'internal error': 'wewnętrzny błąd',
|
'internal error': 'wewnętrzny błąd',
|
||||||
'invalid password': 'błędne hasło',
|
'invalid password': 'błędne hasło',
|
||||||
'invalid request': 'błędne zapytanie',
|
'invalid request': 'błędne zapytanie',
|
||||||
@@ -206,7 +214,6 @@
|
|||||||
'languages updated': 'pliki tłumaczeń zostały uaktualnione',
|
'languages updated': 'pliki tłumaczeń zostały uaktualnione',
|
||||||
'loading...': 'wczytywanie...',
|
'loading...': 'wczytywanie...',
|
||||||
'login': 'zaloguj',
|
'login': 'zaloguj',
|
||||||
'Logout': 'wyloguj',
|
|
||||||
'merge': 'zespól',
|
'merge': 'zespól',
|
||||||
'models': 'modele',
|
'models': 'modele',
|
||||||
'modules': 'moduły',
|
'modules': 'moduły',
|
||||||
@@ -218,9 +225,6 @@
|
|||||||
'or import from csv file': 'lub zaimportuj z pliku csv',
|
'or import from csv file': 'lub zaimportuj z pliku csv',
|
||||||
'or provide app url:': 'or provide app url:',
|
'or provide app url:': 'or provide app url:',
|
||||||
'or provide application url:': 'lub podaj url aplikacji:',
|
'or provide application url:': 'lub podaj url aplikacji:',
|
||||||
'Overwrite installed app': 'overwrite installed app',
|
|
||||||
'Pack all': 'spakuj wszystko',
|
|
||||||
'Pack compiled': 'spakuj skompilowane',
|
|
||||||
'pack plugin': 'spakuj wtyczkę',
|
'pack plugin': 'spakuj wtyczkę',
|
||||||
'password changed': 'password changed',
|
'password changed': 'password changed',
|
||||||
'plugin "%(plugin)s" deleted': 'wtyczka "%(plugin)s" została usunięta',
|
'plugin "%(plugin)s" deleted': 'wtyczka "%(plugin)s" została usunięta',
|
||||||
@@ -229,16 +233,13 @@
|
|||||||
'record': 'rekord',
|
'record': 'rekord',
|
||||||
'record does not exist': 'rekord nie istnieje',
|
'record does not exist': 'rekord nie istnieje',
|
||||||
'record id': 'ID rekordu',
|
'record id': 'ID rekordu',
|
||||||
'Remove compiled': 'usuń skompilowane',
|
|
||||||
'restore': 'odtwórz',
|
'restore': 'odtwórz',
|
||||||
'revert': 'przywróć',
|
'revert': 'przywróć',
|
||||||
'save': 'zapisz',
|
'save': 'zapisz',
|
||||||
'selected': 'zaznaczone',
|
'selected': 'zaznaczone',
|
||||||
'session expired': 'sesja wygasła',
|
'session expired': 'sesja wygasła',
|
||||||
'shell': 'powłoka',
|
'shell': 'powłoka',
|
||||||
'Site': 'strona główna',
|
|
||||||
'some files could not be removed': 'niektóre pliki nie mogły zostać usunięte',
|
'some files could not be removed': 'niektóre pliki nie mogły zostać usunięte',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': 'stan',
|
'state': 'stan',
|
||||||
'static': 'pliki statyczne',
|
'static': 'pliki statyczne',
|
||||||
'submit': 'wyślij',
|
'submit': 'wyślij',
|
||||||
@@ -259,7 +260,6 @@
|
|||||||
'unable to uninstall "%s"': 'nie można odinstalować "%s"',
|
'unable to uninstall "%s"': 'nie można odinstalować "%s"',
|
||||||
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
||||||
'uncheck all': 'odznacz wszystko',
|
'uncheck all': 'odznacz wszystko',
|
||||||
'Uninstall': 'odinstaluj',
|
|
||||||
'update': 'uaktualnij',
|
'update': 'uaktualnij',
|
||||||
'update all languages': 'uaktualnij wszystkie pliki tłumaczeń',
|
'update all languages': 'uaktualnij wszystkie pliki tłumaczeń',
|
||||||
'upgrade web2py now': 'upgrade web2py now',
|
'upgrade web2py now': 'upgrade web2py now',
|
||||||
@@ -275,5 +275,3 @@
|
|||||||
'web2py is up to date': 'web2py jest aktualne',
|
'web2py is up to date': 'web2py jest aktualne',
|
||||||
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
{
|
||||||
|
# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],
|
||||||
|
'file': ['files'],
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
{
|
||||||
|
# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],
|
||||||
|
'файл': ['файла','файлов'],
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
{
|
||||||
|
# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],
|
||||||
|
'файл': ['файли','файлів'],
|
||||||
|
}
|
||||||
@@ -1,18 +1,21 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'pt',
|
||||||
|
'!langname!': 'Português',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "campo1=\'novo_valor\'". Não é permitido atualizar ou apagar resultados de um JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "campo1=\'novo_valor\'". Não é permitido atualizar ou apagar resultados de um JOIN',
|
||||||
'%Y-%m-%d': '%d/%m/%Y',
|
'%Y-%m-%d': '%d/%m/%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
|
||||||
'%s rows deleted': '%s registros apagados',
|
'%s %%{row} deleted': '%s registros apagados',
|
||||||
'%s rows updated': '%s registros atualizados',
|
'%s %%{row} updated': '%s registros atualizados',
|
||||||
'(requires internet access)': '(requer acesso a internet)',
|
'(requires internet access)': '(requer acesso a internet)',
|
||||||
'(something like "it-it")': '(algo como "it-it")',
|
'(something like "it-it")': '(algo como "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': 'Está disponível uma nova versão do web2py',
|
'A new version of web2py is available': 'Está disponível uma nova versão do web2py',
|
||||||
'A new version of web2py is available: %s': 'Está disponível uma nova versão do web2py: %s',
|
'A new version of web2py is available: %s': 'Está disponível uma nova versão do web2py: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENÇÃO o login requer uma conexão segura (HTTPS) ou executar de localhost.',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENÇÃO o login requer uma conexão segura (HTTPS) ou executar de localhost.',
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENÇÃO OS TESTES NÃO THREAD SAFE, NÃO EFETUE MÚLTIPLOS TESTES AO MESMO TEMPO.',
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENÇÃO OS TESTES NÃO THREAD SAFE, NÃO EFETUE MÚLTIPLOS TESTES AO MESMO TEMPO.',
|
||||||
'ATTENTION: you cannot edit the running application!': 'ATENÇÃO: Não pode modificar a aplicação em execução!',
|
'ATTENTION: you cannot edit the running application!': 'ATENÇÃO: Não pode modificar a aplicação em execução!',
|
||||||
'About': 'Sobre',
|
'About': 'sobre',
|
||||||
'About application': 'Sobre a aplicação',
|
'About application': 'Sobre a aplicação',
|
||||||
'Additional code for your application': 'Additional code for your application',
|
'Additional code for your application': 'Additional code for your application',
|
||||||
'Admin is disabled because insecure channel': 'Admin desabilitado pois o canal não é seguro',
|
'Admin is disabled because insecure channel': 'Admin desabilitado pois o canal não é seguro',
|
||||||
@@ -30,12 +33,17 @@
|
|||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Não é possível compilar: Existem erros em sua aplicação. Depure, corrija os errros e tente novamente',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Não é possível compilar: Existem erros em sua aplicação. Depure, corrija os errros e tente novamente',
|
||||||
'Cannot compile: there are errors in your app:': 'Não é possível compilar: Existem erros em sua aplicação',
|
'Cannot compile: there are errors in your app:': 'Não é possível compilar: Existem erros em sua aplicação',
|
||||||
'Change Password': 'Trocar Senha',
|
'Change Password': 'Trocar Senha',
|
||||||
|
'Change admin password': 'mudar senha de administrador',
|
||||||
|
'Check for upgrades': 'checar por atualizações',
|
||||||
'Check to delete': 'Marque para apagar',
|
'Check to delete': 'Marque para apagar',
|
||||||
'Checking for upgrades...': 'Buscando atualizações...',
|
'Checking for upgrades...': 'Buscando atualizações...',
|
||||||
|
'Clean': 'limpar',
|
||||||
'Click row to expand traceback': 'Clique em uma coluna para expandir o log do erro',
|
'Click row to expand traceback': 'Clique em uma coluna para expandir o log do erro',
|
||||||
'Client IP': 'IP do cliente',
|
'Client IP': 'IP do cliente',
|
||||||
|
'Compile': 'compilar',
|
||||||
'Controllers': 'Controladores',
|
'Controllers': 'Controladores',
|
||||||
'Count': 'Contagem',
|
'Count': 'Contagem',
|
||||||
|
'Create': 'criar',
|
||||||
'Create new application using the Wizard': 'Criar nova aplicação utilizando o assistente',
|
'Create new application using the Wizard': 'Criar nova aplicação utilizando o assistente',
|
||||||
'Create new simple application': 'Crie uma nova aplicação',
|
'Create new simple application': 'Crie uma nova aplicação',
|
||||||
'Current request': 'Requisição atual',
|
'Current request': 'Requisição atual',
|
||||||
@@ -45,12 +53,14 @@
|
|||||||
'Date and Time': 'Data e Hora',
|
'Date and Time': 'Data e Hora',
|
||||||
'Delete': 'Apague',
|
'Delete': 'Apague',
|
||||||
'Delete:': 'Apague:',
|
'Delete:': 'Apague:',
|
||||||
|
'Deploy': 'publicar',
|
||||||
'Deploy on Google App Engine': 'Publicar no Google App Engine',
|
'Deploy on Google App Engine': 'Publicar no Google App Engine',
|
||||||
'Description': 'Descrição',
|
'Description': 'Descrição',
|
||||||
'Design for': 'Projeto de',
|
'Design for': 'Projeto de',
|
||||||
'Detailed traceback description': 'Detailed traceback description',
|
'Detailed traceback description': 'Detailed traceback description',
|
||||||
'E-mail': 'E-mail',
|
'E-mail': 'E-mail',
|
||||||
'EDIT': 'EDITAR',
|
'EDIT': 'EDITAR',
|
||||||
|
'Edit': 'editar',
|
||||||
'Edit Profile': 'Editar Perfil',
|
'Edit Profile': 'Editar Perfil',
|
||||||
'Edit application': 'Editar aplicação',
|
'Edit application': 'Editar aplicação',
|
||||||
'Edit current record': 'Editar o registro atual',
|
'Edit current record': 'Editar o registro atual',
|
||||||
@@ -62,6 +72,7 @@
|
|||||||
'Error logs for "%(app)s"': 'Logs de erro para "%(app)s"',
|
'Error logs for "%(app)s"': 'Logs de erro para "%(app)s"',
|
||||||
'Error snapshot': 'Error snapshot',
|
'Error snapshot': 'Error snapshot',
|
||||||
'Error ticket': 'Error ticket',
|
'Error ticket': 'Error ticket',
|
||||||
|
'Errors': 'erros',
|
||||||
'Exception instance attributes': 'Atributos da instancia de excessão',
|
'Exception instance attributes': 'Atributos da instancia de excessão',
|
||||||
'File': 'Arquivo',
|
'File': 'Arquivo',
|
||||||
'First name': 'Nome',
|
'First name': 'Nome',
|
||||||
@@ -69,8 +80,10 @@
|
|||||||
'Functions with no doctests will result in [passed] tests.': 'Funções sem doctests resultarão em testes [aceitos].',
|
'Functions with no doctests will result in [passed] tests.': 'Funções sem doctests resultarão em testes [aceitos].',
|
||||||
'Group ID': 'ID do Grupo',
|
'Group ID': 'ID do Grupo',
|
||||||
'Hello World': 'Olá Mundo',
|
'Hello World': 'Olá Mundo',
|
||||||
|
'Help': 'ajuda',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Se o relatório acima contém um número de ticket, isso indica uma falha no controlador em execução, antes de tantar executar os doctests. Isto acontece geralmente por erro de endentação ou erro fora do código da função.\nO titulo em verde indica que os testes (se definidos) passaram. Neste caso os testes não são mostrados.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Se o relatório acima contém um número de ticket, isso indica uma falha no controlador em execução, antes de tantar executar os doctests. Isto acontece geralmente por erro de endentação ou erro fora do código da função.\nO titulo em verde indica que os testes (se definidos) passaram. Neste caso os testes não são mostrados.',
|
||||||
'Import/Export': 'Importar/Exportar',
|
'Import/Export': 'Importar/Exportar',
|
||||||
|
'Install': 'instalar',
|
||||||
'Installed applications': 'Aplicações instaladas',
|
'Installed applications': 'Aplicações instaladas',
|
||||||
'Internal State': 'Estado Interno',
|
'Internal State': 'Estado Interno',
|
||||||
'Invalid Query': 'Consulta inválida',
|
'Invalid Query': 'Consulta inválida',
|
||||||
@@ -83,7 +96,7 @@
|
|||||||
'License for': 'Licença para',
|
'License for': 'Licença para',
|
||||||
'Login': 'Entrar',
|
'Login': 'Entrar',
|
||||||
'Login to the Administrative Interface': 'Entrar na interface adminitrativa',
|
'Login to the Administrative Interface': 'Entrar na interface adminitrativa',
|
||||||
'Logout': 'Sair',
|
'Logout': 'finalizar sessão',
|
||||||
'Lost Password': 'Senha perdida',
|
'Lost Password': 'Senha perdida',
|
||||||
'Models': 'Modelos',
|
'Models': 'Modelos',
|
||||||
'Modules': 'Módulos',
|
'Modules': 'Módulos',
|
||||||
@@ -95,7 +108,10 @@
|
|||||||
'No databases in this application': 'Não existem bancos de dados nesta aplicação',
|
'No databases in this application': 'Não existem bancos de dados nesta aplicação',
|
||||||
'Origin': 'Origem',
|
'Origin': 'Origem',
|
||||||
'Original/Translation': 'Original/Tradução',
|
'Original/Translation': 'Original/Tradução',
|
||||||
|
'Overwrite installed app': 'sobrescrever aplicação instalada',
|
||||||
'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, não pode alterar a senha por aqui',
|
'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, não pode alterar a senha por aqui',
|
||||||
|
'Pack all': 'criar pacote',
|
||||||
|
'Pack compiled': 'criar pacote compilado',
|
||||||
'Password': 'Senha',
|
'Password': 'Senha',
|
||||||
'Peeking at file': 'Visualizando arquivo',
|
'Peeking at file': 'Visualizando arquivo',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" na aplicação',
|
'Plugin "%s" in application': 'Plugin "%s" na aplicação',
|
||||||
@@ -105,12 +121,14 @@
|
|||||||
'Record ID': 'ID do Registro',
|
'Record ID': 'ID do Registro',
|
||||||
'Register': 'Registrar-se',
|
'Register': 'Registrar-se',
|
||||||
'Registration key': 'Chave de registro',
|
'Registration key': 'Chave de registro',
|
||||||
|
'Remove compiled': 'eliminar compilados',
|
||||||
'Resolve Conflict file': 'Arquivo de resolução de conflito',
|
'Resolve Conflict file': 'Arquivo de resolução de conflito',
|
||||||
'Role': 'Papel',
|
'Role': 'Papel',
|
||||||
'Rows in table': 'Registros na tabela',
|
'Rows in table': 'Registros na tabela',
|
||||||
'Rows selected': 'Registros selecionados',
|
'Rows selected': 'Registros selecionados',
|
||||||
'Saved file hash:': 'Hash do arquivo salvo:',
|
'Saved file hash:': 'Hash do arquivo salvo:',
|
||||||
'Searching:': 'Searching:',
|
'Site': 'site',
|
||||||
|
'Start wizard': 'iniciar assistente',
|
||||||
'Static files': 'Arquivos estáticos',
|
'Static files': 'Arquivos estáticos',
|
||||||
'Sure you want to delete this object?': 'Tem certeza que deseja apaagr este objeto?',
|
'Sure you want to delete this object?': 'Tem certeza que deseja apaagr este objeto?',
|
||||||
'TM': 'MR',
|
'TM': 'MR',
|
||||||
@@ -140,6 +158,7 @@
|
|||||||
'Unable to download app': 'Não é possível baixar a aplicação',
|
'Unable to download app': 'Não é possível baixar a aplicação',
|
||||||
'Unable to download app because:': 'Não é possível baixar a aplicação porque:',
|
'Unable to download app because:': 'Não é possível baixar a aplicação porque:',
|
||||||
'Unable to download because': 'Não é possível baixar porque',
|
'Unable to download because': 'Não é possível baixar porque',
|
||||||
|
'Uninstall': 'desinstalar',
|
||||||
'Update:': 'Atualizar:',
|
'Update:': 'Atualizar:',
|
||||||
'Upload & install packed application': 'Faça upload e instale uma aplicação empacotada',
|
'Upload & install packed application': 'Faça upload e instale uma aplicação empacotada',
|
||||||
'Upload a package:': 'Faça upload de um pacote:',
|
'Upload a package:': 'Faça upload de um pacote:',
|
||||||
@@ -151,7 +170,6 @@
|
|||||||
'Views': 'Visões',
|
'Views': 'Visões',
|
||||||
'Welcome to web2py': 'Bem-vindo ao web2py',
|
'Welcome to web2py': 'Bem-vindo ao web2py',
|
||||||
'YES': 'SIM',
|
'YES': 'SIM',
|
||||||
'About': 'sobre',
|
|
||||||
'additional code for your application': 'código adicional para sua aplicação',
|
'additional code for your application': 'código adicional para sua aplicação',
|
||||||
'admin disabled because no admin password': ' admin desabilitado por falta de senha definida',
|
'admin disabled because no admin password': ' admin desabilitado por falta de senha definida',
|
||||||
'admin disabled because not supported on google app engine': 'admin dehabilitado, não é soportado no GAE',
|
'admin disabled because not supported on google app engine': 'admin dehabilitado, não é soportado no GAE',
|
||||||
@@ -171,10 +189,7 @@
|
|||||||
'cache, errors and sessions cleaned': 'cache, erros e sessões eliminadas',
|
'cache, errors and sessions cleaned': 'cache, erros e sessões eliminadas',
|
||||||
'cannot create file': 'Não é possível criar o arquivo',
|
'cannot create file': 'Não é possível criar o arquivo',
|
||||||
'cannot upload file "%(filename)s"': 'não é possível fazer upload do arquivo "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'não é possível fazer upload do arquivo "%(filename)s"',
|
||||||
'Change admin password': 'mudar senha de administrador',
|
|
||||||
'check all': 'marcar todos',
|
'check all': 'marcar todos',
|
||||||
'Check for upgrades': 'checar por atualizações',
|
|
||||||
'Clean': 'limpar',
|
|
||||||
'click here for online examples': 'clique para ver exemplos online',
|
'click here for online examples': 'clique para ver exemplos online',
|
||||||
'click here for the administrative interface': 'Clique aqui para acessar a interface administrativa',
|
'click here for the administrative interface': 'Clique aqui para acessar a interface administrativa',
|
||||||
'click to check for upgrades': 'clique aqui para checar por atualizações',
|
'click to check for upgrades': 'clique aqui para checar por atualizações',
|
||||||
@@ -182,10 +197,8 @@
|
|||||||
'code': 'código',
|
'code': 'código',
|
||||||
'collapse/expand all': 'collapse/expand all',
|
'collapse/expand all': 'collapse/expand all',
|
||||||
'commit (mercurial)': 'commit (mercurial)',
|
'commit (mercurial)': 'commit (mercurial)',
|
||||||
'Compile': 'compilar',
|
|
||||||
'compiled application removed': 'aplicação compilada removida',
|
'compiled application removed': 'aplicação compilada removida',
|
||||||
'controllers': 'controladores',
|
'controllers': 'controladores',
|
||||||
'Create': 'criar',
|
|
||||||
'create file with filename:': 'criar um arquivo com o nome:',
|
'create file with filename:': 'criar um arquivo com o nome:',
|
||||||
'create new application:': 'nome da nova aplicação:',
|
'create new application:': 'nome da nova aplicação:',
|
||||||
'created by': 'criado por',
|
'created by': 'criado por',
|
||||||
@@ -202,16 +215,13 @@
|
|||||||
'delete': 'apagar',
|
'delete': 'apagar',
|
||||||
'delete all checked': 'apagar marcados',
|
'delete all checked': 'apagar marcados',
|
||||||
'delete plugin': 'apagar plugin',
|
'delete plugin': 'apagar plugin',
|
||||||
'Deploy': 'publicar',
|
|
||||||
'design': 'modificar',
|
'design': 'modificar',
|
||||||
'direction: ltr': 'direção: ltr',
|
'direction: ltr': 'direção: ltr',
|
||||||
'done!': 'feito!',
|
'done!': 'feito!',
|
||||||
'download layouts': 'download layouts',
|
'download layouts': 'download layouts',
|
||||||
'download plugins': 'download plugins',
|
'download plugins': 'download plugins',
|
||||||
'Edit': 'editar',
|
|
||||||
'edit controller': 'editar controlador',
|
'edit controller': 'editar controlador',
|
||||||
'edit views:': 'editar visões:',
|
'edit views:': 'editar visões:',
|
||||||
'Errors': 'erros',
|
|
||||||
'export as csv file': 'exportar como arquivo CSV',
|
'export as csv file': 'exportar como arquivo CSV',
|
||||||
'exposes': 'expõe',
|
'exposes': 'expõe',
|
||||||
'extends': 'estende',
|
'extends': 'estende',
|
||||||
@@ -226,15 +236,12 @@
|
|||||||
'file does not exist': 'arquivo não existe',
|
'file does not exist': 'arquivo não existe',
|
||||||
'file saved on %(time)s': 'arquivo salvo em %(time)s',
|
'file saved on %(time)s': 'arquivo salvo em %(time)s',
|
||||||
'file saved on %s': 'arquivo salvo em %s',
|
'file saved on %s': 'arquivo salvo em %s',
|
||||||
'files': 'files',
|
|
||||||
'filter': 'filter',
|
'filter': 'filter',
|
||||||
'Help': 'ajuda',
|
|
||||||
'htmledit': 'htmledit',
|
'htmledit': 'htmledit',
|
||||||
'includes': 'inclui',
|
'includes': 'inclui',
|
||||||
'insert new': 'inserir novo',
|
'insert new': 'inserir novo',
|
||||||
'insert new %s': 'inserir novo %s',
|
'insert new %s': 'inserir novo %s',
|
||||||
'inspect attributes': 'inspect attributes',
|
'inspect attributes': 'inspect attributes',
|
||||||
'Install': 'instalar',
|
|
||||||
'internal error': 'erro interno',
|
'internal error': 'erro interno',
|
||||||
'invalid password': 'senha inválida',
|
'invalid password': 'senha inválida',
|
||||||
'invalid request': 'solicitação inválida',
|
'invalid request': 'solicitação inválida',
|
||||||
@@ -245,7 +252,6 @@
|
|||||||
'loading...': 'carregando...',
|
'loading...': 'carregando...',
|
||||||
'locals': 'locals',
|
'locals': 'locals',
|
||||||
'login': 'inicio de sessão',
|
'login': 'inicio de sessão',
|
||||||
'Logout': 'finalizar sessão',
|
|
||||||
'manage': 'gerenciar',
|
'manage': 'gerenciar',
|
||||||
'merge': 'juntar',
|
'merge': 'juntar',
|
||||||
'models': 'modelos',
|
'models': 'modelos',
|
||||||
@@ -258,9 +264,6 @@
|
|||||||
'or import from csv file': 'ou importar de um arquivo CSV',
|
'or import from csv file': 'ou importar de um arquivo CSV',
|
||||||
'or provide app url:': 'ou forneça a url de uma aplicação:',
|
'or provide app url:': 'ou forneça a url de uma aplicação:',
|
||||||
'or provide application url:': 'ou forneça a url de uma aplicação:',
|
'or provide application url:': 'ou forneça a url de uma aplicação:',
|
||||||
'Overwrite installed app': 'sobrescrever aplicação instalada',
|
|
||||||
'Pack all': 'criar pacote',
|
|
||||||
'Pack compiled': 'criar pacote compilado',
|
|
||||||
'pack plugin': 'empacotar plugin',
|
'pack plugin': 'empacotar plugin',
|
||||||
'password changed': 'senha alterada',
|
'password changed': 'senha alterada',
|
||||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado',
|
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado',
|
||||||
@@ -269,7 +272,6 @@
|
|||||||
'record': 'registro',
|
'record': 'registro',
|
||||||
'record does not exist': 'o registro não existe',
|
'record does not exist': 'o registro não existe',
|
||||||
'record id': 'id do registro',
|
'record id': 'id do registro',
|
||||||
'Remove compiled': 'eliminar compilados',
|
|
||||||
'request': 'request',
|
'request': 'request',
|
||||||
'response': 'response',
|
'response': 'response',
|
||||||
'restore': 'restaurar',
|
'restore': 'restaurar',
|
||||||
@@ -279,9 +281,7 @@
|
|||||||
'session': 'session',
|
'session': 'session',
|
||||||
'session expired': 'sessão expirada',
|
'session expired': 'sessão expirada',
|
||||||
'shell': 'Terminal',
|
'shell': 'Terminal',
|
||||||
'Site': 'site',
|
|
||||||
'some files could not be removed': 'alguns arquicos não puderam ser removidos',
|
'some files could not be removed': 'alguns arquicos não puderam ser removidos',
|
||||||
'Start wizard': 'iniciar assistente',
|
|
||||||
'state': 'estado',
|
'state': 'estado',
|
||||||
'static': 'estáticos',
|
'static': 'estáticos',
|
||||||
'submit': 'enviar',
|
'submit': 'enviar',
|
||||||
@@ -302,7 +302,6 @@
|
|||||||
'unable to uninstall "%s"': 'não é possível instalar "%s"',
|
'unable to uninstall "%s"': 'não é possível instalar "%s"',
|
||||||
'unable to upgrade because "%s"': 'não é possível atualizar porque "%s"',
|
'unable to upgrade because "%s"': 'não é possível atualizar porque "%s"',
|
||||||
'uncheck all': 'desmarcar todos',
|
'uncheck all': 'desmarcar todos',
|
||||||
'Uninstall': 'desinstalar',
|
|
||||||
'update': 'atualizar',
|
'update': 'atualizar',
|
||||||
'update all languages': 'atualizar todas as linguagens',
|
'update all languages': 'atualizar todas as linguagens',
|
||||||
'upgrade web2py now': 'atualize o web2py agora',
|
'upgrade web2py now': 'atualize o web2py agora',
|
||||||
@@ -318,5 +317,3 @@
|
|||||||
'web2py is up to date': 'web2py está atualizado',
|
'web2py is up to date': 'web2py está atualizado',
|
||||||
'web2py upgraded; please restart it': 'web2py atualizado; favor reiniciar',
|
'web2py upgraded; please restart it': 'web2py atualizado; favor reiniciar',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
'!=': '!=',
|
'!=': '!=',
|
||||||
|
'!langcode!': 'ro',
|
||||||
|
'!langname!': 'Română',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" (actualizează) este o expresie opțională precum "câmp1=\'valoare_nouă\'". Nu puteți actualiza sau șterge rezultatele unui JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" (actualizează) este o expresie opțională precum "câmp1=\'valoare_nouă\'". Nu puteți actualiza sau șterge rezultatele unui JOIN',
|
||||||
'%(nrows)s records found': '%(nrows)s înregistrări găsite',
|
'%(nrows)s records found': '%(nrows)s înregistrări găsite',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s linii șterse',
|
'%s %%{row} deleted': '%s linii șterse',
|
||||||
'%s rows updated': '%s linii actualizate',
|
'%s %%{row} updated': '%s linii actualizate',
|
||||||
'(requires internet access)': '(are nevoie de acces internet)',
|
'(requires internet access)': '(are nevoie de acces internet)',
|
||||||
'(something like "it-it")': '(ceva ce seamănă cu "it-it")',
|
'(something like "it-it")': '(ceva ce seamănă cu "it-it")',
|
||||||
'<': '<',
|
'<': '<',
|
||||||
@@ -14,6 +16,7 @@
|
|||||||
'=': '=',
|
'=': '=',
|
||||||
'>': '>',
|
'>': '>',
|
||||||
'>=': '>=',
|
'>=': '>=',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Căutare: **%s** fișiere',
|
||||||
'A new version of web2py is available': 'O nouă versiune de web2py este disponibilă',
|
'A new version of web2py is available': 'O nouă versiune de web2py este disponibilă',
|
||||||
'A new version of web2py is available: %s': 'O nouă versiune de web2py este disponibilă: %s',
|
'A new version of web2py is available: %s': 'O nouă versiune de web2py este disponibilă: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENȚIE: Nu vă puteți conecta decât utilizând o conexiune securizată (HTTPS) sau rulând aplicația pe computerul local.',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENȚIE: Nu vă puteți conecta decât utilizând o conexiune securizată (HTTPS) sau rulând aplicația pe computerul local.',
|
||||||
@@ -174,11 +177,11 @@
|
|||||||
'Next Edit Point': 'Următorul punct de editare',
|
'Next Edit Point': 'Următorul punct de editare',
|
||||||
'No databases in this application': 'Aplicație fără bază de date',
|
'No databases in this application': 'Aplicație fără bază de date',
|
||||||
'No ticket_storage.txt found under /private folder': 'No ticket_storage.txt found under /private folder',
|
'No ticket_storage.txt found under /private folder': 'No ticket_storage.txt found under /private folder',
|
||||||
|
'OR': 'SAU',
|
||||||
'Object or table name': 'Obiect sau nume de tabel',
|
'Object or table name': 'Obiect sau nume de tabel',
|
||||||
'Old password': 'Parola veche',
|
'Old password': 'Parola veche',
|
||||||
'Online examples': 'Exemple online',
|
'Online examples': 'Exemple online',
|
||||||
'Or': 'Sau',
|
'Or': 'Sau',
|
||||||
'OR': 'SAU',
|
|
||||||
'Origin': 'Origine',
|
'Origin': 'Origine',
|
||||||
'Original/Translation': 'Original/Traducere',
|
'Original/Translation': 'Original/Traducere',
|
||||||
'Other Plugins': 'Alte plugin-uri',
|
'Other Plugins': 'Alte plugin-uri',
|
||||||
@@ -220,7 +223,6 @@
|
|||||||
'Save via Ajax': 'Salvează utilizând Ajax',
|
'Save via Ajax': 'Salvează utilizând Ajax',
|
||||||
'Saved file hash:': 'Hash fișier salvat:',
|
'Saved file hash:': 'Hash fișier salvat:',
|
||||||
'Search': 'Căutare',
|
'Search': 'Căutare',
|
||||||
'Searching:': 'Căutare:',
|
|
||||||
'Semantic': 'Semantică',
|
'Semantic': 'Semantică',
|
||||||
'Services': 'Servicii',
|
'Services': 'Servicii',
|
||||||
'Set Breakpoint on %s at line %s: %s': 'Set Breakpoint on %s at line %s: %s',
|
'Set Breakpoint on %s at line %s: %s': 'Set Breakpoint on %s at line %s: %s',
|
||||||
@@ -368,7 +370,6 @@
|
|||||||
'file does not exist': 'fișier inexistent',
|
'file does not exist': 'fișier inexistent',
|
||||||
'file saved on %(time)s': 'fișier salvat %(time)s',
|
'file saved on %(time)s': 'fișier salvat %(time)s',
|
||||||
'file saved on %s': 'fișier salvat pe %s',
|
'file saved on %s': 'fișier salvat pe %s',
|
||||||
'files': 'fișiere',
|
|
||||||
'filter': 'filtru',
|
'filter': 'filtru',
|
||||||
'help': 'ajutor',
|
'help': 'ajutor',
|
||||||
'htmledit': 'editare html',
|
'htmledit': 'editare html',
|
||||||
|
|||||||
+196
-166
@@ -1,183 +1,31 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'ru',
|
||||||
|
'!langname!': 'Русский',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Update" ist ein optionaler Ausdruck wie "Feld1 = \'newvalue". JOIN Ergebnisse können nicht aktualisiert oder gelöscht werden',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Update" ist ein optionaler Ausdruck wie "Feld1 = \'newvalue". JOIN Ergebnisse können nicht aktualisiert oder gelöscht werden',
|
||||||
|
'%s %%{row} deleted': '%s %%{строкa} %%{удаленa}',
|
||||||
|
'%s %%{row} updated': '%s %%{строкa} %%{обновленa}',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s строк удалено',
|
|
||||||
'%s rows updated': '%s строк обновлено',
|
|
||||||
'(requires internet access)': '(требует подключения к интернету)',
|
'(requires internet access)': '(требует подключения к интернету)',
|
||||||
'(something like "it-it")': '(наподобие "it-it")',
|
'(something like "it-it")': '(наподобие "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Найдено: **%s** %%{файл}',
|
||||||
'A new version of web2py is available': 'Доступна новая версия web2py',
|
'A new version of web2py is available': 'Доступна новая версия web2py',
|
||||||
'A new version of web2py is available: %s': 'Доступна новая версия web2py: %s',
|
'A new version of web2py is available: %s': 'Доступна новая версия web2py: %s',
|
||||||
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Доступна новая версия web2py: Версия 1.85.3 (2010-09-18 07:07:46)\n',
|
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Доступна новая версия web2py: Версия 1.85.3 (2010-09-18 07:07:46)\n',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ВНИМАНИЕ: Для входа требуется бесопасное (HTTPS) соединение либо запуск на localhost.',
|
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ВНИМАНИЕ: Тестирование не потокобезопасно, поэтому не запускайте несколько тестов параллельно.',
|
|
||||||
'ATTENTION: This is an experimental feature and it needs more testing.': 'ВНИМАНИЕ: Это экспериментальная возможность и требует тестирования.',
|
|
||||||
'ATTENTION: you cannot edit the running application!': 'ВНИМАНИЕ: Вы не можете редактировать работающее приложение!',
|
|
||||||
'Abort': 'Отмена',
|
'Abort': 'Отмена',
|
||||||
'About': 'О',
|
'About': 'О',
|
||||||
'About application': 'О приложении',
|
'About application': 'О приложении',
|
||||||
'Additional code for your application': 'Допольнительный код для вашего приложения',
|
|
||||||
'Admin is disabled because insecure channel': 'Админпанель выключена из-за небезопасного соединения',
|
|
||||||
'Admin is disabled because unsecure channel': 'Админпанель выключен из-за небезопасного соединения',
|
|
||||||
'Admin language': 'Язык админпанели',
|
|
||||||
'Administrator Password:': 'Пароль администратора:',
|
|
||||||
'Application name:': 'Название приложения:',
|
|
||||||
'Are you sure you want to delete file "%s"?': 'Вы действительно хотите удалить файл "%s"?',
|
|
||||||
'Are you sure you want to uninstall application "%s"': 'Вы действительно хотите удалить приложение "%s"',
|
|
||||||
'Are you sure you want to uninstall application "%s"?': 'Вы действительно хотите удалить приложение "%s"?',
|
|
||||||
'Are you sure you want to upgrade web2py now?': 'Вы действительно хотите обновить web2py сейчас?',
|
|
||||||
'Authentication': 'Аутентификация',
|
|
||||||
'Available databases and tables': 'Доступные базы данных и таблицы',
|
|
||||||
'Cannot be empty': 'Не может быть пустым',
|
|
||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Невозможно компилировать: в приложении присутствуют ошибки. Отладьте его, исправьте ошибки и попробуйте заново.',
|
|
||||||
'Change Password': 'Изменить пароль',
|
|
||||||
'Check to delete': 'Поставьте для удаления',
|
|
||||||
'Checking for upgrades...': 'Проверка обновлений...',
|
|
||||||
'Client IP': 'IP клиента',
|
|
||||||
'Controller': 'Контроллер',
|
|
||||||
'Controllers': 'Контроллеры',
|
|
||||||
'Copyright': 'Copyright',
|
|
||||||
'Create new simple application': 'Создать новое простое приложение',
|
|
||||||
'Current request': 'Текущий запрос',
|
|
||||||
'Current response': 'Текущий ответ',
|
|
||||||
'Current session': 'Текущая сессия',
|
|
||||||
'DB Model': 'Модель БД',
|
|
||||||
'DESIGN': 'ДИЗАЙН',
|
|
||||||
'Database': 'База данных',
|
|
||||||
'Date and Time': 'Дата и время',
|
|
||||||
'Delete': 'Удалить',
|
|
||||||
'Delete:': 'Удалить:',
|
|
||||||
'Deploy on Google App Engine': 'Развернуть на Google App Engine',
|
|
||||||
'Description': 'Описание',
|
|
||||||
'Design for': 'Дизайн для',
|
|
||||||
'E-mail': 'E-mail',
|
|
||||||
'EDIT': 'ПРАВКА',
|
|
||||||
'Edit': 'Правка',
|
|
||||||
'Edit Profile': 'Правка профиля',
|
|
||||||
'Edit This App': 'Правка данного приложения',
|
|
||||||
'Edit application': 'Правка приложения',
|
|
||||||
'Edit current record': 'Правка текущей записи',
|
|
||||||
'Editing Language file': 'Правка языкового файла',
|
|
||||||
'Editing file': 'Правка файла',
|
|
||||||
'Editing file "%s"': 'Правка файла "%s"',
|
|
||||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
|
||||||
'Error logs for "%(app)s"': 'Журнал ошибок для "%(app)"',
|
|
||||||
'Exception instance attributes': 'Атрибуты объекта исключения',
|
|
||||||
'Expand Abbreviation': 'Раскрыть аббревиатуру',
|
|
||||||
'First name': 'Имя',
|
|
||||||
'Functions with no doctests will result in [passed] tests.': 'Функции без doctest будут давать [прошел] в тестах.',
|
|
||||||
'Go to Matching Pair': 'К подходящей паре',
|
|
||||||
'Group ID': 'ID группы',
|
|
||||||
'Hello World': 'Привет, Мир',
|
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Если отчет выше содержит номер ошибки, это указывает на ошибку при работе контроллера, до попытки выполнить doctest. Причиной чаще является неверные отступы или ошибки в коде вне функции. \nЗеленый заголовок указывает на успешное выполнение всех тестов. В этом случае результаты тестов не показываются.',
|
|
||||||
'If you answer "yes", be patient, it may take a while to download': 'Если вы ответили "Да", потерпите, загрузка может потребовать времени',
|
|
||||||
'If you answer yes, be patient, it may take a while to download': 'Если вы ответили "Да", потерпите, загрузка может потребовать времени',
|
|
||||||
'Import/Export': 'Импорт/Экспорт',
|
|
||||||
'Index': 'Индекс',
|
|
||||||
'Installed applications': 'Установленные приложения',
|
|
||||||
'Internal State': 'Внутренний статус',
|
|
||||||
'Invalid Query': 'Неверный запрос',
|
|
||||||
'Invalid action': 'Неверное действие',
|
|
||||||
'Invalid email': 'Неверный email',
|
|
||||||
'Key bindings': 'Связываник клавиш',
|
|
||||||
'Key bindings for ZenConding Plugin': 'Связывание клавиш для плагина ZenConding',
|
|
||||||
'Language files (static strings) updated': 'Языковые файлы (статичные строки) обновлены',
|
|
||||||
'Languages': 'Языки',
|
|
||||||
'Last name': 'Фамилия',
|
|
||||||
'Last saved on:': 'Последнее сохранение:',
|
|
||||||
'Layout': 'Верстка',
|
|
||||||
'License for': 'Лицензия для',
|
|
||||||
'Login': 'Логин',
|
|
||||||
'Login to the Administrative Interface': 'Вход в интерфейс администратора',
|
|
||||||
'Logout': 'Выход',
|
|
||||||
'Lost Password': 'Забыли пароль',
|
|
||||||
'Main Menu': 'Главное меню',
|
|
||||||
'Match Pair': 'Найти пару',
|
|
||||||
'Menu Model': 'Модель меню',
|
|
||||||
'Merge Lines': 'Объединить линии',
|
|
||||||
'Models': 'Модели',
|
|
||||||
'Modules': 'Модули',
|
|
||||||
'NO': 'НЕТ',
|
|
||||||
'Name': 'Название',
|
|
||||||
'New Record': 'Новая запись',
|
|
||||||
'New application wizard': 'Мастер нового приложения',
|
|
||||||
'New simple application': 'Новое простое приложение',
|
|
||||||
'Next Edit Point': 'Следующее место правки',
|
|
||||||
'No databases in this application': 'В приложении нет базы данных',
|
|
||||||
'Origin': 'Оригинал',
|
|
||||||
'Original/Translation': 'Оригинал/Перевод',
|
|
||||||
'Password': 'Пароль',
|
|
||||||
'Peeking at file': 'Просмотр',
|
|
||||||
'Plugin "%s" in application': 'Плагин "%s" в приложении',
|
|
||||||
'Plugins': 'Плагины',
|
|
||||||
'Powered by': 'Обеспечен',
|
|
||||||
'Previous Edit Point': 'Предыдущее место правки',
|
|
||||||
'Query:': 'Запрос:',
|
|
||||||
'Record ID': 'ID записи',
|
|
||||||
'Register': 'Зарегистрироваться',
|
|
||||||
'Registration key': 'Ключ регистрации',
|
|
||||||
'Reset Password key': 'Сброс пароля',
|
|
||||||
'Resolve Conflict file': 'Решить конфликт в файле',
|
|
||||||
'Role': 'Роль',
|
|
||||||
'Rows in table': 'Строк в таблице',
|
|
||||||
'Rows selected': 'Выбрано строк',
|
|
||||||
'Save via Ajax': 'Сохранить через Ajax',
|
|
||||||
'Saved file hash:': 'Хэш сохраненного файла:',
|
|
||||||
'Searching:': 'Поиск:',
|
|
||||||
'Static files': 'Статические файлы',
|
|
||||||
'Stylesheet': 'Таблицы стилей',
|
|
||||||
'Sure you want to delete this object?': 'Действительно хотите удалить данный объект?',
|
|
||||||
'TM': 'TM',
|
|
||||||
'Table name': 'Название таблицы',
|
|
||||||
'Testing application': 'Тест приложения',
|
|
||||||
'Testing controller': 'Тест контроллера',
|
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"query" является условием вида "db.table1.field1 == \'значение\'". Что-либо типа "db.table1.field1 db.table2.field2 ==" ведет к SQL JOIN.',
|
|
||||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'Логика приложения, каждый URL отображается к одной функции в контроллере',
|
|
||||||
'The data representation, define database tables and sets': 'Представление данных, определите таблицы базы данных и наборы',
|
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'Выводом файла является словарь, который создан в виде',
|
|
||||||
'The presentations layer, views are also known as templates': 'Слой презентации, виды так же известны, как шаблоны',
|
|
||||||
'There are no controllers': 'Отсутствуют контроллеры',
|
|
||||||
'There are no models': 'Отсутствуют модели',
|
|
||||||
'There are no modules': 'Отсутствуют модули',
|
|
||||||
'There are no plugins': 'Отсутствуют плагины',
|
|
||||||
'There are no static files': 'Отсутствуют статичные файлы',
|
|
||||||
'There are no translators, only default language is supported': 'Отсутствуют переводчики, поддерживается только стандартный язык',
|
|
||||||
'There are no views': 'Отсутствуют виды',
|
|
||||||
'These files are served without processing, your images go here': 'Эти файлы обслуживаются без обработки, ваши изображения попадут сюда',
|
|
||||||
'This is a copy of the scaffolding application': 'Это копия сгенерированного приложения',
|
|
||||||
'This is the %(filename)s template': 'Это шаблон %(filename)s',
|
|
||||||
'Ticket': 'Тикет',
|
|
||||||
'Timestamp': 'Время',
|
|
||||||
'To create a plugin, name a file/folder plugin_[name]': 'Для создания плагина назовите файл/папку plugin_[название]',
|
|
||||||
'Translation strings for the application': 'Строки перевода для приложения',
|
|
||||||
'Unable to check for upgrades': 'Невозможно проверить обновления',
|
|
||||||
'Unable to download': 'Невозможно загрузить',
|
|
||||||
'Unable to download app': 'Невозможно загрузить',
|
|
||||||
'Update:': 'Обновить:',
|
|
||||||
'Upload & install packed application': 'Загрузить и установить приложение в архиве',
|
|
||||||
'Upload a package:': 'Загрузить пакет:',
|
|
||||||
'Upload existing application': 'Загрузить существующее приложение',
|
|
||||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Используйте (...)&(...) для AND, (...)|(...) для OR, и ~(...) для NOT при создании сложных запросов.',
|
|
||||||
'Use an url:': 'Используйте url:',
|
|
||||||
'User ID': 'ID пользователя',
|
|
||||||
'Version': 'Версия',
|
|
||||||
'View': 'Вид',
|
|
||||||
'Views': 'Виды',
|
|
||||||
'Welcome %s': 'Добро пожаловать, %s',
|
|
||||||
'Welcome to web2py': 'Добро пожаловать в web2py',
|
|
||||||
'Which called the function': 'Который вызвал функцию',
|
|
||||||
'Wrap with Abbreviation': 'Заключить в аббревиатуру',
|
|
||||||
'YES': 'ДА',
|
|
||||||
'You are successfully running web2py': 'Вы успешно запустили web2by',
|
|
||||||
'You can modify this application and adapt it to your needs': 'Вы можете изменить это приложение и подогнать под свои нужды',
|
|
||||||
'You visited the url': 'Вы посетили URL',
|
|
||||||
'About': 'О',
|
|
||||||
'additional code for your application': 'добавочный код для вашего приложения',
|
'additional code for your application': 'добавочный код для вашего приложения',
|
||||||
|
'Additional code for your application': 'Допольнительный код для вашего приложения',
|
||||||
'admin disabled because no admin password': 'админка отключена, потому что отсутствует пароль администратора',
|
'admin disabled because no admin password': 'админка отключена, потому что отсутствует пароль администратора',
|
||||||
'admin disabled because not supported on google apps engine': 'админка отключена, т.к. не поддерживается на google app engine',
|
'admin disabled because not supported on google apps engine': 'админка отключена, т.к. не поддерживается на google app engine',
|
||||||
'admin disabled because unable to access password file': 'админка отключена, т.к. невозможно получить доступ к файлу с паролями ',
|
'admin disabled because unable to access password file': 'админка отключена, т.к. невозможно получить доступ к файлу с паролями ',
|
||||||
|
'Admin is disabled because insecure channel': 'Админпанель выключена из-за небезопасного соединения',
|
||||||
|
'Admin is disabled because unsecure channel': 'Админпанель выключен из-за небезопасного соединения',
|
||||||
|
'Admin language': 'Язык админпанели',
|
||||||
'administrative interface': 'интерфейс администратора',
|
'administrative interface': 'интерфейс администратора',
|
||||||
|
'Administrator Password:': 'Пароль администратора:',
|
||||||
'and rename it (required):': 'и переименуйте его (необходимо):',
|
'and rename it (required):': 'и переименуйте его (необходимо):',
|
||||||
'and rename it:': ' и переименуйте его:',
|
'and rename it:': ' и переименуйте его:',
|
||||||
'appadmin': 'appadmin',
|
'appadmin': 'appadmin',
|
||||||
@@ -185,57 +33,115 @@
|
|||||||
'application "%s" uninstalled': 'Приложение "%s" удалено',
|
'application "%s" uninstalled': 'Приложение "%s" удалено',
|
||||||
'application compiled': 'Приложение скомпилировано',
|
'application compiled': 'Приложение скомпилировано',
|
||||||
'application is compiled and cannot be designed': 'Приложение скомпилировано и дизайн не может быть изменен',
|
'application is compiled and cannot be designed': 'Приложение скомпилировано и дизайн не может быть изменен',
|
||||||
|
'Application name:': 'Название приложения:',
|
||||||
|
'are not used': 'are not used',
|
||||||
|
'are not used yet': 'are not used yet',
|
||||||
|
'Are you sure you want to delete file "%s"?': 'Вы действительно хотите удалить файл "%s"?',
|
||||||
|
'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?',
|
||||||
|
'Are you sure you want to uninstall application "%s"': 'Вы действительно хотите удалить приложение "%s"',
|
||||||
|
'Are you sure you want to uninstall application "%s"?': 'Вы действительно хотите удалить приложение "%s"?',
|
||||||
|
'Are you sure you want to upgrade web2py now?': 'Вы действительно хотите обновить web2py сейчас?',
|
||||||
'arguments': 'аргументы',
|
'arguments': 'аргументы',
|
||||||
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ВНИМАНИЕ: Для входа требуется бесопасное (HTTPS) соединение либо запуск на localhost.',
|
||||||
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ВНИМАНИЕ: Тестирование не потокобезопасно, поэтому не запускайте несколько тестов параллельно.',
|
||||||
|
'ATTENTION: This is an experimental feature and it needs more testing.': 'ВНИМАНИЕ: Это экспериментальная возможность и требует тестирования.',
|
||||||
|
'ATTENTION: you cannot edit the running application!': 'ВНИМАНИЕ: Вы не можете редактировать работающее приложение!',
|
||||||
|
'Authentication': 'Аутентификация',
|
||||||
|
'Available databases and tables': 'Доступные базы данных и таблицы',
|
||||||
'back': 'назад',
|
'back': 'назад',
|
||||||
'beautify': 'Раскрасить',
|
'beautify': 'Раскрасить',
|
||||||
'cache': 'кэш',
|
'cache': 'кэш',
|
||||||
'cache, errors and sessions cleaned': 'Кэш, ошибки и сессии очищены',
|
'cache, errors and sessions cleaned': 'Кэш, ошибки и сессии очищены',
|
||||||
'call': 'вызов',
|
'call': 'вызов',
|
||||||
|
'Cannot be empty': 'Не может быть пустым',
|
||||||
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Невозможно компилировать: в приложении присутствуют ошибки. Отладьте его, исправьте ошибки и попробуйте заново.',
|
||||||
'cannot create file': 'Невозможно создать файл',
|
'cannot create file': 'Невозможно создать файл',
|
||||||
'cannot upload file "%(filename)s"': 'Невозможно загрузить файл "%(filename)s"',
|
'cannot upload file "%(filename)s"': 'Невозможно загрузить файл "%(filename)s"',
|
||||||
'Change admin password': 'Изменить пароль администратора',
|
'Change admin password': 'Изменить пароль администратора',
|
||||||
|
'Change Password': 'Изменить пароль',
|
||||||
'change password': 'изменить пароль',
|
'change password': 'изменить пароль',
|
||||||
'check all': 'проверить все',
|
'check all': 'проверить все',
|
||||||
'Check for upgrades': 'проверить обновления',
|
'Check for upgrades': 'проверить обновления',
|
||||||
|
'Check to delete': 'Поставьте для удаления',
|
||||||
|
'Checking for upgrades...': 'Проверка обновлений...',
|
||||||
'Clean': 'Очистить',
|
'Clean': 'Очистить',
|
||||||
'click here for online examples': 'нажмите здесь для онлайн примеров',
|
'click here for online examples': 'нажмите здесь для онлайн примеров',
|
||||||
'click here for the administrative interface': 'нажмите здесь для интерфейса администратора',
|
'click here for the administrative interface': 'нажмите здесь для интерфейса администратора',
|
||||||
'click to check for upgrades': 'нажмите для проверки обновления',
|
'click to check for upgrades': 'нажмите для проверки обновления',
|
||||||
|
'Client IP': 'IP клиента',
|
||||||
'code': 'код',
|
'code': 'код',
|
||||||
'collapse/expand all': 'свернуть/развернуть все',
|
'collapse/expand all': 'свернуть/развернуть все',
|
||||||
'Compile': 'Компилировать',
|
'Compile': 'Компилировать',
|
||||||
'compiled application removed': 'скомпилированное приложение удалено',
|
'compiled application removed': 'скомпилированное приложение удалено',
|
||||||
|
'Controller': 'Контроллер',
|
||||||
|
'Controllers': 'Контроллеры',
|
||||||
'controllers': 'контроллеры',
|
'controllers': 'контроллеры',
|
||||||
|
'Copyright': 'Copyright',
|
||||||
'Create': 'Создать',
|
'Create': 'Создать',
|
||||||
'create file with filename:': 'Создать файл с названием:',
|
'create file with filename:': 'Создать файл с названием:',
|
||||||
'create new application:': 'создать новое приложение:',
|
'create new application:': 'создать новое приложение:',
|
||||||
|
'Create new simple application': 'Создать новое простое приложение',
|
||||||
'created by': 'создано',
|
'created by': 'создано',
|
||||||
'crontab': 'crontab',
|
'crontab': 'crontab',
|
||||||
|
'Current request': 'Текущий запрос',
|
||||||
|
'Current response': 'Текущий ответ',
|
||||||
|
'Current session': 'Текущая сессия',
|
||||||
'currently running': 'сейчас работает',
|
'currently running': 'сейчас работает',
|
||||||
'currently saved or': 'сейчас сохранено или',
|
'currently saved or': 'сейчас сохранено или',
|
||||||
'customize me!': 'настрой меня!',
|
'customize me!': 'настрой меня!',
|
||||||
'data uploaded': 'дата загрузки',
|
'data uploaded': 'дата загрузки',
|
||||||
|
'Database': 'База данных',
|
||||||
'database': 'база данных',
|
'database': 'база данных',
|
||||||
'database %s select': 'Выбор базы данных %s ',
|
'database %s select': 'Выбор базы данных %s ',
|
||||||
'database administration': 'администраторирование базы данных',
|
'database administration': 'администраторирование базы данных',
|
||||||
|
'Date and Time': 'Дата и время',
|
||||||
'db': 'бд',
|
'db': 'бд',
|
||||||
|
'DB Model': 'Модель БД',
|
||||||
|
'Debug': 'Debug',
|
||||||
'defines tables': 'определить таблицы',
|
'defines tables': 'определить таблицы',
|
||||||
|
'Delete': 'Удалить',
|
||||||
'delete': 'удалить',
|
'delete': 'удалить',
|
||||||
'delete all checked': 'удалить выбранные',
|
'delete all checked': 'удалить выбранные',
|
||||||
'delete plugin': 'удалить плагин',
|
'delete plugin': 'удалить плагин',
|
||||||
|
'Delete this file (you will be asked to confirm deletion)': 'Delete this file (you will be asked to confirm deletion)',
|
||||||
|
'Delete:': 'Удалить:',
|
||||||
'Deploy': 'Развернуть',
|
'Deploy': 'Развернуть',
|
||||||
|
'Deploy on Google App Engine': 'Развернуть на Google App Engine',
|
||||||
|
'Deploy to OpenShift': 'Deploy to OpenShift',
|
||||||
|
'Description': 'Описание',
|
||||||
'design': 'дизайн',
|
'design': 'дизайн',
|
||||||
|
'DESIGN': 'ДИЗАЙН',
|
||||||
|
'Design for': 'Дизайн для',
|
||||||
|
'Detailed traceback description': 'Detailed traceback description',
|
||||||
'direction: ltr': 'направление: ltr',
|
'direction: ltr': 'направление: ltr',
|
||||||
|
'Disable': 'Disable',
|
||||||
|
'docs': 'docs',
|
||||||
'documentation': 'документация',
|
'documentation': 'документация',
|
||||||
'done!': 'выполнено!',
|
'done!': 'выполнено!',
|
||||||
'download layouts': 'загрузить шаблоны',
|
'download layouts': 'загрузить шаблоны',
|
||||||
'download plugins': 'загрузить плагины',
|
'download plugins': 'загрузить плагины',
|
||||||
|
'E-mail': 'E-mail',
|
||||||
|
'EDIT': 'ПРАВКА',
|
||||||
'Edit': 'Правка',
|
'Edit': 'Правка',
|
||||||
|
'Edit application': 'Правка приложения',
|
||||||
'edit controller': 'правка контроллера',
|
'edit controller': 'правка контроллера',
|
||||||
|
'Edit current record': 'Правка текущей записи',
|
||||||
|
'Edit Profile': 'Правка профиля',
|
||||||
'edit profile': 'правка профиля',
|
'edit profile': 'правка профиля',
|
||||||
|
'Edit This App': 'Правка данного приложения',
|
||||||
'edit views:': 'правка видов:',
|
'edit views:': 'правка видов:',
|
||||||
|
'Editing file': 'Правка файла',
|
||||||
|
'Editing file "%s"': 'Правка файла "%s"',
|
||||||
|
'Editing Language file': 'Правка языкового файла',
|
||||||
|
'Editing Plural Forms File': 'Editing Plural Forms File',
|
||||||
|
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||||
|
'Error logs for "%(app)s"': 'Журнал ошибок для "%(app)"',
|
||||||
|
'Error snapshot': 'Error snapshot',
|
||||||
|
'Error ticket': 'Error ticket',
|
||||||
'Errors': 'Ошибка',
|
'Errors': 'Ошибка',
|
||||||
'escape': 'escape',
|
'escape': 'escape',
|
||||||
|
'Exception instance attributes': 'Атрибуты объекта исключения',
|
||||||
|
'Expand Abbreviation': 'Раскрыть аббревиатуру',
|
||||||
'export as csv file': 'Экспорт в CSV',
|
'export as csv file': 'Экспорт в CSV',
|
||||||
'exposes': 'открывает',
|
'exposes': 'открывает',
|
||||||
'extends': 'расширяет',
|
'extends': 'расширяет',
|
||||||
@@ -249,95 +155,219 @@
|
|||||||
'file does not exist': 'файл не существует',
|
'file does not exist': 'файл не существует',
|
||||||
'file saved on %(time)s': 'файл сохранен %(time)s',
|
'file saved on %(time)s': 'файл сохранен %(time)s',
|
||||||
'file saved on %s': 'файл сохранен %s',
|
'file saved on %s': 'файл сохранен %s',
|
||||||
'files': 'файлы',
|
|
||||||
'filter': 'фильтр',
|
'filter': 'фильтр',
|
||||||
|
'First name': 'Имя',
|
||||||
|
'Frames': 'Frames',
|
||||||
|
'Functions with no doctests will result in [passed] tests.': 'Функции без doctest будут давать [прошел] в тестах.',
|
||||||
|
'Get from URL:': 'Get from URL:',
|
||||||
|
'Go to Matching Pair': 'К подходящей паре',
|
||||||
|
'Group ID': 'ID группы',
|
||||||
|
'Hello World': 'Привет, Мир',
|
||||||
'Help': 'Помощь',
|
'Help': 'Помощь',
|
||||||
|
'Hide/Show Translated strings': 'Hide/Show Translated strings',
|
||||||
'htmledit': 'htmledit',
|
'htmledit': 'htmledit',
|
||||||
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Если отчет выше содержит номер ошибки, это указывает на ошибку при работе контроллера, до попытки выполнить doctest. Причиной чаще является неверные отступы или ошибки в коде вне функции. \nЗеленый заголовок указывает на успешное выполнение всех тестов. В этом случае результаты тестов не показываются.',
|
||||||
|
'If you answer "yes", be patient, it may take a while to download': 'Если вы ответили "Да", потерпите, загрузка может потребовать времени',
|
||||||
|
'If you answer yes, be patient, it may take a while to download': 'Если вы ответили "Да", потерпите, загрузка может потребовать времени',
|
||||||
|
'Import/Export': 'Импорт/Экспорт',
|
||||||
'includes': 'включает',
|
'includes': 'включает',
|
||||||
|
'Index': 'Индекс',
|
||||||
'index': 'index',
|
'index': 'index',
|
||||||
'insert new': 'вставить новый',
|
'insert new': 'вставить новый',
|
||||||
'insert new %s': 'вставить новый %s',
|
'insert new %s': 'вставить новый %s',
|
||||||
|
'inspect attributes': 'inspect attributes',
|
||||||
'Install': 'Установить',
|
'Install': 'Установить',
|
||||||
|
'Installed applications': 'Установленные приложения',
|
||||||
'internal error': 'внутренняя ошибка',
|
'internal error': 'внутренняя ошибка',
|
||||||
|
'Internal State': 'Внутренний статус',
|
||||||
|
'Invalid action': 'Неверное действие',
|
||||||
|
'Invalid email': 'Неверный email',
|
||||||
'invalid password': 'неверный пароль',
|
'invalid password': 'неверный пароль',
|
||||||
|
'Invalid Query': 'Неверный запрос',
|
||||||
'invalid request': 'неверный запрос',
|
'invalid request': 'неверный запрос',
|
||||||
'invalid ticket': 'неверный тикет',
|
'invalid ticket': 'неверный тикет',
|
||||||
|
'Key bindings': 'Связываник клавиш',
|
||||||
|
'Key bindings for ZenConding Plugin': 'Связывание клавиш для плагина ZenConding',
|
||||||
'language file "%(filename)s" created/updated': 'Языковой файл "%(filename)s" создан/обновлен',
|
'language file "%(filename)s" created/updated': 'Языковой файл "%(filename)s" создан/обновлен',
|
||||||
|
'Language files (static strings) updated': 'Языковые файлы (статичные строки) обновлены',
|
||||||
'languages': 'языки',
|
'languages': 'языки',
|
||||||
|
'Languages': 'Языки',
|
||||||
'languages updated': 'языки обновлены',
|
'languages updated': 'языки обновлены',
|
||||||
|
'Last name': 'Фамилия',
|
||||||
|
'Last saved on:': 'Последнее сохранение:',
|
||||||
|
'Layout': 'Верстка',
|
||||||
|
'License for': 'Лицензия для',
|
||||||
'loading...': 'загрузка...',
|
'loading...': 'загрузка...',
|
||||||
|
'locals': 'locals',
|
||||||
'located in the file': 'расположенный в файле',
|
'located in the file': 'расположенный в файле',
|
||||||
|
'Login': 'Логин',
|
||||||
'login': 'логин',
|
'login': 'логин',
|
||||||
|
'Login to the Administrative Interface': 'Вход в интерфейс администратора',
|
||||||
'Logout': 'выход',
|
'Logout': 'выход',
|
||||||
|
'Lost Password': 'Забыли пароль',
|
||||||
'lost password?': 'Пароль утерен?',
|
'lost password?': 'Пароль утерен?',
|
||||||
|
'Main Menu': 'Главное меню',
|
||||||
|
'Match Pair': 'Найти пару',
|
||||||
|
'Menu Model': 'Модель меню',
|
||||||
'merge': 'объединить',
|
'merge': 'объединить',
|
||||||
|
'Merge Lines': 'Объединить линии',
|
||||||
|
'Models': 'Модели',
|
||||||
'models': 'модели',
|
'models': 'модели',
|
||||||
|
'Modules': 'Модули',
|
||||||
'modules': 'модули',
|
'modules': 'модули',
|
||||||
|
'Name': 'Название',
|
||||||
'new application "%s" created': 'новое приложение "%s" создано',
|
'new application "%s" created': 'новое приложение "%s" создано',
|
||||||
|
'New application wizard': 'Мастер нового приложения',
|
||||||
|
'New Record': 'Новая запись',
|
||||||
'new record inserted': 'новая запись вставлена',
|
'new record inserted': 'новая запись вставлена',
|
||||||
|
'New simple application': 'Новое простое приложение',
|
||||||
'next 100 rows': 'следующие 100 строк',
|
'next 100 rows': 'следующие 100 строк',
|
||||||
|
'Next Edit Point': 'Следующее место правки',
|
||||||
|
'NO': 'НЕТ',
|
||||||
|
'No databases in this application': 'В приложении нет базы данных',
|
||||||
'or import from csv file': 'или испорт из cvs файла',
|
'or import from csv file': 'или испорт из cvs файла',
|
||||||
'or provide app url:': 'или URL приложения:',
|
'or provide app url:': 'или URL приложения:',
|
||||||
'or provide application url:': 'или URL приложения:',
|
'or provide application url:': 'или URL приложения:',
|
||||||
|
'Origin': 'Оригинал',
|
||||||
|
'Original/Translation': 'Оригинал/Перевод',
|
||||||
'Overwrite installed app': 'Переписать на установленное приложение',
|
'Overwrite installed app': 'Переписать на установленное приложение',
|
||||||
'Pack all': 'упаковать все',
|
'Pack all': 'упаковать все',
|
||||||
'Pack compiled': 'Архив скомпилирован',
|
'Pack compiled': 'Архив скомпилирован',
|
||||||
'pack plugin': 'Упаковать плагин',
|
'pack plugin': 'Упаковать плагин',
|
||||||
|
'Password': 'Пароль',
|
||||||
|
'Peeking at file': 'Просмотр',
|
||||||
'please wait!': 'подождите, пожалуйста!',
|
'please wait!': 'подождите, пожалуйста!',
|
||||||
|
'Plugin "%s" in application': 'Плагин "%s" в приложении',
|
||||||
'plugins': 'плагины',
|
'plugins': 'плагины',
|
||||||
|
'Plugins': 'Плагины',
|
||||||
|
'Plural Form #%s': 'Plural Form #%s',
|
||||||
|
'Plural-Forms:': 'Plural-Forms:',
|
||||||
|
'Powered by': 'Обеспечен',
|
||||||
'previous 100 rows': 'предыдущие 100 строк',
|
'previous 100 rows': 'предыдущие 100 строк',
|
||||||
|
'Previous Edit Point': 'Предыдущее место правки',
|
||||||
|
'Query:': 'Запрос:',
|
||||||
'record': 'запись',
|
'record': 'запись',
|
||||||
'record does not exist': 'запись не существует',
|
'record does not exist': 'запись не существует',
|
||||||
'record id': 'id записи',
|
'record id': 'id записи',
|
||||||
|
'Record ID': 'ID записи',
|
||||||
'register': 'зарегистрироваться',
|
'register': 'зарегистрироваться',
|
||||||
|
'Register': 'Зарегистрироваться',
|
||||||
|
'Registration key': 'Ключ регистрации',
|
||||||
|
'Reload routes': 'Reload routes',
|
||||||
'Remove compiled': 'Удалить скомпилированное',
|
'Remove compiled': 'Удалить скомпилированное',
|
||||||
|
'request': 'request',
|
||||||
|
'Reset Password key': 'Сброс пароля',
|
||||||
|
'Resolve Conflict file': 'Решить конфликт в файле',
|
||||||
|
'response': 'response',
|
||||||
'restore': 'восстановить',
|
'restore': 'восстановить',
|
||||||
'revert': 'откатиться',
|
'revert': 'откатиться',
|
||||||
|
'Role': 'Роль',
|
||||||
|
'Rows in table': 'Строк в таблице',
|
||||||
|
'Rows selected': 'Выбрано строк',
|
||||||
|
'rules:': 'rules:',
|
||||||
|
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')",
|
||||||
|
'Running on %s': 'Running on %s',
|
||||||
|
'Save': 'Save',
|
||||||
'save': 'сохранить',
|
'save': 'сохранить',
|
||||||
|
'Save via Ajax': 'Сохранить через Ajax',
|
||||||
|
'Saved file hash:': 'Хэш сохраненного файла:',
|
||||||
'selected': 'выбрано',
|
'selected': 'выбрано',
|
||||||
|
'session': 'session',
|
||||||
'session expired': 'сессия истекла',
|
'session expired': 'сессия истекла',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
|
'Singular Form': 'Singular Form',
|
||||||
'Site': 'сайт',
|
'Site': 'сайт',
|
||||||
'some files could not be removed': 'некоторые файлы нельзя удалить',
|
'some files could not be removed': 'некоторые файлы нельзя удалить',
|
||||||
'Start wizard': 'запустить мастер',
|
'Start wizard': 'запустить мастер',
|
||||||
'state': 'статус',
|
'state': 'статус',
|
||||||
'static': 'статичные файлы',
|
'static': 'статичные файлы',
|
||||||
|
'Static files': 'Статические файлы',
|
||||||
|
'Stylesheet': 'Таблицы стилей',
|
||||||
'submit': 'Отправить',
|
'submit': 'Отправить',
|
||||||
|
'Sure you want to delete this object?': 'Действительно хотите удалить данный объект?',
|
||||||
'table': 'таблица',
|
'table': 'таблица',
|
||||||
|
'Table name': 'Название таблицы',
|
||||||
'test': 'тест',
|
'test': 'тест',
|
||||||
'test_def': 'test_def',
|
'test_def': 'test_def',
|
||||||
'test_for': 'test_for',
|
'test_for': 'test_for',
|
||||||
'test_if': 'test_if',
|
'test_if': 'test_if',
|
||||||
'test_try': 'test_try',
|
'test_try': 'test_try',
|
||||||
|
'Testing application': 'Тест приложения',
|
||||||
|
'Testing controller': 'Тест контроллера',
|
||||||
|
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"query" является условием вида "db.table1.field1 == \'значение\'". Что-либо типа "db.table1.field1 db.table2.field2 ==" ведет к SQL JOIN.',
|
||||||
'the application logic, each URL path is mapped in one exposed function in the controller': 'Логика приложения, каждый URL отображается в открытую функцию в контроллере',
|
'the application logic, each URL path is mapped in one exposed function in the controller': 'Логика приложения, каждый URL отображается в открытую функцию в контроллере',
|
||||||
|
'The application logic, each URL path is mapped in one exposed function in the controller': 'Логика приложения, каждый URL отображается к одной функции в контроллере',
|
||||||
'the data representation, define database tables and sets': 'представление данных, определить таблицы и наборы',
|
'the data representation, define database tables and sets': 'представление данных, определить таблицы и наборы',
|
||||||
|
'The data representation, define database tables and sets': 'Представление данных, определите таблицы базы данных и наборы',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view': 'Выводом файла является словарь, который создан в виде',
|
||||||
|
'The presentations layer, views are also known as templates': 'Слой презентации, виды так же известны, как шаблоны',
|
||||||
'the presentations layer, views are also known as templates': 'слой представления, виды известные так же как шаблоны',
|
'the presentations layer, views are also known as templates': 'слой представления, виды известные так же как шаблоны',
|
||||||
|
'There are no controllers': 'Отсутствуют контроллеры',
|
||||||
|
'There are no models': 'Отсутствуют модели',
|
||||||
|
'There are no modules': 'Отсутствуют модули',
|
||||||
|
'There are no plugins': 'Отсутствуют плагины',
|
||||||
|
'There are no static files': 'Отсутствуют статичные файлы',
|
||||||
|
'There are no translators, only default language is supported': 'Отсутствуют переводчики, поддерживается только стандартный язык',
|
||||||
|
'There are no views': 'Отсутствуют виды',
|
||||||
|
'These files are served without processing, your images go here': 'Эти файлы обслуживаются без обработки, ваши изображения попадут сюда',
|
||||||
'these files are served without processing, your images go here': 'Эти файлы обслуживаются без обработки, ваши изображения попадут сюда',
|
'these files are served without processing, your images go here': 'Эти файлы обслуживаются без обработки, ваши изображения попадут сюда',
|
||||||
|
'This is a copy of the scaffolding application': 'Это копия сгенерированного приложения',
|
||||||
|
'This is the %(filename)s template': 'Это шаблон %(filename)s',
|
||||||
|
'Ticket': 'Тикет',
|
||||||
|
'Ticket ID': 'Ticket ID',
|
||||||
|
'Timestamp': 'Время',
|
||||||
|
'TM': 'TM',
|
||||||
'to previous version.': 'на предыдущую версию.',
|
'to previous version.': 'на предыдущую версию.',
|
||||||
|
'To create a plugin, name a file/folder plugin_[name]': 'Для создания плагина назовите файл/папку plugin_[название]',
|
||||||
|
'toggle breakpoint': 'toggle breakpoint',
|
||||||
|
'Traceback': 'Traceback',
|
||||||
'translation strings for the application': 'строки перевода для приложения',
|
'translation strings for the application': 'строки перевода для приложения',
|
||||||
|
'Translation strings for the application': 'Строки перевода для приложения',
|
||||||
'try': 'try',
|
'try': 'try',
|
||||||
'try something like': 'попробовать что-либо вида',
|
'try something like': 'попробовать что-либо вида',
|
||||||
|
'Unable to check for upgrades': 'Невозможно проверить обновления',
|
||||||
'unable to create application "%s"': 'невозможно создать приложение "%s" nicht möglich',
|
'unable to create application "%s"': 'невозможно создать приложение "%s" nicht möglich',
|
||||||
'unable to delete file "%(filename)s"': 'невозможно удалить файл "%(filename)s"',
|
'unable to delete file "%(filename)s"': 'невозможно удалить файл "%(filename)s"',
|
||||||
|
'Unable to download': 'Невозможно загрузить',
|
||||||
|
'Unable to download app': 'Невозможно загрузить',
|
||||||
'unable to parse csv file': 'невозможно разобрать файл csv',
|
'unable to parse csv file': 'невозможно разобрать файл csv',
|
||||||
'unable to uninstall "%s"': 'невозможно удалить "%s"',
|
'unable to uninstall "%s"': 'невозможно удалить "%s"',
|
||||||
'uncheck all': 'снять выбор всего',
|
'uncheck all': 'снять выбор всего',
|
||||||
'Uninstall': 'Удалить',
|
'Uninstall': 'Удалить',
|
||||||
'update': 'обновить',
|
'update': 'обновить',
|
||||||
'update all languages': 'обновить все языки',
|
'update all languages': 'обновить все языки',
|
||||||
|
'Update:': 'Обновить:',
|
||||||
'upgrade web2py now': 'обновить web2py сейчас',
|
'upgrade web2py now': 'обновить web2py сейчас',
|
||||||
'upload': 'загрузить',
|
'upload': 'загрузить',
|
||||||
|
'Upload & install packed application': 'Загрузить и установить приложение в архиве',
|
||||||
|
'Upload a package:': 'Загрузить пакет:',
|
||||||
|
'Upload and install packed application': 'Upload and install packed application',
|
||||||
'upload application:': 'загрузить файл:',
|
'upload application:': 'загрузить файл:',
|
||||||
|
'Upload existing application': 'Загрузить существующее приложение',
|
||||||
'upload file:': 'загрузить файл:',
|
'upload file:': 'загрузить файл:',
|
||||||
'upload plugin file:': 'загрузить файл плагина:',
|
'upload plugin file:': 'загрузить файл плагина:',
|
||||||
|
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Используйте (...)&(...) для AND, (...)|(...) для OR, и ~(...) для NOT при создании сложных запросов.',
|
||||||
|
'Use an url:': 'Используйте url:',
|
||||||
'user': 'пользователь',
|
'user': 'пользователь',
|
||||||
|
'User ID': 'ID пользователя',
|
||||||
'variables': 'переменные',
|
'variables': 'переменные',
|
||||||
|
'Version': 'Версия',
|
||||||
'versioning': 'версии',
|
'versioning': 'версии',
|
||||||
|
'Versioning': 'Versioning',
|
||||||
|
'View': 'Вид',
|
||||||
'view': 'вид',
|
'view': 'вид',
|
||||||
|
'Views': 'Виды',
|
||||||
'views': 'виды',
|
'views': 'виды',
|
||||||
'web2py Recent Tweets': 'последние твиты по web2py',
|
'Web Framework': 'Web Framework',
|
||||||
'web2py is up to date': 'web2py обновлен',
|
'web2py is up to date': 'web2py обновлен',
|
||||||
|
'web2py Recent Tweets': 'последние твиты по web2py',
|
||||||
|
'Welcome %s': 'Добро пожаловать, %s',
|
||||||
|
'Welcome to web2py': 'Добро пожаловать в web2py',
|
||||||
|
'Which called the function': 'Который вызвал функцию',
|
||||||
|
'Wrap with Abbreviation': 'Заключить в аббревиатуру',
|
||||||
'xml': 'xml',
|
'xml': 'xml',
|
||||||
|
'YES': 'ДА',
|
||||||
|
'You are successfully running web2py': 'Вы успешно запустили web2by',
|
||||||
|
'You can modify this application and adapt it to your needs': 'Вы можете изменить это приложение и подогнать под свои нужды',
|
||||||
|
'You visited the url': 'Вы посетили URL',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'sl',
|
||||||
|
'!langname!': 'Slovenski',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Popravi" je izbirni izraz kot npr.: "stolpec1 = \'novavrednost\'". Rezultatov JOIN operacije ne morete popravljati ali brisati',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Popravi" je izbirni izraz kot npr.: "stolpec1 = \'novavrednost\'". Rezultatov JOIN operacije ne morete popravljati ali brisati',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s vrstic izbrisanih',
|
'%s %%{row} deleted': '%s vrstic izbrisanih',
|
||||||
'%s rows updated': '%s vrstic popravljeno',
|
'%s %%{row} updated': '%s vrstic popravljeno',
|
||||||
'(requires internet access)': '(zahteva internetni dostop)',
|
'(requires internet access)': '(zahteva internetni dostop)',
|
||||||
'(something like "it-it")': '(nekaj kot "sl-SI" ali samo "sl")',
|
'(something like "it-it")': '(nekaj kot "sl-SI" ali samo "sl")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Iskanje: **%s** datoteke',
|
||||||
'A new version of web2py is available': 'Nova različica web2py je na voljo',
|
'A new version of web2py is available': 'Nova različica web2py je na voljo',
|
||||||
'A new version of web2py is available: %s': 'Nova različica web2py je na voljo: %s',
|
'A new version of web2py is available: %s': 'Nova različica web2py je na voljo: %s',
|
||||||
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Nova različica web2py je na voljo: Različica 1.85.3 (2010-09-18 07:07:46)\n',
|
'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Nova različica web2py je na voljo: Različica 1.85.3 (2010-09-18 07:07:46)\n',
|
||||||
@@ -154,7 +157,6 @@
|
|||||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Poženi teste v tej datoteki (za vse teste uporabite gumb 'test')",
|
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Poženi teste v tej datoteki (za vse teste uporabite gumb 'test')",
|
||||||
'Save via Ajax': 'Shrani preko AJAX',
|
'Save via Ajax': 'Shrani preko AJAX',
|
||||||
'Saved file hash:': 'Koda shranjene datoteke:',
|
'Saved file hash:': 'Koda shranjene datoteke:',
|
||||||
'Searching:': 'Iskanje:',
|
|
||||||
'Site': 'Spletišče',
|
'Site': 'Spletišče',
|
||||||
'Sorry, could not find mercurial installed': 'Oprostite. Mercurial ni nameščen.',
|
'Sorry, could not find mercurial installed': 'Oprostite. Mercurial ni nameščen.',
|
||||||
'Start a new app': 'Začnite z novo aplikacijo',
|
'Start a new app': 'Začnite z novo aplikacijo',
|
||||||
@@ -281,7 +283,6 @@
|
|||||||
'file does not exist': 'datoteka ne obstaja',
|
'file does not exist': 'datoteka ne obstaja',
|
||||||
'file saved on %(time)s': 'datoteka shranjena %(time)s',
|
'file saved on %(time)s': 'datoteka shranjena %(time)s',
|
||||||
'file saved on %s': 'datoteka shranjena %s',
|
'file saved on %s': 'datoteka shranjena %s',
|
||||||
'files': 'datoteke',
|
|
||||||
'filter': 'fiter',
|
'filter': 'fiter',
|
||||||
'htmledit': 'htmledit',
|
'htmledit': 'htmledit',
|
||||||
'includes': 'vključuje',
|
'includes': 'vključuje',
|
||||||
|
|||||||
+248
-202
@@ -1,93 +1,185 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
' at char %s': ' на символі %s',
|
'!langcode!': 'uk',
|
||||||
' at line %s': ' в рядку %s',
|
'!langname!': 'Українська',
|
||||||
'"User Exception" debug mode. ': 'Режим ладнання "Сигнали від користувачів" ("User Exception" debug mode) ',
|
|
||||||
'"User Exception" debug mode. An error ticket could be issued!': 'Режим ладнання "Сигнали від користувачів" ("User Exception" debug mode). Користувачі можуть залишати відмітки про помилки!',
|
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Оновити" це додатковий вираз, такий, як "field1=\'нове_значення\'". Ви не можете змінювати або вилучати дані об\'єднаних таблиць',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Оновити" це додатковий вираз, такий, як "field1=\'нове_значення\'". Ви не можете змінювати або вилучати дані об\'єднаних таблиць',
|
||||||
|
'"User Exception" debug mode. ': 'Режим ладнання "Сигнали від користувачів" ("User Exception" debug mode) ',
|
||||||
|
'"User Exception" debug mode. An error ticket could be issued!': 'Режим ладнання "Сигнали від користувачів" ("User Exception" debug mode). Користувачі можуть залишати позначки про помилки!',
|
||||||
|
'%s': '%s',
|
||||||
|
'%s %%{row} deleted': 'Вилучено %s %%{рядок}',
|
||||||
|
'%s %%{row} updated': 'Вилучено %s %%{рядок}',
|
||||||
|
'%s Recent Tweets': '%s останніх твітів',
|
||||||
|
'%s students registered': '%s студентів зареєстровано',
|
||||||
'%Y-%m-%d': '%Y/%m/%d',
|
'%Y-%m-%d': '%Y/%m/%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y/%m/%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y/%m/%d %H:%M:%S',
|
||||||
'%s Recent Tweets': '%s останніх твітів',
|
|
||||||
'%s rows deleted': '%s рядків вилучено',
|
|
||||||
'%s rows updated': '%s рядків оновлено',
|
|
||||||
'%s students registered': '%s студентів зареєстровано',
|
|
||||||
'(requires internet access)': '(потрібно мати доступ в інтернет)',
|
'(requires internet access)': '(потрібно мати доступ в інтернет)',
|
||||||
'(something like "it-it")': '(щось схоже на "uk-ua")',
|
'(something like "it-it")': '(щось схоже на "uk-ua")',
|
||||||
'ATTENTION:': 'УВАГА:',
|
'@markmin\x01Searching: **%s** %%{file}': 'Знайдено: **%s** %%{файл}',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': "УВАГА: Вхід потребує надійного (HTTPS) з'єднання або запуску на локальному комп'ютері.",
|
|
||||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ОБЕРЕЖНО: ТЕСТУВАННЯ НЕ Є ПОТОКО-БЕЗПЕЧНИМ, ТОЖ НЕ ЗАПУСКАЙТЕ ДЕКІЛЬКА ТЕСТІВ ОДНОЧАСНО.',
|
|
||||||
'ATTENTION: you cannot edit the running application!': 'УВАГА: Ви не можете редагувати додаток, який зараз виконуєте!',
|
|
||||||
'Abort': 'Припинити',
|
'Abort': 'Припинити',
|
||||||
'About': 'Про',
|
'About': 'Про',
|
||||||
|
'about': 'про',
|
||||||
'About application': 'Про додаток',
|
'About application': 'Про додаток',
|
||||||
'Add breakpoint': 'Додати точку зупинки',
|
'Add breakpoint': 'Додати точку зупинки',
|
||||||
'Additional code for your application': 'Додатковий код для вашого додатку',
|
'Additional code for your application': 'Додатковий код для вашого додатку',
|
||||||
|
'admin disabled because no admin password': 'адмін.інтерфейс відключено, бо не вказано пароль адміністратора',
|
||||||
|
'admin disabled because not supported on google app engine': 'адмін.інтерфейс відключено через те, що Google Application Engine його не підтримує',
|
||||||
|
'admin disabled because too many invalid login attempts': 'адмін.інтерфейс заблоковано, бо кількість хибних спроб входу перевищило граничний рівень',
|
||||||
|
'admin disabled because unable to access password file': 'адмін.інтерфейс відключено через відсутність доступу до файлу паролів',
|
||||||
'Admin is disabled because insecure channel': "Адмін.інтерфейс відключено через використання ненадійного каналу звя'зку",
|
'Admin is disabled because insecure channel': "Адмін.інтерфейс відключено через використання ненадійного каналу звя'зку",
|
||||||
'Admin language': 'Мова інтерфейсу:',
|
'Admin language': 'Мова інтерфейсу:',
|
||||||
|
'administrative interface': 'інтерфейс адміністратора',
|
||||||
'Administrator Password:': 'Пароль адміністратора:',
|
'Administrator Password:': 'Пароль адміністратора:',
|
||||||
|
'and rename it:': 'i змінити назву на:',
|
||||||
'App does not exist or your are not authorized': 'Додаток не існує, або ви не авторизовані',
|
'App does not exist or your are not authorized': 'Додаток не існує, або ви не авторизовані',
|
||||||
|
'appadmin': 'Aдм.панель',
|
||||||
|
'appadmin is disabled because insecure channel': "адмін.панель відключено через використання ненадійного каналу зв'язку",
|
||||||
|
'application "%s" uninstalled': 'додаток "%s" вилучено',
|
||||||
|
'application %(appname)s installed with md5sum: %(digest)s': 'додаток %(appname)s встановлено з md5sum: %(digest)s',
|
||||||
'Application cannot be generated in demo mode': 'В демо-режимі генерувати додатки не можна',
|
'Application cannot be generated in demo mode': 'В демо-режимі генерувати додатки не можна',
|
||||||
|
'application compiled': 'додаток скомпільовано',
|
||||||
|
'application is compiled and cannot be designed': 'додаток скомпільований. налаштування змінювати не можна',
|
||||||
'Application name:': 'Назва додатку:',
|
'Application name:': 'Назва додатку:',
|
||||||
|
'are not used': 'не використовуються',
|
||||||
|
'are not used yet': 'поки що не використовуються',
|
||||||
'Are you sure you want to delete file "%s"?': 'Ви впевнені, що хочете вилучити файл "%s"?',
|
'Are you sure you want to delete file "%s"?': 'Ви впевнені, що хочете вилучити файл "%s"?',
|
||||||
'Are you sure you want to delete plugin "%s"?': 'Ви впевнені, що хочете вилучити втулку "%s"?"',
|
'Are you sure you want to delete plugin "%s"?': 'Ви впевнені, що хочете вилучити втулку "%s"?"',
|
||||||
'Are you sure you want to delete this object?': "Ви впевнені, що хочете вилучити цей об'єкт?",
|
'Are you sure you want to delete this object?': "Ви впевнені, що хочете вилучити цей об'єкт?",
|
||||||
'Are you sure you want to uninstall application "%s"?': 'Ви впевнені, що хочете вилучити (uninstall) додаток "%s"?',
|
'Are you sure you want to uninstall application "%s"?': 'Ви впевнені, що хочете вилучити (uninstall) додаток "%s"?',
|
||||||
|
'arguments': 'аргументи',
|
||||||
|
'at char %s': 'на символі %s',
|
||||||
|
'at line %s': 'в рядку %s',
|
||||||
|
'ATTENTION:': 'УВАГА:',
|
||||||
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': "УВАГА: Вхід потребує надійного (HTTPS) з'єднання або запуску на локальному комп'ютері.",
|
||||||
|
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ОБЕРЕЖНО: ТЕСТУВАННЯ НЕ Є ПОТОКО-БЕЗПЕЧНИМ, ТОЖ НЕ ЗАПУСКАЙТЕ ДЕКІЛЬКА ТЕСТІВ ОДНОЧАСНО.',
|
||||||
|
'ATTENTION: you cannot edit the running application!': 'УВАГА: Ви не можете редагувати додаток, який зараз виконуєте!',
|
||||||
'Available databases and tables': 'Доступні бази даних та таблиці',
|
'Available databases and tables': 'Доступні бази даних та таблиці',
|
||||||
|
'back': '<< назад',
|
||||||
|
'bad_resource': 'поганий_ресурс',
|
||||||
'Basics': 'Початок',
|
'Basics': 'Початок',
|
||||||
'Begin': 'Початок',
|
'Begin': 'Початок',
|
||||||
|
'breakpoint': 'точку зупинки',
|
||||||
'Breakpoints': 'Точки зупинок',
|
'Breakpoints': 'Точки зупинок',
|
||||||
|
'breakpoints': 'точки зупинок',
|
||||||
'Bulk Register': 'Масова реєстрація',
|
'Bulk Register': 'Масова реєстрація',
|
||||||
'Bulk Student Registration': 'Масова реєстрація студентів',
|
'Bulk Student Registration': 'Масова реєстрація студентів',
|
||||||
|
'cache': 'кеш',
|
||||||
'Cache Keys': 'Ключі кешу',
|
'Cache Keys': 'Ключі кешу',
|
||||||
|
'cache, errors and sessions cleaned': 'кеш, список зареєстрованих помилок та сесії очищенні',
|
||||||
'Cancel': 'Відмінити',
|
'Cancel': 'Відмінити',
|
||||||
'Cannot be empty': 'Не може бути порожнім',
|
'Cannot be empty': 'Не може бути порожнім',
|
||||||
'Cannot compile: there are errors in your app:': 'Не вдається скомпілювати: є помилки у вашому додатку:',
|
'Cannot compile: there are errors in your app:': 'Не вдається скомпілювати: є помилки у вашому додатку:',
|
||||||
|
'cannot create file': 'не можу створити файл',
|
||||||
|
'cannot upload file "%(filename)s"': 'не можу завантажити файл "%(filename)s"',
|
||||||
'Change admin password': 'Змінити пароль адміністратора',
|
'Change admin password': 'Змінити пароль адміністратора',
|
||||||
|
'check all': 'відмітити всі',
|
||||||
'Check for upgrades': 'Перевірити оновлення',
|
'Check for upgrades': 'Перевірити оновлення',
|
||||||
'Check to delete': 'Помітити на вилучення',
|
'Check to delete': 'Помітити на вилучення',
|
||||||
'Checking for upgrades...': 'Відбувається пошук оновлень...',
|
'Checking for upgrades...': 'Відбувається пошук оновлень...',
|
||||||
'Clean': 'Очистити',
|
'Clean': 'Очистити',
|
||||||
|
'Clear CACHE?': 'Очистити ВЕСЬ кеш?',
|
||||||
|
'Clear DISK': 'Очистити ДИСКОВИЙ КЕШ',
|
||||||
|
'Clear RAM': "Очистити КЕШ В ПАМ'ЯТІ",
|
||||||
'Click row to expand traceback': '"Клацніть" мишкою по рядку, щоб розгорнути стек викликів (traceback)',
|
'Click row to expand traceback': '"Клацніть" мишкою по рядку, щоб розгорнути стек викликів (traceback)',
|
||||||
'Click row to view a ticket': 'Для перегляду відмітки (ticket) "клацніть" мишкою по рядку',
|
'Click row to view a ticket': 'Для перегляду позначки (ticket) "клацніть" мишкою по рядку',
|
||||||
|
'code': 'код',
|
||||||
'Code listing': 'Лістинг',
|
'Code listing': 'Лістинг',
|
||||||
|
'collapse/expand all': 'згорнути/розгорнути все',
|
||||||
|
'Command': 'Команда',
|
||||||
'Compile': 'Компілювати',
|
'Compile': 'Компілювати',
|
||||||
|
'compiled application removed': 'скомпільований додаток вилучено',
|
||||||
'Condition': 'Умова',
|
'Condition': 'Умова',
|
||||||
|
'contact_admin': "зв'язатись_з_адміністратором",
|
||||||
|
'continue': 'продовжити',
|
||||||
'Controllers': 'Контролери',
|
'Controllers': 'Контролери',
|
||||||
|
'controllers': 'контролери',
|
||||||
'Count': 'К-сть',
|
'Count': 'К-сть',
|
||||||
'Create': 'Створити',
|
'Create': 'Створити',
|
||||||
|
'create': 'створити',
|
||||||
|
'create file with filename:': 'створити файл з назвою:',
|
||||||
|
'create plural-form': 'створити форму множини',
|
||||||
|
'Create rules': 'Створити правила',
|
||||||
|
'created by': 'Автор:',
|
||||||
'Created On': 'Створено в',
|
'Created On': 'Створено в',
|
||||||
|
'crontab': 'таблиця cron',
|
||||||
'Current request': 'Поточний запит',
|
'Current request': 'Поточний запит',
|
||||||
'Current response': 'Поточна відповідь',
|
'Current response': 'Поточна відповідь',
|
||||||
'Current session': 'Поточна сесія',
|
'Current session': 'Поточна сесія',
|
||||||
|
'currently running': 'наразі, активний додаток',
|
||||||
|
'currently saved or': 'останній збережений, або',
|
||||||
|
'data uploaded': 'дані завантажено',
|
||||||
|
'database': 'база даних',
|
||||||
|
'database %s select': 'Вибірка з бази даних %s',
|
||||||
|
'database administration': 'адміністрування бази даних',
|
||||||
'Date and Time': 'Дата і час',
|
'Date and Time': 'Дата і час',
|
||||||
|
'db': 'база даних',
|
||||||
'Debug': 'Ладнати (Debug)',
|
'Debug': 'Ладнати (Debug)',
|
||||||
|
'defines tables': "об'являє таблиці",
|
||||||
'Delete': 'Вилучити',
|
'Delete': 'Вилучити',
|
||||||
|
'delete': 'вилучити',
|
||||||
|
'delete all checked': 'вилучити всі відмічені',
|
||||||
|
'delete plugin': 'вилучити втулку',
|
||||||
'Delete this file (you will be asked to confirm deletion)': 'Вилучити цей файл (буде відображено запит на підтвердження операції)',
|
'Delete this file (you will be asked to confirm deletion)': 'Вилучити цей файл (буде відображено запит на підтвердження операції)',
|
||||||
'Delete:': 'Вилучити:',
|
'Delete:': 'Вилучити:',
|
||||||
|
'deleted after first hit': 'автоматично вилучається після першого спрацювання',
|
||||||
'Deploy': 'Розгорнути',
|
'Deploy': 'Розгорнути',
|
||||||
'Deploy on Google App Engine': 'Розгорнути на Google App Engine (GAE)',
|
'Deploy on Google App Engine': 'Розгорнути на Google App Engine (GAE)',
|
||||||
|
'Deploy to OpenShift': 'Розгорнути на OpenShift',
|
||||||
'Deployment form': 'Форма розгортання (deployment form)',
|
'Deployment form': 'Форма розгортання (deployment form)',
|
||||||
|
'design': 'налаштування',
|
||||||
'Detailed traceback description': 'Детальний опис стеку викликів (traceback)',
|
'Detailed traceback description': 'Детальний опис стеку викликів (traceback)',
|
||||||
|
'details': 'детальніше',
|
||||||
|
'direction: ltr': 'напрямок: зліва-направо (ltr)',
|
||||||
|
'directory not found': 'каталог не знайдено',
|
||||||
'Disable': 'Вимкнути',
|
'Disable': 'Вимкнути',
|
||||||
'Disabled': 'Вимкнено',
|
'Disabled': 'Вимкнено',
|
||||||
|
'disabled in demo mode': 'відключено в демо-режимі',
|
||||||
|
'disabled in multi user mode': 'відключено в багато-користувацькому режимі',
|
||||||
'Disk Cache Keys': 'Ключі дискового кешу',
|
'Disk Cache Keys': 'Ключі дискового кешу',
|
||||||
|
'Disk Cleared': 'Дисковий кеш очищено',
|
||||||
|
'docs': 'док.',
|
||||||
|
'done!': 'зроблено!',
|
||||||
'Downgrade': 'Повернути попередню версію',
|
'Downgrade': 'Повернути попередню версію',
|
||||||
|
'download layouts': 'завантажити макет (layout)',
|
||||||
|
'download plugins': 'завантажити втулки',
|
||||||
'Edit': 'Редагувати',
|
'Edit': 'Редагувати',
|
||||||
|
'edit all': 'редагувати всі',
|
||||||
'Edit application': 'Налаштування додатку',
|
'Edit application': 'Налаштування додатку',
|
||||||
|
'edit controller': 'редагувати контролер',
|
||||||
'Edit current record': 'Редагувати поточний запис',
|
'Edit current record': 'Редагувати поточний запис',
|
||||||
'Editing Language file': 'Редагується файл перекладу',
|
'edit views:': 'редагувати відображення (views):',
|
||||||
'Editing file "%s"': 'Редагується файл "%s"',
|
'Editing file "%s"': 'Редагується файл "%s"',
|
||||||
|
'Editing Language file': 'Редагується файл перекладу',
|
||||||
|
'Editing Plural Forms File': 'Редагується файл форм множини',
|
||||||
'Enable': 'Увімкнути',
|
'Enable': 'Увімкнути',
|
||||||
|
'enter a value': 'введіть значення',
|
||||||
'Error': 'Помилка',
|
'Error': 'Помилка',
|
||||||
'Error logs for "%(app)s"': 'Список зареєстрованих помилок додатку "%(app)s"',
|
'Error logs for "%(app)s"': 'Список зареєстрованих помилок додатку "%(app)s"',
|
||||||
'Error snapshot': 'Розгорнутий знімок стану (Error snapshot)',
|
'Error snapshot': 'Розгорнутий знімок стану (Error snapshot)',
|
||||||
'Error ticket': 'Відмітка (ticket) про помилку',
|
'Error ticket': 'Позначка (ticket) про помилку',
|
||||||
'Errors': 'Помилки',
|
'Errors': 'Помилки',
|
||||||
|
'Exception %(extype)s: %(exvalue)s': 'Виключення %(extype)s: %(exvalue)s',
|
||||||
'Exception %s': 'Виключення %s',
|
'Exception %s': 'Виключення %s',
|
||||||
'Exception instance attributes': 'Атрибути примірника класу Exception (виключення)',
|
'Exception instance attributes': 'Атрибути примірника класу Exception (виключення)',
|
||||||
'Expand Abbreviation': 'Розгорнути абревіатуру',
|
'Expand Abbreviation': 'Розгорнути абревіатуру',
|
||||||
|
'export as csv file': 'експортувати як файл csv',
|
||||||
|
'exposes': 'обслуговує',
|
||||||
|
'exposes:': 'обслуговує:',
|
||||||
|
'extends': 'розширює',
|
||||||
|
'failed to compile file because:': 'не вдалось скомпілювати файл через:',
|
||||||
|
'failed to reload module because:': 'не вдалось перевантажити модуль через:',
|
||||||
|
'faq': 'ЧаПи (faq)',
|
||||||
'File': 'Файл',
|
'File': 'Файл',
|
||||||
|
'file "%(filename)s" created': 'файл "%(filename)s" створено',
|
||||||
|
'file "%(filename)s" deleted': 'файл "%(filename)s" вилучено',
|
||||||
|
'file "%(filename)s" uploaded': 'файл "%(filename)s" завантажено',
|
||||||
|
'file "%s" of %s restored': 'файл "%s" з %s відновлено',
|
||||||
|
'file changed on disk': 'файл змінено на диску',
|
||||||
|
'file does not exist': 'файлу не існує',
|
||||||
|
'file not found': 'файл не знайдено',
|
||||||
|
'file saved on %(time)s': 'файл збережено в %(time)s',
|
||||||
|
'file saved on %s': 'файл збережено в %s',
|
||||||
'Filename': "Ім'я файлу",
|
'Filename': "Ім'я файлу",
|
||||||
|
'filter': 'фільтр',
|
||||||
'Frames': 'Стек викликів',
|
'Frames': 'Стек викликів',
|
||||||
'Functions with no doctests will result in [passed] tests.': 'Функції, в яких відсутні док-тести відносяться до функцій, які успішно пройшли тести.',
|
'Functions with no doctests will result in [passed] tests.': 'Функції, в яких відсутні док-тести відносяться до функцій, які успішно пройшли тести.',
|
||||||
'GAE Email': 'Ел.пошта GAE',
|
'GAE Email': 'Ел.пошта GAE',
|
||||||
@@ -95,106 +187,192 @@
|
|||||||
'GAE Password': 'Пароль GAE',
|
'GAE Password': 'Пароль GAE',
|
||||||
'Generate': 'Генерувати',
|
'Generate': 'Генерувати',
|
||||||
'Get from URL:': 'Отримати з URL:',
|
'Get from URL:': 'Отримати з URL:',
|
||||||
'Globals': 'Глобальні змінні',
|
'Globals##debug': 'Глобальні змінні',
|
||||||
'Go to Matching Pair': 'Перейти до відповідної пари',
|
'Go to Matching Pair': 'Перейти до відповідної пари',
|
||||||
|
'go!': 'почали!',
|
||||||
'Google App Engine Deployment Interface': 'Інтерфейс розгортання Google App Engine',
|
'Google App Engine Deployment Interface': 'Інтерфейс розгортання Google App Engine',
|
||||||
'Google Application Id': 'Ідентифікатор Google Application',
|
'Google Application Id': 'Ідентифікатор Google Application',
|
||||||
'Goto': 'Перейти до',
|
'Goto': 'Перейти до',
|
||||||
'Help': 'Допомога',
|
'Help': 'Допомога',
|
||||||
'Hide/Show Translated strings': 'Сховати/показати рядки перекладу',
|
'Hide/Show Translated strings': 'Сховати/показати ВЖЕ ПЕРЕКЛАДЕНІ рядки',
|
||||||
'Hits': 'Спрацьовувань',
|
'Hits': 'Спрацьовувань',
|
||||||
'Home': 'Домівка',
|
'Home': 'Домівка',
|
||||||
|
'honored only if the expression evaluates to true': 'точка зупинки активується тільки за істинності умови',
|
||||||
'If start the downgrade, be patient, it may take a while to rollback': 'Запустивши повернення на попередню версію, будьте терплячими, це може зайняти трохи часу',
|
'If start the downgrade, be patient, it may take a while to rollback': 'Запустивши повернення на попередню версію, будьте терплячими, це може зайняти трохи часу',
|
||||||
'If start the upgrade, be patient, it may take a while to download': 'Запустивши оновлення, будьте терплячими, потрібен час для завантаження необхідних даних',
|
'If start the upgrade, be patient, it may take a while to download': 'Запустивши оновлення, будьте терплячими, потрібен час для завантаження необхідних даних',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Якщо в наданому вище звіті присутня відмітка про помилку (ticket number), то це вказує на збій у виконанні контролера ще до початку запуску док-тестів. Це, зазвичай, сигналізує про помилку вирівнювання тексту програми (indention error) або помилку за межами функції (error outside function code).\r\nЗелений заголовок сигналізує, що всі тести (з наявних) пройшли успішно. В цьому випадку результат тестів показано не буде.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Якщо в наданому вище звіті присутня позначка про помилку (ticket number), то це вказує на збій у виконанні контролера ще до початку запуску док-тестів. Це, зазвичай, сигналізує про помилку вирівнювання тексту програми (indention error) або помилку за межами функції (error outside function code).\r\nЗелений заголовок сигналізує, що всі тести (з наявних) пройшли успішно. В цьому випадку результат тестів показано не буде.',
|
||||||
'Import/Export': 'Імпорт/Експорт',
|
'Import/Export': 'Імпорт/Експорт',
|
||||||
'In development, use the default Rocket webserver that is currently supported by this debugger.': 'Під час розробки , використовуйте вбудований веб-сервер Rocket, він найкраще налаштований на спільну роботу з інтерактивним ладначем.',
|
'In development, use the default Rocket webserver that is currently supported by this debugger.': 'Під час розробки , використовуйте вбудований веб-сервер Rocket, він найкраще налаштований на спільну роботу з інтерактивним ладначем.',
|
||||||
|
'includes': 'включає',
|
||||||
|
'index': 'індекс',
|
||||||
|
'insert new': 'вставити новий',
|
||||||
|
'insert new %s': 'вставити новий %s',
|
||||||
|
'inspect attributes': 'інспектувати атрибути',
|
||||||
'Install': 'Встановлення',
|
'Install': 'Встановлення',
|
||||||
'Installed applications': 'Встановлені додатки (applications)',
|
'Installed applications': 'Встановлені додатки (applications)',
|
||||||
'Interaction at %s line %s': 'Виконується %s рядок %s',
|
'Interaction at %s line %s': 'Виконується %s рядок %s',
|
||||||
'Interactive console': 'Інтерактивна консоль',
|
'Interactive console': 'Інтерактивна консоль',
|
||||||
|
'internal error': 'внутрішня помилка',
|
||||||
|
'internal error: %s': 'внутрішня помилка: %s',
|
||||||
'Internal State': 'Внутрішній стан',
|
'Internal State': 'Внутрішній стан',
|
||||||
'Invalid Query': 'Помилковий запит',
|
|
||||||
'Invalid action': 'Помилкова дія',
|
'Invalid action': 'Помилкова дія',
|
||||||
|
'invalid circual reference': 'помилкове циклічне посилання',
|
||||||
|
'invalid circular reference': 'помилкове циклічне посилання',
|
||||||
|
'invalid password': 'неправильний пароль',
|
||||||
|
'invalid password.': 'неправильний пароль.',
|
||||||
|
'Invalid Query': 'Помилковий запит',
|
||||||
|
'invalid request': 'хибний запит',
|
||||||
|
'invalid request ': 'Хибний запит',
|
||||||
|
'invalid table names (auth_* tables already defined)': 'хибна назва таблиці (таблиці auth_* вже оголошено)',
|
||||||
|
'invalid ticket': 'недійсна позначка про помилку (ticket)',
|
||||||
|
'Key': 'Ключ',
|
||||||
'Key bindings': 'Клавіатурні скорочення:',
|
'Key bindings': 'Клавіатурні скорочення:',
|
||||||
'Key bindings for ZenCoding Plugin': 'Клавіатурні скорочення для втулки ZenCoding plugin',
|
'Key bindings for ZenCoding Plugin': 'Клавіатурні скорочення для втулки ZenCoding plugin',
|
||||||
'Language files (static strings) updated': 'Файли перекладів (незмінні рядки) оновлено',
|
'kill process': 'вбити процес',
|
||||||
|
'language file "%(filename)s" created/updated': 'Файл перекладу "%(filename)s" створено/оновлено',
|
||||||
|
'Language files (static strings) updated': 'Файли перекладів (із статичних рядків в першоджерелах) оновлено',
|
||||||
|
'languages': 'переклади',
|
||||||
'Languages': 'Переклади',
|
'Languages': 'Переклади',
|
||||||
'Last saved on:': 'Востаннє збережено:',
|
'Last saved on:': 'Востаннє збережено:',
|
||||||
'License for': 'Ліцензія додатку',
|
'License for': 'Ліцензія додатку',
|
||||||
'Line number': '№ рядка',
|
'Line number': '№ рядка',
|
||||||
'LineNo': '№ рядка',
|
'LineNo': '№ рядка',
|
||||||
'Locals': 'Локальні змінні',
|
'loading...': 'завантаження...',
|
||||||
|
'locals': 'локальні',
|
||||||
|
'Locals##debug': 'Локальні змінні',
|
||||||
'Login': 'Вхід',
|
'Login': 'Вхід',
|
||||||
|
'login': 'вхід',
|
||||||
'Login to the Administrative Interface': 'Вхід в адміністративний інтерфейс',
|
'Login to the Administrative Interface': 'Вхід в адміністративний інтерфейс',
|
||||||
'Logout': 'Вихід',
|
'Logout': 'Вихід',
|
||||||
'Main Menu': 'Основне меню',
|
'Main Menu': 'Основне меню',
|
||||||
'Manage Admin Users/Students': 'Адміністратор керування користувачами/студентами',
|
'Manage Admin Users/Students': 'Адміністратор керування користувачами/студентами',
|
||||||
'Manage Students': 'Керувати студентами',
|
'Manage Students': 'Керувати студентами',
|
||||||
'Match Pair': 'Знайти пару',
|
'Match Pair': 'Знайти пару',
|
||||||
|
'merge': "з'єднати",
|
||||||
'Merge Lines': "З'єднати рядки",
|
'Merge Lines': "З'єднати рядки",
|
||||||
'Minimum length is %s': 'Мінімальна довжина становить %s',
|
'Minimum length is %s': 'Мінімальна довжина становить %s',
|
||||||
'Models': 'Моделі',
|
'Models': 'Моделі',
|
||||||
|
'models': 'моделі',
|
||||||
'Modified On': 'Змінено в',
|
'Modified On': 'Змінено в',
|
||||||
'Modules': 'Модулі',
|
'Modules': 'Модулі',
|
||||||
|
'modules': 'модулі',
|
||||||
'Must include at least %s %s': 'Має вміщувати щонайменше %s %s',
|
'Must include at least %s %s': 'Має вміщувати щонайменше %s %s',
|
||||||
'Must include at least %s lower case': 'Повинен включати щонайменше %s малих букв',
|
'Must include at least %s lower case': 'Повинен включати щонайменше %s малих букв',
|
||||||
'Must include at least %s of the following : %s': 'Має включати не менше %s таких символів : %s',
|
'Must include at least %s of the following : %s': 'Має включати не менше %s таких символів : %s',
|
||||||
'Must include at least %s upper case': 'Повинен включати щонайменше %s великих букв',
|
'Must include at least %s upper case': 'Повинен включати щонайменше %s великих букв',
|
||||||
'NO': 'НІ',
|
'new application "%s" created': 'новий додаток "%s" створено',
|
||||||
'New Application Wizard': 'Майстер створення нового додатку',
|
'New Application Wizard': 'Майстер створення нового додатку',
|
||||||
'New Record': 'Новий запис',
|
|
||||||
'New application wizard': 'Майстер створення нового додатку',
|
'New application wizard': 'Майстер створення нового додатку',
|
||||||
|
'new plugin installed': 'нова втулка (plugin) встановлена',
|
||||||
|
'New Record': 'Новий запис',
|
||||||
|
'new record inserted': 'новий рядок додано',
|
||||||
'New simple application': 'Новий простий додаток',
|
'New simple application': 'Новий простий додаток',
|
||||||
|
'next': 'наступний',
|
||||||
|
'next 100 rows': 'наступні 100 рядків',
|
||||||
'Next Edit Point': 'Наступне місце редагування',
|
'Next Edit Point': 'Наступне місце редагування',
|
||||||
'No Interaction yet': 'Ладнач не активовано',
|
'NO': 'НІ',
|
||||||
'No databases in this application': 'Даний додаток не використовує бази даних',
|
'No databases in this application': 'Даний додаток не використовує бази даних',
|
||||||
|
'No Interaction yet': 'Ладнач не активовано',
|
||||||
|
'no match': 'співпадань нема',
|
||||||
|
'no permission to uninstall "%s"': 'нема прав на вилучення (uninstall) "%s"',
|
||||||
'No ticket_storage.txt found under /private folder': 'В каталозі /private відсутній файл ticket_storage.txt',
|
'No ticket_storage.txt found under /private folder': 'В каталозі /private відсутній файл ticket_storage.txt',
|
||||||
'Not Authorized': 'Не дозволено',
|
'Not Authorized': 'Не дозволено',
|
||||||
|
'Note: If you receive an error with github status code of 128, ensure the system and account you are deploying from has a cooresponding ssh key configured in the openshift account.': 'Примітка: Якщо ви отримали повідомлення про помилку з кодом стану github рівним 128, переконайтесь, що система та обліковий запис, з якого відбувається розгортання використовують відповідний ключ ssh, налаштований в обліковому записі openshift.',
|
||||||
"On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.": 'У промисловій експлуатації, ви повинні налаштувати ваш веб-сервер на використання одного процесу та багатьох потоків, якщо бажаєте скористатись цим ладначем.',
|
"On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.": 'У промисловій експлуатації, ви повинні налаштувати ваш веб-сервер на використання одного процесу та багатьох потоків, якщо бажаєте скористатись цим ладначем.',
|
||||||
|
'online designer': 'дизайнер БД',
|
||||||
|
'OpenShift Deployment Interface': 'OpenShift: Інтерфейс розгортання',
|
||||||
|
'OpenShift Output': 'Вивід OpenShift',
|
||||||
|
'or import from csv file': 'або імпортувати через csv-файл',
|
||||||
'Original/Translation': 'Оригінал/переклад',
|
'Original/Translation': 'Оригінал/переклад',
|
||||||
'Overwrite installed app': 'Перезаписати встановлений додаток',
|
'Overwrite installed app': 'Перезаписати встановлений додаток',
|
||||||
'PAM authenticated user, cannot change password here': 'Ввімкнена система ідентифікації користувачів PAM. Для зміни паролю скористайтесь командами вашої ОС ',
|
|
||||||
'Pack all': 'Запак.все',
|
'Pack all': 'Запак.все',
|
||||||
'Pack compiled': 'Запак.компл',
|
'Pack compiled': 'Запак.компл',
|
||||||
|
'pack plugin': 'запакувати втулку',
|
||||||
|
'PAM authenticated user, cannot change password here': 'Ввімкнена система ідентифікації користувачів PAM. Для зміни паролю скористайтесь командами вашої ОС ',
|
||||||
|
'password changed': 'пароль змінено',
|
||||||
'Path to appcfg.py': 'Шлях до appcfg.py',
|
'Path to appcfg.py': 'Шлях до appcfg.py',
|
||||||
|
'Path to local openshift repo root.': 'Шлях до локального корня репозитарія openshift.',
|
||||||
|
'peek': 'глянути',
|
||||||
'Peeking at file': 'Перегляд файлу',
|
'Peeking at file': 'Перегляд файлу',
|
||||||
'Please': 'Будь-ласка',
|
'Please': 'Будь-ласка',
|
||||||
|
'plugin': 'втулка',
|
||||||
|
'plugin "%(plugin)s" deleted': 'втулку "%(plugin)s" вилучено',
|
||||||
'Plugin "%s" in application': 'Втулка "%s" в додатку',
|
'Plugin "%s" in application': 'Втулка "%s" в додатку',
|
||||||
|
'plugin not specified': 'втулку не визначено',
|
||||||
|
'plugins': 'втулки (plugins)',
|
||||||
'Plugins': 'Втулки (Plugins)',
|
'Plugins': 'Втулки (Plugins)',
|
||||||
|
'Plural Form #%s': 'Форма множини #%s',
|
||||||
|
'Plural-Forms:': 'Форми множини:',
|
||||||
'Powered by': 'Працює на',
|
'Powered by': 'Працює на',
|
||||||
|
'previous 100 rows': 'попередні 100 рядків',
|
||||||
'Previous Edit Point': 'Попереднє місце редагування',
|
'Previous Edit Point': 'Попереднє місце редагування',
|
||||||
'Project Progress': 'Поступ проекту',
|
'Project Progress': 'Поступ проекту',
|
||||||
'Query:': 'Запит:',
|
'Query:': 'Запит:',
|
||||||
'RAM Cache Keys': "Ключ ОЗП-кешу (RAM Cache)",
|
'RAM Cache Keys': 'Ключ ОЗП-кешу (RAM Cache)',
|
||||||
|
'Ram Cleared': "Кеш в пам'яті очищено",
|
||||||
|
'record': 'запис',
|
||||||
|
'record does not exist': 'запису не існує',
|
||||||
|
'record id': 'Ід.запису',
|
||||||
|
'refresh': 'оновіть',
|
||||||
'Reload routes': 'Перезавантажити маршрути',
|
'Reload routes': 'Перезавантажити маршрути',
|
||||||
'Remove compiled': 'Вилуч.компл',
|
'Remove compiled': 'Вилуч.компл',
|
||||||
'Removed Breakpoint on %s at line %s': 'Вилучено точку зупинки у %s в рядку %s',
|
'Removed Breakpoint on %s at line %s': 'Вилучено точку зупинки у %s в рядку %s',
|
||||||
|
'request': 'запит',
|
||||||
|
'requires python-git, but not installed': 'Для розгортання необхідний пакет python-git, але він не встановлений',
|
||||||
|
'resolve': "розв'язати",
|
||||||
'Resolve Conflict file': "Файл розв'язування конфлікту",
|
'Resolve Conflict file': "Файл розв'язування конфлікту",
|
||||||
|
'response': 'відповідь',
|
||||||
|
'restart': 'перезапустити майстра',
|
||||||
|
'restore': 'повернути',
|
||||||
|
'return': 'повернутись',
|
||||||
|
'revert': 'відновитись',
|
||||||
'Rows in table': 'Рядків у таблиці',
|
'Rows in table': 'Рядків у таблиці',
|
||||||
'Rows selected': 'Рядків вибрано',
|
'Rows selected': 'Рядків вибрано',
|
||||||
|
'rules are not defined': 'правила не визначені',
|
||||||
|
'rules parsed with errors': 'в правилах є помилка',
|
||||||
|
'rules:': 'правила:',
|
||||||
'Run tests': 'Запустити всі тести',
|
'Run tests': 'Запустити всі тести',
|
||||||
'Run tests in this file': 'Запустити тести у цьому файлі',
|
'Run tests in this file': 'Запустити тести у цьому файлі',
|
||||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Запустити тести з цього файлу (для тестування всіх файлів, вам необхідно натиснути кнопку з назвою 'тестувати всі')",
|
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Запустити тести з цього файлу (для тестування всіх файлів, вам необхідно натиснути кнопку з назвою 'тестувати всі')",
|
||||||
'Running on %s': 'Запущено на %s',
|
'Running on %s': 'Запущено на %s',
|
||||||
|
'runonce': 'одноразово',
|
||||||
'Save': 'Зберегти',
|
'Save': 'Зберегти',
|
||||||
'Save via Ajax': 'зберегти через Ajax',
|
'Save via Ajax': 'зберегти через Ajax',
|
||||||
'Saved file hash:': 'Хеш збереженого файлу:',
|
'Saved file hash:': 'Хеш збереженого файлу:',
|
||||||
'Searching:': 'Пошук:',
|
'search': 'пошук',
|
||||||
|
'selected': 'відмічено',
|
||||||
|
'session': 'сесія',
|
||||||
|
'session expired': 'час даної сесії вичерпано',
|
||||||
'Set Breakpoint on %s at line %s: %s': 'Додано точку зупинки в %s на рядок %s: %s',
|
'Set Breakpoint on %s at line %s: %s': 'Додано точку зупинки в %s на рядок %s: %s',
|
||||||
|
'shell': 'консоль',
|
||||||
|
'signup': 'підписатись',
|
||||||
|
'signup_requested': 'необхідна_реєстрація',
|
||||||
|
'Singular Form': 'Форма однини',
|
||||||
|
'site': 'сайт',
|
||||||
'Site': 'Сайт',
|
'Site': 'Сайт',
|
||||||
|
'skip to generate': 'перейти до генерування результату',
|
||||||
|
'some files could not be removed': 'деякі файли не можна вилучити',
|
||||||
'Sorry, could not find mercurial installed': 'Не вдалось виявити встановлену систему контролю версій Mercurial',
|
'Sorry, could not find mercurial installed': 'Не вдалось виявити встановлену систему контролю версій Mercurial',
|
||||||
'Start a new app': 'Створюється новий додаток',
|
'Start a new app': 'Створюється новий додаток',
|
||||||
'Start wizard': 'Активувати майстра',
|
'Start wizard': 'Активувати майстра',
|
||||||
|
'state': 'стан',
|
||||||
|
'static': 'статичні',
|
||||||
'Static files': 'Статичні файли',
|
'Static files': 'Статичні файли',
|
||||||
'Step': 'Крок',
|
'Step': 'Крок',
|
||||||
|
'step': 'крок',
|
||||||
|
'stop': 'зупинити',
|
||||||
|
'submit': 'застосувати',
|
||||||
'Submit': 'Застосувати',
|
'Submit': 'Застосувати',
|
||||||
|
'successful': 'успішно',
|
||||||
|
'table': 'таблиця',
|
||||||
|
'tags': 'мітки (tags)',
|
||||||
'Temporary': 'Тимчасово',
|
'Temporary': 'Тимчасово',
|
||||||
|
'test': 'тестувати всі',
|
||||||
'Testing application': 'Тестування додатку',
|
'Testing application': 'Тестування додатку',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Запит" це умова, на зразок "db.table1.field1==\'значення\'". Вираз "db.table1.field1==db.table2.field2" повертає результат об\'єднання (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.': '"Запит" це умова, на зразок "db.table1.field1==\'значення\'". Вираз "db.table1.field1==db.table2.field2" повертає результат об\'єднання (SQL JOIN) таблиць.',
|
||||||
'The app exists, was NOT created by wizard, continue to overwrite!': 'Додаток вже існує, і його НЕ було створено майстром. Продовжуємо перезаписування!',
|
|
||||||
'The app exists, was created by wizard, continue to overwrite!': 'Додаток вже існує і його було створено майстром. Продовжуємо переписування!',
|
'The app exists, was created by wizard, continue to overwrite!': 'Додаток вже існує і його було створено майстром. Продовжуємо переписування!',
|
||||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'Логіка додатку, кожний шлях URL проектується на одну з експонуючих функцій в контролері',
|
'The app exists, was NOT created by wizard, continue to overwrite!': 'Додаток вже існує, і його НЕ було створено майстром. Продовжуємо перезаписування!',
|
||||||
|
'The application logic, each URL path is mapped in one exposed function in the controller': 'Логіка додатку, кожний шлях URL проектується на одну з функцій обслуговування в контролері',
|
||||||
'The data representation, define database tables and sets': 'Представлення даних, опис таблиць БД та наборів',
|
'The data representation, define database tables and sets': 'Представлення даних, опис таблиць БД та наборів',
|
||||||
'The presentations layer, views are also known as templates': 'Презентаційний рівень, відображення, відомі також як шаблони',
|
'The presentations layer, views are also known as templates': 'Презентаційний рівень, відображення, відомі також як шаблони',
|
||||||
'There are no controllers': 'Жодного контролера, наразі, не існує',
|
'There are no controllers': 'Жодного контролера, наразі, не існує',
|
||||||
@@ -210,215 +388,83 @@
|
|||||||
'This is an experimental feature and it needs more testing. If you decide to downgrade you do it at your own risk': 'Це експериментальна властивість, яка вимагає подальшого тестування. Якщо ви вирішили повернутись на попередню версію, ви це робити на ваш власний розсуд.',
|
'This is an experimental feature and it needs more testing. If you decide to downgrade you do it at your own risk': 'Це експериментальна властивість, яка вимагає подальшого тестування. Якщо ви вирішили повернутись на попередню версію, ви це робити на ваш власний розсуд.',
|
||||||
'This is an experimental feature and it needs more testing. If you decide to upgrade you do it at your own risk': 'Це експериментальна властивість, яка вимагає подальшого тестування. Якщо ви вирішили розпочати оновлення, ви це робите на ваш власний розсуд',
|
'This is an experimental feature and it needs more testing. If you decide to upgrade you do it at your own risk': 'Це експериментальна властивість, яка вимагає подальшого тестування. Якщо ви вирішили розпочати оновлення, ви це робите на ваш власний розсуд',
|
||||||
'This is the %(filename)s template': 'Це шаблон %(filename)s',
|
'This is the %(filename)s template': 'Це шаблон %(filename)s',
|
||||||
|
"This page can commit your changes to an openshift app repo and push them to your cloud instance. This assumes that you've already created the application instance using the web2py skeleton and have that repo somewhere on a filesystem that this web2py instance can access. This functionality requires GitPython installed and on the python path of the runtime that web2py is operating in.": 'На цій сторінці можна закомітити ваші зміни в репозитарій додатків openshift та проштовхнути їх у ваш примірник в хмарі. Це передбачає, що ви вже створили примірник додатку, використовуючи базовий додаток web2py, як скелет, і маєте репозитарій десь на вашій файловій системі, причому екземпляр web2py має до нього доступ. Ця властивість вимагає наявності встановленого модулю GitPython так, щоб web2py міг його викликати.',
|
||||||
'This page can upload your application to the Google App Engine computing cloud. Mind that you must first create indexes locally and this is done by installing the Google appserver and running the app locally with it once, or there will be errors when selecting records. Attention: deployment may take long time, depending on the network speed. Attention: it will overwrite your app.yaml. DO NOT SUBMIT TWICE.': 'На цій сторінці ви можете завантажити свій додаток в сервіс хмарних обчислень Google App Engine. Майте на увазі, що спочатку необхідно локально створити індекси, і це можна зробити встановивши сервер додатків Google appserver та запустивши в ньому додаток один раз, інакше при виборі записів виникатимуть помилки. Увага: розгортання може зайняти тривалий час, в залежності від швидкості мережі. Увага: це призведе до перезапису app.yaml. НЕ ПУБЛІКУЙТЕ ДВІЧІ.',
|
'This page can upload your application to the Google App Engine computing cloud. Mind that you must first create indexes locally and this is done by installing the Google appserver and running the app locally with it once, or there will be errors when selecting records. Attention: deployment may take long time, depending on the network speed. Attention: it will overwrite your app.yaml. DO NOT SUBMIT TWICE.': 'На цій сторінці ви можете завантажити свій додаток в сервіс хмарних обчислень Google App Engine. Майте на увазі, що спочатку необхідно локально створити індекси, і це можна зробити встановивши сервер додатків Google appserver та запустивши в ньому додаток один раз, інакше при виборі записів виникатимуть помилки. Увага: розгортання може зайняти тривалий час, в залежності від швидкості мережі. Увага: це призведе до перезапису app.yaml. НЕ ПУБЛІКУЙТЕ ДВІЧІ.',
|
||||||
'Ticket': 'Відмітка (Ticket)',
|
'this page to see if a breakpoint was hit and debug interaction is required.': 'цю сторінку, щоб побачити, чи була досягнута точка зупинки і процес ладнання розпочато.',
|
||||||
'Ticket ID': 'Ідентифікатор відмітки (Ticket ID)',
|
'ticket': 'позначка',
|
||||||
|
'Ticket': 'Позначка (Ticket)',
|
||||||
|
'Ticket ID': 'Ід.позначки (Ticket ID)',
|
||||||
|
'tickets': 'позначки (tickets)',
|
||||||
|
'Time in Cache (h:m:s)': 'Час в кеші (г:хв:сек)',
|
||||||
|
'to previous version.': 'до попередньої версії.',
|
||||||
'To create a plugin, name a file/folder plugin_[name]': 'Для створення втулки, назвіть файл/каталог plugin_[name]',
|
'To create a plugin, name a file/folder plugin_[name]': 'Для створення втулки, назвіть файл/каталог plugin_[name]',
|
||||||
'To emulate a breakpoint programatically, write:': 'Для встановлення точки зупинки програмним чином напишіть:',
|
'To emulate a breakpoint programatically, write:': 'Для встановлення точки зупинки програмним чином напишіть:',
|
||||||
|
'to use the debugger!': 'щоб активувати ладнач!',
|
||||||
|
'toggle breakpoint': '+/- точку зупинки',
|
||||||
'Traceback': 'Стек викликів (Traceback)',
|
'Traceback': 'Стек викликів (Traceback)',
|
||||||
'Translation strings for the application': 'Пари рядків <оригінал>:<переклад> для вибраної мови',
|
'Translation strings for the application': 'Пари рядків <оригінал>:<переклад> для вибраної мови',
|
||||||
|
'try something like': 'спробуйте щось схоже на',
|
||||||
|
'try view': 'дивитись результат',
|
||||||
'Type PDB debugger command in here and hit Return (Enter) to execute it.': 'наберіть тут будь-які команди ладнача PDB і натисніть клавішу [Return] ([Enter]), щоб запустити їх на виконання.',
|
'Type PDB debugger command in here and hit Return (Enter) to execute it.': 'наберіть тут будь-які команди ладнача PDB і натисніть клавішу [Return] ([Enter]), щоб запустити їх на виконання.',
|
||||||
'Type python statement in here and hit Return (Enter) to execute it.': 'Наберіть тут будь-які вирази Python і натисніть клавішу [Return] ([Enter]), щоб запустити їх на виконання.',
|
'Type python statement in here and hit Return (Enter) to execute it.': 'Наберіть тут будь-які вирази Python і натисніть клавішу [Return] ([Enter]), щоб запустити їх на виконання.',
|
||||||
'Unable to check for upgrades': 'Неможливо перевірити оновлення',
|
'Unable to check for upgrades': 'Неможливо перевірити оновлення',
|
||||||
'Unable to determine the line number!': 'Не можу визначити номер рядка!',
|
|
||||||
'Unable to download app because:': 'Не можу завантажити додаток через:',
|
|
||||||
'Unable to download because:': 'Неможливо завантажити через:',
|
|
||||||
'Uninstall': 'Вилучити',
|
|
||||||
'Unsupported webserver working mode: %s': 'Веб-сервер знаходиться в режимі, який не підтримується: %s',
|
|
||||||
'Update:': 'Поновити:',
|
|
||||||
'Upgrade': 'Оновити',
|
|
||||||
'Upload a package:': 'Завантажити пакет:',
|
|
||||||
'Upload and install packed application': 'Завантажити та встановити запакований додаток',
|
|
||||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Для створення складних запитів використовуйте (...)&(...) замість AND, (...)|(...) замість OR, та ~(...) замість NOT.',
|
|
||||||
'Using the shell may lock the database to other users of this app.': 'Використання оболонки може заблокувати базу даних від сумісного використання іншими користувачами цього додатку.',
|
|
||||||
'Version': 'Версія',
|
|
||||||
'Version %s.%s.%s (%s) %s': 'Версія %s.%s.%s (%s) %s',
|
|
||||||
'Versioning': 'Контроль версій',
|
|
||||||
'Views': 'Відображення (Views)',
|
|
||||||
'WARNING:': 'ПОПЕРЕДЖЕННЯ:',
|
|
||||||
'Web Framework': 'Web Framework',
|
|
||||||
'Wrap with Abbreviation': 'Загорнути з абревіатурою',
|
|
||||||
'YES': 'ТАК',
|
|
||||||
'You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button': 'Ви також можете встановлювати/вилучати точки зупинок під час редагування першоджерел (sources), використовуючи кнопку "+/- точку зупинки"',
|
|
||||||
'You have one more login attempt before you are locked out': 'У вас є ще одна спроба перед тим, як вхід буде заблоковано',
|
|
||||||
'You need to set up and reach a': 'Треба встановити та досягнути',
|
|
||||||
'Your application will be blocked until you click an action button (next, step, continue, etc.)': 'Ваш додаток буде заблоковано, поки ви не клацнете по одній з кнопок керування ("наступний", "крок", "продовжити", та ін.)',
|
|
||||||
'Your can inspect variables using the console bellow': 'Ви можете досліджувати змінні, використовуючи інтерактивну консоль',
|
|
||||||
'about': 'про',
|
|
||||||
'admin disabled because no admin password': 'адмін.інтерфейс відключено, бо не вказано пароль адміністратора',
|
|
||||||
'admin disabled because not supported on google app engine': 'адмін.інтерфейс відключено через те, що Google Application Engine його не підтримує',
|
|
||||||
'admin disabled because too many invalid login attempts': 'адмін.інтерфейс заблоковано, бо кількість хибних спроб входу перевищило граничний рівень',
|
|
||||||
'admin disabled because unable to access password file': 'адмін.інтерфейс відключено через відсутність доступу до файлу паролів',
|
|
||||||
'administrative interface': 'інтерфейс адміністратора',
|
|
||||||
'and rename it:': 'i змінити назву на:',
|
|
||||||
'appadmin': 'Aдм.панель',
|
|
||||||
'appadmin is disabled because insecure channel': "адмін.панель відключено через використання ненадійного каналу зв'язку",
|
|
||||||
'application "%s" uninstalled': 'додаток "%s" вилучено',
|
|
||||||
'application %(appname)s installed with md5sum: %(digest)s': 'додаток %(appname)s встановлено з md5sum: %(digest)s',
|
|
||||||
'application compiled': 'додаток скомпільовано',
|
|
||||||
'application is compiled and cannot be designed': 'додаток скомпільований. налаштування змінювати не можна',
|
|
||||||
'arguments': 'аргументи',
|
|
||||||
'back': '<< назад',
|
|
||||||
'breakpoint': 'точку зупинки',
|
|
||||||
'breakpoints': 'точки зупинок',
|
|
||||||
'cache': 'кеш',
|
|
||||||
'cache, errors and sessions cleaned': 'кеш, список зареєстрованих помилок та сесії очищенні',
|
|
||||||
'cannot create file': 'не можу створити файл',
|
|
||||||
'cannot upload file "%(filename)s"': 'не можу завантажити файл "%(filename)s"',
|
|
||||||
'check all': 'відмітити всі',
|
|
||||||
'code': 'код',
|
|
||||||
'collapse/expand all': 'згорнути/розгорнути все',
|
|
||||||
'compiled application removed': 'скомпільований додаток вилучено',
|
|
||||||
'continue': 'продовжити',
|
|
||||||
'controllers': 'контролери',
|
|
||||||
'create file with filename:': 'створити файл з назвою:',
|
|
||||||
'created by': 'Автор:',
|
|
||||||
'crontab': 'таблиця cron',
|
|
||||||
'currently running': 'наразі, активний додаток',
|
|
||||||
'currently saved or': 'останній збережений, або',
|
|
||||||
'data uploaded': 'дані завантажено',
|
|
||||||
'database': 'база даних',
|
|
||||||
'database %s select': 'Вибірка з бази даних %s',
|
|
||||||
'database administration': 'адміністрування бази даних',
|
|
||||||
'db': 'дб',
|
|
||||||
'defines tables': "об'являє таблиці",
|
|
||||||
'delete': 'вилучити',
|
|
||||||
'delete all checked': 'вилучити всі відмічені',
|
|
||||||
'delete plugin': 'вилучити втулку',
|
|
||||||
'deleted after first hit': 'автоматично вилучається після першого спрацювання',
|
|
||||||
'design': 'налаштування',
|
|
||||||
'details': 'детальніше',
|
|
||||||
'direction: ltr': 'напрямок: зліва-направо (ltr)',
|
|
||||||
'disabled in demo mode': 'відключено в демо-режимі',
|
|
||||||
'disabled in multi user mode': 'відключено в багато-користувацькому режимі',
|
|
||||||
'docs': 'док.',
|
|
||||||
'done!': 'зроблено!',
|
|
||||||
'download layouts': 'завантажити макет (layout)',
|
|
||||||
'download plugins': 'завантажити втулки',
|
|
||||||
'edit all': 'редагувати всі',
|
|
||||||
'edit controller': 'редагувати контролер',
|
|
||||||
'edit views:': 'редагувати відображення (views):',
|
|
||||||
'enter a value': 'введіть значення',
|
|
||||||
'export as csv file': 'експортувати як файл csv',
|
|
||||||
'exposes': 'експонує',
|
|
||||||
'exposes:': 'експонує:',
|
|
||||||
'extends': 'розширює',
|
|
||||||
'failed to compile file because:': 'не вдалось скомпілювати файл через:',
|
|
||||||
'failed to reload module because:': 'не вдалось перевантажити модуль через:',
|
|
||||||
'file "%(filename)s" created': 'файл "%(filename)s" створено',
|
|
||||||
'file "%(filename)s" deleted': 'файл "%(filename)s" вилучено',
|
|
||||||
'file "%(filename)s" uploaded': 'файл "%(filename)s" завантажено',
|
|
||||||
'file "%s" of %s restored': 'файл "%s" з %s відновлено',
|
|
||||||
'file changed on disk': 'файл змінено на диску',
|
|
||||||
'file does not exist': 'файлу не існує',
|
|
||||||
'file not found': 'файл не знайдено',
|
|
||||||
'file saved on %(time)s': 'файл збережено в %(time)s',
|
|
||||||
'file saved on %s': 'файл збережено в %s',
|
|
||||||
'files': 'файли',
|
|
||||||
'filter': 'фільтр',
|
|
||||||
'go!': 'почали!',
|
|
||||||
'honored only if the expression evaluates to true': 'точка зупинки активується тільки за істинності умови',
|
|
||||||
'includes': 'включає',
|
|
||||||
'index': 'індекс',
|
|
||||||
'insert new': 'вставити новий',
|
|
||||||
'insert new %s': 'вставити новий %s',
|
|
||||||
'inspect attributes': 'інспектувати атрибути',
|
|
||||||
'internal error': 'внутрішня помилка',
|
|
||||||
'internal error: %s': 'внутрішня помилка: %s',
|
|
||||||
'invalid circual reference': 'помилкове циклічне посилання',
|
|
||||||
'invalid circular reference': 'помилкове циклічне посилання',
|
|
||||||
'invalid password': 'неправильний пароль',
|
|
||||||
'invalid password.': 'неправильний пароль.',
|
|
||||||
'invalid request': 'хибний запит',
|
|
||||||
'invalid table names (auth_* tables already defined)': "хибна назва таблиці (таблиці auth_* вже оголошено)",
|
|
||||||
'invalid ticket': 'недійсна відмітка про помилку (ticket)',
|
|
||||||
'language file "%(filename)s" created/updated': 'Файл перекладу "%(filename)s" створено/оновлено',
|
|
||||||
'languages': 'переклади',
|
|
||||||
'loading...': 'завантаження...',
|
|
||||||
'locals': 'локальні',
|
|
||||||
'merge': "з'єднати",
|
|
||||||
'models': 'моделі',
|
|
||||||
'modules': 'модулі',
|
|
||||||
'new application "%s" created': 'новий додаток "%s" створено',
|
|
||||||
'new plugin installed': 'нова втулка (plugin) встановлена',
|
|
||||||
'new record inserted': 'новий рядок додано',
|
|
||||||
'next': 'наступний',
|
|
||||||
'next 100 rows': 'наступні 100 рядків',
|
|
||||||
'no match': 'співпадань нема',
|
|
||||||
'no permission to uninstall "%s"': 'нема прав на вилучення (uninstall) "%s"',
|
|
||||||
'online designer': 'ДБ-дизайнер',
|
|
||||||
'or import from csv file': 'або імпортувати через csv-файл',
|
|
||||||
'pack plugin': 'запакувати втулку',
|
|
||||||
'password changed': 'пароль змінено',
|
|
||||||
'peek': 'глянути',
|
|
||||||
'plugin': 'втулка',
|
|
||||||
'plugin "%(plugin)s" deleted': 'втулку "%(plugin)s" вилучено',
|
|
||||||
'plugin not specified': 'втулку не визначено',
|
|
||||||
'plugins': 'втулки (plugins)',
|
|
||||||
'previous 100 rows': 'попередні 100 рядків',
|
|
||||||
'record': 'запис',
|
|
||||||
'record does not exist': 'запису не існує',
|
|
||||||
'record id': 'Ід.запису',
|
|
||||||
'refresh': 'оновіть',
|
|
||||||
'request': 'запит',
|
|
||||||
'resolve': "розв'язати",
|
|
||||||
'response': 'відповідь',
|
|
||||||
'restart': 'перезапустити майстра',
|
|
||||||
'restore': 'повернути',
|
|
||||||
'return': 'повернутись',
|
|
||||||
'revert': 'відновитись',
|
|
||||||
'selected': 'відмічено',
|
|
||||||
'session': 'сесія',
|
|
||||||
'session expired': 'час даної сесії вичерпано',
|
|
||||||
'shell': 'консоль',
|
|
||||||
'site': 'сайт',
|
|
||||||
'skip to generate': 'перейти до генерування результату',
|
|
||||||
'some files could not be removed': 'деякі файли не можна вилучити',
|
|
||||||
'state': 'стан',
|
|
||||||
'static': 'статичні',
|
|
||||||
'step': 'крок',
|
|
||||||
'stop': 'зупинити',
|
|
||||||
'submit': 'застосувати',
|
|
||||||
'successful': 'успішно',
|
|
||||||
'table': 'таблиця',
|
|
||||||
'test': 'тестувати всі',
|
|
||||||
'this page to see if a breakpoint was hit and debug interaction is required.': 'цю сторінку, щоб побачити, чи була досягнута точка зупинки і процес ладнання розпочато.',
|
|
||||||
'ticket': 'відмітка',
|
|
||||||
'to previous version.': 'до попередньої версії.',
|
|
||||||
'to use the debugger!': 'щоб активувати ладнач!',
|
|
||||||
'toggle breakpoint': '+/- точку зупинки',
|
|
||||||
'try something like': 'спробуйте щось схоже на',
|
|
||||||
'try view': 'дивитись результат',
|
|
||||||
'unable to create application "%s"': 'не можу створити додаток "%s"',
|
'unable to create application "%s"': 'не можу створити додаток "%s"',
|
||||||
'unable to create application "%s" (it may exist already)': 'не можу створити додаток "%s" (можливо його вже створено)',
|
'unable to create application "%s" (it may exist already)': 'не можу створити додаток "%s" (можливо його вже створено)',
|
||||||
'unable to delete file "%(filename)s"': 'не можу вилучити файл "%(filename)s"',
|
'unable to delete file "%(filename)s"': 'не можу вилучити файл "%(filename)s"',
|
||||||
'unable to delete file plugin "%(plugin)s"': 'не можу вилучити файл втулки "%(plugin)s"',
|
'unable to delete file plugin "%(plugin)s"': 'не можу вилучити файл втулки "%(plugin)s"',
|
||||||
|
'Unable to determine the line number!': 'Не можу визначити номер рядка!',
|
||||||
|
'Unable to download app because:': 'Не можу завантажити додаток через:',
|
||||||
|
'Unable to download because:': 'Неможливо завантажити через:',
|
||||||
'unable to download layout': 'не вдається завантажити макет',
|
'unable to download layout': 'не вдається завантажити макет',
|
||||||
'unable to download plugin: %s': 'не вдається завантажити втулку: %s',
|
'unable to download plugin: %s': 'не вдається завантажити втулку: %s',
|
||||||
'unable to install application "%(appname)s"': 'не вдається встановити додаток "%(appname)s"',
|
'unable to install application "%(appname)s"': 'не вдається встановити додаток "%(appname)s"',
|
||||||
'unable to parse csv file': 'не вдається розібрати csv-файл',
|
'unable to parse csv file': 'не вдається розібрати csv-файл',
|
||||||
'unable to uninstall "%s"': 'не вдається вилучити "%s"',
|
'unable to uninstall "%s"': 'не вдається вилучити "%s"',
|
||||||
'unable to upgrade because "%s"': 'не вдається оновити, тому що "%s"',
|
'unable to upgrade because "%s"': 'не вдається оновити, тому що "%s"',
|
||||||
|
'unauthorized': 'неавторизовано',
|
||||||
'uncheck all': 'зняти відмітку з усіх',
|
'uncheck all': 'зняти відмітку з усіх',
|
||||||
'uninstall': 'вилучити',
|
'uninstall': 'вилучити',
|
||||||
|
'Uninstall': 'Вилучити',
|
||||||
|
'Unsupported webserver working mode: %s': 'Веб-сервер знаходиться в режимі, який не підтримується: %s',
|
||||||
'update': 'оновити',
|
'update': 'оновити',
|
||||||
'update all languages': 'оновити всі переклади',
|
'update all languages': 'оновити всі переклади',
|
||||||
|
'Update:': 'Поновити:',
|
||||||
|
'Upgrade': 'Оновити',
|
||||||
'upgrade now': 'оновитись зараз',
|
'upgrade now': 'оновитись зараз',
|
||||||
'upgrade_web2py': 'оновити web2py',
|
'upgrade_web2py': 'оновити web2py',
|
||||||
'upload': 'завантажити',
|
'upload': 'завантажити',
|
||||||
|
'Upload a package:': 'Завантажити пакет:',
|
||||||
|
'Upload and install packed application': 'Завантажити та встановити запакований додаток',
|
||||||
'upload file:': 'завантажити файл:',
|
'upload file:': 'завантажити файл:',
|
||||||
'upload plugin file:': 'завантажити файл втулки:',
|
'upload plugin file:': 'завантажити файл втулки:',
|
||||||
|
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Для створення складних запитів використовуйте (...)&(...) замість AND, (...)|(...) замість OR, та ~(...) замість NOT.',
|
||||||
'user': 'користувач',
|
'user': 'користувач',
|
||||||
|
'Using the shell may lock the database to other users of this app.': 'Використання оболонки може заблокувати базу даних від сумісного використання іншими користувачами цього додатку.',
|
||||||
'value not allowed': 'недопустиме значення',
|
'value not allowed': 'недопустиме значення',
|
||||||
'variables': 'змінні',
|
'variables': 'змінні',
|
||||||
|
'Version': 'Версія',
|
||||||
|
'Version %s.%s.%s (%s) %s': 'Версія %s.%s.%s (%s) %s',
|
||||||
|
'Versioning': 'Контроль версій',
|
||||||
|
'view': 'перегляд',
|
||||||
|
'Views': 'Відображення (Views)',
|
||||||
'views': 'відображення',
|
'views': 'відображення',
|
||||||
'web2py Debugger': 'Ладнач web2py',
|
'WARNING:': 'ПОПЕРЕДЖЕННЯ:',
|
||||||
'web2py Recent Tweets': 'Останні твіти web2py',
|
'Web Framework': 'Web Framework',
|
||||||
'web2py apps to deploy': 'Готові до розгортання додатки web2py',
|
'web2py apps to deploy': 'Готові до розгортання додатки web2py',
|
||||||
|
'web2py Debugger': 'Ладнач web2py',
|
||||||
'web2py downgrade': 'повернення на попередню версію web2py',
|
'web2py downgrade': 'повернення на попередню версію web2py',
|
||||||
'web2py is up to date': 'web2py оновлено до актуальної версії',
|
'web2py is up to date': 'web2py оновлено до актуальної версії',
|
||||||
'web2py online debugger': 'оперативний ладнач (online debugger) web2py',
|
'web2py online debugger': 'оперативний ладнач (online debugger) web2py',
|
||||||
|
'web2py Recent Tweets': 'Останні твіти web2py',
|
||||||
'web2py upgrade': 'оновлення web2py',
|
'web2py upgrade': 'оновлення web2py',
|
||||||
'web2py upgraded; please restart it': 'web2py оновлено; будь-ласка перезапустіть його',
|
'web2py upgraded; please restart it': 'web2py оновлено; будь-ласка перезапустіть його',
|
||||||
|
'Wrap with Abbreviation': 'Загорнути з абревіатурою',
|
||||||
|
'WSGI reference name': "ім'я посилання WSGI",
|
||||||
|
'YES': 'ТАК',
|
||||||
|
'You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button': 'Ви також можете встановлювати/вилучати точки зупинок під час редагування першоджерел (sources), використовуючи кнопку "+/- точку зупинки"',
|
||||||
|
'You have one more login attempt before you are locked out': 'У вас є ще одна спроба перед тим, як вхід буде заблоковано',
|
||||||
'you must specify a name for the uploaded application': "ви повинні вказати ім'я додатка, перед ти, як завантажити його",
|
'you must specify a name for the uploaded application': "ви повинні вказати ім'я додатка, перед ти, як завантажити його",
|
||||||
|
'You need to set up and reach a': 'Треба встановити та досягнути',
|
||||||
|
'Your application will be blocked until you click an action button (next, step, continue, etc.)': 'Ваш додаток буде заблоковано, поки ви не клацнете по одній з кнопок керування ("наступний", "крок", "продовжити", та ін.)',
|
||||||
|
'Your can inspect variables using the console bellow': 'Ви можете досліджувати змінні, використовуючи інтерактивну консоль',
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,14 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'zh-tw',
|
||||||
|
'!langname!': '台灣中文',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新" 是選擇性的條件式, 格式就像 "欄位1=\'值\'". 但是 JOIN 的資料不可以使用 update 或是 delete"',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新" 是選擇性的條件式, 格式就像 "欄位1=\'值\'". 但是 JOIN 的資料不可以使用 update 或是 delete"',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '已刪除 %s 筆',
|
'%s %%{row} deleted': '已刪除 %s 筆',
|
||||||
'%s rows updated': '已更新 %s 筆',
|
'%s %%{row} updated': '已更新 %s 筆',
|
||||||
'(something like "it-it")': '(格式類似 "zh-tw")',
|
'(something like "it-it")': '(格式類似 "zh-tw")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': '新版的 web2py 已發行',
|
'A new version of web2py is available': '新版的 web2py 已發行',
|
||||||
'A new version of web2py is available: %s': '新版的 web2py 已發行: %s',
|
'A new version of web2py is available: %s': '新版的 web2py 已發行: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '注意: 登入管理帳號需要安全連線(HTTPS)或是在本機連線(localhost).',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '注意: 登入管理帳號需要安全連線(HTTPS)或是在本機連線(localhost).',
|
||||||
@@ -27,13 +30,17 @@
|
|||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': '無法編譯:應用程式中含有錯誤,請除錯後再試一次.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': '無法編譯:應用程式中含有錯誤,請除錯後再試一次.',
|
||||||
'Cannot compile: there are errors in your app:': '無法編譯: 在你的應用程式存在錯誤:',
|
'Cannot compile: there are errors in your app:': '無法編譯: 在你的應用程式存在錯誤:',
|
||||||
'Change Password': '變更密碼',
|
'Change Password': '變更密碼',
|
||||||
|
'Change admin password': 'change admin password',
|
||||||
'Check to delete': '打勾代表刪除',
|
'Check to delete': '打勾代表刪除',
|
||||||
'Check to delete:': '打勾代表刪除:',
|
'Check to delete:': '打勾代表刪除:',
|
||||||
'Checking for upgrades...': '檢查新版本中...',
|
'Checking for upgrades...': '檢查新版本中...',
|
||||||
|
'Clean': '清除',
|
||||||
'Client IP': '客戶端網址(IP)',
|
'Client IP': '客戶端網址(IP)',
|
||||||
|
'Compile': '編譯',
|
||||||
'Controller': '控件',
|
'Controller': '控件',
|
||||||
'Controllers': '控件',
|
'Controllers': '控件',
|
||||||
'Copyright': '版權所有',
|
'Copyright': '版權所有',
|
||||||
|
'Create': '創建',
|
||||||
'Create new simple application': '創建應用程式',
|
'Create new simple application': '創建應用程式',
|
||||||
'Current request': '目前網路資料要求(request)',
|
'Current request': '目前網路資料要求(request)',
|
||||||
'Current response': '目前網路資料回應(response)',
|
'Current response': '目前網路資料回應(response)',
|
||||||
@@ -59,14 +66,17 @@
|
|||||||
'Editing file "%s"': '編輯檔案"%s"',
|
'Editing file "%s"': '編輯檔案"%s"',
|
||||||
'Enterprise Web Framework': '企業網站平台',
|
'Enterprise Web Framework': '企業網站平台',
|
||||||
'Error logs for "%(app)s"': '"%(app)s"的錯誤紀錄',
|
'Error logs for "%(app)s"': '"%(app)s"的錯誤紀錄',
|
||||||
|
'Errors': '錯誤紀錄',
|
||||||
'Exception instance attributes': 'Exception instance attributes',
|
'Exception instance attributes': 'Exception instance attributes',
|
||||||
'First name': '名',
|
'First name': '名',
|
||||||
'Functions with no doctests will result in [passed] tests.': '沒有 doctests 的函式會顯示 [passed].',
|
'Functions with no doctests will result in [passed] tests.': '沒有 doctests 的函式會顯示 [passed].',
|
||||||
'Group ID': '群組編號',
|
'Group ID': '群組編號',
|
||||||
'Hello World': '嗨! 世界',
|
'Hello World': '嗨! 世界',
|
||||||
|
'Help': '說明檔',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||||
'Import/Export': '匯入/匯出',
|
'Import/Export': '匯入/匯出',
|
||||||
'Index': '索引',
|
'Index': '索引',
|
||||||
|
'Install': '安裝',
|
||||||
'Installed applications': '已安裝應用程式',
|
'Installed applications': '已安裝應用程式',
|
||||||
'Internal State': '內部狀態',
|
'Internal State': '內部狀態',
|
||||||
'Invalid Query': '不合法的查詢',
|
'Invalid Query': '不合法的查詢',
|
||||||
@@ -92,7 +102,10 @@
|
|||||||
'No databases in this application': '這應用程式不含資料庫',
|
'No databases in this application': '這應用程式不含資料庫',
|
||||||
'Origin': '原文',
|
'Origin': '原文',
|
||||||
'Original/Translation': '原文/翻譯',
|
'Original/Translation': '原文/翻譯',
|
||||||
|
'Overwrite installed app': '覆蓋已安裝的應用程式',
|
||||||
'PAM authenticated user, cannot change password here': 'PAM 授權使用者, 無法在此變更密碼',
|
'PAM authenticated user, cannot change password here': 'PAM 授權使用者, 無法在此變更密碼',
|
||||||
|
'Pack all': '全部打包',
|
||||||
|
'Pack compiled': '打包已編譯資料',
|
||||||
'Password': '密碼',
|
'Password': '密碼',
|
||||||
"Password fields don't match": '密碼欄不匹配',
|
"Password fields don't match": '密碼欄不匹配',
|
||||||
'Peeking at file': '選個文件',
|
'Peeking at file': '選個文件',
|
||||||
@@ -104,12 +117,14 @@
|
|||||||
'Register': '註冊',
|
'Register': '註冊',
|
||||||
'Registration key': '註冊金鑰',
|
'Registration key': '註冊金鑰',
|
||||||
'Remember me (for 30 days)': '記住帳號(30 天)',
|
'Remember me (for 30 days)': '記住帳號(30 天)',
|
||||||
|
'Remove compiled': '編譯檔案已移除',
|
||||||
'Reset Password key': '重設密碼',
|
'Reset Password key': '重設密碼',
|
||||||
'Resolve Conflict file': '解決衝突檔案',
|
'Resolve Conflict file': '解決衝突檔案',
|
||||||
'Role': '角色',
|
'Role': '角色',
|
||||||
'Rows in table': '在資料表裏的資料',
|
'Rows in table': '在資料表裏的資料',
|
||||||
'Rows selected': '筆資料被選擇',
|
'Rows selected': '筆資料被選擇',
|
||||||
'Saved file hash:': '檔案雜湊值已紀錄:',
|
'Saved file hash:': '檔案雜湊值已紀錄:',
|
||||||
|
'Site': '網站',
|
||||||
'Static files': '靜態檔案',
|
'Static files': '靜態檔案',
|
||||||
'Stylesheet': '網頁風格檔',
|
'Stylesheet': '網頁風格檔',
|
||||||
'Submit': '傳送',
|
'Submit': '傳送',
|
||||||
@@ -133,6 +148,7 @@
|
|||||||
'Unable to download app': '無法下載應用程式',
|
'Unable to download app': '無法下載應用程式',
|
||||||
'Unable to download app because:': '無法下載應用程式因為:',
|
'Unable to download app because:': '無法下載應用程式因為:',
|
||||||
'Unable to download because': '因為下列原因無法下載:',
|
'Unable to download because': '因為下列原因無法下載:',
|
||||||
|
'Uninstall': '解除安裝',
|
||||||
'Update:': '更新:',
|
'Update:': '更新:',
|
||||||
'Upload & install packed application': '上傳並安裝已打包的應用程式',
|
'Upload & install packed application': '上傳並安裝已打包的應用程式',
|
||||||
'Upload existing application': '更新存在的應用程式',
|
'Upload existing application': '更新存在的應用程式',
|
||||||
@@ -147,7 +163,6 @@
|
|||||||
'Welcome %s': '歡迎 %s',
|
'Welcome %s': '歡迎 %s',
|
||||||
'Welcome to web2py': '歡迎使用 web2py',
|
'Welcome to web2py': '歡迎使用 web2py',
|
||||||
'YES': '是',
|
'YES': '是',
|
||||||
'About': '關於',
|
|
||||||
'additional code for your application': '應用程式額外的程式碼',
|
'additional code for your application': '應用程式額外的程式碼',
|
||||||
'admin disabled because no admin password': '管理介面關閉原因是沒有設定管理員密碼 ',
|
'admin disabled because no admin password': '管理介面關閉原因是沒有設定管理員密碼 ',
|
||||||
'admin disabled because not supported on google app engine': '管理介面關閉原因是不支援在google apps engine環境下運作',
|
'admin disabled because not supported on google app engine': '管理介面關閉原因是不支援在google apps engine環境下運作',
|
||||||
@@ -166,18 +181,14 @@
|
|||||||
'cache, errors and sessions cleaned': '快取記憶體,錯誤紀錄,連線紀錄已清除',
|
'cache, errors and sessions cleaned': '快取記憶體,錯誤紀錄,連線紀錄已清除',
|
||||||
'cannot create file': '無法創建檔案',
|
'cannot create file': '無法創建檔案',
|
||||||
'cannot upload file "%(filename)s"': '無法上傳檔案 "%(filename)s"',
|
'cannot upload file "%(filename)s"': '無法上傳檔案 "%(filename)s"',
|
||||||
'Change admin password': 'change admin password',
|
|
||||||
'change_password': '變更密碼',
|
'change_password': '變更密碼',
|
||||||
'check all': '全選',
|
'check all': '全選',
|
||||||
'Clean': '清除',
|
|
||||||
'click here for online examples': '點此處進入線上範例',
|
'click here for online examples': '點此處進入線上範例',
|
||||||
'click here for the administrative interface': '點此處進入管理介面',
|
'click here for the administrative interface': '點此處進入管理介面',
|
||||||
'click to check for upgrades': '點擊打勾以便升級',
|
'click to check for upgrades': '點擊打勾以便升級',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'Compile': '編譯',
|
|
||||||
'compiled application removed': '已移除已編譯的應用程式',
|
'compiled application removed': '已移除已編譯的應用程式',
|
||||||
'controllers': '控件',
|
'controllers': '控件',
|
||||||
'Create': '創建',
|
|
||||||
'create file with filename:': '創建檔案:',
|
'create file with filename:': '創建檔案:',
|
||||||
'create new application:': '創建新應用程式:',
|
'create new application:': '創建新應用程式:',
|
||||||
'created by': '創建自',
|
'created by': '創建自',
|
||||||
@@ -197,11 +208,9 @@
|
|||||||
'design': '設計',
|
'design': '設計',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'done!': '完成!',
|
'done!': '完成!',
|
||||||
'Edit': '編輯',
|
|
||||||
'edit controller': '編輯控件',
|
'edit controller': '編輯控件',
|
||||||
'edit views:': '編輯視圖',
|
'edit views:': '編輯視圖',
|
||||||
'edit_language': '編輯語言檔',
|
'edit_language': '編輯語言檔',
|
||||||
'Errors': '錯誤紀錄',
|
|
||||||
'export as csv file': '以逗號分隔檔(csv)格式匯出',
|
'export as csv file': '以逗號分隔檔(csv)格式匯出',
|
||||||
'exposes': '外顯',
|
'exposes': '外顯',
|
||||||
'extends': '擴展',
|
'extends': '擴展',
|
||||||
@@ -214,13 +223,11 @@
|
|||||||
'file does not exist': '檔案不存在',
|
'file does not exist': '檔案不存在',
|
||||||
'file saved on %(time)s': '檔案已於 %(time)s 儲存',
|
'file saved on %(time)s': '檔案已於 %(time)s 儲存',
|
||||||
'file saved on %s': '檔案在 %s 已儲存',
|
'file saved on %s': '檔案在 %s 已儲存',
|
||||||
'Help': '說明檔',
|
|
||||||
'htmledit': 'html編輯',
|
'htmledit': 'html編輯',
|
||||||
'includes': '包含',
|
'includes': '包含',
|
||||||
'index': '索引',
|
'index': '索引',
|
||||||
'insert new': '插入新資料',
|
'insert new': '插入新資料',
|
||||||
'insert new %s': '插入新資料 %s',
|
'insert new %s': '插入新資料 %s',
|
||||||
'Install': '安裝',
|
|
||||||
'internal error': '內部錯誤',
|
'internal error': '內部錯誤',
|
||||||
'invalid password': '密碼錯誤',
|
'invalid password': '密碼錯誤',
|
||||||
'invalid request': '不合法的網路要求(request)',
|
'invalid request': '不合法的網路要求(request)',
|
||||||
@@ -229,7 +236,6 @@
|
|||||||
'languages': '語言檔',
|
'languages': '語言檔',
|
||||||
'loading...': '載入中...',
|
'loading...': '載入中...',
|
||||||
'login': '登入',
|
'login': '登入',
|
||||||
'Logout': '登出',
|
|
||||||
'merge': '合併',
|
'merge': '合併',
|
||||||
'models': '資料庫模組',
|
'models': '資料庫模組',
|
||||||
'modules': '程式模組',
|
'modules': '程式模組',
|
||||||
@@ -240,9 +246,6 @@
|
|||||||
'no match': '無法匹配',
|
'no match': '無法匹配',
|
||||||
'or import from csv file': '或是從逗號分隔檔(CSV)匯入',
|
'or import from csv file': '或是從逗號分隔檔(CSV)匯入',
|
||||||
'or provide app url:': '或是提供應用程式的安裝網址:',
|
'or provide app url:': '或是提供應用程式的安裝網址:',
|
||||||
'Overwrite installed app': '覆蓋已安裝的應用程式',
|
|
||||||
'Pack all': '全部打包',
|
|
||||||
'Pack compiled': '打包已編譯資料',
|
|
||||||
'pack plugin': '打包插件',
|
'pack plugin': '打包插件',
|
||||||
'password changed': '密碼已變更',
|
'password changed': '密碼已變更',
|
||||||
'peek': '選取',
|
'peek': '選取',
|
||||||
@@ -253,7 +256,6 @@
|
|||||||
'record does not exist': '紀錄不存在',
|
'record does not exist': '紀錄不存在',
|
||||||
'record id': '紀錄編號',
|
'record id': '紀錄編號',
|
||||||
'register': '註冊',
|
'register': '註冊',
|
||||||
'Remove compiled': '編譯檔案已移除',
|
|
||||||
'resolve': '解決',
|
'resolve': '解決',
|
||||||
'restore': '回存',
|
'restore': '回存',
|
||||||
'revert': '反向恢復',
|
'revert': '反向恢復',
|
||||||
@@ -261,7 +263,6 @@
|
|||||||
'selected': '已選擇',
|
'selected': '已選擇',
|
||||||
'session expired': '連線(session)已過時',
|
'session expired': '連線(session)已過時',
|
||||||
'shell': '命令列操作介面',
|
'shell': '命令列操作介面',
|
||||||
'Site': '網站',
|
|
||||||
'some files could not be removed': '部份檔案無法移除',
|
'some files could not be removed': '部份檔案無法移除',
|
||||||
'state': '狀態',
|
'state': '狀態',
|
||||||
'static': '靜態檔案',
|
'static': '靜態檔案',
|
||||||
@@ -284,7 +285,6 @@
|
|||||||
'unable to uninstall "%s"': '無法移除安裝 "%s"',
|
'unable to uninstall "%s"': '無法移除安裝 "%s"',
|
||||||
'unable to upgrade because "%s"': '無法升級因為 "%s"',
|
'unable to upgrade because "%s"': '無法升級因為 "%s"',
|
||||||
'uncheck all': '全不選',
|
'uncheck all': '全不選',
|
||||||
'Uninstall': '解除安裝',
|
|
||||||
'update': '更新',
|
'update': '更新',
|
||||||
'update all languages': '將程式中待翻譯語句更新到所有的語言檔',
|
'update all languages': '將程式中待翻譯語句更新到所有的語言檔',
|
||||||
'upgrade web2py now': 'upgrade web2py now',
|
'upgrade web2py now': 'upgrade web2py now',
|
||||||
@@ -300,5 +300,3 @@
|
|||||||
'web2py is up to date': 'web2py 已經是最新版',
|
'web2py is up to date': 'web2py 已經是最新版',
|
||||||
'web2py upgraded; please restart it': '已升級 web2py ; 請重新啟動',
|
'web2py upgraded; please restart it': '已升級 web2py ; 請重新啟動',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,15 +1,18 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'zh-cn',
|
||||||
|
'!langname!': '中文',
|
||||||
'"browse"': '游览',
|
'"browse"': '游览',
|
||||||
'"save"': '"保存"',
|
'"save"': '"保存"',
|
||||||
'"submit"': '"提交"',
|
'"submit"': '"提交"',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新"是可配置项 如 "field1=\'newvalue\'",你无法在JOIN 中更新或删除',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新"是可配置项 如 "field1=\'newvalue\'",你无法在JOIN 中更新或删除',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s 行已删',
|
'%s %%{row} deleted': '%s 行已删',
|
||||||
'%s rows updated': '%s 行更新',
|
'%s %%{row} updated': '%s 行更新',
|
||||||
'(requires internet access)': '(requires internet access)',
|
'(requires internet access)': '(requires internet access)',
|
||||||
'(something like "it-it")': '(就酱 "it-it")',
|
'(something like "it-it")': '(就酱 "it-it")',
|
||||||
|
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||||
'A new version of web2py is available': '新版本web2py已经可用',
|
'A new version of web2py is available': '新版本web2py已经可用',
|
||||||
'A new version of web2py is available: %s': '新版本web2py已经可用: %s',
|
'A new version of web2py is available: %s': '新版本web2py已经可用: %s',
|
||||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '',
|
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '',
|
||||||
@@ -24,6 +27,7 @@
|
|||||||
'Application name:': 'Application name:',
|
'Application name:': 'Application name:',
|
||||||
'Are you sure you want to delete file "%s"?': '你真想删除文件"%s"?',
|
'Are you sure you want to delete file "%s"?': '你真想删除文件"%s"?',
|
||||||
'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?',
|
'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?',
|
||||||
|
'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?',
|
||||||
'Are you sure you want to uninstall application "%s"': '你真确定要卸载应用 "%s"',
|
'Are you sure you want to uninstall application "%s"': '你真确定要卸载应用 "%s"',
|
||||||
'Are you sure you want to uninstall application "%s"?': '你真确定要卸载应用 "%s" ?',
|
'Are you sure you want to uninstall application "%s"?': '你真确定要卸载应用 "%s" ?',
|
||||||
'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?',
|
'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?',
|
||||||
@@ -32,23 +36,33 @@
|
|||||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': '无法编译: 应用中有错误,请修订后再试.',
|
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': '无法编译: 应用中有错误,请修订后再试.',
|
||||||
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:',
|
||||||
'Change Password': '修改密码',
|
'Change Password': '修改密码',
|
||||||
|
'Change admin password': 'change admin password',
|
||||||
|
'Check for upgrades': 'check for upgrades',
|
||||||
'Check to delete': '检验删除',
|
'Check to delete': '检验删除',
|
||||||
'Checking for upgrades...': '是否有升级版本检查ing...',
|
'Checking for upgrades...': '是否有升级版本检查ing...',
|
||||||
|
'Clean': '清除',
|
||||||
'Client IP': '客户端IP',
|
'Client IP': '客户端IP',
|
||||||
|
'Compile': '编译',
|
||||||
'Controllers': '控制器s',
|
'Controllers': '控制器s',
|
||||||
|
'Create': 'create',
|
||||||
'Create new simple application': '创建一个新应用',
|
'Create new simple application': '创建一个新应用',
|
||||||
'Current request': '当前请求',
|
'Current request': '当前请求',
|
||||||
'Current response': '当前返回',
|
'Current response': '当前返回',
|
||||||
'Current session': '当前会话',
|
'Current session': '当前会话',
|
||||||
'DESIGN': '设计',
|
'DESIGN': '设计',
|
||||||
'Date and Time': '时间日期',
|
'Date and Time': '时间日期',
|
||||||
|
'Debug': 'Debug',
|
||||||
'Delete': '删除',
|
'Delete': '删除',
|
||||||
'Delete:': '删除:',
|
'Delete:': '删除:',
|
||||||
|
'Deploy': 'deploy',
|
||||||
'Deploy on Google App Engine': '部署到GAE',
|
'Deploy on Google App Engine': '部署到GAE',
|
||||||
|
'Deploy to OpenShift': 'Deploy to OpenShift',
|
||||||
'Description': '描述',
|
'Description': '描述',
|
||||||
'Design for': '设计:',
|
'Design for': '设计:',
|
||||||
|
'Disable': 'Disable',
|
||||||
'E-mail': '邮箱:',
|
'E-mail': '邮箱:',
|
||||||
'EDIT': '编辑',
|
'EDIT': '编辑',
|
||||||
|
'Edit': '修改',
|
||||||
'Edit Profile': '修订配置',
|
'Edit Profile': '修订配置',
|
||||||
'Edit application': '修订应用',
|
'Edit application': '修订应用',
|
||||||
'Edit current record': '修订当前记录',
|
'Edit current record': '修订当前记录',
|
||||||
@@ -57,13 +71,17 @@
|
|||||||
'Editing file "%s"': '修订文件 %s',
|
'Editing file "%s"': '修订文件 %s',
|
||||||
'Enterprise Web Framework': '强悍的网络开发框架',
|
'Enterprise Web Framework': '强悍的网络开发框架',
|
||||||
'Error logs for "%(app)s"': '"%(app)s" 的错误日志',
|
'Error logs for "%(app)s"': '"%(app)s" 的错误日志',
|
||||||
|
'Errors': '错误',
|
||||||
'Exception instance attributes': 'Exception instance attributes',
|
'Exception instance attributes': 'Exception instance attributes',
|
||||||
'First name': '姓',
|
'First name': '姓',
|
||||||
'Functions with no doctests will result in [passed] tests.': '',
|
'Functions with no doctests will result in [passed] tests.': '',
|
||||||
|
'Get from URL:': 'Get from URL:',
|
||||||
'Group ID': '组ID',
|
'Group ID': '组ID',
|
||||||
'Hello World': '道可道,非常道;名可名,非常名',
|
'Hello World': '道可道,非常道;名可名,非常名',
|
||||||
|
'Help': '帮助',
|
||||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||||
'Import/Export': '导入/导出',
|
'Import/Export': '导入/导出',
|
||||||
|
'Install': 'install',
|
||||||
'Installed applications': '已安装的应用',
|
'Installed applications': '已安装的应用',
|
||||||
'Internal State': '内部状态',
|
'Internal State': '内部状态',
|
||||||
'Invalid Query': '无效查询',
|
'Invalid Query': '无效查询',
|
||||||
@@ -88,7 +106,10 @@
|
|||||||
'No databases in this application': '这应用没有数据库',
|
'No databases in this application': '这应用没有数据库',
|
||||||
'Origin': '起源',
|
'Origin': '起源',
|
||||||
'Original/Translation': '原始文件/翻译文件',
|
'Original/Translation': '原始文件/翻译文件',
|
||||||
|
'Overwrite installed app': 'overwrite installed app',
|
||||||
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here',
|
||||||
|
'Pack all': '全部打包',
|
||||||
|
'Pack compiled': '包编译完',
|
||||||
'Password': '密码',
|
'Password': '密码',
|
||||||
'Peeking at file': '选个文件',
|
'Peeking at file': '选个文件',
|
||||||
'Plugin "%s" in application': 'Plugin "%s" in application',
|
'Plugin "%s" in application': 'Plugin "%s" in application',
|
||||||
@@ -98,11 +119,16 @@
|
|||||||
'Record ID': '记录ID',
|
'Record ID': '记录ID',
|
||||||
'Register': '注册',
|
'Register': '注册',
|
||||||
'Registration key': '注册密匙',
|
'Registration key': '注册密匙',
|
||||||
|
'Reload routes': 'Reload routes',
|
||||||
|
'Remove compiled': '已移除',
|
||||||
'Resolve Conflict file': '解决冲突文件',
|
'Resolve Conflict file': '解决冲突文件',
|
||||||
'Role': '角色',
|
'Role': '角色',
|
||||||
'Rows in table': '表行',
|
'Rows in table': '表行',
|
||||||
'Rows selected': '行选择',
|
'Rows selected': '行选择',
|
||||||
|
'Running on %s': 'Running on %s',
|
||||||
'Saved file hash:': '已存文件Hash:',
|
'Saved file hash:': '已存文件Hash:',
|
||||||
|
'Site': '总站',
|
||||||
|
'Start wizard': 'start wizard',
|
||||||
'Static files': '静态文件',
|
'Static files': '静态文件',
|
||||||
'Sure you want to delete this object?': '真的要删除这个对象?',
|
'Sure you want to delete this object?': '真的要删除这个对象?',
|
||||||
'TM': '',
|
'TM': '',
|
||||||
@@ -124,9 +150,11 @@
|
|||||||
'Unable to download app': '无法下载应用',
|
'Unable to download app': '无法下载应用',
|
||||||
'Unable to download app because:': 'Unable to download app because:',
|
'Unable to download app because:': 'Unable to download app because:',
|
||||||
'Unable to download because': 'Unable to download because',
|
'Unable to download because': 'Unable to download because',
|
||||||
|
'Uninstall': '卸载',
|
||||||
'Update:': '更新:',
|
'Update:': '更新:',
|
||||||
'Upload & install packed application': 'Upload & install packed application',
|
'Upload & install packed application': 'Upload & install packed application',
|
||||||
'Upload a package:': 'Upload a package:',
|
'Upload a package:': 'Upload a package:',
|
||||||
|
'Upload and install packed application': 'Upload and install packed application',
|
||||||
'Upload existing application': '上传已有应用',
|
'Upload existing application': '上传已有应用',
|
||||||
'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.',
|
||||||
'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.': '',
|
||||||
@@ -136,7 +164,6 @@
|
|||||||
'Views': '视图',
|
'Views': '视图',
|
||||||
'Welcome to web2py': '欢迎使用web2py',
|
'Welcome to web2py': '欢迎使用web2py',
|
||||||
'YES': '是',
|
'YES': '是',
|
||||||
'About': '关于',
|
|
||||||
'additional code for your application': '给你的应用附加代码',
|
'additional code for your application': '给你的应用附加代码',
|
||||||
'admin disabled because no admin password': '管理员需要设定密码,否则无法管理',
|
'admin disabled because no admin password': '管理员需要设定密码,否则无法管理',
|
||||||
'admin disabled because not supported on google app engine': '未支持GAE,无法管理',
|
'admin disabled because not supported on google app engine': '未支持GAE,无法管理',
|
||||||
@@ -155,18 +182,13 @@
|
|||||||
'cache, errors and sessions cleaned': '缓存、错误、sesiones已被清空',
|
'cache, errors and sessions cleaned': '缓存、错误、sesiones已被清空',
|
||||||
'cannot create file': '无法创建文件',
|
'cannot create file': '无法创建文件',
|
||||||
'cannot upload file "%(filename)s"': '无法上传文件 "%(filename)s"',
|
'cannot upload file "%(filename)s"': '无法上传文件 "%(filename)s"',
|
||||||
'Change admin password': 'change admin password',
|
|
||||||
'check all': '检查所有',
|
'check all': '检查所有',
|
||||||
'Check for upgrades': 'check for upgrades',
|
|
||||||
'Clean': '清除',
|
|
||||||
'click here for online examples': '猛击此处,查看在线实例',
|
'click here for online examples': '猛击此处,查看在线实例',
|
||||||
'click here for the administrative interface': '猛击此处,进入管理界面',
|
'click here for the administrative interface': '猛击此处,进入管理界面',
|
||||||
'click to check for upgrades': '猛击查看是否有升级版本',
|
'click to check for upgrades': '猛击查看是否有升级版本',
|
||||||
'code': 'code',
|
'code': 'code',
|
||||||
'Compile': '编译',
|
|
||||||
'compiled application removed': '已编译应用已移走',
|
'compiled application removed': '已编译应用已移走',
|
||||||
'controllers': '控制器',
|
'controllers': '控制器',
|
||||||
'Create': 'create',
|
|
||||||
'create file with filename:': '创建文件用这名:',
|
'create file with filename:': '创建文件用这名:',
|
||||||
'create new application:': '创建新应用:',
|
'create new application:': '创建新应用:',
|
||||||
'created by': '创建自',
|
'created by': '创建自',
|
||||||
@@ -183,14 +205,11 @@
|
|||||||
'delete': '删除',
|
'delete': '删除',
|
||||||
'delete all checked': '删除所有选择的',
|
'delete all checked': '删除所有选择的',
|
||||||
'delete plugin': 'delete plugin',
|
'delete plugin': 'delete plugin',
|
||||||
'Deploy': 'deploy',
|
|
||||||
'design': '设计',
|
'design': '设计',
|
||||||
'direction: ltr': 'direction: ltr',
|
'direction: ltr': 'direction: ltr',
|
||||||
'done!': '搞定!',
|
'done!': '搞定!',
|
||||||
'Edit': '修改',
|
|
||||||
'edit controller': '修订控制器',
|
'edit controller': '修订控制器',
|
||||||
'edit views:': 'edit views:',
|
'edit views:': 'edit views:',
|
||||||
'Errors': '错误',
|
|
||||||
'export as csv file': '导出为CSV文件',
|
'export as csv file': '导出为CSV文件',
|
||||||
'exposes': '暴露',
|
'exposes': '暴露',
|
||||||
'extends': '扩展',
|
'extends': '扩展',
|
||||||
@@ -205,12 +224,10 @@
|
|||||||
'file does not exist': '文件并不存在',
|
'file does not exist': '文件并不存在',
|
||||||
'file saved on %(time)s': '文件保存于 %(time)s',
|
'file saved on %(time)s': '文件保存于 %(time)s',
|
||||||
'file saved on %s': '文件保存在 %s',
|
'file saved on %s': '文件保存在 %s',
|
||||||
'Help': '帮助',
|
|
||||||
'htmledit': 'html编辑',
|
'htmledit': 'html编辑',
|
||||||
'includes': '包含',
|
'includes': '包含',
|
||||||
'insert new': '新插入',
|
'insert new': '新插入',
|
||||||
'insert new %s': '新插入 %s',
|
'insert new %s': '新插入 %s',
|
||||||
'Install': 'install',
|
|
||||||
'internal error': '内部错误',
|
'internal error': '内部错误',
|
||||||
'invalid password': '无效密码',
|
'invalid password': '无效密码',
|
||||||
'invalid request': '无效请求',
|
'invalid request': '无效请求',
|
||||||
@@ -220,7 +237,6 @@
|
|||||||
'languages updated': '语言已被刷新',
|
'languages updated': '语言已被刷新',
|
||||||
'loading...': '载入中...',
|
'loading...': '载入中...',
|
||||||
'login': '登录',
|
'login': '登录',
|
||||||
'Logout': '注销',
|
|
||||||
'merge': '合并',
|
'merge': '合并',
|
||||||
'models': '模型s',
|
'models': '模型s',
|
||||||
'modules': '模块s',
|
'modules': '模块s',
|
||||||
@@ -232,9 +248,6 @@
|
|||||||
'or import from csv file': '或者,从csv文件导入',
|
'or import from csv file': '或者,从csv文件导入',
|
||||||
'or provide app url:': 'or provide app url:',
|
'or provide app url:': 'or provide app url:',
|
||||||
'or provide application url:': '或者,提供应用所在地址链接:',
|
'or provide application url:': '或者,提供应用所在地址链接:',
|
||||||
'Overwrite installed app': 'overwrite installed app',
|
|
||||||
'Pack all': '全部打包',
|
|
||||||
'Pack compiled': '包编译完',
|
|
||||||
'pack plugin': 'pack plugin',
|
'pack plugin': 'pack plugin',
|
||||||
'password changed': 'password changed',
|
'password changed': 'password changed',
|
||||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted',
|
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted',
|
||||||
@@ -242,16 +255,13 @@
|
|||||||
'record': 'record',
|
'record': 'record',
|
||||||
'record does not exist': '记录并不存在',
|
'record does not exist': '记录并不存在',
|
||||||
'record id': '记录ID',
|
'record id': '记录ID',
|
||||||
'Remove compiled': '已移除',
|
|
||||||
'restore': '重存',
|
'restore': '重存',
|
||||||
'revert': '恢复',
|
'revert': '恢复',
|
||||||
'save': '保存',
|
'save': '保存',
|
||||||
'selected': '已选',
|
'selected': '已选',
|
||||||
'session expired': '会话过期',
|
'session expired': '会话过期',
|
||||||
'shell': '',
|
'shell': '',
|
||||||
'Site': '总站',
|
|
||||||
'some files could not be removed': '有些文件无法被移除',
|
'some files could not be removed': '有些文件无法被移除',
|
||||||
'Start wizard': 'start wizard',
|
|
||||||
'state': '状态',
|
'state': '状态',
|
||||||
'static': '静态文件',
|
'static': '静态文件',
|
||||||
'submit': '提交',
|
'submit': '提交',
|
||||||
@@ -273,7 +283,6 @@
|
|||||||
'unable to uninstall "%s"': '无法卸载 "%s"',
|
'unable to uninstall "%s"': '无法卸载 "%s"',
|
||||||
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
'unable to upgrade because "%s"': 'unable to upgrade because "%s"',
|
||||||
'uncheck all': '反选全部',
|
'uncheck all': '反选全部',
|
||||||
'Uninstall': '卸载',
|
|
||||||
'update': '更新',
|
'update': '更新',
|
||||||
'update all languages': '更新所有语言',
|
'update all languages': '更新所有语言',
|
||||||
'upgrade web2py now': 'upgrade web2py now',
|
'upgrade web2py now': 'upgrade web2py now',
|
||||||
@@ -288,5 +297,3 @@
|
|||||||
'web2py is up to date': 'web2py现在已经是最新的版本了',
|
'web2py is up to date': 'web2py现在已经是最新的版本了',
|
||||||
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
'web2py upgraded; please restart it': 'web2py upgraded; please restart it',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -152,5 +152,3 @@ if request.controller=='appadmin' and DEMO_MODE:
|
|||||||
session.flash = 'Appadmin disabled in demo mode'
|
session.flash = 'Appadmin disabled in demo mode'
|
||||||
redirect(URL('default','sites'))
|
redirect(URL('default','sites'))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -9,12 +9,12 @@ response.title = '%s %s' % (_f, '/'.join(request.args))
|
|||||||
response.subtitle = 'admin'
|
response.subtitle = 'admin'
|
||||||
response.menu = [(T('Site'), _f == 'site', URL(_a,'default','site'))]
|
response.menu = [(T('Site'), _f == 'site', URL(_a,'default','site'))]
|
||||||
|
|
||||||
if request.args:
|
if request.vars.app or request.args:
|
||||||
_t = request.args[0]
|
_t = request.vars.app or request.args[0]
|
||||||
response.menu.append((T('Edit'), _c == 'default' and _f == 'design',
|
response.menu.append((T('Edit'), _c == 'default' and _f == 'design',
|
||||||
URL(_a,'default','design',args=_t)))
|
URL(_a,'default','design',args=_t)))
|
||||||
response.menu.append((T('About'), _c == 'default' and _f == 'about',
|
response.menu.append((T('About'), _c == 'default' and _f == 'about',
|
||||||
URL(_a,'default','about',args=_t)))
|
URL(_a,'default','about',args=_t,)))
|
||||||
response.menu.append((T('Errors'), _c == 'default' and _f == 'errors',
|
response.menu.append((T('Errors'), _c == 'default' and _f == 'errors',
|
||||||
URL(_a,'default','errors',args=_t)))
|
URL(_a,'default','errors',args=_t)))
|
||||||
response.menu.append((T('Versioning'),
|
response.menu.append((T('Versioning'),
|
||||||
|
|||||||
@@ -1245,3 +1245,6 @@ color: #222;
|
|||||||
}
|
}
|
||||||
.ie9 #query_panel {padding-bottom:2px;}
|
.ie9 #query_panel {padding-bottom:2px;}
|
||||||
|
|
||||||
|
.error, .error a {color:red}
|
||||||
|
.pluralsform thead td {font-weight:bold; font-size:1.2em; padding-bottom:5px}
|
||||||
|
.pluralsform td {padding-left:5px}
|
||||||
@@ -0,0 +1,304 @@
|
|||||||
|
/** these MUST stay **/
|
||||||
|
body { margin: 0; padding:0; border: 0; }
|
||||||
|
a { text-decoration:none; white-space: nowrap;}
|
||||||
|
a:hover {text-decoration: underline}
|
||||||
|
a.button {text-decoration: none}
|
||||||
|
h1,h2,h3,h4,h5,h6 {margin: 0.5em 0 0.25em 0; display: block; font-family: Helvetica;}
|
||||||
|
h1 { font-size: 4.00em;}
|
||||||
|
h2 { font-size: 3.00em;}
|
||||||
|
h3 { font-size: 2.00em;}
|
||||||
|
h4 { font-size: 1.50em;}
|
||||||
|
h5 { font-size: 1.25em;}
|
||||||
|
h6 { font-size: 1.12em;}
|
||||||
|
right { float:right; text-align: right; }
|
||||||
|
left { float:left; text-align: left; }
|
||||||
|
center { width:100; text-align: center; vertical-align:middle;}
|
||||||
|
th, label { font-weight: bold; white-space: nowrap; }
|
||||||
|
td, th { text-align: left; padding: 2px 5px 2px 5px; }
|
||||||
|
th { vertical-align: middle; border-right: 1px solid white;}
|
||||||
|
td { vertical-align: top; }
|
||||||
|
form table tr td label { text-align: left; }
|
||||||
|
p, table, ol, ul { padding: 0.5em 0 0.5em 0 }
|
||||||
|
p {text-align: justify }
|
||||||
|
ol, ul { padding-left: 30px }
|
||||||
|
li { margin-bottom: 0.5em; }
|
||||||
|
span, input, select, textarea, button, label, a { display: inline }
|
||||||
|
img { border: 0; }
|
||||||
|
blockquote, blockquote p, p blockquote { font-style: italic; margin: 0.5em 30px 0.5em 30px; font-size: 0.9em}
|
||||||
|
i, em { font-style: italic; }
|
||||||
|
strong { font-weight: bold; }
|
||||||
|
small { font-size: 0.8em; }
|
||||||
|
textarea { width: 100%; }
|
||||||
|
code { font-family: Courier;}
|
||||||
|
video { width:400px; }
|
||||||
|
audio { width:200px; }
|
||||||
|
input[type=text], input[type=password], select { width: 300px; margin-right: 5px }
|
||||||
|
ul { list-style-type: none; margin: 0px; padding: 0px; }
|
||||||
|
.hidden {display:none;visibility:visible}
|
||||||
|
/** end **/
|
||||||
|
|
||||||
|
/* Sticky footer begin */
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.wrapper {
|
||||||
|
min-height: 100%;
|
||||||
|
height: auto !important;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0 auto -8em; /* set last value to footer height plus footer vertical padding */
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
padding: 20px 0 50px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer, .push {
|
||||||
|
height: 6em;
|
||||||
|
padding: 1em 0;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-content {position: relative; bottom: -4em; width: 100%;}
|
||||||
|
|
||||||
|
.auth_navbar {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sticky footer end */
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
border-top: 1px #DEDEDE solid;
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
// background: <fill here for header image>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fieldset { padding: 16px; border-top: 1px #DEDEDE solid;}
|
||||||
|
fieldset legend {text-transform:uppercase; font-weight: bold; padding: 4px 16px 4px 16px; background: #f1f1f1;}
|
||||||
|
|
||||||
|
/* fix ie problem with menu */
|
||||||
|
.ie-lte7 .topbar .container {z-index: 2; }
|
||||||
|
|
||||||
|
td.w2p_fw {padding-bottom: 1px;}
|
||||||
|
td.w2p_fl, td.w2p_fw, td.w2p_fc { vertical-align:top; }
|
||||||
|
td.w2p_fl { text-align:right; }
|
||||||
|
td.w2p_fl, td.w2p_fw {padding-right: 7px;}
|
||||||
|
td.w2p_fl, td.w2p_fc { padding-top: 4px; }
|
||||||
|
|
||||||
|
/* tr#submit_record__row {border-top: 1px solid #E5E5E5;} */
|
||||||
|
#submit_record__row td {padding-top: .5em;}
|
||||||
|
|
||||||
|
/* Fix */
|
||||||
|
#auth_user_remember__row label {display: inline;}
|
||||||
|
#web2py_user_form td { vertical-align:top; }
|
||||||
|
|
||||||
|
/*********** web2py specific ***********/
|
||||||
|
div.flash {
|
||||||
|
font-weight: bold;
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
padding: 10px;
|
||||||
|
top: 48px;
|
||||||
|
right: 50px;
|
||||||
|
min-width: 280px;
|
||||||
|
opacity: 0.85;
|
||||||
|
margin: 0px 0px 10px 10px;
|
||||||
|
color: #fff;
|
||||||
|
vertical-align: middle;
|
||||||
|
cursor: pointer;
|
||||||
|
background: #000;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
div.flash {z-index:2000;}
|
||||||
|
|
||||||
|
div.error_wrapper { display: block; }
|
||||||
|
div.error {
|
||||||
|
background-color: red;
|
||||||
|
color: white;
|
||||||
|
padding: 3px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topbar {
|
||||||
|
padding: 10px 0;
|
||||||
|
width:100%;
|
||||||
|
color: #959595;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: auto;
|
||||||
|
background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
|
||||||
|
background-image: -moz-linear-gradient(top, #333333, #222222);
|
||||||
|
background-image: -ms-linear-gradient(top, #333333, #222222);
|
||||||
|
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
|
||||||
|
background-image: -webkit-linear-gradient(top, #333333, #222222);
|
||||||
|
background-image: -o-linear-gradient(top, #333333, #222222);
|
||||||
|
background-image: linear-gradient(top, #333333, #222222);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
|
||||||
|
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
|
||||||
|
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
|
||||||
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.topbar a {
|
||||||
|
color: #e1e1e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar {float: right; padding: 5px; /* same as superfish */}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
width:100%;
|
||||||
|
text-align: right;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statusbar {
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
padding: .5em 1em;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 5px;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs { float: left; }
|
||||||
|
|
||||||
|
.copyright {float: left;}
|
||||||
|
#poweredBy {float: right;}
|
||||||
|
|
||||||
|
/* #MEDIA QUERIES SECTION */
|
||||||
|
|
||||||
|
/* All Mobile Sizes (devices and browser) */
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
/* removed because of bootswatch
|
||||||
|
.topbar {text-align: center;}
|
||||||
|
#navbar, #menu {float: none;}
|
||||||
|
#navbar {font-size: 1.2em; padding: .6em 0 1.2em;}
|
||||||
|
#menu {padding: 0 0 1.5em;}
|
||||||
|
#menu select {font-size: 1.2em; margin: 0; padding: 0;}
|
||||||
|
|
||||||
|
div.flash {top: 110px; right: 10px;}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*Grid
|
||||||
|
*
|
||||||
|
* The default style for SQLFORM.grid even using jquery-iu or another ui framework
|
||||||
|
* will look better with the declarations below
|
||||||
|
* if needed to remove base.css consider keeping these following lines in some css file.
|
||||||
|
*/
|
||||||
|
// .web2py_table { border: 1px solid #ccc; }
|
||||||
|
.web2py_paginator { }
|
||||||
|
.web2py_grid {width: 100% }
|
||||||
|
.web2py_grid table { width: 100% }
|
||||||
|
.web2py_grid tbody td {
|
||||||
|
padding: 2px 5px 2px 5px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_grid thead th, .web2py_grid tfoot td {
|
||||||
|
background-color:#EAEAEA;
|
||||||
|
padding: 10px 5px 10px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_grid tr.odd {background-color: #F9F9F9;}
|
||||||
|
.web2py_grid tr:hover {background-color: #F5F5F5; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
.web2py_breadcrumbs a {
|
||||||
|
line-height: 20px; margin-right: 5px; display: inline-block;
|
||||||
|
padding: 3px 5px 3px 5px;
|
||||||
|
font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;
|
||||||
|
color: #3C3C3D;
|
||||||
|
text-shadow: 1px 1px 0 #FFFFFF;
|
||||||
|
white-space: nowrap; overflow: visible; cursor: pointer;
|
||||||
|
background:#ECECEC;
|
||||||
|
border: 1px solid #CACACA;
|
||||||
|
-webkit-border-radius: 2px; -moz-border-radius: 2px;
|
||||||
|
-webkit-background-clip: padding-box; border-radius: 2px;
|
||||||
|
outline: none; position: relative; zoom: 1; *display: inline;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
.web2py_console form {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.web2py_search_actions{
|
||||||
|
float:left;
|
||||||
|
text-align:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_grid .row_buttons {
|
||||||
|
min-height:25px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.web2py_grid .row_buttons a {
|
||||||
|
margin: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_search_actions {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_grid .row_buttons a,
|
||||||
|
.web2py_paginator ul li a,
|
||||||
|
.web2py_search_actions a,
|
||||||
|
.web2py_console input[type=submit],
|
||||||
|
.web2py_console input[type=button],
|
||||||
|
.web2py_console button {
|
||||||
|
line-height: 20px;
|
||||||
|
margin-right: 5px; display: inline-block;
|
||||||
|
padding: 3px 5px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_counter {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-right:5px;
|
||||||
|
width:35%;
|
||||||
|
float:right;
|
||||||
|
text-align:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Fix firefox problem*/
|
||||||
|
.web2py_table {clear: both; display: block;}
|
||||||
|
|
||||||
|
.web2py_paginator {
|
||||||
|
padding: 5px;
|
||||||
|
text-align:right;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
|
||||||
|
}
|
||||||
|
.web2py_paginator ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_paginator ul li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_paginator .current {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#w2p_query_panel {}
|
||||||
|
|
||||||
|
.web2py_breadcrumbs ul {
|
||||||
|
list-style: none;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web2py_breadcrumbs ul li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ie9 #query_panel {padding-bottom:2px;}
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<br/><br/><h3>{{=T("Import/Export")}}</h3><br/>
|
<br/><br/><h3>{{=T("Import/Export")}}</h3><br/>
|
||||||
[ <a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
|
[ <a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
|
||||||
{{if table:}}
|
{{if table:}}
|
||||||
{{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value='import'))}}
|
{{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value=T('import')))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,36 +2,43 @@
|
|||||||
{{
|
{{
|
||||||
def all(items):
|
def all(items):
|
||||||
return reduce(lambda a,b:a and b,items,True)
|
return reduce(lambda a,b:a and b,items,True)
|
||||||
def peekfile(path,file):
|
def peekfile(path,file,vars={},title=None):
|
||||||
return A(file.replace('\\\\','/'),_href=URL('peek', args=(app, path, file)))
|
args=(path,file) if 'app' in vars else (app,path,file)
|
||||||
def editfile(path,file):
|
return A(file.replace('\\\\','/'),_title=title,_href=URL('peek', args=args, vars=vars))
|
||||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit', args=(app, path, file)))
|
def editfile(path,file,vars={}):
|
||||||
|
args=(path,file) if 'app' in vars else (app,path,file)
|
||||||
|
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit', args=args, vars=vars))
|
||||||
def testfile(path,file):
|
def testfile(path,file):
|
||||||
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))), _class='icon test tooltip',_href=URL('test', args=(app, file)))
|
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))), _class='icon test tooltip',_href=URL('test', args=(app, file)))
|
||||||
def editlanguagefile(path,file):
|
def editlanguagefile(path,file,vars={}):
|
||||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_language', args=(app, path, file)))
|
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_language', args=(app, path, file), vars=vars))
|
||||||
def file_upload_form(location):
|
def editpluralsfile(path,file,vars={}):
|
||||||
|
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_plurals', args=(app, path, file), vars=vars))
|
||||||
|
def file_upload_form(location, anchor=None):
|
||||||
form=FORM(T("upload file:")," ",
|
form=FORM(T("upload file:")," ",
|
||||||
INPUT(_type="file",_name="file")," ",T("and rename it:")," ",
|
INPUT(_type="file",_name="file")," ",T("and rename it:")," ",
|
||||||
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY),
|
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY),
|
||||||
INPUT(_type="hidden",_name="location",_value=location),
|
INPUT(_type="hidden",_name="location",_value=location),
|
||||||
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)),
|
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app, anchor=anchor)),
|
||||||
INPUT(_type="submit",_value=T("upload")),_action=URL('upload_file'))
|
INPUT(_type="submit",_value=T("upload")),_action=URL('upload_file'))
|
||||||
return form
|
return form
|
||||||
def file_create_form(location):
|
def file_create_form(location, anchor=None):
|
||||||
form=FORM(T("create file with filename:")," ",
|
form=FORM(T("create file with filename:")," ",
|
||||||
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY),
|
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY),
|
||||||
INPUT(_type="hidden",_name="location",_value=location),
|
INPUT(_type="hidden",_name="location",_value=location),
|
||||||
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)),
|
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)),
|
||||||
|
INPUT(_type="hidden",_name="id",_value=anchor),
|
||||||
INPUT(_type="submit",_value=T("Create")),_action=URL('create_file'))
|
INPUT(_type="submit",_value=T("Create")),_action=URL('create_file'))
|
||||||
return form
|
return form
|
||||||
def upload_plugin_form(app):
|
def upload_plugin_form(app, anchor=None):
|
||||||
form=FORM(T("upload plugin file:")," ",
|
form=FORM(T("upload plugin file:")," ",
|
||||||
INPUT(_type="file",_name="pluginfile"),
|
INPUT(_type="file",_name="pluginfile"),
|
||||||
|
INPUT(_type="hidden",_name="id",_value=anchor),
|
||||||
INPUT(_type="submit",_value=T("upload")))
|
INPUT(_type="submit",_value=T("upload")))
|
||||||
return form
|
return form
|
||||||
def deletefile(arglist):
|
def deletefile(arglist, vars={}):
|
||||||
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _class='icon delete tooltip', _href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app)))
|
vars.update({'sender':request.function+'/'+app})
|
||||||
|
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _class='icon delete tooltip', _href=URL('delete',args=arglist,vars=vars))
|
||||||
}}
|
}}
|
||||||
|
|
||||||
{{block sectionclass}}design{{end}}
|
{{block sectionclass}}design{{end}}
|
||||||
@@ -73,13 +80,14 @@ def deletefile(arglist):
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{{for m in models:}}
|
{{for m in models:}}
|
||||||
<li id="models__{{=m.replace('.','__')}}">
|
{{id="models__"+m.replace('.','__')}}
|
||||||
|
<li id="{{=id}}">
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('models',m)}}
|
{{=editfile('models',m, dict(id=id))}}
|
||||||
{{=deletefile([app, 'models', m])}}
|
{{=deletefile([app, 'models', m], dict(id=id, id2='models'))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('models',m)}}
|
{{=peekfile('models',m, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="extras">
|
<span class="extras">
|
||||||
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
||||||
@@ -87,7 +95,7 @@ def deletefile(arglist):
|
|||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="controls formfield">{{=file_create_form('%s/models/' % app)}}</div>
|
<div class="controls formfield">{{=file_create_form('%s/models/' % app, 'models')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- FIND CONTROLLER FUNCTIONS -->
|
<!-- FIND CONTROLLER FUNCTIONS -->
|
||||||
@@ -112,14 +120,15 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
{{pass}}
|
{{pass}}
|
||||||
<ul>
|
<ul>
|
||||||
{{for c in controllers:}}
|
{{for c in controllers:}}
|
||||||
<li id="controllers__{{=c.replace('.','__')}}">
|
{{id="controllers__"+c.replace('.','__')}}
|
||||||
|
<li id="{{=id}}">
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('controllers',c)}}
|
{{=editfile('controllers',c, dict(id=id))}}
|
||||||
{{=deletefile([app, 'controllers', c])}}
|
{{=deletefile([app, 'controllers', c], dict(id=id, id2='controllers'))}}
|
||||||
{{=testfile('controllers',c)}}
|
{{=testfile('controllers',c)}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('controllers',c)}}
|
{{=peekfile('controllers',c, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="extras">
|
<span class="extras">
|
||||||
{{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
{{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
||||||
@@ -127,7 +136,7 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="controls formfield">{{=file_create_form('%s/controllers/' % app)}}</div>
|
<div class="controls formfield">{{=file_create_form('%s/controllers/' % app, 'controllers')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- VIEWS -->
|
<!-- VIEWS -->
|
||||||
@@ -143,13 +152,14 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{pass}}
|
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{pass}}
|
||||||
<ul>
|
<ul>
|
||||||
{{for c in views:}}
|
{{for c in views:}}
|
||||||
<li id="views__{{=c.replace('/','__').replace('.','__')}}">
|
{{id="views__"+c.replace('/','__').replace('.','__')}}
|
||||||
|
<li id="{{=id}}">
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('views',c)}}
|
{{=editfile('views',c, dict(id=id))}}
|
||||||
{{=deletefile([app, 'views', c])}}
|
{{=deletefile([app, 'views', c], dict(id=id, id2='views'))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('views',c)}}
|
{{=peekfile('views',c, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="extras">
|
<span class="extras">
|
||||||
{{if extend.has_key(c):}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
{{if extend.has_key(c):}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
||||||
@@ -158,7 +168,7 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="controls formfield">{{=file_create_form('%s/views/' % app)}}</div>
|
<div class="controls formfield">{{=file_create_form('%s/views/' % app, 'views')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- LANGUAGES -->
|
<!-- LANGUAGES -->
|
||||||
@@ -172,20 +182,60 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
{{=button(URL('update_languages/'+app), T('update all languages'))}}
|
{{=button(URL('update_languages/'+app), T('update all languages'))}}
|
||||||
</div>
|
</div>
|
||||||
{{if not languages:}}<p><strong>{{=T("There are no translators, only default language is supported")}}</strong></p>{{pass}}
|
{{if not languages:}}<p><strong>{{=T("There are no translators, only default language is supported")}}</strong></p>{{pass}}
|
||||||
<ul>
|
<table>
|
||||||
{{for file in languages:}}
|
{{for file in languages:}}
|
||||||
<li id="languages__{{=file.replace('.','__')}}">
|
{{id="languages__"+file.replace('.','__')}}
|
||||||
|
<tr id="{{=id}}">
|
||||||
|
<td>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editlanguagefile('languages',file)}}
|
{{=editlanguagefile('languages',file)}}
|
||||||
{{=deletefile([app, 'languages', file])}}
|
{{=deletefile([app, 'languages', file], dict(id=id, id2='languages'))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('languages',file)}}
|
{{=peekfile('languages',file, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
(
|
||||||
|
{{=T("Plural-Forms:")}}
|
||||||
|
{{p=plural_rules[file]}}
|
||||||
|
{{if p[0] == 0:}}
|
||||||
|
<b>{{=T("rules are not defined")}}</b>,
|
||||||
|
<span class="controls comptools">
|
||||||
|
{{=button(URL('create_file', vars=dict(filename=p[2], location='gluon/contrib/rules/', sender=URL('design', args=app), id=id, app=app)), T('Create rules'))}}
|
||||||
|
</span>
|
||||||
|
{{else:}}
|
||||||
|
{{if p[0] == 1:}}
|
||||||
|
{{if p[3] == 'ok':}}
|
||||||
|
{{=B(T("are not used"))}},
|
||||||
|
{{else:}}
|
||||||
|
<span class='error'>{{=B(T("rules parsed with errors"))}}</span>,
|
||||||
|
{{pass}}
|
||||||
|
{{else:}}
|
||||||
|
{{pfile='plural-%s.py'%p[1]}}
|
||||||
|
{{if pfile in plurals:}}
|
||||||
|
<span class="filetools controls">
|
||||||
|
{{=editpluralsfile('languages',pfile,dict(nplurals=p[0]))}}
|
||||||
|
</span>
|
||||||
|
<span class="file">
|
||||||
|
{{=peekfile('languages',pfile,dict(id=id))}},
|
||||||
|
</span>
|
||||||
|
{{else:}}
|
||||||
|
<b>{{=T("are not used yet")}}</b>,
|
||||||
|
{{pass}}
|
||||||
|
{{pass}}
|
||||||
|
{{=T("rules:")}}
|
||||||
|
<span class="file{{=' error' if p[3]!='ok' else ''}}">
|
||||||
|
{{=peekfile('gluon/contrib/rules', p[2], dict(app=app, id=id), p[3] if p[3]!='ok' else None)}}
|
||||||
|
</span>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
)
|
||||||
<div class="controls formfield">{{=file_create_form('%s/languages/' % app)}}{{=T('(something like "it-it")')}}</div>
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{pass}}
|
||||||
|
</table>
|
||||||
|
<div class="controls formfield">{{=file_create_form('%s/languages/' % app, 'languages')}}{{=T('(something like "it-it")')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- STATIC -->
|
<!-- STATIC -->
|
||||||
@@ -223,10 +273,10 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
if filename:
|
if filename:
|
||||||
}}<li>
|
}}<li>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('static',file)}} {{=deletefile([app,'static',file])}}
|
{{=editfile('static',file, dict(id="static"))}} {{=deletefile([app,'static',file], dict(id="static",id2="static"))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
||||||
</span>
|
</span>
|
||||||
</li>{{
|
</li>{{
|
||||||
pass
|
pass
|
||||||
@@ -234,8 +284,8 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
}}
|
}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="controls formfield">{{=file_create_form('%s/static/' % app)}}
|
<div class="controls formfield">{{=file_create_form('%s/static/' % app, 'static')}}
|
||||||
{{=file_upload_form('%s/static/' % app)}}</div>
|
{{=file_upload_form('%s/static/' % app, 'static')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- MODULES -->
|
<!-- MODULES -->
|
||||||
@@ -250,19 +300,22 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{pass}}
|
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{pass}}
|
||||||
<ul>
|
<ul>
|
||||||
{{for m in modules:}}
|
{{for m in modules:}}
|
||||||
<li id="modules__{{=m.replace('/','__').replace('.','__')}}">
|
{{id="modules__"+m.replace('/','__').replace('.','__')}}
|
||||||
|
<li id="{{=id}}">
|
||||||
<span class="filetols controls">
|
<span class="filetols controls">
|
||||||
{{=editfile('modules',m)}}
|
{{=editfile('modules',m,dict(id=id))}}
|
||||||
{{if m!='__init__.py':}}{{=deletefile([app, 'modules', m])}}{{pass}}
|
{{if m!='__init__.py':}}
|
||||||
|
{{=deletefile([app, 'modules', m], dict(id=id, id2='modules'))}}
|
||||||
|
{{pass}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('modules',m)}}
|
{{=peekfile('modules',m, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="controls formfield">{{=file_create_form('%s/modules/' % app)}}
|
<div class="controls formfield">{{=file_create_form('%s/modules/' % app, 'modules')}}
|
||||||
{{=file_upload_form('%s/modules/' % app)}}</div>
|
{{=file_upload_form('%s/modules/' % app, 'modules')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- PLUGINS -->
|
<!-- PLUGINS -->
|
||||||
@@ -280,15 +333,16 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
{{if plugins:}}
|
{{if plugins:}}
|
||||||
<ul>
|
<ul>
|
||||||
{{for plugin in plugins:}}
|
{{for plugin in plugins:}}
|
||||||
<li>
|
{{id="plugins__"+plugin.replace('/','__').replace('.','__')}}
|
||||||
{{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin]))}}
|
<li id="{{=id}}">
|
||||||
|
{{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin], vars=dict(id=id, id2='plugins')))}}
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{else:}}
|
{{else:}}
|
||||||
<p><strong>{{=T('There are no plugins')}}</strong></p>
|
<p><strong>{{=T('There are no plugins')}}</strong></p>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">{{=upload_plugin_form(app)}}</div>
|
<div class="controls formfield">{{=upload_plugin_form(app, 'plugins')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -299,11 +353,12 @@ jQuery(document).ready(function(){
|
|||||||
if(code==13 && jQuery('#search').val()){
|
if(code==13 && jQuery('#search').val()){
|
||||||
jQuery.getJSON('{{=URL('search',args=request.args)}}?keywords='+escape(jQuery('#search').val()),null,function(data, textStatus, xhr){
|
jQuery.getJSON('{{=URL('search',args=request.args)}}?keywords='+escape(jQuery('#search').val()),null,function(data, textStatus, xhr){
|
||||||
jQuery('.component_contents li, .formfield, .comptools').hide();
|
jQuery('.component_contents li, .formfield, .comptools').hide();
|
||||||
files=data['files'];
|
files=data['files'];
|
||||||
|
message=data['message'];
|
||||||
for(var i=0; i<files.length; i++)
|
for(var i=0; i<files.length; i++)
|
||||||
jQuery('li#'+files[i].replace(/\//g,'__').replace('.','__')).slideDown();
|
jQuery('li#'+files[i].replace(/\//g,'__').replace('.','__')).slideDown();
|
||||||
jQuery('.flash').html('{{=T("Searching:")}} '+files.length+' {{=T("files")}}').slideDown();
|
jQuery('.flash').html(message).slideDown();
|
||||||
});
|
});
|
||||||
} else if(code==13) {
|
} else if(code==13) {
|
||||||
jQuery('.component_contents li, .formfield, .comptools').slideDown();
|
jQuery('.component_contents li, .formfield, .comptools').slideDown();
|
||||||
jQuery('.flash').html('').hide();
|
jQuery('.flash').html('').hide();
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ jQuery(document).ready(function(){
|
|||||||
URL(c='debug', f='toggle_breakpoint')),
|
URL(c='debug', f='toggle_breakpoint')),
|
||||||
_class="button special")}}
|
_class="button special")}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
{{=button(URL('design',args=request.args[0]), T('back'))}}
|
{{=button(URL('design',args=request.vars.app if request.vars.app else request.args[0], anchor=request.vars.id), T('back'))}}
|
||||||
{{if edit_controller:}}
|
{{if edit_controller:}}
|
||||||
{{=button(edit_controller, T('edit controller'))}}
|
{{=button(edit_controller, T('edit controller'))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
@@ -148,7 +148,7 @@ window.onload = function() {
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{if filetype=='html':}}
|
{{if TEXT_EDITOR == 'edit_area' and filetype=='html':}}
|
||||||
<div class="help">
|
<div class="help">
|
||||||
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{{extend 'layout.html'}}
|
||||||
|
<script>
|
||||||
|
function delkey(id) {
|
||||||
|
jQuery('#'+id).hide();
|
||||||
|
jQuery('#'+id+' INPUT').val(String.fromCharCode(127));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{{block sectionclass}}edit_language{{end}}
|
||||||
|
|
||||||
|
<h2>{{=T("Editing Plural Forms File")}} "{{=filename}}"</h2>
|
||||||
|
<div class="pluralsform">
|
||||||
|
{{=form}}
|
||||||
|
</div>
|
||||||
|
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
<h2>{{=T("Peeking at file")}} "{{=filename}}"</h2>
|
<h2>{{=T("Peeking at file")}} "{{=filename}}"</h2>
|
||||||
|
|
||||||
<p class="controls">
|
<p class="controls">
|
||||||
{{=button(URL('design',args=request.args[0]), T('back'))}}
|
{{=button(URL('design',args=request.vars.app if request.vars.app else request.args[0], anchor=request.vars.id), T('back'))}}
|
||||||
{{=button(URL('edit',args=request.args), T('Edit'))}}
|
{{=button(URL('edit',args=request.args, vars=request.vars), T('Edit'))}}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{{
|
{{
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ def deletefile(arglist):
|
|||||||
{{=button("#modules", T("modules"))}}
|
{{=button("#modules", T("modules"))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="buttongroup">
|
<span class="buttongroup">
|
||||||
{{=sp_button(URL('plugin',args=app), T("back"))}}
|
{{=sp_button(URL('design',args=request.args, anchor=request.vars.id), T("back"))}}
|
||||||
{{=sp_button(URL('delete_plugin',args=request.args), T("delete plugin"))}}
|
{{=sp_button(URL('delete_plugin',args=request.args, vars=request.vars), T("delete plugin"))}}
|
||||||
{{=sp_button(URL('pack_plugin',args=request.args), T("pack plugin"))}}
|
{{=sp_button(URL('pack_plugin',args=request.args), T("pack plugin"))}}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
<!-- VERSION -->
|
<!-- VERSION -->
|
||||||
{{if is_manager():}}
|
{{if is_manager():}}
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h3>{{="Version %s.%s.%s (%s) %s" % myversion}}</h3>
|
<h3>{{=T("Version %s.%s.%s (%s) %s", myversion)}}</h3>
|
||||||
{{if session.check_version:}}
|
{{if session.check_version:}}
|
||||||
<p id="check_version">
|
<p id="check_version">
|
||||||
{{=T('Checking for upgrades...')}}
|
{{=T('Checking for upgrades...')}}
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
{{pass}}
|
{{pass}}
|
||||||
</p>
|
</p>
|
||||||
<div class="formfield">
|
<div class="formfield">
|
||||||
Running on {{=request.env.server_software}}
|
{{=T("Running on %s", request.env.server_software)}}
|
||||||
</div>
|
</div>
|
||||||
<p>{{=button(URL('default','reload_routes'), T('Reload routes'))}}</p>
|
<p>{{=button(URL('default','reload_routes'), T('Reload routes'))}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -28,17 +28,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="footer" class="fixed">
|
<div id="footer" class="fixed">
|
||||||
{{=T('Powered by')}} {{=A('web2py', _href='http://www.web2py.com')}}™ {{=T('created by')}} Massimo Di Pierro ©2007-2011 -
|
{{=T('Powered by')}} {{=A('web2py', _href='http://www.web2py.com')}}™ {{=T('created by')}} Massimo Di Pierro ©2007-2012 -
|
||||||
{{if hasattr(T,'get_possible_languages'):}}
|
{{if hasattr(T,'get_possible_languages_info'):}}
|
||||||
<span>
|
<span>
|
||||||
{{=T('Admin language')}}
|
{{=T('Admin language')}}
|
||||||
<select name="adminlanguage" onchange="var date = new Date();cookieDate=date.setTime(date.getTime()+(100*24*60*60*1000));document.cookie='adminLanguage='+this.options[this.selectedIndex].value+'; expires='+cookieDate+'; path=/';window.location.reload()">
|
<select name="adminlanguage" onchange="var date = new Date();cookieDate=date.setTime(date.getTime()+(100*24*60*60*1000));document.cookie='adminLanguage='+this.options[this.selectedIndex].id+'; expires='+cookieDate+'; path=/';window.location.reload()">
|
||||||
{{for language in T.get_possible_languages():}}
|
{{for langinfo in sorted([(code,info[1]) for code,info in T.get_possible_languages_info().iteritems() if code != 'default']):}}
|
||||||
<option {{=T.accepted_language==language and 'selected' or ''}} >{{=language}}</option>
|
<option {{=T.accepted_language==langinfo[0] and 'selected' or ''}} {{='id='+langinfo[0]}} >{{=langinfo[1]}}</option>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -12,20 +12,20 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<h2>OpenShift Deployment Interface</h2>
|
<h2>{{=T("OpenShift Deployment Interface")}}</h2>
|
||||||
|
|
||||||
<p class="help">{{=T("This page can commit your changes to an openshift app repo and push them to your cloud instance. This assumes that you've already created the application instance using the web2py skeleton and have that repo somewhere on a filesystem that this web2py instance can access. This functionality requires GitPython installed and on the python path of the runtime that web2py is operating in.")}}</p>
|
<p class="help">{{=T("This page can commit your changes to an openshift app repo and push them to your cloud instance. This assumes that you've already created the application instance using the web2py skeleton and have that repo somewhere on a filesystem that this web2py instance can access. This functionality requires GitPython installed and on the python path of the runtime that web2py is operating in.")}}</p>
|
||||||
|
|
||||||
<p class="help">{{=T("Note: If you receive an error with github status code of 128, ensure the system and account you are deploying from has a cooresponding ssh key configured in the openshift account.")}}</p>
|
<p class="help">{{=T("Note: If you receive an error with github status code of 128, ensure the system and account you are deploying from has a cooresponding ssh key configured in the openshift account.")}}</p>
|
||||||
|
|
||||||
{{if command:}}
|
{{if command:}}
|
||||||
<h3>Command</h3>
|
<h3>{{=T("Command")}}</h3>
|
||||||
<button onclick="$.get('{{=URL(r=request,f='kill')}}');">kill process</button>
|
<button onclick="$.get('{{=URL(r=request,f='kill')}}');">{{=T("kill process")}}</button>
|
||||||
{{=CODE(command)}}
|
{{=CODE(command)}}
|
||||||
<h3>OpenShift Output</h3>
|
<h3>{{=T("OpenShift Output")}}</h3>
|
||||||
<pre id="target"></pre>
|
<pre id="target"></pre>
|
||||||
{{else:}}
|
{{else:}}
|
||||||
<h3>Deployment form</h3>
|
<h3>{{=T("Deployment form")}}</h3>
|
||||||
<div class="deploy_form form">
|
<div class="deploy_form form">
|
||||||
{{=form}}
|
{{=form}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ def select():
|
|||||||
_name='update_fields', _value=request.vars.update_fields
|
_name='update_fields', _value=request.vars.update_fields
|
||||||
or '')), TR(T('Delete:'), INPUT(_name='delete_check',
|
or '')), TR(T('Delete:'), INPUT(_name='delete_check',
|
||||||
_class='delete', _type='checkbox', value=False), ''),
|
_class='delete', _type='checkbox', value=False), ''),
|
||||||
TR('', '', INPUT(_type='submit', _value='submit'))),
|
TR('', '', INPUT(_type='submit', _value=T('submit')))),
|
||||||
_action=URL(r=request,args=request.args))
|
_action=URL(r=request,args=request.args))
|
||||||
if request.vars.csvfile != None:
|
if request.vars.csvfile != None:
|
||||||
try:
|
try:
|
||||||
@@ -218,10 +218,10 @@ def select():
|
|||||||
if form.vars.update_check and form.vars.update_fields:
|
if form.vars.update_check and form.vars.update_fields:
|
||||||
db(query).update(**eval_in_global_env('dict(%s)'
|
db(query).update(**eval_in_global_env('dict(%s)'
|
||||||
% form.vars.update_fields))
|
% form.vars.update_fields))
|
||||||
response.flash = T('%s rows updated', nrows)
|
response.flash = T('%s %%{row} updated', nrows)
|
||||||
elif form.vars.delete_check:
|
elif form.vars.delete_check:
|
||||||
db(query).delete()
|
db(query).delete()
|
||||||
response.flash = T('%s rows deleted', nrows)
|
response.flash = T('%s %%{row} deleted', nrows)
|
||||||
nrows = db(query).count()
|
nrows = db(query).count()
|
||||||
if orderby:
|
if orderby:
|
||||||
rows = db(query,ignore_common_filters=True).select(limitby=(start, stop), orderby=eval_in_global_env(orderby))
|
rows = db(query,ignore_common_filters=True).select(limitby=(start, stop), orderby=eval_in_global_env(orderby))
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
<br/><br/><h3>{{=T("Import/Export")}}</h3><br/>
|
<br/><br/><h3>{{=T("Import/Export")}}</h3><br/>
|
||||||
[ <a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
|
[ <a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
|
||||||
{{if table:}}
|
{{if table:}}
|
||||||
{{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value='import'))}}
|
{{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value=T('import')))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,7 @@
|
|||||||
</li><li>Mateusz Banach (stickers, IS_EMAIL, IS_IMAGE, contenttype)
|
</li><li>Mateusz Banach (stickers, IS_EMAIL, IS_IMAGE, contenttype)
|
||||||
</li><li>Michael Willis (shell)
|
</li><li>Michael Willis (shell)
|
||||||
</li><li>Michele Comitini (faceboook)
|
</li><li>Michele Comitini (faceboook)
|
||||||
|
</li><li>Michael Toomim (scheduler)
|
||||||
</li><li>Nathan Freeze (admin design, IS_STRONG, DAL features, <a href="http://web2pyslices.com">web2pyslices.com</a>)
|
</li><li>Nathan Freeze (admin design, IS_STRONG, DAL features, <a href="http://web2pyslices.com">web2pyslices.com</a>)
|
||||||
</li><li>Niall Sweeny (MSSQL support)
|
</li><li>Niall Sweeny (MSSQL support)
|
||||||
</li><li>Niccolo Polo (epydoc)
|
</li><li>Niccolo Polo (epydoc)
|
||||||
@@ -129,7 +130,7 @@
|
|||||||
</li><li>Yannis Aribaud (CAS compliance)
|
</li><li>Yannis Aribaud (CAS compliance)
|
||||||
</li><li>Yarko Tymciurak (design)
|
</li><li>Yarko Tymciurak (design)
|
||||||
</li><li>Younghyun Jo (internationalization)
|
</li><li>Younghyun Jo (internationalization)
|
||||||
</li><li>Vladyslav Kozlovskyy (internationalization and mercurial support)
|
</li><li>Vladyslav Kozlovskyy (internationalization, markmin, admin, and mercurial support)
|
||||||
</li><li>Vidul Nikolaev Petrov (captcha)
|
</li><li>Vidul Nikolaev Petrov (captcha)
|
||||||
</li><li>Vinicius Assef
|
</li><li>Vinicius Assef
|
||||||
</li><li>Zahariash (memory management)
|
</li><li>Zahariash (memory management)
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ def select():
|
|||||||
_name='update_fields', _value=request.vars.update_fields
|
_name='update_fields', _value=request.vars.update_fields
|
||||||
or '')), TR(T('Delete:'), INPUT(_name='delete_check',
|
or '')), TR(T('Delete:'), INPUT(_name='delete_check',
|
||||||
_class='delete', _type='checkbox', value=False), ''),
|
_class='delete', _type='checkbox', value=False), ''),
|
||||||
TR('', '', INPUT(_type='submit', _value='submit'))),
|
TR('', '', INPUT(_type='submit', _value=T('submit')))),
|
||||||
_action=URL(r=request,args=request.args))
|
_action=URL(r=request,args=request.args))
|
||||||
if request.vars.csvfile != None:
|
if request.vars.csvfile != None:
|
||||||
try:
|
try:
|
||||||
@@ -218,10 +218,10 @@ def select():
|
|||||||
if form.vars.update_check and form.vars.update_fields:
|
if form.vars.update_check and form.vars.update_fields:
|
||||||
db(query).update(**eval_in_global_env('dict(%s)'
|
db(query).update(**eval_in_global_env('dict(%s)'
|
||||||
% form.vars.update_fields))
|
% form.vars.update_fields))
|
||||||
response.flash = T('%s rows updated', nrows)
|
response.flash = T('%s %%{row} updated', nrows)
|
||||||
elif form.vars.delete_check:
|
elif form.vars.delete_check:
|
||||||
db(query).delete()
|
db(query).delete()
|
||||||
response.flash = T('%s rows deleted', nrows)
|
response.flash = T('%s %%{row} deleted', nrows)
|
||||||
nrows = db(query).count()
|
nrows = db(query).count()
|
||||||
if orderby:
|
if orderby:
|
||||||
rows = db(query,ignore_common_filters=True).select(limitby=(start, stop), orderby=eval_in_global_env(orderby))
|
rows = db(query,ignore_common_filters=True).select(limitby=(start, stop), orderby=eval_in_global_env(orderby))
|
||||||
|
|||||||
File renamed without changes.
@@ -1,11 +1,13 @@
|
|||||||
# cs-cz.py pro web2py
|
|
||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'cs-cz',
|
||||||
|
'!langname!': 'Český',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" je voliteľný výraz ako "field1=\'newvalue\'". Nemôžete upravovať alebo zmazať výsledky JOINu',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" je voliteľný výraz ako "field1=\'newvalue\'". Nemôžete upravovať alebo zmazať výsledky JOINu',
|
||||||
'%Y-%m-%d': '%d.%m.%Y',
|
'%Y-%m-%d': '%d.%m.%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d.%m.%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d.%m.%Y %H:%M:%S',
|
||||||
'%s rows deleted': '%s zmazaných záznamů',
|
'%s %%{row} deleted': '%s zmazaných záznamů',
|
||||||
'%s rows updated': '%s upravených záznamů',
|
'%s %%{row} updated': '%s upravených záznamů',
|
||||||
|
'%s selected': '%s označených',
|
||||||
'Administrative interface': 'pro administrátorské rozhranie kliknite sem',
|
'Administrative interface': 'pro administrátorské rozhranie kliknite sem',
|
||||||
'Are you sure you want to delete this object?': 'Opravdu chceš odstranit tento objekt?',
|
'Are you sure you want to delete this object?': 'Opravdu chceš odstranit tento objekt?',
|
||||||
'Available databases and tables': 'Dostupné databáze a tabuľky',
|
'Available databases and tables': 'Dostupné databáze a tabuľky',
|
||||||
@@ -73,7 +75,7 @@
|
|||||||
'Sure you want to delete this object?': 'Opravdu chceš smazat tento objekt?',
|
'Sure you want to delete this object?': 'Opravdu chceš smazat tento objekt?',
|
||||||
'Table name': 'Název tabulky',
|
'Table name': 'Název tabulky',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"query" je podmínka jako "db.table1.field1==\'value\'". Něco jako "db.table1.field1==db.table2.field2" má za výsledek 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.': '"query" je podmínka jako "db.table1.field1==\'value\'". Něco jako "db.table1.field1==db.table2.field2" má za výsledek SQL JOIN.',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'Výstup zo souboru je slovník, ktorý byl zobrazený ve view',
|
'The output of the file is a dictionary that was rendered by the view %s': 'Výstup zo souboru je slovník, ktorý byl zobrazený ve view %s',
|
||||||
'This is a copy of the scaffolding application': 'Toto je kopie skeletu aplikace',
|
'This is a copy of the scaffolding application': 'Toto je kopie skeletu aplikace',
|
||||||
'Timestamp': 'Časové razítko',
|
'Timestamp': 'Časové razítko',
|
||||||
'Update:': 'Upravit:',
|
'Update:': 'Upravit:',
|
||||||
@@ -90,10 +92,10 @@
|
|||||||
'View': 'Zobrazit',
|
'View': 'Zobrazit',
|
||||||
'Welcome': 'Vítej',
|
'Welcome': 'Vítej',
|
||||||
'Welcome to web2py': 'Vitejte ve web2py',
|
'Welcome to web2py': 'Vitejte ve web2py',
|
||||||
'Which called the function': 'Ktorý zavolal funkci',
|
'Which called the function %s located in the file %s': 'Ktorý zavolal funkci %s v souboru %s',
|
||||||
'You are successfully running web2py': 'Úspešně jste spustili web2py',
|
'You are successfully running web2py': 'Úspešně jste spustili web2py',
|
||||||
'You can modify this application and adapt it to your needs': 'Můžete upravit tuto aplikáci a prispôsobit ji svojim potřebám',
|
'You can modify this application and adapt it to your needs': 'Můžete upravit tuto aplikáci a prispôsobit ji svojim potřebám',
|
||||||
'You visited the url': 'Navštívili jste URL',
|
'You visited the url %s': 'Navštívili jste URL %s',
|
||||||
'appadmin is disabled because insecure channel': 'appadmin je zakázaný bez zabezpečeného spojení',
|
'appadmin is disabled because insecure channel': 'appadmin je zakázaný bez zabezpečeného spojení',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'customize me!': 'uprav mě!',
|
'customize me!': 'uprav mě!',
|
||||||
@@ -110,7 +112,6 @@
|
|||||||
'insert new': 'vložit nový záznam ',
|
'insert new': 'vložit nový záznam ',
|
||||||
'insert new %s': 'vložit nový záznam %s',
|
'insert new %s': 'vložit nový záznam %s',
|
||||||
'invalid request': 'Neplatný požadavek',
|
'invalid request': 'Neplatný požadavek',
|
||||||
'located in the file': 'v souboru ',
|
|
||||||
'login': 'prihlásit',
|
'login': 'prihlásit',
|
||||||
'logout': 'odhlásit',
|
'logout': 'odhlásit',
|
||||||
'lost password?': 'neznáš heslo?',
|
'lost password?': 'neznáš heslo?',
|
||||||
@@ -124,7 +125,6 @@
|
|||||||
'record does not exist': 'záznam neexistuje',
|
'record does not exist': 'záznam neexistuje',
|
||||||
'record id': 'id záznamu',
|
'record id': 'id záznamu',
|
||||||
'register': 'registrovat',
|
'register': 'registrovat',
|
||||||
'selected': 'označených',
|
|
||||||
'state': 'stav',
|
'state': 'stav',
|
||||||
'table': 'tabulka',
|
'table': 'tabulka',
|
||||||
'unable to parse csv file': 'nedá sa zpracovat csv soubor',
|
'unable to parse csv file': 'nedá sa zpracovat csv soubor',
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# coding: utf8
|
||||||
|
{
|
||||||
|
'!langcode!': 'en-us',
|
||||||
|
'!langname!': 'English (US)',
|
||||||
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'es',
|
||||||
|
'!langname!': 'Español',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s filas eliminadas',
|
'%s %%{row} deleted': '%s filas eliminadas',
|
||||||
'%s rows updated': '%s filas actualizadas',
|
'%s %%{row} updated': '%s filas actualizadas',
|
||||||
|
'%s selected': '%s seleccionado(s)',
|
||||||
'(something like "it-it")': '(algo como "it-it")',
|
'(something like "it-it")': '(algo como "it-it")',
|
||||||
'A new version of web2py is available': 'Hay una nueva versión de web2py disponible',
|
'A new version of web2py is available': 'Hay una nueva versión de web2py disponible',
|
||||||
'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
|
'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
|
||||||
@@ -15,6 +18,7 @@
|
|||||||
'About application': 'Acerca de la aplicación',
|
'About application': 'Acerca de la aplicación',
|
||||||
'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro',
|
'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',
|
'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro',
|
||||||
|
'Administrative interface': 'Interfaz administrativa',
|
||||||
'Administrator Password:': 'Contraseña del Administrador:',
|
'Administrator Password:': 'Contraseña del Administrador:',
|
||||||
'Are you sure you want to delete file "%s"?': '¿Está seguro que desea eliminar el archivo "%s"?',
|
'Are you sure you want to delete file "%s"?': '¿Está seguro que desea eliminar el archivo "%s"?',
|
||||||
'Are you sure you want to uninstall application "%s"': '¿Está seguro que desea desinstalar la aplicación "%s"',
|
'Are you sure you want to uninstall application "%s"': '¿Está seguro que desea desinstalar la aplicación "%s"',
|
||||||
@@ -42,6 +46,7 @@
|
|||||||
'Deploy on Google App Engine': 'Instale en Google App Engine',
|
'Deploy on Google App Engine': 'Instale en Google App Engine',
|
||||||
'Description': 'Descripción',
|
'Description': 'Descripción',
|
||||||
'Design for': 'Diseño para',
|
'Design for': 'Diseño para',
|
||||||
|
'Documentation': 'Documentación',
|
||||||
'E-mail': 'Correo electrónico',
|
'E-mail': 'Correo electrónico',
|
||||||
'EDIT': 'EDITAR',
|
'EDIT': 'EDITAR',
|
||||||
'Edit': 'Editar',
|
'Edit': 'Editar',
|
||||||
@@ -81,6 +86,7 @@
|
|||||||
'Name': 'Nombre',
|
'Name': 'Nombre',
|
||||||
'New Record': 'Registro nuevo',
|
'New Record': 'Registro nuevo',
|
||||||
'No databases in this application': 'No hay bases de datos en esta aplicación',
|
'No databases in this application': 'No hay bases de datos en esta aplicación',
|
||||||
|
'Online examples': 'Ejemplos en línea',
|
||||||
'Origin': 'Origen',
|
'Origin': 'Origen',
|
||||||
'Original/Translation': 'Original/Traducción',
|
'Original/Translation': 'Original/Traducción',
|
||||||
'Password': 'Contraseña',
|
'Password': 'Contraseña',
|
||||||
@@ -102,7 +108,7 @@
|
|||||||
'Table name': 'Nombre de la tabla',
|
'Table name': 'Nombre de la tabla',
|
||||||
'Testing application': 'Probando aplicación',
|
'Testing application': 'Probando aplicación',
|
||||||
'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ón como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
|
'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ón como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'La salida del archivo es un diccionario escenificado por la vista',
|
'The output of the file is a dictionary that was rendered by the view %s': 'La salida del archivo es un diccionario escenificado por la vista %s',
|
||||||
'There are no controllers': 'No hay controladores',
|
'There are no controllers': 'No hay controladores',
|
||||||
'There are no models': 'No hay modelos',
|
'There are no models': 'No hay modelos',
|
||||||
'There are no modules': 'No hay módulos',
|
'There are no modules': 'No hay módulos',
|
||||||
@@ -125,11 +131,11 @@
|
|||||||
'Welcome': 'Welcome',
|
'Welcome': 'Welcome',
|
||||||
'Welcome %s': 'Bienvenido %s',
|
'Welcome %s': 'Bienvenido %s',
|
||||||
'Welcome to web2py': 'Bienvenido a web2py',
|
'Welcome to web2py': 'Bienvenido a web2py',
|
||||||
'Which called the function': 'La cual llamó la función',
|
'Which called the function %s located in the file %s': 'La cual llamó la función %s localizada en el archivo %s',
|
||||||
'YES': 'SI',
|
'YES': 'SI',
|
||||||
'You are successfully running web2py': 'Usted está ejecutando web2py exitosamente',
|
'You are successfully running web2py': 'Usted está ejecutando web2py exitosamente',
|
||||||
'You can modify this application and adapt it to your needs': 'Usted puede modificar esta aplicación y adaptarla a sus necesidades',
|
'You can modify this application and adapt it to your needs': 'Usted puede modificar esta aplicación y adaptarla a sus necesidades',
|
||||||
'You visited the url': 'Usted visitó la url',
|
'You visited the url %s': 'Usted visitó la url %s',
|
||||||
'about': 'acerca de',
|
'about': 'acerca de',
|
||||||
'additional code for your application': 'código adicional para su aplicación',
|
'additional code for your application': 'código adicional para su aplicación',
|
||||||
'admin disabled because no admin password': ' por falta de contraseña',
|
'admin disabled because no admin password': ' por falta de contraseña',
|
||||||
@@ -149,8 +155,6 @@
|
|||||||
'change password': 'cambie contraseña',
|
'change password': 'cambie contraseña',
|
||||||
'check all': 'marcar todos',
|
'check all': 'marcar todos',
|
||||||
'clean': 'limpiar',
|
'clean': 'limpiar',
|
||||||
'Online examples': 'Ejemplos en línea',
|
|
||||||
'Administrative interface': 'Interfaz administrativa',
|
|
||||||
'click to check for upgrades': 'haga clic para buscar actualizaciones',
|
'click to check for upgrades': 'haga clic para buscar actualizaciones',
|
||||||
'compile': 'compilar',
|
'compile': 'compilar',
|
||||||
'compiled application removed': 'aplicación compilada removida',
|
'compiled application removed': 'aplicación compilada removida',
|
||||||
@@ -169,7 +173,6 @@
|
|||||||
'delete': 'eliminar',
|
'delete': 'eliminar',
|
||||||
'delete all checked': 'eliminar marcados',
|
'delete all checked': 'eliminar marcados',
|
||||||
'design': 'modificar',
|
'design': 'modificar',
|
||||||
'Documentation': 'Documentación',
|
|
||||||
'done!': 'listo!',
|
'done!': 'listo!',
|
||||||
'edit': 'editar',
|
'edit': 'editar',
|
||||||
'edit controller': 'editar controlador',
|
'edit controller': 'editar controlador',
|
||||||
@@ -201,7 +204,6 @@
|
|||||||
'languages': 'lenguajes',
|
'languages': 'lenguajes',
|
||||||
'languages updated': 'lenguajes actualizados',
|
'languages updated': 'lenguajes actualizados',
|
||||||
'loading...': 'cargando...',
|
'loading...': 'cargando...',
|
||||||
'located in the file': 'localizada en el archivo',
|
|
||||||
'login': 'inicio de sesión',
|
'login': 'inicio de sesión',
|
||||||
'logout': 'fin de sesión',
|
'logout': 'fin de sesión',
|
||||||
'lost password?': '¿olvido la contraseña?',
|
'lost password?': '¿olvido la contraseña?',
|
||||||
@@ -224,7 +226,6 @@
|
|||||||
'restore': 'restaurar',
|
'restore': 'restaurar',
|
||||||
'revert': 'revertir',
|
'revert': 'revertir',
|
||||||
'save': 'guardar',
|
'save': 'guardar',
|
||||||
'selected': 'seleccionado(s)',
|
|
||||||
'session expired': 'sesión expirada',
|
'session expired': 'sesión expirada',
|
||||||
'shell': 'shell',
|
'shell': 'shell',
|
||||||
'site': 'sitio',
|
'site': 'sitio',
|
||||||
@@ -257,4 +258,3 @@
|
|||||||
'web2py Recent Tweets': 'Tweets Recientes de web2py',
|
'web2py Recent Tweets': 'Tweets Recientes de web2py',
|
||||||
'web2py is up to date': 'web2py está actualizado',
|
'web2py is up to date': 'web2py está actualizado',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'fr-ca',
|
||||||
|
'!langname!': 'Français (Canadien)',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression optionnelle comme "champ1=\'nouvellevaleur\'". Vous ne pouvez mettre à jour ou supprimer les résultats d\'un JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression optionnelle comme "champ1=\'nouvellevaleur\'". Vous ne pouvez mettre à jour ou supprimer les résultats d\'un JOIN',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s rangées supprimées',
|
'%s %%{row} deleted': '%s rangées supprimées',
|
||||||
'%s rows updated': '%s rangées mises à jour',
|
'%s %%{row} updated': '%s rangées mises à jour',
|
||||||
|
'%s selected': '%s sélectionné',
|
||||||
'About': 'À propos',
|
'About': 'À propos',
|
||||||
'Access Control': "Contrôle d'accès",
|
'Access Control': "Contrôle d'accès",
|
||||||
'Administrative interface': "Interface d'administration",
|
'Administrative interface': "Interface d'administration",
|
||||||
@@ -104,7 +107,7 @@
|
|||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "query" est une condition comme "db.table1.champ1==\'valeur\'". Quelque chose comme "db.table1.champ1==db.table2.champ2" résulte en un JOIN SQL.',
|
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "query" est une condition comme "db.table1.champ1==\'valeur\'". Quelque chose comme "db.table1.champ1==db.table2.champ2" résulte en un JOIN SQL.',
|
||||||
'The Core': 'Le noyau',
|
'The Core': 'Le noyau',
|
||||||
'The Views': 'Les Vues',
|
'The Views': 'Les Vues',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'La sortie de ce fichier est un dictionnaire qui été restitué par la vue',
|
'The output of the file is a dictionary that was rendered by the view %s': 'La sortie de ce fichier est un dictionnaire qui été restitué par la vue %s',
|
||||||
'This App': 'Cette Appli',
|
'This App': 'Cette Appli',
|
||||||
'This is a copy of the scaffolding application': "Ceci est une copie de l'application échafaudage",
|
'This is a copy of the scaffolding application': "Ceci est une copie de l'application échafaudage",
|
||||||
'Timestamp': 'Horodatage',
|
'Timestamp': 'Horodatage',
|
||||||
@@ -122,10 +125,10 @@
|
|||||||
'Welcome': 'Bienvenu',
|
'Welcome': 'Bienvenu',
|
||||||
'Welcome %s': 'Bienvenue %s',
|
'Welcome %s': 'Bienvenue %s',
|
||||||
'Welcome to web2py': 'Bienvenue à web2py',
|
'Welcome to web2py': 'Bienvenue à web2py',
|
||||||
'Which called the function': 'Qui a appelé la fonction',
|
'Which called the function %s located in the file %s': 'Qui a appelé la fonction %s se trouvant dans le fichier %s',
|
||||||
'You are successfully running web2py': 'Vous roulez avec succès web2py',
|
'You are successfully running web2py': 'Vous roulez avec succès web2py',
|
||||||
'You can modify this application and adapt it to your needs': "Vous pouvez modifier cette application et l'adapter à vos besoins",
|
'You can modify this application and adapt it to your needs': "Vous pouvez modifier cette application et l'adapter à vos besoins",
|
||||||
'You visited the url': "Vous avez visité l'URL",
|
'You visited the url %s': "Vous avez visité l'URL %s",
|
||||||
'about': 'à propos',
|
'about': 'à propos',
|
||||||
'appadmin is disabled because insecure channel': "appadmin est désactivée parce que le canal n'est pas sécurisé",
|
'appadmin is disabled because insecure channel': "appadmin est désactivée parce que le canal n'est pas sécurisé",
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
@@ -143,7 +146,6 @@
|
|||||||
'insert new': 'insérer un nouveau',
|
'insert new': 'insérer un nouveau',
|
||||||
'insert new %s': 'insérer un nouveau %s',
|
'insert new %s': 'insérer un nouveau %s',
|
||||||
'invalid request': 'requête invalide',
|
'invalid request': 'requête invalide',
|
||||||
'located in the file': 'se trouvant dans le fichier',
|
|
||||||
'login': 'connectez-vous',
|
'login': 'connectez-vous',
|
||||||
'logout': 'déconnectez-vous',
|
'logout': 'déconnectez-vous',
|
||||||
'lost password': 'mot de passe perdu',
|
'lost password': 'mot de passe perdu',
|
||||||
@@ -159,10 +161,8 @@
|
|||||||
'record does not exist': "l'archive n'existe pas",
|
'record does not exist': "l'archive n'existe pas",
|
||||||
'record id': "id d'enregistrement",
|
'record id': "id d'enregistrement",
|
||||||
'register': "s'inscrire",
|
'register': "s'inscrire",
|
||||||
'selected': 'sélectionné',
|
|
||||||
'state': 'état',
|
'state': 'état',
|
||||||
'table': 'tableau',
|
'table': 'tableau',
|
||||||
'unable to parse csv file': "incapable d'analyser le fichier cvs",
|
'unable to parse csv file': "incapable d'analyser le fichier cvs",
|
||||||
'value already in database or empty': 'valeur déjà dans la base ou vide',
|
'value already in database or empty': 'valeur déjà dans la base ou vide',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,40 +1,61 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'fr',
|
||||||
|
'!langname!': 'Français',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression optionnelle comme "champ1=\'nouvellevaleur\'". Vous ne pouvez mettre à jour ou supprimer les résultats d\'un JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression optionnelle comme "champ1=\'nouvellevaleur\'". Vous ne pouvez mettre à jour ou supprimer les résultats d\'un JOIN',
|
||||||
|
'%s %%{row} deleted': '%s rangées supprimées',
|
||||||
|
'%s %%{row} updated': '%s rangées mises à jour',
|
||||||
|
'%s selected': '%s sélectionné',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s rangées supprimées',
|
|
||||||
'%s rows updated': '%s rangées mises à jour',
|
|
||||||
'About': 'À propos',
|
'About': 'À propos',
|
||||||
'Access Control': 'Contrôle d\'accès',
|
'Access Control': "Contrôle d'accès",
|
||||||
|
'Administrative Interface': 'Administrative Interface',
|
||||||
|
'Administrative interface': "Interface d'administration",
|
||||||
'Ajax Recipes': 'Recettes Ajax',
|
'Ajax Recipes': 'Recettes Ajax',
|
||||||
|
'appadmin is disabled because insecure channel': "appadmin est désactivée parce que le canal n'est pas sécurisé",
|
||||||
'Are you sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
|
'Are you sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
|
||||||
'Authentication': 'Authentification',
|
'Authentication': 'Authentification',
|
||||||
'Available databases and tables': 'Bases de données et tables disponibles',
|
'Available databases and tables': 'Bases de données et tables disponibles',
|
||||||
'Buy this book': 'Acheter ce livre',
|
'Buy this book': 'Acheter ce livre',
|
||||||
|
'cache': 'cache',
|
||||||
'Cannot be empty': 'Ne peut pas être vide',
|
'Cannot be empty': 'Ne peut pas être vide',
|
||||||
|
'change password': 'changer le mot de passe',
|
||||||
'Check to delete': 'Cliquez pour supprimer',
|
'Check to delete': 'Cliquez pour supprimer',
|
||||||
'Check to delete:': 'Cliquez pour supprimer:',
|
'Check to delete:': 'Cliquez pour supprimer:',
|
||||||
'Client IP': 'IP client',
|
'Client IP': 'IP client',
|
||||||
'Community': 'Communauté',
|
'Community': 'Communauté',
|
||||||
|
'Components and Plugins': 'Components and Plugins',
|
||||||
'Controller': 'Contrôleur',
|
'Controller': 'Contrôleur',
|
||||||
'Copyright': 'Copyright',
|
'Copyright': 'Copyright',
|
||||||
'Current request': 'Demande actuelle',
|
'Current request': 'Demande actuelle',
|
||||||
'Current response': 'Réponse actuelle',
|
'Current response': 'Réponse actuelle',
|
||||||
'Current session': 'Session en cours',
|
'Current session': 'Session en cours',
|
||||||
'DB Model': 'Modèle DB',
|
'customize me!': 'personnalisez-moi!',
|
||||||
|
'data uploaded': 'données téléchargées',
|
||||||
'Database': 'Base de données',
|
'Database': 'Base de données',
|
||||||
|
'database': 'base de données',
|
||||||
|
'database %s select': 'base de données %s select',
|
||||||
|
'db': 'db',
|
||||||
|
'DB Model': 'Modèle DB',
|
||||||
'Delete:': 'Supprimer:',
|
'Delete:': 'Supprimer:',
|
||||||
'Demo': 'Démo',
|
'Demo': 'Démo',
|
||||||
'Deployment Recipes': 'Recettes de déploiement',
|
'Deployment Recipes': 'Recettes de déploiement',
|
||||||
'Description': 'Description',
|
'Description': 'Description',
|
||||||
|
'design': 'design',
|
||||||
'Documentation': 'Documentation',
|
'Documentation': 'Documentation',
|
||||||
|
"Don't know what to do?": "Don't know what to do?",
|
||||||
|
'done!': 'fait!',
|
||||||
'Download': 'Téléchargement',
|
'Download': 'Téléchargement',
|
||||||
'E-mail': 'E-mail',
|
'E-mail': 'E-mail',
|
||||||
'Edit': 'Éditer',
|
'Edit': 'Éditer',
|
||||||
'Edit This App': 'Modifier cette application',
|
|
||||||
'Edit current record': "Modifier l'enregistrement courant",
|
'Edit current record': "Modifier l'enregistrement courant",
|
||||||
|
'edit profile': 'modifier le profil',
|
||||||
|
'Edit This App': 'Modifier cette application',
|
||||||
|
'Email and SMS': 'Email and SMS',
|
||||||
|
'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
|
||||||
'Errors': 'Erreurs',
|
'Errors': 'Erreurs',
|
||||||
|
'export as csv file': 'exporter sous forme de fichier csv',
|
||||||
'FAQ': 'FAQ',
|
'FAQ': 'FAQ',
|
||||||
'First name': 'Prénom',
|
'First name': 'Prénom',
|
||||||
'Forms and Validators': 'Formulaires et Validateurs',
|
'Forms and Validators': 'Formulaires et Validateurs',
|
||||||
@@ -44,24 +65,42 @@
|
|||||||
'Groups': 'Groups',
|
'Groups': 'Groups',
|
||||||
'Hello World': 'Bonjour le monde',
|
'Hello World': 'Bonjour le monde',
|
||||||
'Home': 'Accueil',
|
'Home': 'Accueil',
|
||||||
|
'How did you get here?': 'How did you get here?',
|
||||||
'Import/Export': 'Importer/Exporter',
|
'Import/Export': 'Importer/Exporter',
|
||||||
'Index': 'Index',
|
'Index': 'Index',
|
||||||
|
'insert new': 'insérer un nouveau',
|
||||||
|
'insert new %s': 'insérer un nouveau %s',
|
||||||
'Internal State': 'État interne',
|
'Internal State': 'État interne',
|
||||||
'Introduction': 'Introduction',
|
'Introduction': 'Introduction',
|
||||||
'Invalid Query': 'Requête Invalide',
|
|
||||||
'Invalid email': 'E-mail invalide',
|
'Invalid email': 'E-mail invalide',
|
||||||
|
'Invalid Query': 'Requête Invalide',
|
||||||
|
'invalid request': 'requête invalide',
|
||||||
'Last name': 'Nom',
|
'Last name': 'Nom',
|
||||||
'Layout': 'Mise en page',
|
'Layout': 'Mise en page',
|
||||||
|
'Layout Plugins': 'Layout Plugins',
|
||||||
'Layouts': 'Layouts',
|
'Layouts': 'Layouts',
|
||||||
'Live chat': 'Chat live',
|
'Live chat': 'Chat live',
|
||||||
|
'Live Chat': 'Live Chat',
|
||||||
'Login': 'Connectez-vous',
|
'Login': 'Connectez-vous',
|
||||||
|
'login': 'connectez-vous',
|
||||||
|
'logout': 'déconnectez-vous',
|
||||||
|
'lost password': 'mot de passe perdu',
|
||||||
'Lost Password': 'Mot de passe perdu',
|
'Lost Password': 'Mot de passe perdu',
|
||||||
|
'lost password?': 'mot de passe perdu?',
|
||||||
|
'Lost password?': 'Lost password?',
|
||||||
'Main Menu': 'Menu principal',
|
'Main Menu': 'Menu principal',
|
||||||
'Menu Model': 'Menu modèle',
|
'Menu Model': 'Menu modèle',
|
||||||
|
'My Sites': 'My Sites',
|
||||||
'Name': 'Nom',
|
'Name': 'Nom',
|
||||||
'New Record': 'Nouvel enregistrement',
|
'New Record': 'Nouvel enregistrement',
|
||||||
|
'new record inserted': 'nouvel enregistrement inséré',
|
||||||
|
'next 100 rows': '100 prochaines lignes',
|
||||||
'No databases in this application': "Cette application n'a pas de bases de données",
|
'No databases in this application': "Cette application n'a pas de bases de données",
|
||||||
|
'Object or table name': 'Object or table name',
|
||||||
|
'Online examples': 'Exemples en ligne',
|
||||||
|
'or import from csv file': "ou importer d'un fichier CSV",
|
||||||
'Origin': 'Origine',
|
'Origin': 'Origine',
|
||||||
|
'Other Plugins': 'Other Plugins',
|
||||||
'Other Recipes': 'Autres recettes',
|
'Other Recipes': 'Autres recettes',
|
||||||
'Overview': 'Présentation',
|
'Overview': 'Présentation',
|
||||||
'Password': 'Mot de passe',
|
'Password': 'Mot de passe',
|
||||||
@@ -69,12 +108,19 @@
|
|||||||
'Plugins': 'Plugiciels',
|
'Plugins': 'Plugiciels',
|
||||||
'Powered by': 'Alimenté par',
|
'Powered by': 'Alimenté par',
|
||||||
'Preface': 'Préface',
|
'Preface': 'Préface',
|
||||||
|
'previous 100 rows': '100 lignes précédentes',
|
||||||
'Python': 'Python',
|
'Python': 'Python',
|
||||||
'Query:': 'Requête:',
|
'Query:': 'Requête:',
|
||||||
'Quick Examples': 'Examples Rapides',
|
'Quick Examples': 'Examples Rapides',
|
||||||
|
'Readme': 'Lisez-moi',
|
||||||
'Recipes': 'Recettes',
|
'Recipes': 'Recettes',
|
||||||
'Record ID': 'ID d\'enregistrement',
|
'record': 'enregistrement',
|
||||||
|
'record does not exist': "l'archive n'existe pas",
|
||||||
|
'record id': "id d'enregistrement",
|
||||||
|
'Record ID': "ID d'enregistrement",
|
||||||
'Register': "S'inscrire",
|
'Register': "S'inscrire",
|
||||||
|
'register': "s'inscrire",
|
||||||
|
'Registration identifier': 'Registration identifier',
|
||||||
'Registration key': "Clé d'enregistrement",
|
'Registration key': "Clé d'enregistrement",
|
||||||
'Remember me (for 30 days)': 'Se souvenir de moi (pendant 30 jours)',
|
'Remember me (for 30 days)': 'Se souvenir de moi (pendant 30 jours)',
|
||||||
'Request reset password': 'Demande de réinitialiser le mot clé',
|
'Request reset password': 'Demande de réinitialiser le mot clé',
|
||||||
@@ -85,19 +131,22 @@
|
|||||||
'Rows selected': 'Lignes sélectionnées',
|
'Rows selected': 'Lignes sélectionnées',
|
||||||
'Semantic': 'Sémantique',
|
'Semantic': 'Sémantique',
|
||||||
'Services': 'Services',
|
'Services': 'Services',
|
||||||
|
'state': 'état',
|
||||||
'Stylesheet': 'Feuille de style',
|
'Stylesheet': 'Feuille de style',
|
||||||
'Submit': 'Soumettre',
|
'Submit': 'Soumettre',
|
||||||
'Support': 'Support',
|
'Support': 'Support',
|
||||||
'Sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
|
'Sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
|
||||||
|
'table': 'tableau',
|
||||||
'Table name': 'Nom du tableau',
|
'Table name': 'Nom du tableau',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "query" est une condition comme "db.table1.champ1==\'valeur\'". Quelque chose comme "db.table1.champ1==db.table2.champ2" résulte en un JOIN SQL.',
|
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "query" est une condition comme "db.table1.champ1==\'valeur\'". Quelque chose comme "db.table1.champ1==db.table2.champ2" résulte en un JOIN SQL.',
|
||||||
'The Core': 'Le noyau',
|
'The Core': 'Le noyau',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'La sortie de ce fichier est un dictionnaire qui été restitué par la vue %s',
|
||||||
'The Views': 'Les Vues',
|
'The Views': 'Les Vues',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'La sortie de ce fichier est un dictionnaire qui été restitué par la vue',
|
|
||||||
'This App': 'Cette Appli',
|
'This App': 'Cette Appli',
|
||||||
'This is a copy of the scaffolding application': 'Ceci est une copie de l\'application échafaudage',
|
'This is a copy of the scaffolding application': "Ceci est une copie de l'application échafaudage",
|
||||||
'Timestamp': 'Horodatage',
|
'Timestamp': 'Horodatage',
|
||||||
'Twitter': 'Twitter',
|
'Twitter': 'Twitter',
|
||||||
|
'unable to parse csv file': "incapable d'analyser le fichier cvs",
|
||||||
'Update:': 'Mise à jour:',
|
'Update:': 'Mise à jour:',
|
||||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Employez (...)&(...) pour AND, (...)|(...) pour OR, and ~(...) pour NOT pour construire des requêtes plus complexes.',
|
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Employez (...)&(...) pour AND, (...)|(...) pour OR, and ~(...) pour NOT pour construire des requêtes plus complexes.',
|
||||||
'User %(id)s Logged-in': 'Utilisateur %(id)s connecté',
|
'User %(id)s Logged-in': 'Utilisateur %(id)s connecté',
|
||||||
@@ -111,46 +160,9 @@
|
|||||||
'Welcome': 'Bienvenu',
|
'Welcome': 'Bienvenu',
|
||||||
'Welcome %s': 'Bienvenue %s',
|
'Welcome %s': 'Bienvenue %s',
|
||||||
'Welcome to web2py': 'Bienvenue à web2py',
|
'Welcome to web2py': 'Bienvenue à web2py',
|
||||||
'Which called the function': 'Qui a appelé la fonction',
|
'Welcome to web2py!': 'Welcome to web2py!',
|
||||||
|
'Which called the function %s located in the file %s': 'Qui a appelé la fonction %s se trouvant dans le fichier %s',
|
||||||
'You are successfully running web2py': 'Vous roulez avec succès web2py',
|
'You are successfully running web2py': 'Vous roulez avec succès web2py',
|
||||||
'You can modify this application and adapt it to your needs': 'Vous pouvez modifier cette application et l\'adapter à vos besoins',
|
'You can modify this application and adapt it to your needs': "Vous pouvez modifier cette application et l'adapter à vos besoins",
|
||||||
'You visited the url': 'Vous avez visité l\'URL',
|
'You visited the url %s': "Vous avez visité l'URL %s",
|
||||||
'appadmin is disabled because insecure channel': "appadmin est désactivée parce que le canal n'est pas sécurisé",
|
|
||||||
'cache': 'cache',
|
|
||||||
'change password': 'changer le mot de passe',
|
|
||||||
'Online examples': 'Exemples en ligne',
|
|
||||||
'Administrative interface': "Interface d'administration",
|
|
||||||
'customize me!': 'personnalisez-moi!',
|
|
||||||
'data uploaded': 'données téléchargées',
|
|
||||||
'database': 'base de données',
|
|
||||||
'database %s select': 'base de données %s select',
|
|
||||||
'db': 'db',
|
|
||||||
'design': 'design',
|
|
||||||
'Documentation': 'Documentation',
|
|
||||||
'done!': 'fait!',
|
|
||||||
'edit profile': 'modifier le profil',
|
|
||||||
'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
|
|
||||||
'export as csv file': 'exporter sous forme de fichier csv',
|
|
||||||
'insert new': 'insérer un nouveau',
|
|
||||||
'insert new %s': 'insérer un nouveau %s',
|
|
||||||
'invalid request': 'requête invalide',
|
|
||||||
'located in the file': 'se trouvant dans le fichier',
|
|
||||||
'login': 'connectez-vous',
|
|
||||||
'logout': 'déconnectez-vous',
|
|
||||||
'lost password': 'mot de passe perdu',
|
|
||||||
'lost password?': 'mot de passe perdu?',
|
|
||||||
'new record inserted': 'nouvel enregistrement inséré',
|
|
||||||
'next 100 rows': '100 prochaines lignes',
|
|
||||||
'or import from csv file': "ou importer d'un fichier CSV",
|
|
||||||
'previous 100 rows': '100 lignes précédentes',
|
|
||||||
'record': 'enregistrement',
|
|
||||||
'record does not exist': "l'archive n'existe pas",
|
|
||||||
'record id': "id d'enregistrement",
|
|
||||||
'register': "s'inscrire",
|
|
||||||
'selected': 'sélectionné',
|
|
||||||
'state': 'état',
|
|
||||||
'table': 'tableau',
|
|
||||||
'unable to parse csv file': "incapable d'analyser le fichier cvs",
|
|
||||||
'Readme': "Lisez-moi",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,83 +1,87 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'hi-in',
|
||||||
|
'!langname!': 'हिन्दी',
|
||||||
'"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',
|
'"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': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%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 %%{row} deleted': '%s पंक्तियाँ मिटाएँ',
|
||||||
'%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',
|
'%s %%{row} updated': '%s पंक्तियाँ अद्यतन',
|
||||||
'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',
|
'%s selected': '%s चुना हुआ',
|
||||||
'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',
|
'Administrative interface': 'प्रशासनिक इंटरफेस के लिए यहाँ क्लिक करें',
|
||||||
'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',
|
'Available databases and tables': 'उपलब्ध डेटाबेस और तालिका',
|
||||||
'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',
|
'Cannot be empty': 'खाली नहीं हो सकता',
|
||||||
|
'Change Password': 'पासवर्ड बदलें',
|
||||||
|
'Check to delete': 'हटाने के लिए चुनें',
|
||||||
'Controller': 'Controller',
|
'Controller': 'Controller',
|
||||||
'Copyright': 'Copyright',
|
'Copyright': 'Copyright',
|
||||||
'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 request': 'वर्तमान अनुरोध',
|
||||||
'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 response': 'वर्तमान प्रतिक्रिया',
|
||||||
'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',
|
'Current session': 'वर्तमान सेशन',
|
||||||
'DB Model': 'DB Model',
|
'DB Model': 'DB Model',
|
||||||
'Database': 'Database',
|
'Database': 'Database',
|
||||||
'Delete:': '\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe:',
|
'Delete:': 'मिटाना:',
|
||||||
'Edit': 'Edit',
|
'Edit': 'Edit',
|
||||||
'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 Profile': 'प्रोफ़ाइल संपादित करें',
|
||||||
'Edit This App': 'Edit This App',
|
'Edit This App': 'Edit This App',
|
||||||
'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 ',
|
'Edit current record': 'वर्तमान रेकॉर्ड संपादित करें ',
|
||||||
'Hello World': 'Hello World',
|
'Hello World': 'Hello World',
|
||||||
'Hello from MyApp': 'Hello from MyApp',
|
'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',
|
'Import/Export': 'आयात / निर्यात',
|
||||||
'Index': 'Index',
|
'Index': 'Index',
|
||||||
'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',
|
'Internal State': 'आंतरिक स्थिति',
|
||||||
'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',
|
'Invalid Query': 'अमान्य प्रश्न',
|
||||||
'Layout': 'Layout',
|
'Layout': 'Layout',
|
||||||
'Login': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x87\xe0\xa4\xa8',
|
'Login': 'लॉग इन',
|
||||||
'Logout': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x86\xe0\xa4\x89\xe0\xa4\x9f',
|
'Logout': 'लॉग आउट',
|
||||||
'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',
|
'Lost Password': 'पासवर्ड खो गया',
|
||||||
'Main Menu': 'Main Menu',
|
'Main Menu': 'Main Menu',
|
||||||
'Menu Model': 'Menu Model',
|
'Menu Model': 'Menu Model',
|
||||||
'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',
|
'New Record': 'नया रेकॉर्ड',
|
||||||
'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',
|
'No databases in this application': 'इस अनुप्रयोग में कोई डेटाबेस नहीं हैं',
|
||||||
|
'Online examples': 'ऑनलाइन उदाहरण के लिए यहाँ क्लिक करें',
|
||||||
'Powered by': 'Powered by',
|
'Powered by': 'Powered by',
|
||||||
'Query:': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8:',
|
'Query:': 'प्रश्न:',
|
||||||
'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 ',
|
'Register': 'पंजीकृत (रजिस्टर) करना ',
|
||||||
'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 in table': 'तालिका में पंक्तियाँ ',
|
||||||
'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 ',
|
'Rows selected': 'चयनित (चुने गये) पंक्तियाँ ',
|
||||||
'Stylesheet': 'Stylesheet',
|
'Stylesheet': 'Stylesheet',
|
||||||
'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?',
|
'Sure you want to delete this object?': 'सुनिश्चित हैं कि आप इस वस्तु को हटाना चाहते हैं?',
|
||||||
'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.',
|
'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:',
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
|
'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.',
|
||||||
'View': 'View',
|
'View': 'View',
|
||||||
'Welcome %s': 'Welcome %s',
|
'Welcome %s': 'Welcome %s',
|
||||||
'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',
|
'Welcome to web2py': 'वेब२पाइ (web2py) में आपका स्वागत है',
|
||||||
'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',
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
|
'You visited the url %s': 'You visited the url %s',
|
||||||
|
'appadmin is disabled because insecure channel': 'अप आडमिन (appadmin) अक्षम है क्योंकि असुरक्षित चैनल',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'change password': 'change password',
|
'change password': 'change password',
|
||||||
'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',
|
'customize me!': 'मुझे अनुकूलित (कस्टमाइज़) करें!',
|
||||||
'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',
|
'data uploaded': 'डाटा अपलोड सम्पन्न ',
|
||||||
'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!',
|
'database': 'डेटाबेस',
|
||||||
'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 %s select': 'डेटाबेस %s चुनी हुई',
|
||||||
'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',
|
'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',
|
'design': 'रचना करें',
|
||||||
'done!': '\xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe!',
|
'done!': 'हो गया!',
|
||||||
'edit profile': 'edit profile',
|
'edit profile': 'edit profile',
|
||||||
'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',
|
'export as csv file': 'csv फ़ाइल के रूप में निर्यात',
|
||||||
'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': 'नया डालें',
|
||||||
'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',
|
'insert new %s': 'नया %s डालें',
|
||||||
'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',
|
'invalid request': 'अवैध अनुरोध',
|
||||||
'login': 'login',
|
'login': 'login',
|
||||||
'logout': 'logout',
|
'logout': 'logout',
|
||||||
'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',
|
'new record inserted': 'नया रेकॉर्ड डाला',
|
||||||
'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',
|
'next 100 rows': 'अगले 100 पंक्तियाँ',
|
||||||
'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',
|
'or import from csv file': 'या csv फ़ाइल से आयात',
|
||||||
'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',
|
'previous 100 rows': 'पिछले 100 पंक्तियाँ',
|
||||||
'record': 'record',
|
'record': 'record',
|
||||||
'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 does not exist': 'रिकॉर्ड मौजूद नहीं है',
|
||||||
'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)',
|
'record id': 'रिकॉर्ड पहचानकर्ता (आईडी)',
|
||||||
'register': 'register',
|
'register': 'register',
|
||||||
'selected': '\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x86',
|
'state': 'स्थिति',
|
||||||
'state': '\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
|
'table': 'तालिका',
|
||||||
'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 फ़ाइल पार्स करने में असमर्थ',
|
||||||
'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',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,94 +1,98 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'hu',
|
||||||
|
'!langname!': 'Magyar',
|
||||||
'"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',
|
'"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': '%Y.%m.%d.',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y.%m.%d. %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y.%m.%d. %H:%M:%S',
|
||||||
'%s rows deleted': '%s sorok t\xc3\xb6rl\xc5\x91dtek',
|
'%s %%{row} deleted': '%s sorok törlődtek',
|
||||||
'%s rows updated': '%s sorok friss\xc3\xadt\xc5\x91dtek',
|
'%s %%{row} updated': '%s sorok frissítődtek',
|
||||||
'Available databases and tables': 'El\xc3\xa9rhet\xc5\x91 adatb\xc3\xa1zisok \xc3\xa9s t\xc3\xa1bl\xc3\xa1k',
|
'%s selected': '%s kiválasztott',
|
||||||
'Cannot be empty': 'Nem lehet \xc3\xbcres',
|
'Administrative interface': 'az adminisztrációs felületért kattints ide',
|
||||||
'Check to delete': 'T\xc3\xb6rl\xc3\xa9shez v\xc3\xa1laszd ki',
|
'Available databases and tables': 'Elérhető adatbázisok és táblák',
|
||||||
|
'Cannot be empty': 'Nem lehet üres',
|
||||||
|
'Check to delete': 'Törléshez válaszd ki',
|
||||||
'Client IP': 'Client IP',
|
'Client IP': 'Client IP',
|
||||||
'Controller': 'Controller',
|
'Controller': 'Controller',
|
||||||
'Copyright': 'Copyright',
|
'Copyright': 'Copyright',
|
||||||
'Current request': 'Jelenlegi lek\xc3\xa9rdez\xc3\xa9s',
|
'Current request': 'Jelenlegi lekérdezés',
|
||||||
'Current response': 'Jelenlegi v\xc3\xa1lasz',
|
'Current response': 'Jelenlegi válasz',
|
||||||
'Current session': 'Jelenlegi folyamat',
|
'Current session': 'Jelenlegi folyamat',
|
||||||
'DB Model': 'DB Model',
|
'DB Model': 'DB Model',
|
||||||
'Database': 'Adatb\xc3\xa1zis',
|
'Database': 'Adatbázis',
|
||||||
'Delete:': 'T\xc3\xb6r\xc3\xb6l:',
|
'Delete:': 'Töröl:',
|
||||||
'Description': 'Description',
|
'Description': 'Description',
|
||||||
'E-mail': 'E-mail',
|
'E-mail': 'E-mail',
|
||||||
'Edit': 'Szerkeszt',
|
'Edit': 'Szerkeszt',
|
||||||
'Edit This App': 'Alkalmaz\xc3\xa1st szerkeszt',
|
'Edit This App': 'Alkalmazást szerkeszt',
|
||||||
'Edit current record': 'Aktu\xc3\xa1lis bejegyz\xc3\xa9s szerkeszt\xc3\xa9se',
|
'Edit current record': 'Aktuális bejegyzés szerkesztése',
|
||||||
'First name': 'First name',
|
'First name': 'First name',
|
||||||
'Group ID': 'Group ID',
|
'Group ID': 'Group ID',
|
||||||
'Hello World': 'Hello Vil\xc3\xa1g',
|
'Hello World': 'Hello Világ',
|
||||||
'Import/Export': 'Import/Export',
|
'Import/Export': 'Import/Export',
|
||||||
'Index': 'Index',
|
'Index': 'Index',
|
||||||
'Internal State': 'Internal State',
|
'Internal State': 'Internal State',
|
||||||
'Invalid Query': 'Hib\xc3\xa1s lek\xc3\xa9rdez\xc3\xa9s',
|
'Invalid Query': 'Hibás lekérdezés',
|
||||||
'Invalid email': 'Invalid email',
|
'Invalid email': 'Invalid email',
|
||||||
'Last name': 'Last name',
|
'Last name': 'Last name',
|
||||||
'Layout': 'Szerkezet',
|
'Layout': 'Szerkezet',
|
||||||
'Main Menu': 'F\xc5\x91men\xc3\xbc',
|
'Main Menu': 'Főmenü',
|
||||||
'Menu Model': 'Men\xc3\xbc model',
|
'Menu Model': 'Menü model',
|
||||||
'Name': 'Name',
|
'Name': 'Name',
|
||||||
'New Record': '\xc3\x9aj bejegyz\xc3\xa9s',
|
'New Record': 'Új bejegyzés',
|
||||||
'No databases in this application': 'Nincs adatb\xc3\xa1zis ebben az alkalmaz\xc3\xa1sban',
|
'No databases in this application': 'Nincs adatbázis ebben az alkalmazásban',
|
||||||
|
'Online examples': 'online példákért kattints ide',
|
||||||
'Origin': 'Origin',
|
'Origin': 'Origin',
|
||||||
'Password': 'Password',
|
'Password': 'Password',
|
||||||
'Powered by': 'Powered by',
|
'Powered by': 'Powered by',
|
||||||
'Query:': 'Lek\xc3\xa9rdez\xc3\xa9s:',
|
'Query:': 'Lekérdezés:',
|
||||||
'Record ID': 'Record ID',
|
'Record ID': 'Record ID',
|
||||||
'Registration key': 'Registration key',
|
'Registration key': 'Registration key',
|
||||||
'Reset Password key': 'Reset Password key',
|
'Reset Password key': 'Reset Password key',
|
||||||
'Role': 'Role',
|
'Role': 'Role',
|
||||||
'Rows in table': 'Sorok a t\xc3\xa1bl\xc3\xa1ban',
|
'Rows in table': 'Sorok a táblában',
|
||||||
'Rows selected': 'Kiv\xc3\xa1lasztott sorok',
|
'Rows selected': 'Kiválasztott sorok',
|
||||||
'Stylesheet': 'Stylesheet',
|
'Stylesheet': 'Stylesheet',
|
||||||
'Sure you want to delete this object?': 'Biztos t\xc3\xb6rli ezt az objektumot?',
|
'Sure you want to delete this object?': 'Biztos törli ezt az objektumot?',
|
||||||
'Table name': 'Table name',
|
'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.',
|
'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.',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
'Timestamp': 'Timestamp',
|
'Timestamp': 'Timestamp',
|
||||||
'Update:': 'Friss\xc3\xadt:',
|
'Update:': 'Frissít:',
|
||||||
'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.',
|
||||||
'User ID': 'User ID',
|
'User ID': 'User ID',
|
||||||
'View': 'N\xc3\xa9zet',
|
'View': 'Nézet',
|
||||||
'Welcome %s': 'Welcome %s',
|
'Welcome %s': 'Welcome %s',
|
||||||
'Welcome to web2py': 'Isten hozott a web2py-ban',
|
'Welcome to web2py': 'Isten hozott a web2py-ban',
|
||||||
'appadmin is disabled because insecure channel': 'az appadmin a biztons\xc3\xa1gtalan csatorna miatt letiltva',
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
'cache': 'gyors\xc3\xadt\xc3\xb3t\xc3\xa1r',
|
'You visited the url %s': 'You visited the url %s',
|
||||||
'change password': 'jelsz\xc3\xb3 megv\xc3\xa1ltoztat\xc3\xa1sa',
|
'appadmin is disabled because insecure channel': 'az appadmin a biztonságtalan csatorna miatt letiltva',
|
||||||
'Online examples': 'online p\xc3\xa9ld\xc3\xa1k\xc3\xa9rt kattints ide',
|
'cache': 'gyorsítótár',
|
||||||
'Administrative interface': 'az adminisztr\xc3\xa1ci\xc3\xb3s fel\xc3\xbclet\xc3\xa9rt kattints ide',
|
'change password': 'jelszó megváltoztatása',
|
||||||
'customize me!': 'v\xc3\xa1ltoztass meg!',
|
'customize me!': 'változtass meg!',
|
||||||
'data uploaded': 'adat felt\xc3\xb6ltve',
|
'data uploaded': 'adat feltöltve',
|
||||||
'database': 'adatb\xc3\xa1zis',
|
'database': 'adatbázis',
|
||||||
'database %s select': 'adatb\xc3\xa1zis %s kiv\xc3\xa1laszt\xc3\xa1s',
|
'database %s select': 'adatbázis %s kiválasztás',
|
||||||
'db': 'db',
|
'db': 'db',
|
||||||
'design': 'design',
|
'design': 'design',
|
||||||
'done!': 'k\xc3\xa9sz!',
|
'done!': 'kész!',
|
||||||
'edit profile': 'profil szerkeszt\xc3\xa9se',
|
'edit profile': 'profil szerkesztése',
|
||||||
'export as csv file': 'export\xc3\xa1l csv f\xc3\xa1jlba',
|
'export as csv file': 'exportál csv fájlba',
|
||||||
'insert new': '\xc3\xbaj beilleszt\xc3\xa9se',
|
'insert new': 'új beillesztése',
|
||||||
'insert new %s': '\xc3\xbaj beilleszt\xc3\xa9se %s',
|
'insert new %s': 'új beillesztése %s',
|
||||||
'invalid request': 'hib\xc3\xa1s k\xc3\xa9r\xc3\xa9s',
|
'invalid request': 'hibás kérés',
|
||||||
'login': 'bel\xc3\xa9p',
|
'login': 'belép',
|
||||||
'logout': 'kil\xc3\xa9p',
|
'logout': 'kilép',
|
||||||
'lost password': 'elveszett jelsz\xc3\xb3',
|
'lost password': 'elveszett jelszó',
|
||||||
'new record inserted': '\xc3\xbaj bejegyz\xc3\xa9s felv\xc3\xa9ve',
|
'new record inserted': 'új bejegyzés felvéve',
|
||||||
'next 100 rows': 'k\xc3\xb6vetkez\xc5\x91 100 sor',
|
'next 100 rows': 'következő 100 sor',
|
||||||
'or import from csv file': 'vagy bet\xc3\xb6lt\xc3\xa9s csv f\xc3\xa1jlb\xc3\xb3l',
|
'or import from csv file': 'vagy betöltés csv fájlból',
|
||||||
'previous 100 rows': 'el\xc5\x91z\xc5\x91 100 sor',
|
'previous 100 rows': 'előző 100 sor',
|
||||||
'record': 'bejegyz\xc3\xa9s',
|
'record': 'bejegyzés',
|
||||||
'record does not exist': 'bejegyz\xc3\xa9s nem l\xc3\xa9tezik',
|
'record does not exist': 'bejegyzés nem létezik',
|
||||||
'record id': 'bejegyz\xc3\xa9s id',
|
'record id': 'bejegyzés id',
|
||||||
'register': 'regisztr\xc3\xa1ci\xc3\xb3',
|
'register': 'regisztráció',
|
||||||
'selected': 'kiv\xc3\xa1lasztott',
|
'state': 'állapot',
|
||||||
'state': '\xc3\xa1llapot',
|
'table': 'tábla',
|
||||||
'table': 't\xc3\xa1bla',
|
'unable to parse csv file': 'nem lehet a csv fájlt beolvasni',
|
||||||
'unable to parse csv file': 'nem lehet a csv f\xc3\xa1jlt beolvasni',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'it',
|
||||||
|
'!langname!': 'Italiano',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" è un\'espressione opzionale come "campo1=\'nuovo valore\'". Non si può fare "update" o "delete" dei risultati di un JOIN ',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" è un\'espressione opzionale come "campo1=\'nuovo valore\'". Non si può fare "update" o "delete" dei risultati di un JOIN ',
|
||||||
'%Y-%m-%d': '%d/%m/%Y',
|
'%Y-%m-%d': '%d/%m/%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
|
||||||
'%s rows deleted': '%s righe ("record") cancellate',
|
'%s %%{row} deleted': '%s righe ("record") cancellate',
|
||||||
'%s rows updated': '%s righe ("record") modificate',
|
'%s %%{row} updated': '%s righe ("record") modificate',
|
||||||
|
'%s selected': '%s selezionato',
|
||||||
'Administrative interface': 'Interfaccia amministrativa',
|
'Administrative interface': 'Interfaccia amministrativa',
|
||||||
'Available databases and tables': 'Database e tabelle disponibili',
|
'Available databases and tables': 'Database e tabelle disponibili',
|
||||||
'Cannot be empty': 'Non può essere vuoto',
|
'Cannot be empty': 'Non può essere vuoto',
|
||||||
@@ -56,7 +59,7 @@
|
|||||||
'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',
|
'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',
|
||||||
'Table name': 'Nome tabella',
|
'Table name': 'Nome tabella',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La richiesta (query) è una condizione come ad esempio "db.tabella1.campo1==\'valore\'". Una condizione come "db.tabella1.campo1==db.tabella2.campo2" produce un "JOIN" SQL.',
|
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La richiesta (query) è una condizione come ad esempio "db.tabella1.campo1==\'valore\'". Una condizione come "db.tabella1.campo1==db.tabella2.campo2" produce un "JOIN" SQL.',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'L\'output del file è un "dictionary" che è stato visualizzato dalla vista',
|
'The output of the file is a dictionary that was rendered by the view %s': 'L\'output del file è un "dictionary" che è stato visualizzato dalla vista %s',
|
||||||
'This is a copy of the scaffolding application': "Questa è una copia dell'applicazione di base (scaffold)",
|
'This is a copy of the scaffolding application': "Questa è una copia dell'applicazione di base (scaffold)",
|
||||||
'Timestamp': 'Ora (timestamp)',
|
'Timestamp': 'Ora (timestamp)',
|
||||||
'Update': 'Update',
|
'Update': 'Update',
|
||||||
@@ -66,10 +69,10 @@
|
|||||||
'View': 'Vista',
|
'View': 'Vista',
|
||||||
'Welcome %s': 'Benvenuto %s',
|
'Welcome %s': 'Benvenuto %s',
|
||||||
'Welcome to web2py': 'Benvenuto su web2py',
|
'Welcome to web2py': 'Benvenuto su web2py',
|
||||||
'Which called the function': 'che ha chiamato la funzione',
|
'Which called the function %s located in the file %s': 'che ha chiamato la funzione %s presente nel file %s',
|
||||||
'You are successfully running web2py': 'Stai eseguendo web2py con successo',
|
'You are successfully running web2py': 'Stai eseguendo web2py con successo',
|
||||||
'You can modify this application and adapt it to your needs': 'Puoi modificare questa applicazione adattandola alle tue necessità',
|
'You can modify this application and adapt it to your needs': 'Puoi modificare questa applicazione adattandola alle tue necessità',
|
||||||
'You visited the url': "Hai visitato l'URL",
|
'You visited the url %s': "Hai visitato l'URL %s",
|
||||||
'appadmin is disabled because insecure channel': 'Amministrazione (appadmin) disabilitata: comunicazione non sicura',
|
'appadmin is disabled because insecure channel': 'Amministrazione (appadmin) disabilitata: comunicazione non sicura',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'change password': 'Cambia password',
|
'change password': 'Cambia password',
|
||||||
@@ -87,7 +90,6 @@
|
|||||||
'insert new': 'inserisci nuovo',
|
'insert new': 'inserisci nuovo',
|
||||||
'insert new %s': 'inserisci nuovo %s',
|
'insert new %s': 'inserisci nuovo %s',
|
||||||
'invalid request': 'richiesta non valida',
|
'invalid request': 'richiesta non valida',
|
||||||
'located in the file': 'presente nel file',
|
|
||||||
'login': 'accesso',
|
'login': 'accesso',
|
||||||
'logout': 'uscita',
|
'logout': 'uscita',
|
||||||
'lost password?': 'dimenticato la password?',
|
'lost password?': 'dimenticato la password?',
|
||||||
@@ -100,9 +102,7 @@
|
|||||||
'record does not exist': 'il record non esiste',
|
'record does not exist': 'il record non esiste',
|
||||||
'record id': 'record id',
|
'record id': 'record id',
|
||||||
'register': 'registrazione',
|
'register': 'registrazione',
|
||||||
'selected': 'selezionato',
|
|
||||||
'state': 'stato',
|
'state': 'stato',
|
||||||
'table': 'tabella',
|
'table': 'tabella',
|
||||||
'unable to parse csv file': 'non riesco a decodificare questo file CSV',
|
'unable to parse csv file': 'non riesco a decodificare questo file CSV',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,53 +1,58 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
'"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:',
|
'!langcode!': 'pl',
|
||||||
|
'!langname!': 'Polska',
|
||||||
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyrażeniem postaci "pole1=\'nowawartość\'". Nie możesz uaktualnić lub usunąć wyników z JOIN:',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
|
'%s %%{row} deleted': 'Wierszy usuniętych: %s',
|
||||||
'%s rows updated': 'Wierszy uaktualnionych: %s',
|
'%s %%{row} updated': 'Wierszy uaktualnionych: %s',
|
||||||
|
'%s selected': '%s wybranych',
|
||||||
|
'Administrative interface': 'Kliknij aby przejść do panelu administracyjnego',
|
||||||
'Authentication': 'Uwierzytelnienie',
|
'Authentication': 'Uwierzytelnienie',
|
||||||
'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
|
'Available databases and tables': 'Dostępne bazy danych i tabele',
|
||||||
'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
|
'Cannot be empty': 'Nie może być puste',
|
||||||
'Change Password': 'Zmie\xc5\x84 has\xc5\x82o',
|
'Change Password': 'Zmień hasło',
|
||||||
'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
|
'Check to delete': 'Zaznacz aby usunąć',
|
||||||
'Check to delete:': 'Zaznacz aby usun\xc4\x85\xc4\x87:',
|
'Check to delete:': 'Zaznacz aby usunąć:',
|
||||||
'Client IP': 'IP klienta',
|
'Client IP': 'IP klienta',
|
||||||
'Controller': 'Kontroler',
|
'Controller': 'Kontroler',
|
||||||
'Copyright': 'Copyright',
|
'Copyright': 'Copyright',
|
||||||
'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
|
'Current request': 'Aktualne żądanie',
|
||||||
'Current response': 'Aktualna odpowied\xc5\xba',
|
'Current response': 'Aktualna odpowiedź',
|
||||||
'Current session': 'Aktualna sesja',
|
'Current session': 'Aktualna sesja',
|
||||||
'DB Model': 'Model bazy danych',
|
'DB Model': 'Model bazy danych',
|
||||||
'Database': 'Baza danych',
|
'Database': 'Baza danych',
|
||||||
'Delete:': 'Usu\xc5\x84:',
|
'Delete:': 'Usuń:',
|
||||||
'Description': 'Opis',
|
'Description': 'Opis',
|
||||||
'E-mail': 'Adres e-mail',
|
'E-mail': 'Adres e-mail',
|
||||||
'Edit': 'Edycja',
|
'Edit': 'Edycja',
|
||||||
'Edit Profile': 'Edytuj profil',
|
'Edit Profile': 'Edytuj profil',
|
||||||
'Edit This App': 'Edytuj t\xc4\x99 aplikacj\xc4\x99',
|
'Edit This App': 'Edytuj tę aplikację',
|
||||||
'Edit current record': 'Edytuj obecny rekord',
|
'Edit current record': 'Edytuj obecny rekord',
|
||||||
'First name': 'Imi\xc4\x99',
|
'First name': 'Imię',
|
||||||
'Function disabled': 'Funkcja wy\xc5\x82\xc4\x85czona',
|
'Function disabled': 'Funkcja wyłączona',
|
||||||
'Group ID': 'ID grupy',
|
'Group ID': 'ID grupy',
|
||||||
'Hello World': 'Witaj \xc5\x9awiecie',
|
'Hello World': 'Witaj Świecie',
|
||||||
'Import/Export': 'Importuj/eksportuj',
|
'Import/Export': 'Importuj/eksportuj',
|
||||||
'Index': 'Indeks',
|
'Index': 'Indeks',
|
||||||
'Internal State': 'Stan wewn\xc4\x99trzny',
|
'Internal State': 'Stan wewnętrzny',
|
||||||
'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
|
'Invalid Query': 'Błędne zapytanie',
|
||||||
'Invalid email': 'B\xc5\x82\xc4\x99dny adres email',
|
'Invalid email': 'Błędny adres email',
|
||||||
'Last name': 'Nazwisko',
|
'Last name': 'Nazwisko',
|
||||||
'Layout': 'Uk\xc5\x82ad',
|
'Layout': 'Układ',
|
||||||
'Login': 'Zaloguj',
|
'Login': 'Zaloguj',
|
||||||
'Logout': 'Wyloguj',
|
'Logout': 'Wyloguj',
|
||||||
'Lost Password': 'Przypomnij has\xc5\x82o',
|
'Lost Password': 'Przypomnij hasło',
|
||||||
'Main Menu': 'Menu g\xc5\x82\xc3\xb3wne',
|
'Main Menu': 'Menu główne',
|
||||||
'Menu Model': 'Model menu',
|
'Menu Model': 'Model menu',
|
||||||
'Name': 'Nazwa',
|
'Name': 'Nazwa',
|
||||||
'New Record': 'Nowy rekord',
|
'New Record': 'Nowy rekord',
|
||||||
'No databases in this application': 'Brak baz danych w tej aplikacji',
|
'No databases in this application': 'Brak baz danych w tej aplikacji',
|
||||||
'Origin': '\xc5\xb9r\xc3\xb3d\xc5\x82o',
|
'Online examples': 'Kliknij aby przejść do interaktywnych przykładów',
|
||||||
'Password': 'Has\xc5\x82o',
|
'Origin': 'Źródło',
|
||||||
"Password fields don't match": 'Pola has\xc5\x82a nie s\xc4\x85 zgodne ze sob\xc4\x85',
|
'Password': 'Hasło',
|
||||||
|
"Password fields don't match": 'Pola hasła nie są zgodne ze sobą',
|
||||||
'Powered by': 'Zasilane przez',
|
'Powered by': 'Zasilane przez',
|
||||||
'Query:': 'Zapytanie:',
|
'Query:': 'Zapytanie:',
|
||||||
'Record ID': 'ID rekordu',
|
'Record ID': 'ID rekordu',
|
||||||
@@ -56,29 +61,30 @@
|
|||||||
'Role': 'Rola',
|
'Role': 'Rola',
|
||||||
'Rows in table': 'Wiersze w tabeli',
|
'Rows in table': 'Wiersze w tabeli',
|
||||||
'Rows selected': 'Wybrane wiersze',
|
'Rows selected': 'Wybrane wiersze',
|
||||||
'Stylesheet': 'Arkusz styl\xc3\xb3w',
|
'Stylesheet': 'Arkusz stylów',
|
||||||
'Submit': 'Wy\xc5\x9blij',
|
'Submit': 'Wyślij',
|
||||||
'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
|
'Sure you want to delete this object?': 'Czy na pewno chcesz usunąć ten obiekt?',
|
||||||
'Table name': 'Nazwa tabeli',
|
'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.',
|
'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ść\'". Takie coś jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
'Timestamp': 'Znacznik czasu',
|
'Timestamp': 'Znacznik czasu',
|
||||||
'Update:': 'Uaktualnij:',
|
'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.',
|
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Użyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapytań.',
|
||||||
'User %(id)s Registered': 'U\xc5\xbcytkownik %(id)s zosta\xc5\x82 zarejestrowany',
|
'User %(id)s Registered': 'Użytkownik %(id)s został zarejestrowany',
|
||||||
'User ID': 'ID u\xc5\xbcytkownika',
|
'User ID': 'ID użytkownika',
|
||||||
'Verify Password': 'Potwierd\xc5\xba has\xc5\x82o',
|
'Verify Password': 'Potwierdź hasło',
|
||||||
'View': 'Widok',
|
'View': 'Widok',
|
||||||
'Welcome %s': 'Welcome %s',
|
'Welcome %s': 'Welcome %s',
|
||||||
'Welcome to web2py': 'Witaj w web2py',
|
'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',
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
|
'You visited the url %s': 'You visited the url %s',
|
||||||
|
'appadmin is disabled because insecure channel': 'administracja aplikacji wyłączona z powodu braku bezpiecznego połączenia',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'change password': 'change password',
|
'change password': 'change password',
|
||||||
'Online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
|
|
||||||
'Administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
|
|
||||||
'customize me!': 'dostosuj mnie!',
|
'customize me!': 'dostosuj mnie!',
|
||||||
'data uploaded': 'dane wys\xc5\x82ane',
|
'data uploaded': 'dane wysłane',
|
||||||
'database': 'baza danych',
|
'database': 'baza danych',
|
||||||
'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
|
'database %s select': 'wybór z bazy danych %s',
|
||||||
'db': 'baza danych',
|
'db': 'baza danych',
|
||||||
'design': 'projektuj',
|
'design': 'projektuj',
|
||||||
'done!': 'zrobione!',
|
'done!': 'zrobione!',
|
||||||
@@ -86,20 +92,18 @@
|
|||||||
'export as csv file': 'eksportuj jako plik csv',
|
'export as csv file': 'eksportuj jako plik csv',
|
||||||
'insert new': 'wstaw nowy rekord tabeli',
|
'insert new': 'wstaw nowy rekord tabeli',
|
||||||
'insert new %s': 'wstaw nowy rekord do tabeli %s',
|
'insert new %s': 'wstaw nowy rekord do tabeli %s',
|
||||||
'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
|
'invalid request': 'Błędne żądanie',
|
||||||
'login': 'login',
|
'login': 'login',
|
||||||
'logout': 'logout',
|
'logout': 'logout',
|
||||||
'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
|
'new record inserted': 'nowy rekord został wstawiony',
|
||||||
'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
|
'next 100 rows': 'następne 100 wierszy',
|
||||||
'or import from csv file': 'lub zaimportuj z pliku csv',
|
'or import from csv file': 'lub zaimportuj z pliku csv',
|
||||||
'previous 100 rows': 'poprzednie 100 wierszy',
|
'previous 100 rows': 'poprzednie 100 wierszy',
|
||||||
'record': 'rekord',
|
'record': 'rekord',
|
||||||
'record does not exist': 'rekord nie istnieje',
|
'record does not exist': 'rekord nie istnieje',
|
||||||
'record id': 'id rekordu',
|
'record id': 'id rekordu',
|
||||||
'register': 'register',
|
'register': 'register',
|
||||||
'selected': 'wybranych',
|
|
||||||
'state': 'stan',
|
'state': 'stan',
|
||||||
'table': 'tabela',
|
'table': 'tabela',
|
||||||
'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
|
'unable to parse csv file': 'nie można sparsować pliku csv',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
{
|
||||||
|
# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],
|
||||||
|
'account': ['accounts'],
|
||||||
|
'book': ['books'],
|
||||||
|
'is': ['are'],
|
||||||
|
'man': ['men'],
|
||||||
|
'person': ['people'],
|
||||||
|
'shop': ['shops'],
|
||||||
|
'this': ['these'],
|
||||||
|
'was': ['were'],
|
||||||
|
'woman': ['women'],
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
{
|
||||||
|
# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],
|
||||||
|
'выбрана': ['выбраны','выбрано'],
|
||||||
|
'запись': ['записи','записей'],
|
||||||
|
'изменена': ['изменены','изменено'],
|
||||||
|
'строка': ['строки','строк'],
|
||||||
|
'удалена': ['удалены','удалено'],
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
{
|
||||||
|
# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],
|
||||||
|
'байт': ['байти','байтів'],
|
||||||
|
'годину': ['години','годин'],
|
||||||
|
'елемент': ['елементи','елементів'],
|
||||||
|
'запис': ['записи','записів'],
|
||||||
|
'поцілювання': ['поцілювання','поцілювань'],
|
||||||
|
'рядок': ['рядки','рядків'],
|
||||||
|
'секунду': ['секунди','секунд'],
|
||||||
|
'схибнення': ['схибнення','схибнень'],
|
||||||
|
'хвилину': ['хвилини','хвилин'],
|
||||||
|
}
|
||||||
@@ -1,12 +1,16 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'pt-br',
|
||||||
|
'!langname!': 'Português (do Brasil)',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "campo1=\'novovalor\'". Você não pode atualizar ou apagar os resultados de um JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "campo1=\'novovalor\'". Você não pode atualizar ou apagar os resultados de um JOIN',
|
||||||
'%Y-%m-%d': '%d-%m-%Y',
|
'%Y-%m-%d': '%d-%m-%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S',
|
||||||
'%s rows deleted': '%s linhas apagadas',
|
'%s %%{row} deleted': '%s linhas apagadas',
|
||||||
'%s rows updated': '%s linhas atualizadas',
|
'%s %%{row} updated': '%s linhas atualizadas',
|
||||||
|
'%s selected': '%s selecionado',
|
||||||
'About': 'About',
|
'About': 'About',
|
||||||
'Access Control': 'Access Control',
|
'Access Control': 'Access Control',
|
||||||
|
'Administrative interface': 'Interface administrativa',
|
||||||
'Ajax Recipes': 'Ajax Recipes',
|
'Ajax Recipes': 'Ajax Recipes',
|
||||||
'Available databases and tables': 'Bancos de dados e tabelas disponíveis',
|
'Available databases and tables': 'Bancos de dados e tabelas disponíveis',
|
||||||
'Buy this book': 'Buy this book',
|
'Buy this book': 'Buy this book',
|
||||||
@@ -57,6 +61,7 @@
|
|||||||
'Name': 'Name',
|
'Name': 'Name',
|
||||||
'New Record': 'Novo Registro',
|
'New Record': 'Novo Registro',
|
||||||
'No databases in this application': 'Sem bancos de dados nesta aplicação',
|
'No databases in this application': 'Sem bancos de dados nesta aplicação',
|
||||||
|
'Online examples': 'Alguns exemplos',
|
||||||
'Origin': 'Origin',
|
'Origin': 'Origin',
|
||||||
'Other Recipes': 'Other Recipes',
|
'Other Recipes': 'Other Recipes',
|
||||||
'Overview': 'Overview',
|
'Overview': 'Overview',
|
||||||
@@ -85,7 +90,7 @@
|
|||||||
'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" é uma condição como "db.tabela1.campo1==\'valor\'". Expressões como "db.tabela1.campo1==db.tabela2.campo2" resultam em um JOIN SQL.',
|
'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" é uma condição como "db.tabela1.campo1==\'valor\'". Expressões como "db.tabela1.campo1==db.tabela2.campo2" resultam em um JOIN SQL.',
|
||||||
'The Core': 'The Core',
|
'The Core': 'The Core',
|
||||||
'The Views': 'The Views',
|
'The Views': 'The Views',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'The output of the file is a dictionary that was rendered by the view',
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
'This App': 'This App',
|
'This App': 'This App',
|
||||||
'This is a copy of the scaffolding application': 'This is a copy of the scaffolding application',
|
'This is a copy of the scaffolding application': 'This is a copy of the scaffolding application',
|
||||||
'Timestamp': 'Timestamp',
|
'Timestamp': 'Timestamp',
|
||||||
@@ -100,30 +105,26 @@
|
|||||||
'Welcome': 'Welcome',
|
'Welcome': 'Welcome',
|
||||||
'Welcome %s': 'Vem vindo %s',
|
'Welcome %s': 'Vem vindo %s',
|
||||||
'Welcome to web2py': 'Bem vindo ao web2py',
|
'Welcome to web2py': 'Bem vindo ao web2py',
|
||||||
'Which called the function': 'Which called the function',
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
'You are successfully running web2py': 'You are successfully running web2py',
|
'You are successfully running web2py': 'You are successfully running web2py',
|
||||||
'You are successfully running web2py.': 'You are successfully running web2py.',
|
'You are successfully running web2py.': 'You are successfully running web2py.',
|
||||||
'You can modify this application and adapt it to your needs': 'You can modify this application and adapt it to your needs',
|
'You can modify this application and adapt it to your needs': 'You can modify this application and adapt it to your needs',
|
||||||
'You visited the url': 'You visited the url',
|
'You visited the url %s': 'You visited the url %s',
|
||||||
'appadmin is disabled because insecure channel': 'Administração desativada devido ao canal inseguro',
|
'appadmin is disabled because insecure channel': 'Administração desativada devido ao canal inseguro',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'change password': 'modificar senha',
|
'change password': 'modificar senha',
|
||||||
'Online examples': 'Alguns exemplos',
|
|
||||||
'Administrative interface': 'Interface administrativa',
|
|
||||||
'customize me!': 'Personalize-me!',
|
'customize me!': 'Personalize-me!',
|
||||||
'data uploaded': 'dados enviados',
|
'data uploaded': 'dados enviados',
|
||||||
'database': 'banco de dados',
|
'database': 'banco de dados',
|
||||||
'database %s select': 'Selecionar banco de dados %s',
|
'database %s select': 'Selecionar banco de dados %s',
|
||||||
'db': 'bd',
|
'db': 'bd',
|
||||||
'design': 'design',
|
'design': 'design',
|
||||||
'Documentation': 'Documentation',
|
|
||||||
'done!': 'concluído!',
|
'done!': 'concluído!',
|
||||||
'edit profile': 'editar perfil',
|
'edit profile': 'editar perfil',
|
||||||
'export as csv file': 'exportar como um arquivo csv',
|
'export as csv file': 'exportar como um arquivo csv',
|
||||||
'insert new': 'inserir novo',
|
'insert new': 'inserir novo',
|
||||||
'insert new %s': 'inserir novo %s',
|
'insert new %s': 'inserir novo %s',
|
||||||
'invalid request': 'requisição inválida',
|
'invalid request': 'requisição inválida',
|
||||||
'located in the file': 'located in the file',
|
|
||||||
'login': 'Entrar',
|
'login': 'Entrar',
|
||||||
'logout': 'Sair',
|
'logout': 'Sair',
|
||||||
'lost password?': 'lost password?',
|
'lost password?': 'lost password?',
|
||||||
@@ -135,9 +136,7 @@
|
|||||||
'record does not exist': 'registro não existe',
|
'record does not exist': 'registro não existe',
|
||||||
'record id': 'id do registro',
|
'record id': 'id do registro',
|
||||||
'register': 'Registre-se',
|
'register': 'Registre-se',
|
||||||
'selected': 'selecionado',
|
|
||||||
'state': 'estado',
|
'state': 'estado',
|
||||||
'table': 'tabela',
|
'table': 'tabela',
|
||||||
'unable to parse csv file': 'não foi possível analisar arquivo csv',
|
'unable to parse csv file': 'não foi possível analisar arquivo csv',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,11 +1,15 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'pt',
|
||||||
|
'!langname!': 'Português',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "field1=\'newvalue\'". Não pode actualizar ou eliminar os resultados de um JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "field1=\'newvalue\'". Não pode actualizar ou eliminar os resultados de um JOIN',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s linhas eliminadas',
|
'%s %%{row} deleted': '%s linhas eliminadas',
|
||||||
'%s rows updated': '%s linhas actualizadas',
|
'%s %%{row} updated': '%s linhas actualizadas',
|
||||||
|
'%s selected': '%s seleccionado(s)',
|
||||||
'About': 'About',
|
'About': 'About',
|
||||||
|
'Administrative interface': 'Painel administrativo',
|
||||||
'Author Reference Auth User': 'Author Reference Auth User',
|
'Author Reference Auth User': 'Author Reference Auth User',
|
||||||
'Author Reference Auth User.username': 'Author Reference Auth User.username',
|
'Author Reference Auth User.username': 'Author Reference Auth User.username',
|
||||||
'Available databases and tables': 'bases de dados e tabelas disponíveis',
|
'Available databases and tables': 'bases de dados e tabelas disponíveis',
|
||||||
@@ -47,6 +51,7 @@
|
|||||||
'New Record': 'Novo Registo',
|
'New Record': 'Novo Registo',
|
||||||
'No Data': 'No Data',
|
'No Data': 'No Data',
|
||||||
'No databases in this application': 'Não há bases de dados nesta aplicação',
|
'No databases in this application': 'Não há bases de dados nesta aplicação',
|
||||||
|
'Online examples': 'Exemplos online',
|
||||||
'Password': 'Password',
|
'Password': 'Password',
|
||||||
'Post Create': 'Post Create',
|
'Post Create': 'Post Create',
|
||||||
'Post Select': 'Post Select',
|
'Post Select': 'Post Select',
|
||||||
@@ -58,6 +63,7 @@
|
|||||||
'Stylesheet': 'Folha de estilo',
|
'Stylesheet': 'Folha de estilo',
|
||||||
'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
|
'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'A "query" é uma condição do tipo "db.table1.field1==\'value\'". Algo como "db.table1.field1==db.table2.field2" resultaria num 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.': 'A "query" é uma condição do tipo "db.table1.field1==\'value\'". Algo como "db.table1.field1==db.table2.field2" resultaria num SQL JOIN.',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
'Title': 'Title',
|
'Title': 'Title',
|
||||||
'Update:': 'Actualização:',
|
'Update:': 'Actualização:',
|
||||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Utilize (...)&(...) para AND, (...)|(...) para OR, e ~(...) para NOT para construir interrogações mais complexas.',
|
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Utilize (...)&(...) para AND, (...)|(...) para OR, e ~(...) para NOT para construir interrogações mais complexas.',
|
||||||
@@ -67,11 +73,11 @@
|
|||||||
'Welcome to Gluonization': 'Bem vindo ao Web2py',
|
'Welcome to Gluonization': 'Bem vindo ao Web2py',
|
||||||
'Welcome to web2py': 'Bem-vindo(a) ao web2py',
|
'Welcome to web2py': 'Bem-vindo(a) ao web2py',
|
||||||
'When': 'When',
|
'When': 'When',
|
||||||
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
|
'You visited the url %s': 'You visited the url %s',
|
||||||
'appadmin is disabled because insecure channel': 'appadmin está desactivada pois o canal é inseguro',
|
'appadmin is disabled because insecure channel': 'appadmin está desactivada pois o canal é inseguro',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'change password': 'alterar palavra-chave',
|
'change password': 'alterar palavra-chave',
|
||||||
'Online examples': 'Exemplos online',
|
|
||||||
'Administrative interface': 'Painel administrativo',
|
|
||||||
'create new category': 'create new category',
|
'create new category': 'create new category',
|
||||||
'create new comment': 'create new comment',
|
'create new comment': 'create new comment',
|
||||||
'create new post': 'create new post',
|
'create new post': 'create new post',
|
||||||
@@ -106,7 +112,6 @@
|
|||||||
'select category': 'select category',
|
'select category': 'select category',
|
||||||
'select comment': 'select comment',
|
'select comment': 'select comment',
|
||||||
'select post': 'select post',
|
'select post': 'select post',
|
||||||
'selected': 'seleccionado(s)',
|
|
||||||
'show category': 'show category',
|
'show category': 'show category',
|
||||||
'show comment': 'show comment',
|
'show comment': 'show comment',
|
||||||
'show post': 'show post',
|
'show post': 'show post',
|
||||||
@@ -114,4 +119,3 @@
|
|||||||
'table': 'tabela',
|
'table': 'tabela',
|
||||||
'unable to parse csv file': 'não foi possível carregar ficheiro csv',
|
'unable to parse csv file': 'não foi possível carregar ficheiro csv',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
'!=': '!=',
|
'!=': '!=',
|
||||||
|
'!langcode!': 'ro',
|
||||||
|
'!langname!': 'Română',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" (actualizează) este o expresie opțională precum "câmp1=\'valoare_nouă\'". Nu puteți actualiza sau șterge rezultatele unui JOIN',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" (actualizează) este o expresie opțională precum "câmp1=\'valoare_nouă\'". Nu puteți actualiza sau șterge rezultatele unui JOIN',
|
||||||
'%(nrows)s records found': '%(nrows)s înregistrări găsite',
|
'%(nrows)s records found': '%(nrows)s înregistrări găsite',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s linii șterse',
|
'%s %%{row} deleted': '%s linii șterse',
|
||||||
'%s rows updated': '%s linii actualizate',
|
'%s %%{row} updated': '%s linii actualizate',
|
||||||
|
'%s selected': '%s selectat(e)',
|
||||||
'(something like "it-it")': '(ceva ce seamănă cu "it-it")',
|
'(something like "it-it")': '(ceva ce seamănă cu "it-it")',
|
||||||
'<': '<',
|
'<': '<',
|
||||||
'<=': '<=',
|
'<=': '<=',
|
||||||
@@ -182,7 +185,7 @@
|
|||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Interogarea (query)" este o condiție de tipul "db.tabel1.câmp1==\'valoare\'". Ceva de genul "db.tabel1.câmp1==db.tabel2.câmp2" generează un JOIN SQL.',
|
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Interogarea (query)" este o condiție de tipul "db.tabel1.câmp1==\'valoare\'". Ceva de genul "db.tabel1.câmp1==db.tabel2.câmp2" generează un JOIN SQL.',
|
||||||
'The Core': 'Nucleul',
|
'The Core': 'Nucleul',
|
||||||
'The Views': 'Vederile',
|
'The Views': 'Vederile',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'Fișierul produce un dicționar care a fost prelucrat de vederea',
|
'The output of the file is a dictionary that was rendered by the view %s': 'Fișierul produce un dicționar care a fost prelucrat de vederea %s',
|
||||||
'There are no controllers': 'Nu există controlori',
|
'There are no controllers': 'Nu există controlori',
|
||||||
'There are no models': 'Nu există modele',
|
'There are no models': 'Nu există modele',
|
||||||
'There are no modules': 'Nu există module',
|
'There are no modules': 'Nu există module',
|
||||||
@@ -217,11 +220,11 @@
|
|||||||
'Welcome %s': 'Bine ați venit %s',
|
'Welcome %s': 'Bine ați venit %s',
|
||||||
'Welcome to web2py': 'Bun venit la web2py',
|
'Welcome to web2py': 'Bun venit la web2py',
|
||||||
'Welcome to web2py!': 'Bun venit la web2py!',
|
'Welcome to web2py!': 'Bun venit la web2py!',
|
||||||
'Which called the function': 'Care a apelat funcția',
|
'Which called the function %s located in the file %s': 'Care a apelat funcția %s prezentă în fișierul %s',
|
||||||
'YES': 'DA',
|
'YES': 'DA',
|
||||||
'You are successfully running web2py': 'Rulați cu succes web2py',
|
'You are successfully running web2py': 'Rulați cu succes web2py',
|
||||||
'You can modify this application and adapt it to your needs': 'Puteți modifica și adapta aplicația nevoilor dvs.',
|
'You can modify this application and adapt it to your needs': 'Puteți modifica și adapta aplicația nevoilor dvs.',
|
||||||
'You visited the url': 'Ați vizitat adresa',
|
'You visited the url %s': 'Ați vizitat adresa %s',
|
||||||
'about': 'despre',
|
'about': 'despre',
|
||||||
'additional code for your application': 'cod suplimentar pentru aplicația dvs.',
|
'additional code for your application': 'cod suplimentar pentru aplicația dvs.',
|
||||||
'admin disabled because no admin password': 'administrare dezactivată deoarece parola de administrator nu a fost furnizată',
|
'admin disabled because no admin password': 'administrare dezactivată deoarece parola de administrator nu a fost furnizată',
|
||||||
@@ -293,7 +296,6 @@
|
|||||||
'languages': 'limbi',
|
'languages': 'limbi',
|
||||||
'languages updated': 'limbi actualizate',
|
'languages updated': 'limbi actualizate',
|
||||||
'loading...': 'încarc...',
|
'loading...': 'încarc...',
|
||||||
'located in the file': 'prezentă în fișierul',
|
|
||||||
'login': 'autentificare',
|
'login': 'autentificare',
|
||||||
'logout': 'ieșire',
|
'logout': 'ieșire',
|
||||||
'merge': 'unește',
|
'merge': 'unește',
|
||||||
@@ -316,7 +318,6 @@
|
|||||||
'restore': 'restaurare',
|
'restore': 'restaurare',
|
||||||
'revert': 'revenire',
|
'revert': 'revenire',
|
||||||
'save': 'salvare',
|
'save': 'salvare',
|
||||||
'selected': 'selectat(e)',
|
|
||||||
'session expired': 'sesiune expirată',
|
'session expired': 'sesiune expirată',
|
||||||
'shell': 'line de commandă',
|
'shell': 'line de commandă',
|
||||||
'site': 'site',
|
'site': 'site',
|
||||||
|
|||||||
@@ -1,61 +1,146 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'ru',
|
||||||
|
'!langname!': 'Русский',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Изменить" - необязательное выражение вида "field1=\'новое значение\'". Результаты операции JOIN нельзя изменить или удалить.',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Изменить" - необязательное выражение вида "field1=\'новое значение\'". Результаты операции JOIN нельзя изменить или удалить.',
|
||||||
|
'%s %%{row} deleted': '%%{!удалена[0]} %s %%{строка[0]}',
|
||||||
|
'%s %%{row} updated': '%%{!изменена[0]} %s %%{строка[0]}',
|
||||||
|
'%s selected': '%%{!выбрана[0]} %s %%{запись[0]}',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s строк удалено',
|
'About': 'About',
|
||||||
'%s rows updated': '%s строк изменено',
|
'Access Control': 'Access Control',
|
||||||
|
'Administrative Interface': 'Administrative Interface',
|
||||||
|
'Administrative interface': 'административный интерфейс',
|
||||||
|
'Ajax Recipes': 'Ajax Recipes',
|
||||||
|
'Are you sure you want to delete this object?': 'Вы уверены, что хотите удалить этот объект?',
|
||||||
'Available databases and tables': 'Базы данных и таблицы',
|
'Available databases and tables': 'Базы данных и таблицы',
|
||||||
|
'Buy this book': 'Buy this book',
|
||||||
|
'cache': 'cache',
|
||||||
'Cannot be empty': 'Пустое значение недопустимо',
|
'Cannot be empty': 'Пустое значение недопустимо',
|
||||||
'Change Password': 'Смените пароль',
|
'Change Password': 'Смените пароль',
|
||||||
'Check to delete': 'Удалить',
|
'Check to delete': 'Удалить',
|
||||||
'Check to delete:': 'Удалить:',
|
'Check to delete:': 'Удалить:',
|
||||||
'Client IP': 'Client IP',
|
'Client IP': 'Client IP',
|
||||||
|
'Community': 'Community',
|
||||||
|
'Components and Plugins': 'Components and Plugins',
|
||||||
|
'Controller': 'Controller',
|
||||||
|
'Copyright': 'Copyright',
|
||||||
'Current request': 'Текущий запрос',
|
'Current request': 'Текущий запрос',
|
||||||
'Current response': 'Текущий ответ',
|
'Current response': 'Текущий ответ',
|
||||||
'Current session': 'Текущая сессия',
|
'Current session': 'Текущая сессия',
|
||||||
|
'customize me!': 'настройте внешний вид!',
|
||||||
|
'data uploaded': 'данные загружены',
|
||||||
|
'Database': 'Database',
|
||||||
|
'database': 'база данных',
|
||||||
|
'database %s select': 'выбор базы данных %s',
|
||||||
|
'db': 'БД',
|
||||||
|
'DB Model': 'DB Model',
|
||||||
'Delete:': 'Удалить:',
|
'Delete:': 'Удалить:',
|
||||||
|
'Demo': 'Demo',
|
||||||
|
'Deployment Recipes': 'Deployment Recipes',
|
||||||
'Description': 'Описание',
|
'Description': 'Описание',
|
||||||
|
'design': 'дизайн',
|
||||||
|
'Documentation': 'Documentation',
|
||||||
|
"Don't know what to do?": "Don't know what to do?",
|
||||||
|
'done!': 'готово!',
|
||||||
|
'Download': 'Download',
|
||||||
'E-mail': 'E-mail',
|
'E-mail': 'E-mail',
|
||||||
'Edit Profile': 'Редактировать профиль',
|
|
||||||
'Edit current record': 'Редактировать текущую запись',
|
'Edit current record': 'Редактировать текущую запись',
|
||||||
|
'Edit Profile': 'Редактировать профиль',
|
||||||
|
'Email and SMS': 'Email and SMS',
|
||||||
|
'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
|
||||||
|
'Errors': 'Errors',
|
||||||
|
'export as csv file': 'экспорт в csv-файл',
|
||||||
|
'FAQ': 'FAQ',
|
||||||
'First name': 'Имя',
|
'First name': 'Имя',
|
||||||
|
'Forms and Validators': 'Forms and Validators',
|
||||||
|
'Free Applications': 'Free Applications',
|
||||||
'Group ID': 'Group ID',
|
'Group ID': 'Group ID',
|
||||||
|
'Groups': 'Groups',
|
||||||
'Hello World': 'Заработало!',
|
'Hello World': 'Заработало!',
|
||||||
|
'Home': 'Home',
|
||||||
|
'How did you get here?': 'How did you get here?',
|
||||||
|
'import': 'import',
|
||||||
'Import/Export': 'Импорт/экспорт',
|
'Import/Export': 'Импорт/экспорт',
|
||||||
|
'insert new': 'добавить',
|
||||||
|
'insert new %s': 'добавить %s',
|
||||||
'Internal State': 'Внутренне состояние',
|
'Internal State': 'Внутренне состояние',
|
||||||
'Invalid Query': 'Неверный запрос',
|
'Introduction': 'Introduction',
|
||||||
'Invalid email': 'Неверный email',
|
'Invalid email': 'Неверный email',
|
||||||
'Invalid login': 'Неверный логин',
|
'Invalid login': 'Неверный логин',
|
||||||
'Invalid password': 'Неверный пароль',
|
'Invalid password': 'Неверный пароль',
|
||||||
|
'Invalid Query': 'Неверный запрос',
|
||||||
|
'invalid request': 'неверный запрос',
|
||||||
'Last name': 'Фамилия',
|
'Last name': 'Фамилия',
|
||||||
|
'Layout': 'Layout',
|
||||||
|
'Layout Plugins': 'Layout Plugins',
|
||||||
|
'Layouts': 'Layouts',
|
||||||
|
'Live Chat': 'Live Chat',
|
||||||
'Logged in': 'Вход выполнен',
|
'Logged in': 'Вход выполнен',
|
||||||
'Logged out': 'Выход выполнен',
|
'Logged out': 'Выход выполнен',
|
||||||
|
'login': 'вход',
|
||||||
'Login': 'Вход',
|
'Login': 'Вход',
|
||||||
|
'logout': 'выход',
|
||||||
'Logout': 'Выход',
|
'Logout': 'Выход',
|
||||||
'Lost Password': 'Забыли пароль?',
|
'Lost Password': 'Забыли пароль?',
|
||||||
|
'Lost password?': 'Lost password?',
|
||||||
|
'Menu Model': 'Menu Model',
|
||||||
|
'My Sites': 'My Sites',
|
||||||
'Name': 'Name',
|
'Name': 'Name',
|
||||||
'New Record': 'Новая запись',
|
|
||||||
'New password': 'Новый пароль',
|
'New password': 'Новый пароль',
|
||||||
|
'New Record': 'Новая запись',
|
||||||
|
'new record inserted': 'новая запись добавлена',
|
||||||
|
'next 100 rows': 'следующие 100 строк',
|
||||||
'No databases in this application': 'В приложении нет баз данных',
|
'No databases in this application': 'В приложении нет баз данных',
|
||||||
|
'Object or table name': 'Object or table name',
|
||||||
'Old password': 'Старый пароль',
|
'Old password': 'Старый пароль',
|
||||||
|
'Online examples': 'примеры он-лайн',
|
||||||
|
'or import from csv file': 'или импорт из csv-файла',
|
||||||
'Origin': 'Происхождение',
|
'Origin': 'Происхождение',
|
||||||
|
'Other Plugins': 'Other Plugins',
|
||||||
|
'Other Recipes': 'Other Recipes',
|
||||||
|
'Overview': 'Overview',
|
||||||
|
'password': 'пароль',
|
||||||
'Password': 'Пароль',
|
'Password': 'Пароль',
|
||||||
"Password fields don't match": 'Пароли не совпадают',
|
"Password fields don't match": 'Пароли не совпадают',
|
||||||
|
'Plugins': 'Plugins',
|
||||||
|
'Powered by': 'Powered by',
|
||||||
|
'Preface': 'Preface',
|
||||||
|
'previous 100 rows': 'предыдущие 100 строк',
|
||||||
|
'profile': 'профиль',
|
||||||
|
'Python': 'Python',
|
||||||
'Query:': 'Запрос:',
|
'Query:': 'Запрос:',
|
||||||
|
'Quick Examples': 'Quick Examples',
|
||||||
|
'Recipes': 'Recipes',
|
||||||
|
'record does not exist': 'запись не найдена',
|
||||||
|
'record id': 'id записи',
|
||||||
'Record ID': 'ID записи',
|
'Record ID': 'ID записи',
|
||||||
'Register': 'Зарегистрироваться',
|
'Register': 'Зарегистрироваться',
|
||||||
|
'Registration identifier': 'Registration identifier',
|
||||||
'Registration key': 'Ключ регистрации',
|
'Registration key': 'Ключ регистрации',
|
||||||
'Remember me (for 30 days)': 'Запомнить меня (на 30 дней)',
|
'Remember me (for 30 days)': 'Запомнить меня (на 30 дней)',
|
||||||
'Reset Password key': 'Сбросить ключ пароля',
|
'Reset Password key': 'Сбросить ключ пароля',
|
||||||
'Role': 'Роль',
|
'Role': 'Роль',
|
||||||
'Rows in table': 'Строк в таблице',
|
'Rows in table': 'Строк в таблице',
|
||||||
'Rows selected': 'Выделено строк',
|
'Rows selected': 'Выделено строк',
|
||||||
|
'Semantic': 'Semantic',
|
||||||
|
'Services': 'Services',
|
||||||
|
'state': 'состояние',
|
||||||
|
'Stylesheet': 'Stylesheet',
|
||||||
'Submit': 'Отправить',
|
'Submit': 'Отправить',
|
||||||
|
'Support': 'Support',
|
||||||
'Sure you want to delete this object?': 'Подтвердите удаление объекта',
|
'Sure you want to delete this object?': 'Подтвердите удаление объекта',
|
||||||
|
'table': 'таблица',
|
||||||
'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.': '"Запрос" - это условие вида "db.table1.field1==\'значение\'". Выражение вида "db.table1.field1==db.table2.field2" формирует 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.': '"Запрос" - это условие вида "db.table1.field1==\'значение\'". Выражение вида "db.table1.field1==db.table2.field2" формирует SQL JOIN.',
|
||||||
|
'The Core': 'The Core',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
|
'The Views': 'The Views',
|
||||||
|
'This App': 'This App',
|
||||||
'Timestamp': 'Отметка времени',
|
'Timestamp': 'Отметка времени',
|
||||||
|
'Twitter': 'Twitter',
|
||||||
|
'unable to parse csv file': 'нечитаемый csv-файл',
|
||||||
'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)s Logged-in': 'Пользователь %(id)s вошёл',
|
'User %(id)s Logged-in': 'Пользователь %(id)s вошёл',
|
||||||
@@ -65,33 +150,13 @@
|
|||||||
'User %(id)s Registered': 'Пользователь %(id)s зарегистрировался',
|
'User %(id)s Registered': 'Пользователь %(id)s зарегистрировался',
|
||||||
'User ID': 'ID пользователя',
|
'User ID': 'ID пользователя',
|
||||||
'Verify Password': 'Повторите пароль',
|
'Verify Password': 'Повторите пароль',
|
||||||
|
'Videos': 'Videos',
|
||||||
|
'View': 'View',
|
||||||
|
'Welcome': 'Welcome',
|
||||||
'Welcome to web2py': 'Добро пожаловать в web2py',
|
'Welcome to web2py': 'Добро пожаловать в web2py',
|
||||||
'Online examples': 'примеры он-лайн',
|
'Welcome to web2py!': 'Welcome to web2py!',
|
||||||
'Administrative interface': 'административный интерфейс',
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
'customize me!': 'настройте внешний вид!',
|
'You are successfully running web2py': 'You are successfully running web2py',
|
||||||
'data uploaded': 'данные загружены',
|
'You can modify this application and adapt it to your needs': 'You can modify this application and adapt it to your needs',
|
||||||
'database': 'база данных',
|
'You visited the url %s': 'You visited the url %s',
|
||||||
'database %s select': 'выбор базы данных %s',
|
|
||||||
'db': 'БД',
|
|
||||||
'design': 'дизайн',
|
|
||||||
'done!': 'готово!',
|
|
||||||
'export as csv file': 'экспорт в csv-файл',
|
|
||||||
'insert new': 'добавить',
|
|
||||||
'insert new %s': 'добавить %s',
|
|
||||||
'invalid request': 'неверный запрос',
|
|
||||||
'login': 'вход',
|
|
||||||
'logout': 'выход',
|
|
||||||
'new record inserted': 'новая запись добавлена',
|
|
||||||
'next 100 rows': 'следующие 100 строк',
|
|
||||||
'or import from csv file': 'или импорт из csv-файла',
|
|
||||||
'password': 'пароль',
|
|
||||||
'previous 100 rows': 'предыдущие 100 строк',
|
|
||||||
'profile': 'профиль',
|
|
||||||
'record does not exist': 'запись не найдена',
|
|
||||||
'record id': 'id записи',
|
|
||||||
'selected': 'выбрано',
|
|
||||||
'state': 'состояние',
|
|
||||||
'table': 'таблица',
|
|
||||||
'unable to parse csv file': 'нечитаемый csv-файл',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'sk',
|
||||||
|
'!langname!': 'Slovenský',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" je voliteľný výraz ako "field1=\'newvalue\'". Nemôžete upravovať alebo zmazať výsledky JOINu',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" je voliteľný výraz ako "field1=\'newvalue\'". Nemôžete upravovať alebo zmazať výsledky JOINu',
|
||||||
'%Y-%m-%d': '%d.%m.%Y',
|
'%Y-%m-%d': '%d.%m.%Y',
|
||||||
'%Y-%m-%d %H:%M:%S': '%d.%m.%Y %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%d.%m.%Y %H:%M:%S',
|
||||||
'%s rows deleted': '%s zmazaných záznamov',
|
'%s %%{row} deleted': '%s zmazaných záznamov',
|
||||||
'%s rows updated': '%s upravených záznamov',
|
'%s %%{row} updated': '%s upravených záznamov',
|
||||||
|
'%s selected': '%s označených',
|
||||||
|
'Administrative interface': 'pre administrátorské rozhranie kliknite sem',
|
||||||
'Available databases and tables': 'Dostupné databázy a tabuľky',
|
'Available databases and tables': 'Dostupné databázy a tabuľky',
|
||||||
'Cannot be empty': 'Nemôže byť prázdne',
|
'Cannot be empty': 'Nemôže byť prázdne',
|
||||||
'Check to delete': 'Označiť na zmazanie',
|
'Check to delete': 'Označiť na zmazanie',
|
||||||
@@ -17,6 +21,7 @@
|
|||||||
'Database': 'Databáza',
|
'Database': 'Databáza',
|
||||||
'Delete:': 'Zmazať:',
|
'Delete:': 'Zmazať:',
|
||||||
'Description': 'Popis',
|
'Description': 'Popis',
|
||||||
|
'Documentation': 'Dokumentácia',
|
||||||
'Edit': 'Upraviť',
|
'Edit': 'Upraviť',
|
||||||
'Edit Profile': 'Upraviť profil',
|
'Edit Profile': 'Upraviť profil',
|
||||||
'Edit current record': 'Upraviť aktuálny záznam',
|
'Edit current record': 'Upraviť aktuálny záznam',
|
||||||
@@ -26,8 +31,8 @@
|
|||||||
'Import/Export': 'Import/Export',
|
'Import/Export': 'Import/Export',
|
||||||
'Index': 'Index',
|
'Index': 'Index',
|
||||||
'Internal State': 'Vnútorný stav',
|
'Internal State': 'Vnútorný stav',
|
||||||
'Invalid email': 'Neplatný email',
|
|
||||||
'Invalid Query': 'Neplatná otázka',
|
'Invalid Query': 'Neplatná otázka',
|
||||||
|
'Invalid email': 'Neplatný email',
|
||||||
'Invalid password': 'Nesprávne heslo',
|
'Invalid password': 'Nesprávne heslo',
|
||||||
'Last name': 'Priezvisko',
|
'Last name': 'Priezvisko',
|
||||||
'Layout': 'Layout',
|
'Layout': 'Layout',
|
||||||
@@ -40,6 +45,7 @@
|
|||||||
'New password': 'Nové heslo',
|
'New password': 'Nové heslo',
|
||||||
'No databases in this application': 'V tejto aplikácii nie sú databázy',
|
'No databases in this application': 'V tejto aplikácii nie sú databázy',
|
||||||
'Old password': 'Staré heslo',
|
'Old password': 'Staré heslo',
|
||||||
|
'Online examples': 'pre online príklady kliknite sem',
|
||||||
'Origin': 'Pôvod',
|
'Origin': 'Pôvod',
|
||||||
'Password': 'Heslo',
|
'Password': 'Heslo',
|
||||||
'Powered by': 'Powered by',
|
'Powered by': 'Powered by',
|
||||||
@@ -52,12 +58,12 @@
|
|||||||
'Role': 'Rola',
|
'Role': 'Rola',
|
||||||
'Rows in table': 'riadkov v tabuľke',
|
'Rows in table': 'riadkov v tabuľke',
|
||||||
'Rows selected': 'označených riadkov',
|
'Rows selected': 'označených riadkov',
|
||||||
'Submit': 'Odoslať',
|
|
||||||
'Stylesheet': 'Stylesheet',
|
'Stylesheet': 'Stylesheet',
|
||||||
|
'Submit': 'Odoslať',
|
||||||
'Sure you want to delete this object?': 'Ste si istí, že chcete zmazať tento objekt?',
|
'Sure you want to delete this object?': 'Ste si istí, že chcete zmazať tento objekt?',
|
||||||
'Table name': 'Názov tabuľky',
|
'Table name': 'Názov tabuľky',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"query" je podmienka ako "db.table1.field1==\'value\'". Niečo ako "db.table1.field1==db.table2.field2" má za výsledok 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.': '"query" je podmienka ako "db.table1.field1==\'value\'". Niečo ako "db.table1.field1==db.table2.field2" má za výsledok SQL JOIN.',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'Výstup zo súboru je slovník, ktorý bol zobrazený vo view',
|
'The output of the file is a dictionary that was rendered by the view %s': 'Výstup zo súboru je slovník, ktorý bol zobrazený vo view %s',
|
||||||
'This is a copy of the scaffolding application': 'Toto je kópia skeletu aplikácie',
|
'This is a copy of the scaffolding application': 'Toto je kópia skeletu aplikácie',
|
||||||
'Timestamp': 'Časová pečiatka',
|
'Timestamp': 'Časová pečiatka',
|
||||||
'Update:': 'Upraviť:',
|
'Update:': 'Upraviť:',
|
||||||
@@ -71,27 +77,23 @@
|
|||||||
'Verify Password': 'Zopakujte heslo',
|
'Verify Password': 'Zopakujte heslo',
|
||||||
'View': 'Zobraziť',
|
'View': 'Zobraziť',
|
||||||
'Welcome to web2py': 'Vitajte vo web2py',
|
'Welcome to web2py': 'Vitajte vo web2py',
|
||||||
'Which called the function': 'Ktorý zavolal funkciu',
|
'Which called the function %s located in the file %s': 'Ktorý zavolal funkciu %s nachádzajúci sa v súbore %s',
|
||||||
'You are successfully running web2py': 'Úspešne ste spustili web2py',
|
'You are successfully running web2py': 'Úspešne ste spustili web2py',
|
||||||
'You can modify this application and adapt it to your needs': 'Môžete upraviť túto aplikáciu a prispôsobiť ju svojim potrebám',
|
'You can modify this application and adapt it to your needs': 'Môžete upraviť túto aplikáciu a prispôsobiť ju svojim potrebám',
|
||||||
'You visited the url': 'Navštívili ste URL',
|
'You visited the url %s': 'Navštívili ste URL %s',
|
||||||
'appadmin is disabled because insecure channel': 'appadmin je zakázaný bez zabezpečeného spojenia',
|
'appadmin is disabled because insecure channel': 'appadmin je zakázaný bez zabezpečeného spojenia',
|
||||||
'cache': 'cache',
|
'cache': 'cache',
|
||||||
'Online examples': 'pre online príklady kliknite sem',
|
|
||||||
'Administrative interface': 'pre administrátorské rozhranie kliknite sem',
|
|
||||||
'customize me!': 'prispôsob ma!',
|
'customize me!': 'prispôsob ma!',
|
||||||
'data uploaded': 'údaje naplnené',
|
'data uploaded': 'údaje naplnené',
|
||||||
'database': 'databáza',
|
'database': 'databáza',
|
||||||
'database %s select': 'databáza %s výber',
|
'database %s select': 'databáza %s výber',
|
||||||
'db': 'db',
|
'db': 'db',
|
||||||
'design': 'návrh',
|
'design': 'návrh',
|
||||||
'Documentation': 'Dokumentácia',
|
|
||||||
'done!': 'hotovo!',
|
'done!': 'hotovo!',
|
||||||
'export as csv file': 'exportovať do csv súboru',
|
'export as csv file': 'exportovať do csv súboru',
|
||||||
'insert new': 'vložiť nový záznam ',
|
'insert new': 'vložiť nový záznam ',
|
||||||
'insert new %s': 'vložiť nový záznam %s',
|
'insert new %s': 'vložiť nový záznam %s',
|
||||||
'invalid request': 'Neplatná požiadavka',
|
'invalid request': 'Neplatná požiadavka',
|
||||||
'located in the file': 'nachádzajúci sa v súbore ',
|
|
||||||
'login': 'prihlásiť',
|
'login': 'prihlásiť',
|
||||||
'logout': 'odhlásiť',
|
'logout': 'odhlásiť',
|
||||||
'lost password?': 'stratené heslo?',
|
'lost password?': 'stratené heslo?',
|
||||||
@@ -104,9 +106,7 @@
|
|||||||
'record does not exist': 'záznam neexistuje',
|
'record does not exist': 'záznam neexistuje',
|
||||||
'record id': 'id záznamu',
|
'record id': 'id záznamu',
|
||||||
'register': 'registrovať',
|
'register': 'registrovať',
|
||||||
'selected': 'označených',
|
|
||||||
'state': 'stav',
|
'state': 'stav',
|
||||||
'table': 'tabuľka',
|
'table': 'tabuľka',
|
||||||
'unable to parse csv file': 'nedá sa načítať csv súbor',
|
'unable to parse csv file': 'nedá sa načítať csv súbor',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,22 +1,39 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'uk',
|
||||||
|
'!langname!': 'Українська',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Оновити" це додатковий вираз, такий, як "field1=\'нове_значення\'". Ви не можете змінювати або вилучати дані об\'єднаних таблиць.',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Оновити" це додатковий вираз, такий, як "field1=\'нове_значення\'". Ви не можете змінювати або вилучати дані об\'єднаних таблиць.',
|
||||||
|
'%s %%{row} deleted': 'Вилучено %s %%{рядок}',
|
||||||
|
'%s %%{row} updated': 'Змінено %s %%{рядок}',
|
||||||
|
'%s selected': 'Вибрано %s %%{запис}',
|
||||||
'%Y-%m-%d': '%Y/%m/%d',
|
'%Y-%m-%d': '%Y/%m/%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y/%m/%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y/%m/%d %H:%M:%S',
|
||||||
'%s rows deleted': '%s рядків вилучено',
|
'@markmin\x01(**%.0d MB**)': '(**``%.0d``:red МБ**)',
|
||||||
'%s rows updated': '%s рядків оновлено',
|
'@markmin\x01**%(items)s** %%{item(items)}, **%(bytes)s** %%{byte(bytes)}': '**%(items)s** %%{елемент(items)}, **%(bytes)s** %%{байт(bytes)}',
|
||||||
|
'@markmin\x01``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '**нема в наявності** (потребує Пітонівської бібліотеки [[guppy {посилання відкриється у новому вікні} http://pypi.python.org/pypi/guppy/ popup]])',
|
||||||
|
'@markmin\x01Cache contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': "Час життя об'єктів в КЕШІ сягає **%(hours)02d** %%{годину(hours)} **%(min)02d** %%{хвилину(min)} та **%(sec)02d** %%{секунду(sec)}.",
|
||||||
|
'@markmin\x01DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': "Час життя об'єктів в ДИСКОВОМУ КЕШІ сягає **%(hours)02d** %%{годину(hours)} **%(min)02d** %%{хвилину(min)} та **%(sec)02d** %%{секунду(sec)}.",
|
||||||
|
'@markmin\x01Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})': 'Оцінка поцілювання: **%(ratio)s%%** (**%(hits)s** %%{поцілювання(hits)} та **%(misses)s** %%{схибнення(misses)})',
|
||||||
|
'@markmin\x01Number of entries: **%s**': 'Кількість входжень: ``**%s**``:red',
|
||||||
|
'@markmin\x01RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': "Час життя об'єктів в ОЗП-КЕШІ сягає **%(hours)02d** %%{годину(hours)} **%(min)02d** %%{хвилину(min)} та **%(sec)02d** %%{секунду(sec)}.",
|
||||||
'About': 'Про додаток',
|
'About': 'Про додаток',
|
||||||
'Access Control': 'Контроль доступу',
|
'Access Control': 'Контроль доступу',
|
||||||
'Administrative Interface': 'Адміністративний інтерфейс',
|
'Administrative Interface': 'Адміністративний інтерфейс',
|
||||||
'Ajax Recipes': 'Рецепти для Ajax',
|
'Ajax Recipes': 'Рецепти для Ajax',
|
||||||
|
'appadmin is disabled because insecure channel': 'використовується незахищенний канал (HTTP). Appadmin вимкнено',
|
||||||
'Are you sure you want to delete this object?': "Ви впевнені, що хочете вилучити цей об'єкт?",
|
'Are you sure you want to delete this object?': "Ви впевнені, що хочете вилучити цей об'єкт?",
|
||||||
'Available databases and tables': 'Доступні бази даних та таблиці',
|
'Available databases and tables': 'Доступні бази даних та таблиці',
|
||||||
'Buy this book': 'Купити книжку',
|
'Buy this book': 'Купити книжку',
|
||||||
|
'cache': 'кеш',
|
||||||
|
'Cache': 'Кеш',
|
||||||
'Cache Keys': 'Ключі кешу',
|
'Cache Keys': 'Ключі кешу',
|
||||||
'Cannot be empty': 'Порожнє значення неприпустиме',
|
'Cannot be empty': 'Порожнє значення неприпустиме',
|
||||||
'Change password': 'Змінити пароль',
|
'Change password': 'Змінити пароль',
|
||||||
'Check to delete': 'Позначити для вилучення',
|
'Check to delete': 'Позначити для вилучення',
|
||||||
'Check to delete:': 'Позначте для вилучення:',
|
'Check to delete:': 'Позначте для вилучення:',
|
||||||
|
'Clear CACHE?': 'Очистити ВЕСЬ кеш?',
|
||||||
|
'Clear DISK': 'Очистити ДИСКОВИЙ кеш',
|
||||||
|
'Clear RAM': "Очистити кеш В ПАМ'ЯТІ",
|
||||||
'Client IP': 'IP клієнта',
|
'Client IP': 'IP клієнта',
|
||||||
'Community': 'Спільнота',
|
'Community': 'Спільнота',
|
||||||
'Components and Plugins': 'Компоненти та втулки',
|
'Components and Plugins': 'Компоненти та втулки',
|
||||||
@@ -25,23 +42,36 @@
|
|||||||
'Current request': 'Поточний запит (current request)',
|
'Current request': 'Поточний запит (current request)',
|
||||||
'Current response': 'Поточна відповідь (current response)',
|
'Current response': 'Поточна відповідь (current response)',
|
||||||
'Current session': 'Поточна сесія (current session)',
|
'Current session': 'Поточна сесія (current session)',
|
||||||
'DB Model': 'Модель БД',
|
'customize me!': 'причепуріть мене!',
|
||||||
|
'data uploaded': 'дані завантажено',
|
||||||
|
'database': 'база даних',
|
||||||
'Database': 'База даних',
|
'Database': 'База даних',
|
||||||
|
'database %s select': 'Вибірка з бази даних %s',
|
||||||
|
'db': 'база даних',
|
||||||
|
'DB Model': 'Модель БД',
|
||||||
'Delete:': 'Вилучити:',
|
'Delete:': 'Вилучити:',
|
||||||
'Demo': 'Демо',
|
'Demo': 'Демо',
|
||||||
'Deployment Recipes': 'Способи розгортання',
|
'Deployment Recipes': 'Способи розгортання',
|
||||||
'Description': 'Опис',
|
'Description': 'Опис',
|
||||||
|
'design': 'налаштування',
|
||||||
|
'DISK': 'ДИСК',
|
||||||
'Disk Cache Keys': 'Ключі дискового кешу',
|
'Disk Cache Keys': 'Ключі дискового кешу',
|
||||||
|
'Disk Cleared': 'Дисковий кеш очищено',
|
||||||
'Documentation': 'Документація',
|
'Documentation': 'Документація',
|
||||||
"Don't know what to do?": 'Не знаєте що робити далі?',
|
"Don't know what to do?": 'Не знаєте що робити далі?',
|
||||||
|
'done!': 'зроблено!',
|
||||||
'Download': 'Завантажити',
|
'Download': 'Завантажити',
|
||||||
'E-mail': 'Ел.пошта',
|
'E-mail': 'Ел.пошта',
|
||||||
'Edit Page': 'Редагувати сторінку',
|
'edit': 'редагувати',
|
||||||
'Edit current record': 'Редагувати поточний запис',
|
'Edit current record': 'Редагувати поточний запис',
|
||||||
|
'Edit Page': 'Редагувати сторінку',
|
||||||
'Email and SMS': 'Ел.пошта та SMS',
|
'Email and SMS': 'Ел.пошта та SMS',
|
||||||
|
'enter a value': 'введіть значення',
|
||||||
|
'enter an integer between %(min)g and %(max)g': 'введіть ціле число між %(min)g та %(max)g',
|
||||||
'Error!': 'Помилка!',
|
'Error!': 'Помилка!',
|
||||||
'Errors': 'Помилки',
|
'Errors': 'Помилки',
|
||||||
'Errors in form, please check it out.': 'У формі є помилка. Виправте її, будь-ласка.',
|
'Errors in form, please check it out.': 'У формі є помилка. Виправте її, будь-ласка.',
|
||||||
|
'export as csv file': 'експортувати як файл csv',
|
||||||
'FAQ': 'ЧаПи (FAQ)',
|
'FAQ': 'ЧаПи (FAQ)',
|
||||||
'First name': "Ім'я",
|
'First name': "Ім'я",
|
||||||
'Forms and Validators': 'Форми та коректність даних',
|
'Forms and Validators': 'Форми та коректність даних',
|
||||||
@@ -53,13 +83,18 @@
|
|||||||
'Hello World': 'Привіт, світ!',
|
'Hello World': 'Привіт, світ!',
|
||||||
'Home': 'Початок',
|
'Home': 'Початок',
|
||||||
'How did you get here?': 'Як цього було досягнуто?',
|
'How did you get here?': 'Як цього було досягнуто?',
|
||||||
|
'import': 'Імпортувати',
|
||||||
'Import/Export': 'Імпорт/Експорт',
|
'Import/Export': 'Імпорт/Експорт',
|
||||||
|
'insert new': 'Створити новий запис',
|
||||||
|
'insert new %s': 'створити новий запис %s',
|
||||||
'Internal State': 'Внутрішній стан',
|
'Internal State': 'Внутрішній стан',
|
||||||
'Introduction': 'Введення',
|
'Introduction': 'Введення',
|
||||||
'Invalid Query': 'Помилковий запит',
|
|
||||||
'Invalid email': 'Невірна адреса ел.пошти',
|
'Invalid email': 'Невірна адреса ел.пошти',
|
||||||
'Invalid login': "Невірне ім'я користувача",
|
'Invalid login': "Невірне ім'я користувача",
|
||||||
'Invalid password': 'Невірний пароль',
|
'Invalid password': 'Невірний пароль',
|
||||||
|
'Invalid Query': 'Помилковий запит',
|
||||||
|
'invalid request': 'хибний запит',
|
||||||
|
'Key': 'Ключ',
|
||||||
'Last name': 'Прізвище',
|
'Last name': 'Прізвище',
|
||||||
'Layout': 'Макет (Layout)',
|
'Layout': 'Макет (Layout)',
|
||||||
'Layout Plugins': 'Втулки макетів',
|
'Layout Plugins': 'Втулки макетів',
|
||||||
@@ -71,15 +106,19 @@
|
|||||||
'Logout': 'Вихід',
|
'Logout': 'Вихід',
|
||||||
'Lost Password': 'Забули пароль',
|
'Lost Password': 'Забули пароль',
|
||||||
'Lost password?': 'Забули пароль?',
|
'Lost password?': 'Забули пароль?',
|
||||||
|
'Manage Cache': 'Управління кешем',
|
||||||
'Menu Model': 'Модель меню',
|
'Menu Model': 'Модель меню',
|
||||||
'My Sites': 'Сайт (усі додатки)',
|
'My Sites': 'Сайт (усі додатки)',
|
||||||
'Name': "Ім'я",
|
'Name': "Ім'я",
|
||||||
'New Record': 'Новий запис',
|
|
||||||
'New password': 'Новий пароль',
|
'New password': 'Новий пароль',
|
||||||
|
'New Record': 'Новий запис',
|
||||||
|
'new record inserted': 'новий рядок додано',
|
||||||
|
'next 100 rows': 'наступні 100 рядків',
|
||||||
'No databases in this application': 'Даний додаток не використовує базу даних',
|
'No databases in this application': 'Даний додаток не використовує базу даних',
|
||||||
'Object or table name': "Об'єкт або назва таблиці",
|
'Object or table name': "Об'єкт або назва таблиці",
|
||||||
'Old password': 'Старий пароль',
|
'Old password': 'Старий пароль',
|
||||||
'Online examples': 'Зразковий демо-сайт',
|
'Online examples': 'Зразковий демо-сайт',
|
||||||
|
'or import from csv file': 'або імпортувати з csv-файлу',
|
||||||
'Origin': 'Походження',
|
'Origin': 'Походження',
|
||||||
'Other Plugins': 'Інші втулки',
|
'Other Plugins': 'Інші втулки',
|
||||||
'Other Recipes': 'Інші рецепти',
|
'Other Recipes': 'Інші рецепти',
|
||||||
@@ -89,17 +128,24 @@
|
|||||||
'Password': 'Пароль',
|
'Password': 'Пароль',
|
||||||
'Password changed': 'Пароль змінено',
|
'Password changed': 'Пароль змінено',
|
||||||
"Password fields don't match": 'Пароль не співпав',
|
"Password fields don't match": 'Пароль не співпав',
|
||||||
|
'please input your password again': 'Будь-ласка введіть пароль ще раз',
|
||||||
'Plugins': 'Втулки (Plugins)',
|
'Plugins': 'Втулки (Plugins)',
|
||||||
'Powered by': 'Працює на',
|
'Powered by': 'Працює на',
|
||||||
'Preface': 'Передмова',
|
'Preface': 'Передмова',
|
||||||
|
'previous 100 rows': 'попередні 100 рядків',
|
||||||
'Profile': 'Параметри',
|
'Profile': 'Параметри',
|
||||||
'Profile updated': 'Параметри змінено',
|
'Profile updated': 'Параметри змінено',
|
||||||
'Python': 'Мова Python',
|
'Python': 'Мова Python',
|
||||||
'Query:': 'Запит:',
|
'Query:': 'Запит:',
|
||||||
'Quick Examples': 'Швидкі приклади',
|
'Quick Examples': 'Швидкі приклади',
|
||||||
'RAM Cache Keys': "Ключі кешу в пам'яті",
|
'RAM': "ОПЕРАТИВНА ПАМ'ЯТЬ (ОЗП)",
|
||||||
|
'RAM Cache Keys': 'Ключі ОЗП-кешу',
|
||||||
|
'Ram Cleared': 'ОЗП-кеш очищено',
|
||||||
'Recipes': 'Рецепти',
|
'Recipes': 'Рецепти',
|
||||||
|
'record': 'запис',
|
||||||
'Record %(id)s updated': 'Запис %(id)s змінено',
|
'Record %(id)s updated': 'Запис %(id)s змінено',
|
||||||
|
'record does not exist': 'запису не існує',
|
||||||
|
'record id': 'ід. запису',
|
||||||
'Record ID': 'Ід.запису',
|
'Record ID': 'Ід.запису',
|
||||||
'Record Updated': 'Запис змінено',
|
'Record Updated': 'Запис змінено',
|
||||||
'Register': 'Реєстрація',
|
'Register': 'Реєстрація',
|
||||||
@@ -115,16 +161,24 @@
|
|||||||
'Save profile': 'Зберегти параметри',
|
'Save profile': 'Зберегти параметри',
|
||||||
'Semantic': 'Семантика',
|
'Semantic': 'Семантика',
|
||||||
'Services': 'Сервіс',
|
'Services': 'Сервіс',
|
||||||
|
'Size of cache:': 'Розмір кешу:',
|
||||||
|
'state': 'стан',
|
||||||
|
'Statistics': 'Статистика',
|
||||||
'Stylesheet': 'CSS-стилі',
|
'Stylesheet': 'CSS-стилі',
|
||||||
|
'submit': 'submit',
|
||||||
'Submit': 'Застосувати',
|
'Submit': 'Застосувати',
|
||||||
'Support': 'Підтримка',
|
'Support': 'Підтримка',
|
||||||
|
'table': 'Таблиця',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Запит" це умова, на зразок "db.table1.field1==\'значення\'". Вираз "db.table1.field1==db.table2.field2" повертає результат об\'єднання (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.': '"Запит" це умова, на зразок "db.table1.field1==\'значення\'". Вираз "db.table1.field1==db.table2.field2" повертає результат об\'єднання (SQL JOIN) таблиць.',
|
||||||
'The Core': 'Ядро',
|
'The Core': 'Ядро',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'Результат функції - словник пар (назва=значення) було відображено з допомогою відображення (view) %s',
|
||||||
'The Views': 'Відображення (Views)',
|
'The Views': 'Відображення (Views)',
|
||||||
'The output of the file is a dictionary that was rendered by the view': 'Результат функції - словник пар (назва=значення) було відображено з допомогою відображення (view)',
|
|
||||||
'This App': 'Цей додаток',
|
'This App': 'Цей додаток',
|
||||||
|
'Time in Cache (h:m:s)': 'Час знаходження в кеші (h:m:s)',
|
||||||
'Timestamp': 'Відмітка часу',
|
'Timestamp': 'Відмітка часу',
|
||||||
|
'too short': 'Занадто короткий',
|
||||||
'Twitter': 'Твіттер',
|
'Twitter': 'Твіттер',
|
||||||
|
'unable to parse csv file': 'не вдається розібрати csv-файл',
|
||||||
'Update:': 'Оновити:',
|
'Update:': 'Оновити:',
|
||||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Для створення складних запитів використовуйте (...)&(...) замість AND, (...)|(...) замість OR, та ~(...) замість NOT.',
|
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Для створення складних запитів використовуйте (...)&(...) замість AND, (...)|(...) замість OR, та ~(...) замість NOT.',
|
||||||
'User %(id)s Logged-in': 'Користувач %(id)s увійшов',
|
'User %(id)s Logged-in': 'Користувач %(id)s увійшов',
|
||||||
@@ -134,44 +188,14 @@
|
|||||||
'User %(id)s Profile updated': 'Параметри користувача %(id)s змінено',
|
'User %(id)s Profile updated': 'Параметри користувача %(id)s змінено',
|
||||||
'User %(id)s Registered': 'Користувач %(id)s зареєструвався',
|
'User %(id)s Registered': 'Користувач %(id)s зареєструвався',
|
||||||
'User ID': 'Ід.користувача',
|
'User ID': 'Ід.користувача',
|
||||||
|
'value already in database or empty': 'значення вже в базі даних або порожнє',
|
||||||
'Verify Password': 'Повторити пароль',
|
'Verify Password': 'Повторити пароль',
|
||||||
'Videos': 'Відео',
|
'Videos': 'Відео',
|
||||||
'View': 'Відображення (View)',
|
'View': 'Відображення (View)',
|
||||||
'Welcome': 'Ласкаво просимо',
|
'Welcome': 'Ласкаво просимо',
|
||||||
'Welcome to web2py!': 'Ласкаво просимо до web2py!',
|
'Welcome to web2py!': 'Ласкаво просимо до web2py!',
|
||||||
'Which called the function': 'Управління передалось функції',
|
'Which called the function %s located in the file %s': 'Управління передалось функції %s, яка розташована у файлі %s',
|
||||||
'You are successfully running web2py': 'Ви успішно запустили web2py',
|
'You are successfully running web2py': 'Ви успішно запустили web2py',
|
||||||
'You can modify this application and adapt it to your needs': 'Ви можете модифікувати цей додаток і адаптувати його до своїх потреб',
|
'You can modify this application and adapt it to your needs': 'Ви можете модифікувати цей додаток і адаптувати його до своїх потреб',
|
||||||
'You visited the url': 'Ви відвідали наступну адресу:',
|
'You visited the url %s': 'Ви відвідали наступну адресу: %s',
|
||||||
'appadmin is disabled because insecure channel': 'appadmin вимкнено через те, що використовується незахищений канал',
|
|
||||||
'cache': 'кеш',
|
|
||||||
'customize me!': 'причепуріть мене!',
|
|
||||||
'data uploaded': 'дані завантажено',
|
|
||||||
'database': 'база даних',
|
|
||||||
'database %s select': 'Вибірка з бази даних %s',
|
|
||||||
'db': 'бд',
|
|
||||||
'design': 'налаштування',
|
|
||||||
'done!': 'зроблено!',
|
|
||||||
'edit': 'редагувати',
|
|
||||||
'enter a value': 'введіть значення',
|
|
||||||
'enter an integer between %(min)g and %(max)g': 'введіть ціле число між %(min)g та %(max)g',
|
|
||||||
'export as csv file': 'експортувати як файл csv',
|
|
||||||
'insert new': 'Створити новий запис',
|
|
||||||
'insert new %s': 'створити новий запис %s',
|
|
||||||
'invalid request': 'хибний запит',
|
|
||||||
'located in the file': 'яка розташована у файлі',
|
|
||||||
'new record inserted': 'новий рядок додано',
|
|
||||||
'next 100 rows': 'наступні 100 рядків',
|
|
||||||
'or import from csv file': 'або імпортувати з csv-файлу',
|
|
||||||
'please input your password again': 'Будь-ласка введіть пароль ще раз',
|
|
||||||
'previous 100 rows': 'попередні 100 рядків',
|
|
||||||
'record': 'запис',
|
|
||||||
'record does not exist': 'запису не існує',
|
|
||||||
'record id': 'ід. запису',
|
|
||||||
'selected': 'запис(ів) вибрано',
|
|
||||||
'state': 'стан',
|
|
||||||
'table': 'Таблиця',
|
|
||||||
'too short': 'Занадто короткий',
|
|
||||||
'unable to parse csv file': 'не вдається розібрати csv-файл',
|
|
||||||
'value already in database or empty': 'значення вже в базі даних або порожнє',
|
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
# coding: utf8
|
# coding: utf8
|
||||||
{
|
{
|
||||||
|
'!langcode!': 'zh-cn',
|
||||||
|
'!langname!': '中文',
|
||||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新" 是選擇性的條件式, 格式就像 "欄位1=\'值\'". 但是 JOIN 的資料不可以使用 update 或是 delete"',
|
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新" 是選擇性的條件式, 格式就像 "欄位1=\'值\'". 但是 JOIN 的資料不可以使用 update 或是 delete"',
|
||||||
'%Y-%m-%d': '%Y-%m-%d',
|
'%Y-%m-%d': '%Y-%m-%d',
|
||||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||||
'%s rows deleted': '已刪除 %s 筆',
|
'%s %%{row} deleted': '已刪除 %s 筆',
|
||||||
'%s rows updated': '已更新 %s 筆',
|
'%s %%{row} updated': '已更新 %s 筆',
|
||||||
|
'%s selected': '%s 已選擇',
|
||||||
'(something like "it-it")': '(格式類似 "zh-tw")',
|
'(something like "it-it")': '(格式類似 "zh-tw")',
|
||||||
'A new version of web2py is available': '新版的 web2py 已發行',
|
'A new version of web2py is available': '新版的 web2py 已發行',
|
||||||
'A new version of web2py is available: %s': '新版的 web2py 已發行: %s',
|
'A new version of web2py is available: %s': '新版的 web2py 已發行: %s',
|
||||||
@@ -15,6 +18,7 @@
|
|||||||
'About application': '關於本應用程式',
|
'About application': '關於本應用程式',
|
||||||
'Admin is disabled because insecure channel': '管理功能(Admin)在不安全連線環境下自動關閉',
|
'Admin is disabled because insecure channel': '管理功能(Admin)在不安全連線環境下自動關閉',
|
||||||
'Admin is disabled because unsecure channel': '管理功能(Admin)在不安全連線環境下自動關閉',
|
'Admin is disabled because unsecure channel': '管理功能(Admin)在不安全連線環境下自動關閉',
|
||||||
|
'Administrative interface': '點此處進入管理介面',
|
||||||
'Administrator Password:': '管理員密碼:',
|
'Administrator Password:': '管理員密碼:',
|
||||||
'Are you sure you want to delete file "%s"?': '確定要刪除檔案"%s"?',
|
'Are you sure you want to delete file "%s"?': '確定要刪除檔案"%s"?',
|
||||||
'Are you sure you want to uninstall application "%s"': '確定要移除應用程式 "%s"',
|
'Are you sure you want to uninstall application "%s"': '確定要移除應用程式 "%s"',
|
||||||
@@ -82,6 +86,7 @@
|
|||||||
'Name': '名字',
|
'Name': '名字',
|
||||||
'New Record': '新紀錄',
|
'New Record': '新紀錄',
|
||||||
'No databases in this application': '這應用程式不含資料庫',
|
'No databases in this application': '這應用程式不含資料庫',
|
||||||
|
'Online examples': '點此處進入線上範例',
|
||||||
'Origin': '原文',
|
'Origin': '原文',
|
||||||
'Original/Translation': '原文/翻譯',
|
'Original/Translation': '原文/翻譯',
|
||||||
'Password': '密碼',
|
'Password': '密碼',
|
||||||
@@ -106,6 +111,7 @@
|
|||||||
'Table name': '資料表名稱',
|
'Table name': '資料表名稱',
|
||||||
'Testing application': '測試中的應用程式',
|
'Testing application': '測試中的應用程式',
|
||||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"查詢"是一個像 "db.表1.欄位1==\'值\'" 的條件式. 以"db.表1.欄位1==db.表2.欄位2"方式則相當於執行 JOIN SQL.',
|
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"查詢"是一個像 "db.表1.欄位1==\'值\'" 的條件式. 以"db.表1.欄位1==db.表2.欄位2"方式則相當於執行 JOIN SQL.',
|
||||||
|
'The output of the file is a dictionary that was rendered by the view %s': 'The output of the file is a dictionary that was rendered by the view %s',
|
||||||
'There are no controllers': '沒有控件(controllers)',
|
'There are no controllers': '沒有控件(controllers)',
|
||||||
'There are no models': '沒有資料庫模組(models)',
|
'There are no models': '沒有資料庫模組(models)',
|
||||||
'There are no modules': '沒有程式模組(modules)',
|
'There are no modules': '沒有程式模組(modules)',
|
||||||
@@ -129,13 +135,13 @@
|
|||||||
'Views': '視圖',
|
'Views': '視圖',
|
||||||
'Welcome %s': '歡迎 %s',
|
'Welcome %s': '歡迎 %s',
|
||||||
'Welcome to web2py': '歡迎使用 web2py',
|
'Welcome to web2py': '歡迎使用 web2py',
|
||||||
|
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
|
||||||
'YES': '是',
|
'YES': '是',
|
||||||
|
'You visited the url %s': 'You visited the url %s',
|
||||||
'about': '關於',
|
'about': '關於',
|
||||||
'appadmin is disabled because insecure channel': '因為來自非安全通道,管理介面關閉',
|
'appadmin is disabled because insecure channel': '因為來自非安全通道,管理介面關閉',
|
||||||
'cache': '快取記憶體',
|
'cache': '快取記憶體',
|
||||||
'change password': '變更密碼',
|
'change password': '變更密碼',
|
||||||
'Online examples': '點此處進入線上範例',
|
|
||||||
'Administrative interface': '點此處進入管理介面',
|
|
||||||
'customize me!': '請調整我!',
|
'customize me!': '請調整我!',
|
||||||
'data uploaded': '資料已上傳',
|
'data uploaded': '資料已上傳',
|
||||||
'database': '資料庫',
|
'database': '資料庫',
|
||||||
@@ -158,9 +164,7 @@
|
|||||||
'record does not exist': '紀錄不存在',
|
'record does not exist': '紀錄不存在',
|
||||||
'record id': '紀錄編號',
|
'record id': '紀錄編號',
|
||||||
'register': '註冊',
|
'register': '註冊',
|
||||||
'selected': '已選擇',
|
|
||||||
'state': '狀態',
|
'state': '狀態',
|
||||||
'table': '資料表',
|
'table': '資料表',
|
||||||
'unable to parse csv file': '無法解析逗號分隔檔(csv)',
|
'unable to parse csv file': '無法解析逗號分隔檔(csv)',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# This is an app-specific example router
|
||||||
|
#
|
||||||
|
# This simple router is used for setting languages from app/languages directory
|
||||||
|
# as a part of the application path: app/<lang>/controller/function
|
||||||
|
# Language from default.py or 'en' (if the file is not found) is used as
|
||||||
|
# a default_language
|
||||||
|
#
|
||||||
|
# See <web2py-root-dir>/router.example.py for parameter's detail
|
||||||
|
#-------------------------------------------------------------------------------------
|
||||||
|
# To enable this route file you must do the steps:
|
||||||
|
#
|
||||||
|
# 1. rename <web2py-root-dir>/router.example.py to routes.py
|
||||||
|
# 2. rename this APP/routes.example.py to APP/routes.py
|
||||||
|
# (where APP - is your application directory)
|
||||||
|
# 3. restart web2py (or reload routes in web2py admin interfase)
|
||||||
|
#
|
||||||
|
# YOU CAN COPY THIS FILE TO ANY APLLICATION'S ROOT DIRECTORY WITHOUT CHANGES!
|
||||||
|
|
||||||
|
from fileutils import abspath
|
||||||
|
from languages import read_possible_languages
|
||||||
|
|
||||||
|
possible_languages = read_possible_languages(abspath('applications', app))
|
||||||
|
#NOTE! app - is an application based router's parameter with name of an
|
||||||
|
# application. E.g.'welcome'
|
||||||
|
|
||||||
|
routers = {
|
||||||
|
app: dict(
|
||||||
|
default_language = possible_languages['default'][0],
|
||||||
|
languages = [lang for lang in possible_languages
|
||||||
|
if lang != 'default']
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#NOTE! To change language in your application using these rules add this line
|
||||||
|
#in one of your models files:
|
||||||
|
# if request.uri_language: T.force(request.uri_language)
|
||||||
|
|
||||||
@@ -1,98 +1,112 @@
|
|||||||
body {
|
|
||||||
padding-top: 90px; /* container go all the way to the bottom of the topbar */
|
|
||||||
height:auto; /*to avoid vertical scroll bar*/
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2,h3,h4,h5,h6 {font-family: inherit;}
|
|
||||||
|
|
||||||
li {margin-bottom: 0;} /*bootswatch*/
|
|
||||||
|
|
||||||
.auth_navbar, .navbar .btn-group{padding:0;}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 320px) {
|
|
||||||
.navbar-inner{position:relative;}
|
|
||||||
#navbar{float:none;position:absolute;bottom:-10px;left:4px;}
|
|
||||||
}
|
|
||||||
|
|
||||||
.mastheader h1 {
|
|
||||||
margin-bottom: 9px;
|
|
||||||
font-size: 81px;
|
|
||||||
font-weight: bold;
|
|
||||||
letter-spacing: -1px;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mastheader h1 {
|
|
||||||
font-size: 54px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mastheader small {
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* bootstrap dropdown */
|
|
||||||
|
|
||||||
.dropdown-menu ul {
|
|
||||||
left: 100%;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
visibility: hidden;
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropdown-menu li:hover ul {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar .dropdown-menu ul:before {
|
|
||||||
border-bottom: 7px solid transparent;
|
|
||||||
border-left: none;
|
|
||||||
border-right: 7px solid rgba(0, 0, 0, 0.2);
|
|
||||||
border-top: 7px solid transparent;
|
|
||||||
left: -7px;
|
|
||||||
top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar .dropdown-menu ul:after {
|
|
||||||
border-top: 6px solid transparent;
|
|
||||||
border-left: none;
|
|
||||||
border-right: 6px solid #fff;
|
|
||||||
border-bottom: 6px solid transparent;
|
|
||||||
left: 10px;
|
|
||||||
top: 6px;
|
|
||||||
left: -6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropdown-menu span{
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chevron-right {
|
|
||||||
border-left: 4px solid #000;
|
|
||||||
border-right: 4px solid transparent;
|
|
||||||
border-bottom: 4px solid transparent;
|
|
||||||
border-top: 4px solid transparent;
|
|
||||||
content: "";
|
|
||||||
display: inline-block;
|
|
||||||
height: 0;
|
|
||||||
opacity: 0.7;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 0;
|
|
||||||
margin-right:-13px;
|
|
||||||
margin-top: 7px;
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.open > .dropdown-menu ul { /* fix menu issue when BS2.0.4 is applied */
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#navbar{padding-top:9px;}
|
#navbar{padding-top:9px;}
|
||||||
#navbar .auth_navbar, #navbar .auth_navbar a {color:inherit;}
|
#navbar .auth_navbar, #navbar .auth_navbar a {color:inherit;}
|
||||||
.ie-lte7 #navbar .auth_navbar, #navbar .auth_navbar a {color:expression(this.parentNode.currentStyle['color']); /* ie7 doesn't support inherit */}
|
|
||||||
|
|
||||||
#navbar .auth_navbar a:hover {color:white;text-decoration:none;} /* this overwrite bootswatch */
|
@media only screen and (max-width: 479px) {
|
||||||
|
div.flash {
|
||||||
|
right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[class^="icon-"],[class*=" icon-"]{background-image:url("../images/glyphicons-halflings.png")} /* right folder for bootstrap black images/icons */
|
@media only screen and (max-width: 767px) {
|
||||||
.icon-white{background-image:url("../images/glyphicons-halflings-white.png");} /* right folder for bootstrap white images/icons */
|
.navbar-inner{position:relative;}
|
||||||
|
#navbar{bottom:-10px;left:4px;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
body {
|
||||||
|
height:auto; /*to avoid vertical scroll bar*/
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,h2,h3,h4,h5,h6 {font-family: inherit;}
|
||||||
|
|
||||||
|
li {margin-bottom: 0;} /*bootswatch*/
|
||||||
|
|
||||||
|
.auth_navbar, .navbar .btn-group{padding:0;}
|
||||||
|
|
||||||
|
.mastheader h1 {
|
||||||
|
margin-bottom: 9px;
|
||||||
|
font-size: 81px;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mastheader h1 {
|
||||||
|
font-size: 54px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mastheader small {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* bootstrap dropdown */
|
||||||
|
|
||||||
|
.dropdown-menu ul {
|
||||||
|
left: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu li:hover ul {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dropdown-menu ul:before {
|
||||||
|
border-bottom: 7px solid transparent;
|
||||||
|
border-left: none;
|
||||||
|
border-right: 7px solid rgba(0, 0, 0, 0.2);
|
||||||
|
border-top: 7px solid transparent;
|
||||||
|
left: -7px;
|
||||||
|
top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dropdown-menu ul:after {
|
||||||
|
border-top: 6px solid transparent;
|
||||||
|
border-left: none;
|
||||||
|
border-right: 6px solid #fff;
|
||||||
|
border-bottom: 6px solid transparent;
|
||||||
|
left: 10px;
|
||||||
|
top: 6px;
|
||||||
|
left: -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu span{
|
||||||
|
display:inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chevron-right {
|
||||||
|
border-left: 4px solid #000;
|
||||||
|
border-right: 4px solid transparent;
|
||||||
|
border-bottom: 4px solid transparent;
|
||||||
|
border-top: 4px solid transparent;
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
height: 0;
|
||||||
|
opacity: 0.7;
|
||||||
|
vertical-align: top;
|
||||||
|
width: 0;
|
||||||
|
margin-right:-13px;
|
||||||
|
margin-top: 7px;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.open > .dropdown-menu ul { /* fix menu issue when BS2.0.4 is applied */
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ie-lte7 #navbar .auth_navbar, #navbar .auth_navbar a {color:expression(this.parentNode.currentStyle['color']); /* ie7 doesn't support inherit */}
|
||||||
|
|
||||||
|
#navbar .auth_navbar a:hover {color:white;text-decoration:none;} /* this overwrite bootswatch */
|
||||||
|
|
||||||
|
[class^="icon-"],[class*=" icon-"]{background-image:url("../images/glyphicons-halflings.png")} /* right folder for bootstrap black images/icons */
|
||||||
|
.icon-white{background-image:url("../images/glyphicons-halflings-white.png");} /* right folder for bootstrap white images/icons */
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 980px) {
|
||||||
|
body {
|
||||||
|
padding-top: 60px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
/** these MUST stay **/
|
/** these MUST stay **/
|
||||||
body { margin: 0; padding:0; border: 0; }
|
|
||||||
a { text-decoration:none; white-space: nowrap;}
|
a { text-decoration:none; white-space: nowrap;}
|
||||||
a:hover {text-decoration: underline}
|
a:hover {text-decoration: underline}
|
||||||
a.button {text-decoration: none}
|
a.button {text-decoration: none}
|
||||||
@@ -38,9 +37,7 @@ ul { list-style-type: none; margin: 0px; padding: 0px; }
|
|||||||
/** end **/
|
/** end **/
|
||||||
|
|
||||||
/* Sticky footer begin */
|
/* Sticky footer begin */
|
||||||
html, body {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
@@ -228,8 +225,12 @@ div.error {
|
|||||||
|
|
||||||
.web2py_console form {
|
.web2py_console form {
|
||||||
width:100%;
|
width:100%;
|
||||||
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.web2py_console form select {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.web2py_search_actions{
|
.web2py_search_actions{
|
||||||
float:left;
|
float:left;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
<br/><br/><h3>{{=T("Import/Export")}}</h3><br/>
|
<br/><br/><h3>{{=T("Import/Export")}}</h3><br/>
|
||||||
[ <a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
|
[ <a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
|
||||||
{{if table:}}
|
{{if table:}}
|
||||||
{{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value='import'))}}
|
{{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value=T('import')))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,14 @@
|
|||||||
<h4/>{{=T('How did you get here?')}}</h4>
|
<h4/>{{=T('How did you get here?')}}</h4>
|
||||||
<ol>
|
<ol>
|
||||||
<li>{{=T('You are successfully running web2py')}}</li>
|
<li>{{=T('You are successfully running web2py')}}</li>
|
||||||
<li>{{=T('You visited the url')}} {{=A(request.env.path_info,_href=request.env.path_info)}}</li>
|
<li>{{=XML(T('You visited the url %s', A(request.env.path_info,_href=request.env.path_info)))}}</li>
|
||||||
<li>{{=T('Which called the function')}} {{=A(request.function+'()',_href='#')}} {{=T('located in the file')}}
|
<li>{{=XML(T('Which called the function %s located in the file %s',
|
||||||
{{=A('web2py/applications/%(application)s/controllers/%(controller)s.py'%request,_href=URL('admin','default','peek',args=(request.application,'controllers',request.controller+'.py')))}}</li>
|
(A(request.function+'()',_href='#'),
|
||||||
<li>{{=T('The output of the file is a dictionary that was rendered by the view')}}
|
A('web2py/applications/%(application)s/controllers/%(controller)s.py'%request,
|
||||||
{{=A('web2py/applications/%(application)s/views/%(controller)s/index.html'%request,_href=URL('admin','default','peek',args=(request.application,'views',request.controller,'index.html')))}}</li>
|
_href=URL('admin','default','peek', args=(request.application,'controllers',request.controller+'.py'))))))}}</li>
|
||||||
|
<li>{{=XML(T('The output of the file is a dictionary that was rendered by the view %s',
|
||||||
|
A('web2py/applications/%(application)s/views/%(controller)s/index.html'%request,
|
||||||
|
_href=URL('admin','default','peek',args=(request.application,'views',request.controller,'index.html')))))}}</li>
|
||||||
<li>{{=T('You can modify this application and adapt it to your needs')}}</li>
|
<li>{{=T('You can modify this application and adapt it to your needs')}}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</ol>
|
</ol>
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
{{extend 'layout.html'}}
|
{{extend 'layout.html'}}
|
||||||
<h2>{{=T( request.args(0).replace('_',' ').capitalize() )}}</h2>
|
<h2>{{=T( request.args(0).replace('_',' ').capitalize() )}}</h2>
|
||||||
<div id="web2py_user_form">
|
<div id="web2py_user_form">
|
||||||
{{if request.args(0)=='login':}}
|
{{
|
||||||
{{if not 'register' in auth.settings.actions_disabled:}}
|
if request.args(0)=='login':
|
||||||
{{form.add_button(T('Register'),URL(args='register'))}}
|
if not 'register' in auth.settings.actions_disabled:
|
||||||
{{pass}}
|
form.add_button(T('Register'),URL(args='register'))
|
||||||
{{form.add_button(T('Lost Password'),URL(args='request_reset_password'))}}
|
pass
|
||||||
{{pass}}
|
if not 'request_reset_password' in auth.settings.actions_disabled:
|
||||||
{{=form}}
|
form.add_button(T('Lost Password'),URL(args='request_reset_password'))
|
||||||
|
pass
|
||||||
|
pass
|
||||||
|
=form
|
||||||
|
}}
|
||||||
</div>
|
</div>
|
||||||
<script language="javascript"><!--
|
<script language="javascript"><!--
|
||||||
jQuery("#web2py_user_form input:visible:enabled:first").focus();
|
jQuery("#web2py_user_form input:visible:enabled:first").focus();
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
device-width: Occupy full width of the screen in its current orientation
|
device-width: Occupy full width of the screen in its current orientation
|
||||||
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
|
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
|
||||||
user-scalable = yes allows the user to zoom in -->
|
user-scalable = yes allows the user to zoom in -->
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<!-- Place favicon.ico and apple-touch-icon.png in the root of your domain and delete these references -->
|
<!-- Place favicon.ico and apple-touch-icon.png in the root of your domain and delete these references -->
|
||||||
<link rel="shortcut icon" href="{{=URL('static','favicon.ico')}}" type="image/x-icon">
|
<link rel="shortcut icon" href="{{=URL('static','favicon.ico')}}" type="image/x-icon">
|
||||||
|
|||||||
+36
-16
@@ -35,7 +35,7 @@ except ImportError:
|
|||||||
|
|
||||||
logger = logging.getLogger("web2py.cache")
|
logger = logging.getLogger("web2py.cache")
|
||||||
|
|
||||||
__all__ = ['Cache']
|
__all__ = ['Cache', 'lazy_lazy_cache']
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_TIME_EXPIRE = 300
|
DEFAULT_TIME_EXPIRE = 300
|
||||||
@@ -379,6 +379,28 @@ class CacheOnDisk(CacheAbstract):
|
|||||||
storage.close()
|
storage.close()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
class CacheAction(object):
|
||||||
|
def __init__(self,func,key,time_expire,cache,cache_model):
|
||||||
|
self.__name__ = func.__name__
|
||||||
|
self.__doc__ = func.__doc__
|
||||||
|
self.func = func
|
||||||
|
self.key = key
|
||||||
|
self.time_expire = time_expire
|
||||||
|
self.cache = cache
|
||||||
|
self.cache_model = cache_model
|
||||||
|
def __call__(self,*a,**b):
|
||||||
|
if not self.key:
|
||||||
|
key2 = self.__name__+':'+repr(a)+':'+repr(b)
|
||||||
|
else:
|
||||||
|
key2 = self.key.replace('%(name)s',self.__name__)\
|
||||||
|
.replace('%(args)s',str(a)).replace('%(vars)s',str(b))
|
||||||
|
cache_model = self.cache_model
|
||||||
|
if not cache_model or isinstance(cache_model,str):
|
||||||
|
cache_model = getattr(self.cache,cache_model or 'ram')
|
||||||
|
return cache_model(key2,
|
||||||
|
lambda a=a,b=b:self.func(*a,**b),
|
||||||
|
self.time_expire)
|
||||||
|
|
||||||
|
|
||||||
class Cache(object):
|
class Cache(object):
|
||||||
"""
|
"""
|
||||||
@@ -437,8 +459,8 @@ class Cache(object):
|
|||||||
|
|
||||||
:param key: the key of the object to be store or retrieved
|
:param key: the key of the object to be store or retrieved
|
||||||
:param time_expire: expiration of the cache in microseconds
|
:param time_expire: expiration of the cache in microseconds
|
||||||
:param cache_model: `cache.ram`, `cache.disk`, or other
|
:param cache_model: "ram", "disk", or other
|
||||||
(like `cache.memcache` if defined). It defaults to `cache.ram`.
|
(like "memcache" if defined). It defaults to "ram".
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
@@ -451,20 +473,18 @@ class Cache(object):
|
|||||||
If the function `f` is an action, we suggest using
|
If the function `f` is an action, we suggest using
|
||||||
`request.env.path_info` as key.
|
`request.env.path_info` as key.
|
||||||
"""
|
"""
|
||||||
if not cache_model:
|
|
||||||
cache_model = self.ram
|
|
||||||
|
|
||||||
def tmp(func):
|
|
||||||
def action(*a,**b):
|
|
||||||
key2 = key.replace('%(name)s',func.__name__).replace('%(args)s',str(a)).replace('%(vars)s',str(b))
|
|
||||||
return cache_model(key2, lambda a=a,b=b:func(*a,**b), time_expire)
|
|
||||||
action.__name___ = func.__name__
|
|
||||||
action.__doc__ = func.__doc__
|
|
||||||
return action
|
|
||||||
|
|
||||||
|
def tmp(func,cache=self,cache_model=cache_model):
|
||||||
|
return CacheAction(func,key,time_expire,self,cache_model)
|
||||||
return tmp
|
return tmp
|
||||||
|
|
||||||
|
def lazy_lazy_cache(key=None,time_expire=None,cache_model='ram'):
|
||||||
|
def decorator(f,key=key,time_expire=time_expire,cache_model=cache_model):
|
||||||
|
key = key or repr(f)
|
||||||
|
def g(*c,**d):
|
||||||
|
from gluon import current
|
||||||
|
return current.cache(key,time_expire,cache_model)(f)(*c,**d)
|
||||||
|
g.__name__ = f.__name__
|
||||||
|
return g
|
||||||
|
return decorator
|
||||||
|
|
||||||
+1
-2
@@ -13,7 +13,6 @@ FOR INTERNAL USE ONLY
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import stat
|
|
||||||
import thread
|
import thread
|
||||||
from fileutils import read_file
|
from fileutils import read_file
|
||||||
|
|
||||||
@@ -34,7 +33,7 @@ def getcfs(key, filename, filter=None):
|
|||||||
|
|
||||||
This is used on Google App Engine since pyc files cannot be saved.
|
This is used on Google App Engine since pyc files cannot be saved.
|
||||||
"""
|
"""
|
||||||
t = os.stat(filename)[stat.ST_MTIME]
|
t = os.stat(filename).st_mtime
|
||||||
cfs_lock.acquire()
|
cfs_lock.acquire()
|
||||||
item = cfs.get(key, None)
|
item = cfs.get(key, None)
|
||||||
cfs_lock.release()
|
cfs_lock.release()
|
||||||
|
|||||||
+3
-6
@@ -40,18 +40,15 @@ import imp
|
|||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger("web2py")
|
logger = logging.getLogger("web2py")
|
||||||
import rewrite
|
import rewrite
|
||||||
import platform
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import py_compile
|
import py_compile
|
||||||
except:
|
except:
|
||||||
logger.warning('unable to import py_compile')
|
logger.warning('unable to import py_compile')
|
||||||
|
|
||||||
is_pypy = hasattr(platform,'python_implementation') and \
|
is_pypy = settings.global_settings.is_pypy
|
||||||
platform.python_implementation() == 'PyPy'
|
is_gae = settings.global_settings.web2py_runtime_gae
|
||||||
settings.global_settings.is_pypy = is_pypy
|
is_jython = settings.global_settings.is_jython
|
||||||
is_gae = settings.global_settings.web2py_runtime_gae
|
|
||||||
is_jython = settings.global_settings.is_jython = 'java' in sys.platform.lower() or hasattr(sys, 'JYTHON_JAR') or str(sys.copyright).find('Jython') > 0
|
|
||||||
|
|
||||||
TEST_CODE = \
|
TEST_CODE = \
|
||||||
r"""
|
r"""
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# last tinkered with by korylprince at gmail.com on 2012-04-5
|
# last tinkered with by korylprince at gmail.com on 2012-07-12
|
||||||
#
|
#
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
@@ -8,29 +8,30 @@ import logging
|
|||||||
try:
|
try:
|
||||||
import ldap
|
import ldap
|
||||||
import ldap.filter
|
import ldap.filter
|
||||||
ldap.set_option( ldap.OPT_REFERRALS, 0 )
|
ldap.set_option(ldap.OPT_REFERRALS, 0)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
logging.error( 'missing ldap, try "easy_install python-ldap"' )
|
logging.error('missing ldap, try "easy_install python-ldap"')
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
def ldap_auth( server = 'ldap', port = None,
|
|
||||||
base_dn = 'ou=users,dc=domain,dc=com',
|
def ldap_auth(server='ldap', port=None,
|
||||||
mode = 'uid', secure = False, cert_path = None, cert_file = None,
|
base_dn='ou=users,dc=domain,dc=com',
|
||||||
bind_dn = None, bind_pw = None, filterstr = 'objectClass=*',
|
mode='uid', secure=False, cert_path=None, cert_file=None,
|
||||||
username_attrib = 'uid',
|
bind_dn=None, bind_pw=None, filterstr='objectClass=*',
|
||||||
custom_scope = 'subtree',
|
username_attrib='uid',
|
||||||
allowed_groups = None,
|
custom_scope='subtree',
|
||||||
manage_user = False,
|
allowed_groups=None,
|
||||||
user_firstname_attrib = 'cn:1',
|
manage_user=False,
|
||||||
user_lastname_attrib = 'cn:2',
|
user_firstname_attrib='cn:1',
|
||||||
user_mail_attrib = 'mail',
|
user_lastname_attrib='cn:2',
|
||||||
manage_groups = False,
|
user_mail_attrib='mail',
|
||||||
db = None,
|
manage_groups=False,
|
||||||
group_dn = None,
|
db=None,
|
||||||
group_name_attrib = 'cn',
|
group_dn=None,
|
||||||
group_member_attrib = 'memberUid',
|
group_name_attrib='cn',
|
||||||
group_filterstr = 'objectClass=*',
|
group_member_attrib='memberUid',
|
||||||
logging_level = 'error' ):
|
group_filterstr='objectClass=*',
|
||||||
|
logging_level='error'):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
to use ldap login with MS Active Directory:
|
to use ldap login with MS Active Directory:
|
||||||
@@ -50,7 +51,8 @@ def ldap_auth( server = 'ldap', port = None,
|
|||||||
auth.settings.login_methods.append(ldap_auth(
|
auth.settings.login_methods.append(ldap_auth(
|
||||||
server='my.ldap.server', base_dn='ou=Users,dc=domain,dc=com'))
|
server='my.ldap.server', base_dn='ou=Users,dc=domain,dc=com'))
|
||||||
|
|
||||||
to use ldap login with OpenLDAP and subtree search and (optionally) multiple DNs:
|
to use ldap login with OpenLDAP and subtree search and (optionally)
|
||||||
|
multiple DNs:
|
||||||
|
|
||||||
auth.settings.login_methods.append(ldap_auth(
|
auth.settings.login_methods.append(ldap_auth(
|
||||||
mode='uid_r', server='my.ldap.server',
|
mode='uid_r', server='my.ldap.server',
|
||||||
@@ -73,48 +75,52 @@ def ldap_auth( server = 'ldap', port = None,
|
|||||||
the custom_scope can be: base, onelevel, subtree.
|
the custom_scope can be: base, onelevel, subtree.
|
||||||
|
|
||||||
If using secure ldaps:// pass secure=True and cert_path="..."
|
If using secure ldaps:// pass secure=True and cert_path="..."
|
||||||
If ldap is using GnuTLS then you need cert_file="..." instead cert_path because
|
If ldap is using GnuTLS then you need cert_file="..." instead cert_path
|
||||||
cert_path isn't implemented in GnuTLS :(
|
because cert_path isn't implemented in GnuTLS :(
|
||||||
|
|
||||||
If you need to bind to the directory with an admin account in order to search it then specify bind_dn & bind_pw to use for this.
|
If you need to bind to the directory with an admin account in order to
|
||||||
|
search it then specify bind_dn & bind_pw to use for this.
|
||||||
- currently only implemented for Active Directory
|
- currently only implemented for Active Directory
|
||||||
|
|
||||||
If you need to restrict the set of allowed users (e.g. to members of a department) then specify
|
If you need to restrict the set of allowed users (e.g. to members of a
|
||||||
a rfc4515 search filter string.
|
department) then specify an rfc4515 search filter string.
|
||||||
- currently only implemented for mode in ['ad', 'company', 'uid_r']
|
- currently only implemented for mode in ['ad', 'company', 'uid_r']
|
||||||
You can manage user attribute first name, last name, email from ldap:
|
|
||||||
|
You can manage user attributes first name, last name, email from ldap:
|
||||||
auth.settings.login_methods.append(ldap_auth(...as usual...,
|
auth.settings.login_methods.append(ldap_auth(...as usual...,
|
||||||
manage_user = True,
|
manage_user=True,
|
||||||
user_firstname_attrib = 'cn:1',
|
user_firstname_attrib='cn:1',
|
||||||
user_lastname_attrib = 'cn:2',
|
user_lastname_attrib='cn:2',
|
||||||
user_mail_attrib = 'mail'
|
user_mail_attrib='mail'
|
||||||
))
|
))
|
||||||
|
|
||||||
Where:
|
Where:
|
||||||
manage_user - let web2py handle user data from ldap
|
manage_user - let web2py handle user data from ldap
|
||||||
user_firstname_attrib - the attribute containing the user's first name
|
user_firstname_attrib - the attribute containing the user's first name
|
||||||
optionally you can specify parts.
|
optionally you can specify parts.
|
||||||
Example: cn: "John Smith" - 'cn:1' = 'John'
|
Example: cn: "John Smith" - 'cn:1'='John'
|
||||||
user_lastname_attrib - the attribute containing the user's last name
|
user_lastname_attrib - the attribute containing the user's last name
|
||||||
optionally you can specify parts.
|
optionally you can specify parts.
|
||||||
Example: cn: "John Smith" - 'cn:2' = 'Smith'
|
Example: cn: "John Smith" - 'cn:2'='Smith'
|
||||||
user_mail_attrib - the attribure containing the user's email address
|
user_mail_attrib - the attribute containing the user's email address
|
||||||
|
|
||||||
|
|
||||||
If you need group control from ldap to web2py app's database feel free to set:
|
If you need group control from ldap to web2py app's database feel free
|
||||||
|
to set:
|
||||||
|
|
||||||
auth.settings.login_methods.append(ldap_auth(...as usual...,
|
auth.settings.login_methods.append(ldap_auth(...as usual...,
|
||||||
manage_groups = True,
|
manage_groups=True,
|
||||||
db = db,
|
db=db,
|
||||||
group_dn = 'ou=Groups,dc=domain,dc=com',
|
group_dn='ou=Groups,dc=domain,dc=com',
|
||||||
group_name_attrib = 'cn',
|
group_name_attrib='cn',
|
||||||
group_member_attrib = 'memberUid',
|
group_member_attrib='memberUid',
|
||||||
group_filterstr = 'objectClass=*'
|
group_filterstr='objectClass=*'
|
||||||
))
|
))
|
||||||
|
|
||||||
Where:
|
Where:
|
||||||
manage_group - let web2py handle the groups from ldap
|
manage_group - let web2py handle the groups from ldap
|
||||||
db - is the database object (need to have auth_user, auth_group, auth_membership)
|
db - is the database object (need to have auth_user, auth_group,
|
||||||
|
auth_membership)
|
||||||
group_dn - the ldap branch of the groups
|
group_dn - the ldap branch of the groups
|
||||||
group_name_attrib - the attribute where the group name is stored
|
group_name_attrib - the attribute where the group name is stored
|
||||||
group_member_attrib - the attribute containing the group members name
|
group_member_attrib - the attribute containing the group members name
|
||||||
@@ -123,245 +129,253 @@ def ldap_auth( server = 'ldap', port = None,
|
|||||||
You can restrict login access to specific groups if you specify:
|
You can restrict login access to specific groups if you specify:
|
||||||
|
|
||||||
auth.settings.login_methods.append(ldap_auth(...as usual...,
|
auth.settings.login_methods.append(ldap_auth(...as usual...,
|
||||||
allowed_groups = [...],
|
allowed_groups=[...],
|
||||||
group_dn = 'ou=Groups,dc=domain,dc=com',
|
group_dn='ou=Groups,dc=domain,dc=com',
|
||||||
group_name_attrib = 'cn',
|
group_name_attrib='cn',
|
||||||
group_member_attrib = 'memberUid', # use 'member' for Active Directory
|
group_member_attrib='memberUid',#use 'member' for Active Directory
|
||||||
group_filterstr = 'objectClass=*'
|
group_filterstr='objectClass=*'
|
||||||
))
|
))
|
||||||
|
|
||||||
Where:
|
Where:
|
||||||
allowed_groups - a list with allowed ldap group names
|
allowed_groups - a list with allowed ldap group names
|
||||||
group_dn - the ldap branch of the groups
|
group_dn - the ldap branch of the groups
|
||||||
group_name_attrib - the attribute where the group name is stored
|
group_name_attrib - the attribute where the group name is stored
|
||||||
group_member_attrib - the attibute containing the group members name
|
group_member_attrib - the attribute containing the group members name
|
||||||
group_filterstr - as the filterstr but for group select
|
group_filterstr - as the filterstr but for group select
|
||||||
|
|
||||||
If using Active Directory you must specify bind_dn and bind_pw for allowed_groups unless anonymous bind works.
|
If using Active Directory you must specify bind_dn and bind_pw for
|
||||||
|
allowed_groups unless anonymous bind works.
|
||||||
|
|
||||||
You can set the logging level with the "logging_level" parameter, default
|
You can set the logging level with the "logging_level" parameter, default
|
||||||
is "error" and can be set to error, warning, info, debug.
|
is "error" and can be set to error, warning, info, debug.
|
||||||
"""
|
"""
|
||||||
logger = logging.getLogger( 'web2py.auth.ldap_auth' )
|
logger = logging.getLogger('web2py.auth.ldap_auth')
|
||||||
if logging_level == 'error':
|
if logging_level == 'error':
|
||||||
logger.setLevel( logging.ERROR )
|
logger.setLevel(logging.ERROR)
|
||||||
elif logging_level == 'warning':
|
elif logging_level == 'warning':
|
||||||
logger.setLevel( logging.WARNING )
|
logger.setLevel(logging.WARNING)
|
||||||
elif logging_level == 'info':
|
elif logging_level == 'info':
|
||||||
logger.setLevel( logging.INFO )
|
logger.setLevel(logging.INFO)
|
||||||
elif logging_level == 'debug':
|
elif logging_level == 'debug':
|
||||||
logger.setLevel( logging.DEBUG )
|
logger.setLevel(logging.DEBUG)
|
||||||
def ldap_auth_aux( username,
|
|
||||||
|
def ldap_auth_aux(username,
|
||||||
password,
|
password,
|
||||||
ldap_server = server,
|
ldap_server=server,
|
||||||
ldap_port = port,
|
ldap_port=port,
|
||||||
ldap_basedn = base_dn,
|
ldap_basedn=base_dn,
|
||||||
ldap_mode = mode,
|
ldap_mode=mode,
|
||||||
ldap_binddn = bind_dn,
|
ldap_binddn=bind_dn,
|
||||||
ldap_bindpw = bind_pw,
|
ldap_bindpw=bind_pw,
|
||||||
secure = secure,
|
secure=secure,
|
||||||
cert_path = cert_path,
|
cert_path=cert_path,
|
||||||
cert_file = cert_file,
|
cert_file=cert_file,
|
||||||
filterstr = filterstr,
|
filterstr=filterstr,
|
||||||
username_attrib = username_attrib,
|
username_attrib=username_attrib,
|
||||||
custom_scope = custom_scope,
|
custom_scope=custom_scope,
|
||||||
manage_user = manage_user,
|
manage_user=manage_user,
|
||||||
user_firstname_attrib = user_firstname_attrib,
|
user_firstname_attrib=user_firstname_attrib,
|
||||||
user_lastname_attrib = user_lastname_attrib,
|
user_lastname_attrib=user_lastname_attrib,
|
||||||
user_mail_attrib = user_mail_attrib,
|
user_mail_attrib=user_mail_attrib,
|
||||||
manage_groups = manage_groups,
|
manage_groups=manage_groups,
|
||||||
allowed_groups = allowed_groups,
|
allowed_groups=allowed_groups,
|
||||||
db = db ):
|
db=db):
|
||||||
logger.debug( 'mode: [%s] manage_user: [%s] custom_scope: [%s] manage_groups: [%s]' % (
|
if password == '': # http://tools.ietf.org/html/rfc4513#section-5.1.2
|
||||||
str( mode ), str( manage_user ), str( custom_scope ), str( manage_groups ) ) )
|
logger.warning('blank password not allowed')
|
||||||
|
return False
|
||||||
|
logger.debug('mode: [%s] manage_user: [%s] custom_scope: [%s]'
|
||||||
|
' manage_groups: [%s]' % (str(mode), str(manage_user),
|
||||||
|
str(custom_scope), str(manage_groups)))
|
||||||
if manage_user:
|
if manage_user:
|
||||||
if user_firstname_attrib.count( ':' ) > 0:
|
if user_firstname_attrib.count(':') > 0:
|
||||||
( user_firstname_attrib, user_firstname_part ) = user_firstname_attrib.split( ':', 1 )
|
(user_firstname_attrib, user_firstname_part) = user_firstname_attrib.split(':', 1)
|
||||||
user_firstname_part = ( int( user_firstname_part ) - 1 )
|
user_firstname_part = (int(user_firstname_part) - 1)
|
||||||
else:
|
else:
|
||||||
user_firstname_part = None
|
user_firstname_part = None
|
||||||
if user_lastname_attrib.count( ':' ) > 0:
|
if user_lastname_attrib.count(':') > 0:
|
||||||
( user_lastname_attrib, user_lastname_part ) = user_lastname_attrib.split( ':', 1 )
|
(user_lastname_attrib, user_lastname_part) = user_lastname_attrib.split(':', 1)
|
||||||
user_lastname_part = ( int( user_lastname_part ) - 1 )
|
user_lastname_part = (int(user_lastname_part) - 1)
|
||||||
else:
|
else:
|
||||||
user_lastname_part = None
|
user_lastname_part = None
|
||||||
user_firstname_attrib = ldap.filter.escape_filter_chars( user_firstname_attrib )
|
user_firstname_attrib = ldap.filter.escape_filter_chars(user_firstname_attrib)
|
||||||
user_lastname_attrib = ldap.filter.escape_filter_chars( user_lastname_attrib )
|
user_lastname_attrib = ldap.filter.escape_filter_chars(user_lastname_attrib)
|
||||||
user_mail_attrib = ldap.filter.escape_filter_chars( user_mail_attrib )
|
user_mail_attrib = ldap.filter.escape_filter_chars(user_mail_attrib)
|
||||||
try:
|
try:
|
||||||
if allowed_groups:
|
if allowed_groups:
|
||||||
if not is_user_in_allowed_groups( username, password ):
|
if not is_user_in_allowed_groups(username, password):
|
||||||
return False
|
return False
|
||||||
con = init_ldap()
|
con = init_ldap()
|
||||||
if ldap_mode == 'ad':
|
if ldap_mode == 'ad':
|
||||||
# Microsoft Active Directory
|
# Microsoft Active Directory
|
||||||
if '@' not in username:
|
if '@' not in username:
|
||||||
domain = []
|
domain = []
|
||||||
for x in ldap_basedn.split( ',' ):
|
for x in ldap_basedn.split(','):
|
||||||
if "DC=" in x.upper():
|
if "DC=" in x.upper():
|
||||||
domain.append( x.split( '=' )[-1] )
|
domain.append(x.split('=')[-1])
|
||||||
username = "%s@%s" % ( username, '.'.join( domain ) )
|
username = "%s@%s" % (username, '.'.join(domain))
|
||||||
username_bare = username.split( "@" )[0]
|
username_bare = username.split("@")[0]
|
||||||
con.set_option( ldap.OPT_PROTOCOL_VERSION, 3 )
|
con.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
|
||||||
# In cases where ForestDnsZones and DomainDnsZones are found,
|
# In cases where ForestDnsZones and DomainDnsZones are found,
|
||||||
# result will look like the following:
|
# result will look like the following:
|
||||||
# ['ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com']
|
# ['ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com']
|
||||||
if ldap_binddn:
|
if ldap_binddn:
|
||||||
# need to search directory with an admin account 1st
|
# need to search directory with an admin account 1st
|
||||||
con.simple_bind_s( ldap_binddn, ldap_bindpw )
|
con.simple_bind_s(ldap_binddn, ldap_bindpw)
|
||||||
else:
|
else:
|
||||||
# credentials should be in the form of username@domain.tld
|
# credentials should be in the form of username@domain.tld
|
||||||
con.simple_bind_s( username, password )
|
con.simple_bind_s(username, password)
|
||||||
# this will throw an index error if the account is not found
|
# this will throw an index error if the account is not found
|
||||||
# in the ldap_basedn
|
# in the ldap_basedn
|
||||||
requested_attrs = ['sAMAccountName']
|
requested_attrs = ['sAMAccountName']
|
||||||
if manage_user:
|
if manage_user:
|
||||||
requested_attrs.extend( [user_firstname_attrib,
|
requested_attrs.extend([user_firstname_attrib,
|
||||||
user_lastname_attrib,
|
user_lastname_attrib,
|
||||||
user_mail_attrib] )
|
user_mail_attrib])
|
||||||
result = con.search_ext_s(
|
result = con.search_ext_s(
|
||||||
ldap_basedn, ldap.SCOPE_SUBTREE,
|
ldap_basedn, ldap.SCOPE_SUBTREE,
|
||||||
"(&(sAMAccountName=%s)(%s))" % ( ldap.filter.escape_filter_chars( username_bare ),
|
"(&(sAMAccountName=%s)(%s))" % (ldap.filter.escape_filter_chars(username_bare),
|
||||||
filterstr ),
|
filterstr),
|
||||||
requested_attrs )[0][1]
|
requested_attrs)[0][1]
|
||||||
if not isinstance( result, dict ):
|
if not isinstance(result, dict):
|
||||||
# result should be a dict in the form {'sAMAccountName': [username_bare]}
|
# result should be a dict in the form
|
||||||
logger.warning( 'User [%s] not found!' % username )
|
# {'sAMAccountName': [username_bare]}
|
||||||
|
logger.warning('User [%s] not found!' % username)
|
||||||
return False
|
return False
|
||||||
if ldap_binddn:
|
if ldap_binddn:
|
||||||
# We know the user exists & is in the correct OU
|
# We know the user exists & is in the correct OU
|
||||||
# so now we just check the password
|
# so now we just check the password
|
||||||
con.simple_bind_s( username, password )
|
con.simple_bind_s(username, password)
|
||||||
username=username_bare
|
username = username_bare
|
||||||
|
|
||||||
if ldap_mode == 'domino':
|
if ldap_mode == 'domino':
|
||||||
# Notes Domino
|
# Notes Domino
|
||||||
if "@" in username:
|
if "@" in username:
|
||||||
username = username.split( "@" )[0]
|
username = username.split("@")[0]
|
||||||
con.simple_bind_s( username, password )
|
con.simple_bind_s(username, password)
|
||||||
if manage_user:
|
if manage_user:
|
||||||
# TODO: sorry I have no clue how to query attrs in domino
|
# TODO: sorry I have no clue how to query attrs in domino
|
||||||
result = {user_firstname_attrib: username,
|
result = {user_firstname_attrib: username,
|
||||||
user_lastname_attrib: None,
|
user_lastname_attrib: None,
|
||||||
user_mail_attrib: None}
|
user_mail_attrib: None}
|
||||||
|
|
||||||
if ldap_mode == 'cn':
|
if ldap_mode == 'cn':
|
||||||
# OpenLDAP (CN)
|
# OpenLDAP (CN)
|
||||||
dn = "cn=" + username + "," + ldap_basedn
|
dn = "cn=" + username + "," + ldap_basedn
|
||||||
con.simple_bind_s( dn, password )
|
con.simple_bind_s(dn, password)
|
||||||
if manage_user:
|
if manage_user:
|
||||||
result = con.search_s(
|
result = con.search_s(dn, ldap.SCOPE_BASE,
|
||||||
dn, ldap.SCOPE_BASE,
|
"(objectClass=*)",
|
||||||
"(objectClass=*)",
|
[user_firstname_attrib,
|
||||||
[user_firstname_attrib,
|
user_lastname_attrib,
|
||||||
user_lastname_attrib,
|
user_mail_attrib])[0][1]
|
||||||
user_mail_attrib]
|
|
||||||
)[0][1]
|
|
||||||
|
|
||||||
if ldap_mode == 'uid':
|
if ldap_mode == 'uid':
|
||||||
# OpenLDAP (UID)
|
# OpenLDAP (UID)
|
||||||
dn = "uid=" + username + "," + ldap_basedn
|
dn = "uid=" + username + "," + ldap_basedn
|
||||||
con.simple_bind_s( dn, password )
|
con.simple_bind_s(dn, password)
|
||||||
if manage_user:
|
if manage_user:
|
||||||
result = con.search_s(
|
result = con.search_s(dn, ldap.SCOPE_BASE,
|
||||||
dn, ldap.SCOPE_BASE,
|
"(objectClass=*)",
|
||||||
"(objectClass=*)",
|
[user_firstname_attrib,
|
||||||
[user_firstname_attrib,
|
user_lastname_attrib,
|
||||||
user_lastname_attrib,
|
user_mail_attrib])[0][1]
|
||||||
user_mail_attrib]
|
|
||||||
)[0][1]
|
|
||||||
|
|
||||||
if ldap_mode == 'company':
|
if ldap_mode == 'company':
|
||||||
# no DNs or password needed to search directory
|
# no DNs or password needed to search directory
|
||||||
dn = ""
|
dn = ""
|
||||||
pw = ""
|
pw = ""
|
||||||
# bind anonymously
|
# bind anonymously
|
||||||
con.simple_bind_s( dn, pw )
|
con.simple_bind_s(dn, pw)
|
||||||
# search by e-mail address
|
# search by e-mail address
|
||||||
filter = '(&(mail=' + ldap.filter.escape_filter_chars( username ) + \
|
filter = '(&(mail=%s)(%s))' % (ldap.filter.escape_filter_chars(username),
|
||||||
')(' + filterstr + '))'
|
filterstr)
|
||||||
# find the uid
|
# find the uid
|
||||||
attrs = ['uid']
|
attrs = ['uid']
|
||||||
if manage_user:
|
if manage_user:
|
||||||
attrs.extend( [user_firstname_attrib,
|
attrs.extend([user_firstname_attrib,
|
||||||
user_lastname_attrib,
|
user_lastname_attrib,
|
||||||
user_mail_attrib] )
|
user_mail_attrib])
|
||||||
# perform the actual search
|
# perform the actual search
|
||||||
company_search_result = con.search_s( ldap_basedn,
|
company_search_result = con.search_s(ldap_basedn,
|
||||||
ldap.SCOPE_SUBTREE,
|
ldap.SCOPE_SUBTREE,
|
||||||
filter, attrs )
|
filter, attrs)
|
||||||
dn = company_search_result[0][0]
|
dn = company_search_result[0][0]
|
||||||
result = company_search_result[0][1]
|
result = company_search_result[0][1]
|
||||||
# perform the real authentication test
|
# perform the real authentication test
|
||||||
con.simple_bind_s( dn, password )
|
con.simple_bind_s(dn, password)
|
||||||
|
|
||||||
if ldap_mode == 'uid_r':
|
if ldap_mode == 'uid_r':
|
||||||
# OpenLDAP (UID) with subtree search and multiple DNs
|
# OpenLDAP (UID) with subtree search and multiple DNs
|
||||||
if type( ldap_basedn ) == type( [] ):
|
if isinstance(ldap_basedn, list):
|
||||||
basedns = ldap_basedn
|
basedns = ldap_basedn
|
||||||
else:
|
else:
|
||||||
basedns = [ldap_basedn]
|
basedns = [ldap_basedn]
|
||||||
filter = '(&(uid=%s)(%s))' % ( ldap.filter.escape_filter_chars( username ), filterstr )
|
filter = '(&(uid=%s)(%s))' % (ldap.filter.escape_filter_chars(username), filterstr)
|
||||||
finded = False
|
found = False
|
||||||
for basedn in basedns:
|
for basedn in basedns:
|
||||||
try:
|
try:
|
||||||
result = con.search_s( basedn, ldap.SCOPE_SUBTREE, filter )
|
result = con.search_s(basedn, ldap.SCOPE_SUBTREE,
|
||||||
|
filter)
|
||||||
if result:
|
if result:
|
||||||
user_dn = result[0][0]
|
user_dn = result[0][0]
|
||||||
# Check the password
|
# Check the password
|
||||||
con.simple_bind_s( user_dn, password )
|
con.simple_bind_s(user_dn, password)
|
||||||
finded = True
|
found = True
|
||||||
break
|
break
|
||||||
except ldap.LDAPError, detail:
|
except ldap.LDAPError, detail:
|
||||||
( exc_type, exc_value ) = sys.exc_info()[:2]
|
(exc_type, exc_value) = sys.exc_info()[:2]
|
||||||
logger.warning( "ldap_auth: searching %s for %s resulted in %s: %s\n" %
|
logger.warning("ldap_auth: searching %s for %s resulted in %s: %s\n" %
|
||||||
( basedn, filter, exc_type, exc_value ) )
|
(basedn, filter, exc_type, exc_value))
|
||||||
if not finded:
|
if not found:
|
||||||
logger.warning( 'User [%s] not found!' % username )
|
logger.warning('User [%s] not found!' % username)
|
||||||
return False
|
return False
|
||||||
result = result[0][1]
|
result = result[0][1]
|
||||||
if ldap_mode == 'custom':
|
if ldap_mode == 'custom':
|
||||||
# OpenLDAP (username_attrs) with subtree search and multiple DNs
|
# OpenLDAP (username_attrs) with subtree search and
|
||||||
if type( ldap_basedn ) == type( [] ):
|
# multiple DNs
|
||||||
|
if isinstance(ldap_basedn, list):
|
||||||
basedns = ldap_basedn
|
basedns = ldap_basedn
|
||||||
else:
|
else:
|
||||||
basedns = [ldap_basedn]
|
basedns = [ldap_basedn]
|
||||||
filter = '(&(%s=%s)(%s))' % ( username_attrib, ldap.filter.escape_filter_chars( username ), filterstr )
|
filter = '(&(%s=%s)(%s))' % (username_attrib,
|
||||||
|
ldap.filter.escape_filter_chars(username),
|
||||||
|
filterstr)
|
||||||
if custom_scope == 'subtree':
|
if custom_scope == 'subtree':
|
||||||
ldap_scope = ldap.SCOPE_SUBTREE
|
ldap_scope = ldap.SCOPE_SUBTREE
|
||||||
elif custom_scope == 'base':
|
elif custom_scope == 'base':
|
||||||
ldap_scope = ldap.SCOPE_BASE
|
ldap_scope = ldap.SCOPE_BASE
|
||||||
elif custom_scope == 'onelevel':
|
elif custom_scope == 'onelevel':
|
||||||
ldap_scope = ldap.SCOPE_ONELEVEL
|
ldap_scope = ldap.SCOPE_ONELEVEL
|
||||||
finded = False
|
found = False
|
||||||
for basedn in basedns:
|
for basedn in basedns:
|
||||||
try:
|
try:
|
||||||
result = con.search_s( basedn, ldap_scope, filter )
|
result = con.search_s(basedn, ldap_scope, filter)
|
||||||
if result:
|
if result:
|
||||||
user_dn = result[0][0]
|
user_dn = result[0][0]
|
||||||
# Check the password
|
# Check the password
|
||||||
con.simple_bind_s( user_dn, password )
|
con.simple_bind_s(user_dn, password)
|
||||||
finded = True
|
found = True
|
||||||
break
|
break
|
||||||
except ldap.LDAPError, detail:
|
except ldap.LDAPError, detail:
|
||||||
( exc_type, exc_value ) = sys.exc_info()[:2]
|
(exc_type, exc_value) = sys.exc_info()[:2]
|
||||||
logger.warning( "ldap_auth: searching %s for %s resulted in %s: %s\n" %
|
logger.warning("ldap_auth: searching %s for %s resulted in %s: %s\n" %
|
||||||
( basedn, filter, exc_type, exc_value ) )
|
(basedn, filter, exc_type, exc_value))
|
||||||
if not finded:
|
if not found:
|
||||||
logger.warning( 'User [%s] not found!' % username )
|
logger.warning('User [%s] not found!' % username)
|
||||||
return False
|
return False
|
||||||
result = result[0][1]
|
result = result[0][1]
|
||||||
if manage_user:
|
if manage_user:
|
||||||
logger.info( '[%s] Manage user data' % str( username ) )
|
logger.info('[%s] Manage user data' % str(username))
|
||||||
try:
|
try:
|
||||||
if not user_firstname_part == None:
|
if user_firstname_part is not None:
|
||||||
store_user_firstname = result[user_firstname_attrib][0].split( ' ', 1 )[user_firstname_part]
|
store_user_firstname = result[user_firstname_attrib][0].split(' ', 1)[user_firstname_part]
|
||||||
else:
|
else:
|
||||||
store_user_firstname = result[user_firstname_attrib][0]
|
store_user_firstname = result[user_firstname_attrib][0]
|
||||||
except KeyError, e:
|
except KeyError, e:
|
||||||
store_user_firstname = None
|
store_user_firstname = None
|
||||||
try:
|
try:
|
||||||
if not user_lastname_part == None:
|
if user_lastname_part is not None:
|
||||||
store_user_lastname = result[user_lastname_attrib][0].split( ' ', 1 )[user_lastname_part]
|
store_user_lastname = result[user_lastname_attrib][0].split(' ', 1)[user_lastname_part]
|
||||||
else:
|
else:
|
||||||
store_user_lastname = result[user_lastname_attrib][0]
|
store_user_lastname = result[user_lastname_attrib][0]
|
||||||
except KeyError, e:
|
except KeyError, e:
|
||||||
@@ -374,253 +388,249 @@ def ldap_auth( server = 'ldap', port = None,
|
|||||||
#
|
#
|
||||||
# user as username
|
# user as username
|
||||||
# #################
|
# #################
|
||||||
user_in_db = db( db.auth_user.username == username )
|
user_in_db = db(db.auth_user.username == username)
|
||||||
if user_in_db.count() > 0:
|
if user_in_db.count() > 0:
|
||||||
user_in_db.update( first_name = store_user_firstname,
|
user_in_db.update(first_name=store_user_firstname,
|
||||||
last_name = store_user_lastname,
|
last_name=store_user_lastname,
|
||||||
email = store_user_mail )
|
email=store_user_mail)
|
||||||
else:
|
else:
|
||||||
db.auth_user.insert( first_name = store_user_firstname,
|
db.auth_user.insert(first_name=store_user_firstname,
|
||||||
last_name = store_user_lastname,
|
last_name=store_user_lastname,
|
||||||
email = store_user_mail,
|
email=store_user_mail,
|
||||||
username = username )
|
username=username)
|
||||||
except:
|
except:
|
||||||
#
|
#
|
||||||
# user as email
|
# user as email
|
||||||
# ##############
|
# ##############
|
||||||
user_in_db = db( db.auth_user.email == username )
|
user_in_db = db(db.auth_user.email == username)
|
||||||
if user_in_db.count() > 0:
|
if user_in_db.count() > 0:
|
||||||
user_in_db.update( first_name = store_user_firstname,
|
user_in_db.update(first_name=store_user_firstname,
|
||||||
last_name = store_user_lastname,
|
last_name=store_user_lastname)
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
db.auth_user.insert( first_name = store_user_firstname,
|
db.auth_user.insert(first_name=store_user_firstname,
|
||||||
last_name = store_user_lastname,
|
last_name=store_user_lastname,
|
||||||
email = username
|
email=username)
|
||||||
)
|
|
||||||
con.unbind()
|
con.unbind()
|
||||||
|
|
||||||
if manage_groups:
|
if manage_groups:
|
||||||
if not do_manage_groups( username,password ):
|
if not do_manage_groups(username, password):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
except ldap.LDAPError, e:
|
except ldap.LDAPError, e:
|
||||||
import traceback
|
import traceback
|
||||||
logger.warning( '[%s] Error in ldap processing' % str( username ) )
|
logger.warning('[%s] Error in ldap processing' % str(username))
|
||||||
logger.debug( traceback.format_exc() )
|
logger.debug(traceback.format_exc())
|
||||||
return False
|
return False
|
||||||
except IndexError, ex: # for AD membership test
|
except IndexError, ex: # for AD membership test
|
||||||
import traceback
|
import traceback
|
||||||
logger.warning( '[%s] Ldap result indexing error' % str( username ) )
|
logger.warning('[%s] Ldap result indexing error' % str(username))
|
||||||
logger.debug( traceback.format_exc() )
|
logger.debug(traceback.format_exc())
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def is_user_in_allowed_groups( username,
|
def is_user_in_allowed_groups(username,
|
||||||
password = None,
|
password=None,
|
||||||
allowed_groups = allowed_groups
|
allowed_groups=allowed_groups):
|
||||||
):
|
"""
|
||||||
'''
|
Figure out if the username is a member of an allowed group
|
||||||
Figure out if the username is a member of an allowed group in ldap or not
|
in ldap or not
|
||||||
'''
|
"""
|
||||||
#
|
#
|
||||||
# Get all group name where the user is in actually in ldap
|
# Get all group name where the user is in actually in ldap
|
||||||
# #########################################################
|
# #########################################################
|
||||||
ldap_groups_of_the_user = get_user_groups_from_ldap( username, password )
|
ldap_groups_of_the_user = get_user_groups_from_ldap(username, password)
|
||||||
|
|
||||||
# search for allowed group names
|
# search for allowed group names
|
||||||
if type( allowed_groups ) != type( list() ):
|
if type(allowed_groups) != type(list()):
|
||||||
allowed_groups = [allowed_groups]
|
allowed_groups = [allowed_groups]
|
||||||
for group in allowed_groups:
|
for group in allowed_groups:
|
||||||
if ldap_groups_of_the_user.count( group ) > 0:
|
if ldap_groups_of_the_user.count(group) > 0:
|
||||||
# Match
|
# Match
|
||||||
return True
|
return True
|
||||||
# No match
|
# No match
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def do_manage_groups( username,
|
def do_manage_groups(username,
|
||||||
password = None,
|
password=None,
|
||||||
db = db,
|
db=db):
|
||||||
):
|
"""
|
||||||
'''
|
Manage user groups
|
||||||
Manage user groups
|
|
||||||
|
|
||||||
Get all user's group from ldap and refresh the already stored
|
Get all user's group from ldap and refresh the already stored
|
||||||
ones in web2py's application database or create new groups
|
ones in web2py's application database or create new groups
|
||||||
according to ldap.
|
according to ldap.
|
||||||
'''
|
"""
|
||||||
logger.info( '[%s] Manage user groups' % str( username ) )
|
logger.info('[%s] Manage user groups' % str(username))
|
||||||
try:
|
try:
|
||||||
#
|
#
|
||||||
# Get all group name where the user is in actually in ldap
|
# Get all group name where the user is in actually in ldap
|
||||||
# #########################################################
|
# #########################################################
|
||||||
ldap_groups_of_the_user = get_user_groups_from_ldap( username, password )
|
ldap_groups_of_the_user = get_user_groups_from_ldap(username, password)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Get all group name where the user is in actually in local db
|
# Get all group name where the user is in actually in local db
|
||||||
# #############################################################
|
# #############################################################
|
||||||
try:
|
try:
|
||||||
db_user_id = db( db.auth_user.username == username ).select( db.auth_user.id ).first().id
|
db_user_id = db(db.auth_user.username == username).select(db.auth_user.id).first().id
|
||||||
except:
|
except:
|
||||||
try:
|
try:
|
||||||
db_user_id = db( db.auth_user.email == username ).select( db.auth_user.id ).first().id
|
db_user_id = db(db.auth_user.email == username).select(db.auth_user.id).first().id
|
||||||
except AttributeError, e:
|
except AttributeError, e:
|
||||||
#
|
#
|
||||||
# There is no user in local db
|
# There is no user in local db
|
||||||
# We create one
|
# We create one
|
||||||
# ##############################
|
# ##############################
|
||||||
try:
|
try:
|
||||||
db_user_id = db.auth_user.insert( username = username,
|
db_user_id = db.auth_user.insert(username=username,
|
||||||
first_name = username )
|
first_name=username)
|
||||||
except AttributeError, e:
|
except AttributeError, e:
|
||||||
db_user_id = db.auth_user.insert( email = username,
|
db_user_id = db.auth_user.insert(email=username,
|
||||||
first_name = username )
|
first_name=username)
|
||||||
if not db_user_id:
|
if not db_user_id:
|
||||||
logging.error( 'There is no username or email for %s!' % username )
|
logging.error('There is no username or email for %s!' % username)
|
||||||
raise
|
raise
|
||||||
db_group_search = db( ( db.auth_membership.user_id == db_user_id ) & \
|
db_group_search = db((db.auth_membership.user_id == db_user_id) &
|
||||||
( db.auth_user.id == db.auth_membership.user_id ) & \
|
(db.auth_user.id == db.auth_membership.user_id) &
|
||||||
( db.auth_group.id == db.auth_membership.group_id ) )
|
(db.auth_group.id == db.auth_membership.group_id))
|
||||||
db_groups_of_the_user = list()
|
db_groups_of_the_user = list()
|
||||||
db_group_id = dict()
|
db_group_id = dict()
|
||||||
|
|
||||||
if db_group_search.count() > 0:
|
if db_group_search.count() > 0:
|
||||||
for group in db_group_search.select( db.auth_group.id, db.auth_group.role, distinct = True ):
|
for group in db_group_search.select(db.auth_group.id,
|
||||||
|
db.auth_group.role,
|
||||||
|
distinct=True):
|
||||||
db_group_id[group.role] = group.id
|
db_group_id[group.role] = group.id
|
||||||
db_groups_of_the_user.append( group.role )
|
db_groups_of_the_user.append(group.role)
|
||||||
logging.debug( 'db groups of user %s: %s' % ( username, str( db_groups_of_the_user ) ) )
|
logging.debug('db groups of user %s: %s' %
|
||||||
|
(username, str(db_groups_of_the_user)))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Delete user membership from groups where user is not anymore
|
# Delete user membership from groups where user is not anymore
|
||||||
# #############################################################
|
# #############################################################
|
||||||
for group_to_del in db_groups_of_the_user:
|
for group_to_del in db_groups_of_the_user:
|
||||||
if ldap_groups_of_the_user.count( group_to_del ) == 0:
|
if ldap_groups_of_the_user.count(group_to_del) == 0:
|
||||||
db( ( db.auth_membership.user_id == db_user_id ) & \
|
db((db.auth_membership.user_id == db_user_id) &
|
||||||
( db.auth_membership.group_id == db_group_id[group_to_del] ) ).delete()
|
(db.auth_membership.group_id == db_group_id[group_to_del])).delete()
|
||||||
|
|
||||||
#
|
#
|
||||||
# Create user membership in groups where user is not in already
|
# Create user membership in groups where user is not in already
|
||||||
# ##############################################################
|
# ##############################################################
|
||||||
for group_to_add in ldap_groups_of_the_user:
|
for group_to_add in ldap_groups_of_the_user:
|
||||||
if db_groups_of_the_user.count( group_to_add ) == 0:
|
if db_groups_of_the_user.count(group_to_add) == 0:
|
||||||
if db( db.auth_group.role == group_to_add ).count() == 0:
|
if db(db.auth_group.role == group_to_add).count() == 0:
|
||||||
gid = db.auth_group.insert( role = group_to_add,
|
gid = db.auth_group.insert(role=group_to_add,
|
||||||
description = 'Generated from LDAP' )
|
description='Generated from LDAP')
|
||||||
else:
|
else:
|
||||||
gid = db( db.auth_group.role == group_to_add ).select( db.auth_group.id ).first().id
|
gid = db(db.auth_group.role == group_to_add).select(db.auth_group.id).first().id
|
||||||
db.auth_membership.insert( user_id = db_user_id,
|
db.auth_membership.insert(user_id=db_user_id,
|
||||||
group_id = gid )
|
group_id=gid)
|
||||||
except:
|
except:
|
||||||
logger.warning( "[%s] Groups are not managed successully!" % str( username ) )
|
logger.warning("[%s] Groups are not managed successfully!" %
|
||||||
|
str(username))
|
||||||
import traceback
|
import traceback
|
||||||
logger.debug( traceback.format_exc() )
|
logger.debug(traceback.format_exc())
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def init_ldap(
|
def init_ldap(ldap_server=server,
|
||||||
ldap_server = server,
|
ldap_port=port,
|
||||||
ldap_port = port,
|
ldap_basedn=base_dn,
|
||||||
ldap_basedn = base_dn,
|
ldap_mode=mode,
|
||||||
ldap_mode = mode,
|
secure=secure,
|
||||||
secure = secure,
|
cert_path=cert_path,
|
||||||
cert_path = cert_path,
|
cert_file=cert_file):
|
||||||
cert_file = cert_file
|
"""
|
||||||
):
|
Inicialize ldap connection
|
||||||
'''
|
"""
|
||||||
Inicialize ldap connection
|
logger.info('[%s] Initialize ldap connection' % str(ldap_server))
|
||||||
'''
|
|
||||||
logger.info( '[%s] Inicialize ldap connection' % str( ldap_server ) )
|
|
||||||
if secure:
|
if secure:
|
||||||
if not ldap_port:
|
if not ldap_port:
|
||||||
ldap_port = 636
|
ldap_port = 636
|
||||||
con = ldap.initialize(
|
con = ldap.initialize(
|
||||||
"ldaps://" + ldap_server + ":" + str( ldap_port ) )
|
"ldaps://" + ldap_server + ":" + str(ldap_port))
|
||||||
if cert_path:
|
if cert_path:
|
||||||
con.set_option( ldap.OPT_X_TLS_CACERTDIR, cert_path )
|
con.set_option(ldap.OPT_X_TLS_CACERTDIR, cert_path)
|
||||||
if cert_file:
|
if cert_file:
|
||||||
con.set_option( ldap.OPT_X_TLS_CACERTFILE, cert_file )
|
con.set_option(ldap.OPT_X_TLS_CACERTFILE, cert_file)
|
||||||
else:
|
else:
|
||||||
if not ldap_port:
|
if not ldap_port:
|
||||||
ldap_port = 389
|
ldap_port = 389
|
||||||
con = ldap.initialize(
|
con = ldap.initialize(
|
||||||
"ldap://" + ldap_server + ":" + str( ldap_port ) )
|
"ldap://" + ldap_server + ":" + str(ldap_port))
|
||||||
return con
|
return con
|
||||||
|
|
||||||
def get_user_groups_from_ldap( username,
|
def get_user_groups_from_ldap(username,
|
||||||
password = None,
|
password=None,
|
||||||
base_dn = base_dn,
|
base_dn=base_dn,
|
||||||
ldap_binddn = bind_dn,
|
ldap_binddn=bind_dn,
|
||||||
ldap_bindpw = bind_pw,
|
ldap_bindpw=bind_pw,
|
||||||
group_dn = group_dn,
|
group_dn=group_dn,
|
||||||
group_name_attrib = group_name_attrib,
|
group_name_attrib=group_name_attrib,
|
||||||
group_member_attrib = group_member_attrib,
|
group_member_attrib=group_member_attrib,
|
||||||
group_filterstr = group_filterstr,
|
group_filterstr=group_filterstr,
|
||||||
ldap_mode = mode
|
ldap_mode=mode):
|
||||||
):
|
"""
|
||||||
'''
|
Get all group names from ldap where the user is in
|
||||||
Get all group names from ldap where the user is in
|
"""
|
||||||
'''
|
logger.info('[%s] Get user groups from ldap' % str(username))
|
||||||
logger.info( '[%s] Get user groups from ldap' % str( username ) )
|
|
||||||
#
|
#
|
||||||
# Get all group name where the user is in actually in ldap
|
# Get all group name where the user is in actually in ldap
|
||||||
# #########################################################
|
# #########################################################
|
||||||
# Inicialize ldap
|
# Initialize ldap
|
||||||
if not group_dn:
|
if not group_dn:
|
||||||
group_dn = base_dn
|
group_dn = base_dn
|
||||||
con = init_ldap()
|
con = init_ldap()
|
||||||
logger.debug('Username init: [%s]'%username)
|
logger.debug('Username init: [%s]' % username)
|
||||||
if ldap_mode=='ad':
|
if ldap_mode == 'ad':
|
||||||
#
|
#
|
||||||
# Get the AD username
|
# Get the AD username
|
||||||
# ####################
|
# ####################
|
||||||
if '@' not in username:
|
if '@' not in username:
|
||||||
domain = []
|
domain = []
|
||||||
for x in base_dn.split( ',' ):
|
for x in base_dn.split(','):
|
||||||
if "DC=" in x.upper():
|
if "DC=" in x.upper():
|
||||||
domain.append( x.split( '=' )[-1] )
|
domain.append(x.split('=')[-1])
|
||||||
username = "%s@%s" % ( username, '.'.join( domain ) )
|
username = "%s@%s" % (username, '.'.join(domain))
|
||||||
username_bare = username.split( "@" )[0]
|
username_bare = username.split("@")[0]
|
||||||
con.set_option( ldap.OPT_PROTOCOL_VERSION, 3 )
|
con.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
|
||||||
# In cases where ForestDnsZones and DomainDnsZones are found,
|
# In cases where ForestDnsZones and DomainDnsZones are found,
|
||||||
# result will look like the following:
|
# result will look like the following:
|
||||||
# ['ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com']
|
# ['ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com']
|
||||||
if ldap_binddn:
|
if ldap_binddn:
|
||||||
# need to search directory with an admin account 1st
|
# need to search directory with an admin account 1st
|
||||||
con.simple_bind_s( ldap_binddn, ldap_bindpw )
|
con.simple_bind_s(ldap_binddn, ldap_bindpw)
|
||||||
logger.debug('Ldap bind connect...')
|
logger.debug('Ldap bind connect...')
|
||||||
else:
|
else:
|
||||||
# credentials should be in the form of username@domain.tld
|
# credentials should be in the form of username@domain.tld
|
||||||
con.simple_bind_s( username, password )
|
con.simple_bind_s(username, password)
|
||||||
logger.debug('Ldap username connect...')
|
logger.debug('Ldap username connect...')
|
||||||
# We have to use the full string
|
# We have to use the full string
|
||||||
username = con.search_ext_s(
|
username = con.search_ext_s(base_dn, ldap.SCOPE_SUBTREE,
|
||||||
base_dn, ldap.SCOPE_SUBTREE,
|
"(&(sAMAccountName=%s)(%s))" %
|
||||||
"(&(sAMAccountName=%s)(%s))" % ( ldap.filter.escape_filter_chars( username_bare ), filterstr ), ["cn"] )[0][0]
|
(ldap.filter.escape_filter_chars(username_bare), filterstr), ["cn"])[0][0]
|
||||||
else:
|
else:
|
||||||
if ldap_binddn:
|
if ldap_binddn:
|
||||||
# need to search directory with an bind_dn account 1st
|
# need to search directory with an bind_dn account 1st
|
||||||
con.simple_bind_s( ldap_binddn, ldap_bindpw )
|
con.simple_bind_s(ldap_binddn, ldap_bindpw)
|
||||||
else:
|
else:
|
||||||
# bind as anonymous
|
# bind as anonymous
|
||||||
con.simple_bind_s( '', '' )
|
con.simple_bind_s('', '')
|
||||||
|
|
||||||
# search for groups where user is in
|
# search for groups where user is in
|
||||||
filter = '(&(%s=%s)(%s))' % ( ldap.filter.escape_filter_chars( group_member_attrib ),
|
filter = '(&(%s=%s)(%s))' % (ldap.filter.escape_filter_chars(group_member_attrib),
|
||||||
ldap.filter.escape_filter_chars( username ),
|
ldap.filter.escape_filter_chars(username),
|
||||||
group_filterstr )
|
group_filterstr)
|
||||||
group_search_result = con.search_s( group_dn,
|
group_search_result = con.search_s(group_dn,
|
||||||
ldap.SCOPE_SUBTREE,
|
ldap.SCOPE_SUBTREE,
|
||||||
filter, [group_name_attrib] )
|
filter, [group_name_attrib])
|
||||||
ldap_groups_of_the_user = list()
|
ldap_groups_of_the_user = list()
|
||||||
for group_row in group_search_result:
|
for group_row in group_search_result:
|
||||||
group = group_row[1]
|
group = group_row[1]
|
||||||
ldap_groups_of_the_user.extend( group[group_name_attrib] )
|
ldap_groups_of_the_user.extend(group[group_name_attrib])
|
||||||
|
|
||||||
con.unbind()
|
con.unbind()
|
||||||
logger.debug('User groups: %s' % ldap_groups_of_the_user )
|
logger.debug('User groups: %s' % ldap_groups_of_the_user)
|
||||||
return list( ldap_groups_of_the_user )
|
return list(ldap_groups_of_the_user)
|
||||||
|
|
||||||
|
if filterstr[0] == '(' and filterstr[-1] == ')': # rfc4515 syntax
|
||||||
if filterstr[0] == '(' and filterstr[-1] == ')': # rfc4515 syntax
|
filterstr = filterstr[1:-1] # parens added again where used
|
||||||
filterstr = filterstr[1:-1] # parens added again where used
|
|
||||||
return ldap_auth_aux
|
return ldap_auth_aux
|
||||||
|
|
||||||
@@ -1,35 +1,82 @@
|
|||||||
<html><body><h1>Markmin markup language</h1><h2>About</h2><p>This is a new markup language that we call markmin designed to produce high quality scientific papers and books and also put them online. We provide serializers for html, latex and pdf. It is implemented in the <code class="">markmin2html</code> function in the <code class="">markmin2html.py</code>.</p><p>Example of usage:</p><pre><code class="">>>> m = "Hello **world** [[link http://web2py.com]]"
|
<html><body>
|
||||||
>>> from markmin2html import markmin2html
|
<style>
|
||||||
>>> print markmin2html(m)
|
blockquote { background-color: lime; }
|
||||||
>>> from markmin2latex import markmin2latex
|
thead { color: white; background-color: gray; text-align: center; }
|
||||||
>>> print markmin2latex(m)
|
tfoot { color: white; background-color: gray; }
|
||||||
>>> from markmin2pdf import markmin2pdf # requires pdflatex
|
|
||||||
>>> print markmin2pdf(m)</code></pre><h2>Why?</h2><p>We wanted a markup language with the following requirements:</p><ul><li>less than 100 lines of functional code</li><li>easy to read</li><li>secure</li><li>support table, ul, ol, code</li><li>support html5 video and audio elements (html serialization only)</li><li>can align images and resize them</li><li>can specify class for tables and code elements</li><li>can add anchors</li><li>does not use _ for markup (since it creates odd behavior)</li><li>automatically links urls</li><li>fast</li><li>easy to extend</li><li>supports latex and pdf including references</li><li>allows to describe the markup in the markup (this document is generated from markmin syntax)</li></ul><p>(results depend on text but in average for text ~100K markmin is 30% faster than markdown, for text ~10K it is 10x faster)</p><p>The <a href="http://www.lulu.com/product/paperback/web2py-%283rd-edition%29/12822827">web2py book</a> published by lulu, for example, was entirely generated with markmin2pdf from the online <a href="http://www.web2py.com/book">web2py wiki</a></p><h2>Download</h2><ul><li>http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2html.py</li><li>http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2latex.py</li><li>http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2pdf.py</li></ul><p>markmin2html.py and markmin2latex.py are single files and have no web2py dependence. Their license is BSD.</p><h2>Examples</h2><h3>Bold, italic, code and links</h3><table class=""><tr><td><b>SOURCE</b> </td><td><b>OUTPUT</b></td></tr><tr><td><code class=""># title</code> </td><td><b>title</b></td></tr><tr><td><code class="">## section</code> </td><td><b>section</b></td></tr><tr><td><code class="">### subsection</code> </td><td><b>subsection</b></td></tr><tr><td><code class="">**bold**</code> </td><td><b>bold</b></td></tr><tr><td><code class="">''italic''</code> </td><td><i>italic</i></td></tr><tr><td><code class="">``verbatim``</code> </td><td><code class="">verbatim</code></td></tr><tr><td><code class="">http://google.com</code> </td><td>http://google.com</td></tr><tr><td><code class="">[[click me #myanchor]]</code></td><td><a href="#myanchor">click me</a></td></tr></table>
|
.tableclass1 { background-color: yellow; }
|
||||||
<h3>More on links</h3><p>The format is always <code class="">[[title link]]</code>. Notice you can nest bold, italic and code inside the link title.</p><h3>Anchors <span id="myanchor"><span></h3><p>You can place an anchor anywhere in the text using the syntax <code class="">[[name]]</code> where <i>name</i> is the name of the anchor.
|
.tableclass1 thead { color: yellow; background-color: green; }
|
||||||
You can then link the anchor with <a href="#myanchor">link</a>, i.e. <code class="">[[link #myanchor]]</code>.</p><h3>Images</h3><p><img src="http://www.web2py.com/examples/static/web2py_logo.png" alt="some image" align="right" width="200px" />
|
.tableclass1 tfoot { color: yellow; background-color: green; }
|
||||||
This paragraph has an image aligned to the right with a width of 200px. Its is placed using the code</p><p><code class="">[[some image http://www.web2py.com/examples/static/web2py_logo.png right 200px]]</code>.</p><h3>Unordered Lists</h3><pre><code class="">- Dog
|
|
||||||
|
td.num { text-align: right; }
|
||||||
|
pre { background-color: #E0E0E0; }
|
||||||
|
</style>
|
||||||
|
<h1>Markmin markup language</h1><h2>About</h2><p>This is a new markup language that we call markmin designed to produce high quality scientific papers and books and also put them online. We provide serializers for html, latex and pdf. It is implemented in the <code>markmin2html</code> function in the <code>markmin2html.py</code>.</p><p>Example of usage:</p><pre><code>m = "Hello **world** [[link http://web2py.com]]"
|
||||||
|
from markmin2html import markmin2html
|
||||||
|
print markmin2html(m)
|
||||||
|
from markmin2latex import markmin2latex
|
||||||
|
print markmin2latex(m)
|
||||||
|
from markmin2pdf import markmin2pdf # requires pdflatex
|
||||||
|
print markmin2pdf(m)</code></pre> ====================<h1>This is a test block with new features:</h1><p>This is a blockquote with a list with tables in it:</p><blockquote class="blockquoteclass" id="markmin_blockquoteid">This is a paragraph before list. You can continue paragraph on the next lines.<br />This is an ordered list with tables:<ol><li>Item 1</li><li>Item 2</li><li><table class="tableclass1" id="markmin_tableid1"><tbody><tr><td>aa</td><td>bb</td><td>cc</td></tr><tr><td class="num">11</td><td class="num">22</td><td class="num">33</td></tr></tbody></table></li><li>Item 4 <table class="tableclass1"><thead><tr><td>T1</td><td>T2</td><td>t3</td></tr></thead><tbody><tr><td>aaa</td><td>bbb</td><td>ccc</td></tr><tr><td>ddd</td><td>fff</td><td>ggg</td></tr><tr><td class="num">123</td><td class="num">0</td><td class="num">5.0</td></tr></tbody></table></li></ol></blockquote><p>This this a new paragraph with a table. Table has header and footer:</p><table class="tableclass1" id="markmin_tableid2"><thead><tr><td><strong>Title 1</strong></td><td><strong>Title 2</strong></td><td><strong>Title 3</strong></td></tr></thead><tbody><tr><td>data 1</td><td>data 2</td><td class="num">2.00</td></tr><tr><td>data 4</td><td>data5(long)</td><td class="num">23.00</td></tr><tr><td></td><td>data 8</td><td class="num">33.50</td></tr></tbody><tfoot><tr><td>Total:</td><td>3 items</td><td class="num">58.50</td></tr></tfoot></table><h2>Multilevel lists</h2><p>Now lists can be multilevel:</p><ol><li>Ordered item 1 on level 1. You can continue item text on next strings<ol><li><p>Ordered item 1 of sublevel 2 with a paragraph (paragraph can start with point after plus or minus characters, e.g. <strong>++.</strong> or <strong>--.</strong>)</p><li><p>This is another item. But with 3 paragraphs, blockquote and sublists:</p><p>This is the second paragraph in the item. You can add paragraphs to an item, using point notation, where first characters in the string are sequence of points with space between them and another string. For example, this paragraph (in sublevel 2) starts with two points:</p><code>.. This is the second paragraph...</code><blockquote><h3>this is a blockquote in a list</h3>You can use blockquote with headers, paragraphs, tables and lists in it:<br />Tables can have or have not header and footer. This table is defined without any header and footer in it:<table><tbody><tr><td>red</td><td>fox</td><td class="num">0</td></tr><tr><td>blue</td><td>dolphin</td><td class="num">1000</td></tr><tr><td>green</td><td>leaf</td><td class="num">10000</td></tr></tbody></table></blockquote><p>This is yet another paragraph in the item.</p><ul><li>This is an item of unordered list <strong>(sublevel 3)</strong></li><li>This is the second item of the unordered list <em>(sublevel 3)</em><ol><ol><ol><li>This is a single item of ordered list in sublevel 6</li></ol></ol><p>and this is a paragraph in sublevel 4</p></ol></li><li><p>This is a new item with paragraph in sublevel 3.</p><ol><li>Start ordered list in sublevel 4 with code block: <pre><code>line 1
|
||||||
|
line 2
|
||||||
|
line 3</code></pre></li><li><p>Yet another item with code block:</p><pre><code> line 1
|
||||||
|
line 2
|
||||||
|
line 3</code></pre> This item finishes with this paragraph.</li></ol><p>Item in sublevel 3 can be continued with paragraphs.</p><pre><code> this is another
|
||||||
|
code block
|
||||||
|
in the
|
||||||
|
sublevel 3 item</code></pre></li></ul><ol><li>The last item in sublevel 3</li></ol><p>This is a continuous paragraph for item 2 in sublevel 2. You can use such structure to create difficult structured documents.</p><li>item 3 in sublevel 2</li></li></li></ol><ul><li>item 1 in sublevel 2 (new unordered list)</li><li>item 2 in sublevel 2</li><li>item 3 in sublevel 2</li></ul><ol><li>item 1 in sublevel 2 (new ordered list)</li><li>item 2 in sublevel 2</li><li>item 3 in sublevle 2</li></ol></li><li>item 2 in level 1</li><li>item 3 in level 1</li></ol><ul><li>new unordered list (item 1 in level 1)</li><li>level 2 in level 1</li><li>level 3 in level 1</li><li>level 4 in level 1</li></ul><h2>This is the last section of the test</h2><p>Single paragraph with '----' in it will be turned into separator:</p><hr /><p>And this is the last paragraph in the test. Be happy!</p><p>====================</p><h2>Why?</h2><p>We wanted a markup language with the following requirements:</p><ul><li>less than 300 lines of functional code</li><li>easy to read</li><li>secure</li><li>support table, ul, ol, code</li><li>support html5 video and audio elements (html serialization only)</li><li>can align images and resize them</li><li>can specify class for tables and code elements</li><li>can add anchors</li><li>does not use _ for markup (since it creates odd behavior)</li><li>automatically links urls</li><li>fast</li><li>easy to extend</li><li>supports latex and pdf including references</li><li>allows to describe the markup in the markup (this document is generated from markmin syntax)</li></ul><p>(results depend on text but in average for text ~100K markmin is 30% faster than markdown, for text ~10K it is 10x faster)</p><p>The <a href="http://www.lulu.com/product/paperback/web2py-%283rd-edition%29/12822827">web2py book</a> published by lulu, for example, was entirely generated with markmin2pdf from the online <a href="http://www.web2py.com/book">web2py wiki</a></p><h2>Download</h2><ul><li><a href="http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2html.py">http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2html.py</a></li><li><a href="http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2latex.py">http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2latex.py</a></li><li><a href="http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2pdf.py">http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2pdf.py</a></li></ul><p>markmin2html.py and markmin2latex.py are single files and have no web2py dependence. Their license is BSD.</p><h2>Examples</h2><h3>Bold, italic, code and links</h3><table><thead><tr><td><strong>SOURCE</strong></td><td><strong>OUTPUT</strong></td></tr></thead><tbody><tr><td><code># title</code></td><td><strong>title</strong></td></tr><tr><td><code>## section</code></td><td><strong>section</strong></td></tr><tr><td><code>### subsection</code></td><td><strong>subsection</strong></td></tr><tr><td><code>**bold**</code></td><td><strong>bold</strong></td></tr><tr><td><code>''italic''</code></td><td><em>italic</em></td></tr><tr><td><code>~~strikeout~~</code></td><td><del>strikeout</del></td></tr><tr><td><code>``verbatim``</code></td><td><code>verbatim</code></td></tr><tr><td><code>``color with **bold**``:red</code></td><td><span style="color: red">color with <strong>bold</strong></span></td></tr><tr><td><code>``many colors``:color[blue:#ffff00]</code></td><td><span style="color: blue;background-color: #ffff00;">many colors</span></td></tr><tr><td><code>http://google.com</code></td><td><a href="http://google.com">http://google.com</a></td></tr><tr><td><code>[[**click** me #myanchor]]</code></td><td><a href="#myanchor"><strong>click</strong> me</a></td></tr><tr><td><code>[[click me [extra info] #myanchor popup]]</code></td><td><a href="#myanchor" title="extra info" target="_blank">click me</a></td></tr></tbody></table><h3>More on links</h3><p>The format is always <code>[[title link]]</code> or <code>[[title [extra] link]]</code>. Notice you can nest bold, italic, strikeout and code inside the link <code>title</code>.</p><h3>Anchors <span id="myanchor"></span></h3><p>You can place an anchor anywhere in the text using the syntax <code>[[name]]</code> where <em>name</em> is the name of the anchor. You can then link the anchor with <a href="#myanchor">link</a>, i.e. <code>[[link #myanchor]]</code> or <a href="#myanchor" title="extra info">link with an extra info</a>, i.e. <code>[[link with an extra info [extra info] #myanchor]]</code>.</p><h3>Images</h3><p><img src="http://www.web2py.com/examples/static/web2py_logo.png" alt="alt-string for the image" title="the image title" style="float:right" width="200px" /> This paragraph has an image aligned to the right with a width of 200px. Its is placed using the code</p><p><code>[[alt-string for the image [the image title] http://www.web2py.com/examples/static/web2py_logo.png right 200px]]</code>.</p><h3>Unordered Lists</h3><pre><code>- Dog
|
||||||
- Cat
|
- Cat
|
||||||
- Mouse</code></pre><p>is rendered as</p><ul><li>Dog</li><li>Cat</li><li>Mouse</li></ul><p>Two new lines between items break the list in two lists.</p><h3>Ordered Lists</h3><pre><code class="">+ Dog
|
- Mouse</code></pre><p>is rendered as</p><ul><li>Dog</li><li>Cat</li><li>Mouse</li></ul><p>Two new lines between items break the list in two lists.</p><h3>Ordered Lists</h3><pre><code>+ Dog
|
||||||
+ Cat
|
+ Cat
|
||||||
+ Mouse</code></pre><p>is rendered as</p><ol><li>Dog</li><li>Cat</li><li>Mouse</li></ol><h3>Tables</h3><p>Something like this
|
+ Mouse</code></pre><p>is rendered as</p><ol><li>Dog</li><li>Cat</li><li>Mouse</li></ol><h3>Multilevel Lists</h3><pre><code>+ Dogs
|
||||||
<pre><code class="">---------
|
-- red
|
||||||
**A** | **B** | **C**
|
-- brown
|
||||||
0 | 0 | X
|
-- black
|
||||||
0 | X | 0
|
+ Cats
|
||||||
X | 0 | 0
|
-- fluffy
|
||||||
-----:abc</code></pre>
|
-- smooth
|
||||||
is a table and is rendered as
|
-- bald
|
||||||
<table class="abc"><tr><td><b>A</b></td><td><b>B</b></td><td><b>C</b></td></tr><tr><td>0</td><td>0</td><td>X</td></tr><tr><td>0</td><td>X</td><td>0</td></tr><tr><td>X</td><td>0</td><td>0</td></tr></table>Four or more dashes delimit the table and | separates the columns.
|
+ Mice
|
||||||
The <code class="">:abc</code> at the end sets the class for the table and it is optional.</p><h3>Blockquote</h3><p>A table with a single cell is rendered as a blockquote:</p><blockquote class="">Hello world</blockquote>
|
-- small
|
||||||
<h3>Code, <code class=""><code></code>, escaping and extra stuff</h3><pre><code class="python">def test():
|
-- big
|
||||||
return "this is Python code"</code></pre><p>Optionally a ` inside a <code class="">``...``</code> block can be inserted escaped with !`!.
|
-- huge</code></pre><p>is rendered as</p><ol><li>Dogs<ul><li>red</li><li>brown</li><li>black</li></ul></li><li>Cats<ul><li>fluffy</li><li>smooth</li><li>bald</li></ul></li><li>Mice<ul><li>small</li><li>big</li><li>huge</li></ul></li></ol><h3>Tables (with optional header and/or footer)</h3><p>Something like this</p><pre><code>-----------------
|
||||||
The <code class="">:python</code> after the markup is also optional. If present, by default, it is used to set the class of the <code> block.
|
**A**|**B**|**C**
|
||||||
The behavior can be overridden by passing an argument <code class="">extra</code> to the <code class="">render</code> function. For example:</p><pre><code class="python">>>> markmin2html("``aaa``:custom",
|
=================
|
||||||
extra=dict(custom=lambda text: 'x'+text+'x'))</code></pre><p>generates</p><code class="python">'xaaax'</code><p>(the <code class="">``...``:custom</code> block is rendered by the <code class="">custom=lambda</code> function passed to <code class="">render</code>).</p><h3>Html5 support</h3><p>Markmin also supports the <video> and <audio> html5 tags using the notation:
|
0 | 0 | X
|
||||||
<pre><code class="">[[title link video]]
|
0 | X | 0
|
||||||
[[title link audio]]</code></pre></p><h3>Latex</h3><p>Formulas can be embedded into HTML with <code class="">$</code><code class="">$</code>formula<code class="">$</code><code class="">$</code>.
|
X | 0 | 0
|
||||||
You can use Google charts to render the formula:</p><pre><code class="">>>> LATEX = '<img src="http://chart.apis.google.com/chart?cht=tx&chl=%s" align="center"/>'
|
=================
|
||||||
>>> markmin2html(text,{'latex':lambda code: LATEX % code.replace('"','"')})</code></pre><h3>Citations and References</h3><p>Citations are treated as internal links in html and proper citations in latex if there is a final section called "References". Items like</p><pre><code class="">- [[key]] value</code></pre><p>in the References will be translated into Latex</p><pre><code class="">\bibitem{key} value</code></pre><p>Here is an example of usage:</p><pre><code class="">As shown in Ref.``mdipierro``:cite
|
**D**|**F**|**G**
|
||||||
|
-----------------:abc[id]</code></pre> is a table and is rendered as<table class="abc" id="markmin_id"><thead><tr><td><strong>A</strong></td><td><strong>B</strong></td><td><strong>C</strong></td></tr></thead><tbody><tr><td class="num">0</td><td class="num">0</td><td>X</td></tr><tr><td class="num">0</td><td>X</td><td class="num">0</td></tr><tr><td>X</td><td class="num">0</td><td class="num">0</td></tr></tbody><tfoot><tr><td><strong>D</strong></td><td><strong>F</strong></td><td><strong>G</strong></td></tr></tfoot></table> Four or more dashes delimit the table and | separates the columns. The <code>:abc</code>, <code>:id[abc_1]</code> or <code>:abc[abc_1]</code> at the end sets the class and/or id for the table and it is optional.<h3>Blockquote</h3><p>A table with a single cell is rendered as a blockquote:</p><blockquote>Hello world</blockquote><p>Blockquote can contain headers, paragraphs, lists and tables:</p><pre><code>-----
|
||||||
|
This is a paragraph in a blockquote
|
||||||
|
|
||||||
|
+ item 1
|
||||||
|
+ item 2
|
||||||
|
-- item 2.1
|
||||||
|
-- item 2.2
|
||||||
|
+ item 3
|
||||||
|
|
||||||
|
---------
|
||||||
|
0 | 0 | X
|
||||||
|
0 | X | 0
|
||||||
|
X | 0 | 0
|
||||||
|
---------:tableclass1
|
||||||
|
-----</code></pre><p>is rendered as:</p><blockquote>This is a paragraph in a blockquote<ol><li>item 1</li><li>item 2<ul><li>item 2.1</li><li>item 2.2</li></ul></li><li>item 3</li></ol><table class="tableclass1"><tbody><tr><td class="num">0</td><td class="num">0</td><td>X</td></tr><tr><td class="num">0</td><td>X</td><td class="num">0</td></tr><tr><td>X</td><td class="num">0</td><td class="num">0</td></tr></tbody></table></blockquote><h3>Code, <code><code></code>, escaping and extra stuff</h3><pre><code class="python">def test():
|
||||||
|
return "this is Python code"</code></pre><p>Optionally a ` inside a <code>``...``</code> block can be inserted escaped with !`!.</p><p><strong>NOTE:</strong> You can escape markmin constructions ('',``,**,~~,[,{,]},$,@) with '\' character: so \`\` can replace !`!`! escape string</p><p>The <code>:python</code> after the markup is also optional. If present, by default, it is used to set the class of the <code> block. The behavior can be overridden by passing an argument <code>extra</code> to the <code>render</code> function. For example:</p><pre><code class="python">markmin2html("``aaa``:custom",
|
||||||
|
extra=dict(custom=lambda text: 'x'+text+'x'))</code></pre><p>generates</p><code class="python">'xaaax'</code><p>(the <code>``...``:custom</code> block is rendered by the <code>custom=lambda</code> function passed to <code>render</code>).</p><h3>Html5 support</h3><p>Markmin also supports the <video> and <audio> html5 tags using the notation:</p><pre><code>[[message link video]]
|
||||||
|
[[message link audio]]
|
||||||
|
|
||||||
|
[[message [title] link video]]
|
||||||
|
[[message [title] link audio]]</code></pre> where <code>message</code> will be shown in brousers without HTML5 video/audio tags support.<h3>Latex and other extensions</h3><p>Formulas can be embedded into HTML with <em>$$<code>formula</code>$$</em>. You can use Google charts to render the formula:</p><pre><code>LATEX = '<img src="http://chart.apis.google.com/chart?cht=tx&chl=%s" />'
|
||||||
|
markmin2html(text,{'latex':lambda code: LATEX % code.replace('"','\"')})</code></pre><h3>Code with syntax highlighting</h3><p>This requires a syntax highlighting tool, such as the web2py CODE helper.</p><pre><code>extra={'code_cpp':lambda text: CODE(text,language='cpp').xml(),
|
||||||
|
'code_java':lambda text: CODE(text,language='java').xml(),
|
||||||
|
'code_python':lambda text: CODE(text,language='python').xml(),
|
||||||
|
'code_html':lambda text: CODE(text,language='html').xml()}</code></pre> or simple:<pre><code>extra={'code':lambda text,lang='python': CODE(text,language=lang).xml()}</code></pre><pre><code>markmin2html(text,extra=extra)</code></pre><p>Code can now be marked up as in this example:</p><pre><code>``
|
||||||
|
<html><body>example</body></html>
|
||||||
|
``:code_html</code></pre> OR<pre><code>``
|
||||||
|
<html><body>example</body></html>
|
||||||
|
``:code[html]</code></pre><h3>Citations and References</h3><p>Citations are treated as internal links in html and proper citations in latex if there is a final section called "References". Items like</p><pre><code>- [[key]] value</code></pre><p>in the References will be translated into Latex</p><pre><code>\bibitem{key} value</code></pre><p>Here is an example of usage:</p><pre><code>As shown in Ref.``mdipierro``:cite
|
||||||
|
|
||||||
## References
|
## References
|
||||||
- [[mdipierro]] web2py Manual, 3rd Edition, lulu.com</code></pre><h3>Caveats</h3><p><code class=""><ul/></code>, <code class=""><ol/></code>, <code class=""><code/></code>, <code class=""><table/></code>, <code class=""><blockquote/></code>, <code class=""><h1/></code>, ..., <code class=""><h6/></code> do not have <code class=""><p>...</p></code> around them.</p></body></html>
|
|
||||||
|
- [[mdipierro]] web2py Manual, 3rd Edition, lulu.com</code></pre><h3>Caveats</h3><p><code><ul/></code>, <code><ol/></code>, <code><code/></code>, <code><table/></code>, <code><blockquote/></code>, <code><h1/></code>, ..., <code><h6/></code> do not have <code><p>...</p></code> around them.</p></body></html>
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,130 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
pbkdf2
|
||||||
|
~~~~~~
|
||||||
|
|
||||||
|
This module implements pbkdf2 for Python. It also has some basic
|
||||||
|
tests that ensure that it works. The implementation is straightforward
|
||||||
|
and uses stdlib only stuff and can be easily be copy/pasted into
|
||||||
|
your favourite application.
|
||||||
|
|
||||||
|
Use this as replacement for bcrypt that does not need a c implementation
|
||||||
|
of a modified blowfish crypto algo.
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
|
||||||
|
>>> pbkdf2_hex('what i want to hash', 'the random salt')
|
||||||
|
'fa7cc8a2b0a932f8e6ea42f9787e9d36e592e0c222ada6a9'
|
||||||
|
|
||||||
|
How to use this:
|
||||||
|
|
||||||
|
1. Use a constant time string compare function to compare the stored hash
|
||||||
|
with the one you're generating::
|
||||||
|
|
||||||
|
def safe_str_cmp(a, b):
|
||||||
|
if len(a) != len(b):
|
||||||
|
return False
|
||||||
|
rv = 0
|
||||||
|
for x, y in izip(a, b):
|
||||||
|
rv |= ord(x) ^ ord(y)
|
||||||
|
return rv == 0
|
||||||
|
|
||||||
|
2. Use `os.urandom` to generate a proper salt of at least 8 byte.
|
||||||
|
Use a unique salt per hashed password.
|
||||||
|
|
||||||
|
3. Store ``algorithm$salt:costfactor$hash`` in the database so that
|
||||||
|
you can upgrade later easily to a different algorithm if you need
|
||||||
|
one. For instance ``PBKDF2-256$thesalt:10000$deadbeef...``.
|
||||||
|
|
||||||
|
|
||||||
|
:copyright: (c) Copyright 2011 by Armin Ronacher.
|
||||||
|
:license: BSD, see LICENSE for more details.
|
||||||
|
"""
|
||||||
|
import hmac
|
||||||
|
import hashlib
|
||||||
|
from struct import Struct
|
||||||
|
from operator import xor
|
||||||
|
from itertools import izip, starmap
|
||||||
|
|
||||||
|
|
||||||
|
_pack_int = Struct('>I').pack
|
||||||
|
|
||||||
|
|
||||||
|
def pbkdf2_hex(data, salt, iterations=1000, keylen=24, hashfunc=None):
|
||||||
|
"""Like :func:`pbkdf2_bin` but returns a hex encoded string."""
|
||||||
|
return pbkdf2_bin(data, salt, iterations, keylen, hashfunc).encode('hex')
|
||||||
|
|
||||||
|
|
||||||
|
def pbkdf2_bin(data, salt, iterations=1000, keylen=24, hashfunc=None):
|
||||||
|
"""Returns a binary digest for the PBKDF2 hash algorithm of `data`
|
||||||
|
with the given `salt`. It iterates `iterations` time and produces a
|
||||||
|
key of `keylen` bytes. By default SHA-1 is used as hash function,
|
||||||
|
a different hashlib `hashfunc` can be provided.
|
||||||
|
"""
|
||||||
|
hashfunc = hashfunc or hashlib.sha1
|
||||||
|
mac = hmac.new(data, None, hashfunc)
|
||||||
|
def _pseudorandom(x, mac=mac):
|
||||||
|
h = mac.copy()
|
||||||
|
h.update(x)
|
||||||
|
return map(ord, h.digest())
|
||||||
|
buf = []
|
||||||
|
for block in xrange(1, -(-keylen // mac.digest_size) + 1):
|
||||||
|
rv = u = _pseudorandom(salt + _pack_int(block))
|
||||||
|
for i in xrange(iterations - 1):
|
||||||
|
u = _pseudorandom(''.join(map(chr, u)))
|
||||||
|
rv = starmap(xor, izip(rv, u))
|
||||||
|
buf.extend(rv)
|
||||||
|
return ''.join(map(chr, buf))[:keylen]
|
||||||
|
|
||||||
|
|
||||||
|
def test():
|
||||||
|
failed = []
|
||||||
|
def check(data, salt, iterations, keylen, expected):
|
||||||
|
rv = pbkdf2_hex(data, salt, iterations, keylen)
|
||||||
|
if rv != expected:
|
||||||
|
print 'Test failed:'
|
||||||
|
print ' Expected: %s' % expected
|
||||||
|
print ' Got: %s' % rv
|
||||||
|
print ' Parameters:'
|
||||||
|
print ' data=%s' % data
|
||||||
|
print ' salt=%s' % salt
|
||||||
|
print ' iterations=%d' % iterations
|
||||||
|
print
|
||||||
|
failed.append(1)
|
||||||
|
|
||||||
|
# From RFC 6070
|
||||||
|
check('password', 'salt', 1, 20,
|
||||||
|
'0c60c80f961f0e71f3a9b524af6012062fe037a6')
|
||||||
|
check('password', 'salt', 2, 20,
|
||||||
|
'ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957')
|
||||||
|
check('password', 'salt', 4096, 20,
|
||||||
|
'4b007901b765489abead49d926f721d065a429c1')
|
||||||
|
check('passwordPASSWORDpassword', 'saltSALTsaltSALTsaltSALTsaltSALTsalt',
|
||||||
|
4096, 25, '3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038')
|
||||||
|
check('pass\x00word', 'sa\x00lt', 4096, 16,
|
||||||
|
'56fa6aa75548099dcc37d7f03425e0c3')
|
||||||
|
# This one is from the RFC but it just takes for ages
|
||||||
|
##check('password', 'salt', 16777216, 20,
|
||||||
|
## 'eefe3d61cd4da4e4e9945b3d6ba2158c2634e984')
|
||||||
|
|
||||||
|
# From Crypt-PBKDF2
|
||||||
|
check('password', 'ATHENA.MIT.EDUraeburn', 1, 16,
|
||||||
|
'cdedb5281bb2f801565a1122b2563515')
|
||||||
|
check('password', 'ATHENA.MIT.EDUraeburn', 1, 32,
|
||||||
|
'cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837')
|
||||||
|
check('password', 'ATHENA.MIT.EDUraeburn', 2, 16,
|
||||||
|
'01dbee7f4a9e243e988b62c73cda935d')
|
||||||
|
check('password', 'ATHENA.MIT.EDUraeburn', 2, 32,
|
||||||
|
'01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86')
|
||||||
|
check('password', 'ATHENA.MIT.EDUraeburn', 1200, 32,
|
||||||
|
'5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13')
|
||||||
|
check('X' * 64, 'pass phrase equals block size', 1200, 32,
|
||||||
|
'139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1')
|
||||||
|
check('X' * 65, 'pass phrase exceeds block size', 1200, 32,
|
||||||
|
'9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82a')
|
||||||
|
|
||||||
|
raise SystemExit(bool(failed))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test()
|
||||||
@@ -103,11 +103,8 @@ def populate(table, n, default=True, compute=False):
|
|||||||
elif field.type=='list:integer' and hasattr(field.requires,'options'):
|
elif field.type=='list:integer' and hasattr(field.requires,'options'):
|
||||||
options=field.requires.options(zero=False)
|
options=field.requires.options(zero=False)
|
||||||
if len(options) > 0:
|
if len(options) > 0:
|
||||||
vals = []
|
record[fieldname] = [item[0] for item in random.sample(options, random.randint(0,len(options)-1)/2)]
|
||||||
for i in range(0, random.randint(0,len(options)-1)/2):
|
elif field.type == 'integer':
|
||||||
vals.append(options[random.randint(0,len(options)-1)][0])
|
|
||||||
record[fieldname] = vals
|
|
||||||
elif field.type =='integer':
|
|
||||||
try:
|
try:
|
||||||
record[fieldname] = random.randint(field.requires.minimum,field.requires.maximum-1)
|
record[fieldname] = random.randint(field.requires.minimum,field.requires.maximum-1)
|
||||||
except:
|
except:
|
||||||
@@ -143,19 +140,13 @@ def populate(table, n, default=True, compute=False):
|
|||||||
ids[tablename] = [x.id for x in table._db(table._db[field.type[15:]].id>0).select()]
|
ids[tablename] = [x.id for x in table._db(table._db[field.type[15:]].id>0).select()]
|
||||||
n = len(ids[tablename])
|
n = len(ids[tablename])
|
||||||
if n:
|
if n:
|
||||||
vals = []
|
record[fieldname] = [item[0] for item in random.sample(ids[tablename], random.randint(0,n-1)/2)]
|
||||||
for i in range(0, random.randint(0,n-1)/2):
|
|
||||||
vals.append(ids[tablename][random.randint(0,n-1)])
|
|
||||||
record[fieldname] = vals
|
|
||||||
else:
|
else:
|
||||||
record[fieldname] = 0
|
record[fieldname] = 0
|
||||||
elif field.type=='list:string' and hasattr(field.requires,'options'):
|
elif field.type=='list:string' and hasattr(field.requires,'options'):
|
||||||
options=field.requires.options(zero=False)
|
options=field.requires.options(zero=False)
|
||||||
if len(options) > 0:
|
if len(options) > 0:
|
||||||
vals = []
|
record[fieldname] = [item[0] for item in random.sample(options, random.randint(0,len(options)-1)/2)]
|
||||||
for i in range(0, random.randint(0,len(options)-1)/2):
|
|
||||||
vals.append(options[random.randint(0,len(options)-1)][0])
|
|
||||||
record[fieldname] = vals
|
|
||||||
elif field.type=='string' and hasattr(field.requires,'options'):
|
elif field.type=='string' and hasattr(field.requires,'options'):
|
||||||
options=field.requires.options(zero=False)
|
options=field.requires.options(zero=False)
|
||||||
record[fieldname] = options[random.randint(0,len(options)-1)][0]
|
record[fieldname] = options[random.randint(0,len(options)-1)][0]
|
||||||
|
|||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
Changes
|
||||||
|
--------
|
||||||
|
0.4 -Miscellaneous bug fixes
|
||||||
|
-Implementation of SSL support
|
||||||
|
-Implementation of kill()
|
||||||
|
-Cleaned up charset functionality
|
||||||
|
-Fixed BIT type handling
|
||||||
|
-Connections raise exceptions after they are close()'d
|
||||||
|
-Full Py3k and unicode support
|
||||||
|
|
||||||
|
0.3 -Implemented most of the extended DBAPI 2.0 spec including callproc()
|
||||||
|
-Fixed error handling to include the message from the server and support
|
||||||
|
multiple protocol versions.
|
||||||
|
-Implemented ping()
|
||||||
|
-Implemented unicode support (probably needs better testing)
|
||||||
|
-Removed DeprecationWarnings
|
||||||
|
-Ran against the MySQLdb unit tests to check for bugs
|
||||||
|
-Added support for client_flag, charset, sql_mode, read_default_file,
|
||||||
|
use_unicode, cursorclass, init_command, and connect_timeout.
|
||||||
|
-Refactoring for some more compatibility with MySQLdb including a fake
|
||||||
|
pymysql.version_info attribute.
|
||||||
|
-Now runs with no warnings with the -3 command-line switch
|
||||||
|
-Added test cases for all outstanding tickets and closed most of them.
|
||||||
|
-Basic Jython support added.
|
||||||
|
-Fixed empty result sets bug.
|
||||||
|
-Integrated new unit tests and refactored the example into one.
|
||||||
|
-Fixed bug with decimal conversion.
|
||||||
|
-Fixed string encoding bug. Now unicode and binary data work!
|
||||||
|
-Added very basic docstrings.
|
||||||
|
|
||||||
|
0.2 -Changed connection parameter name 'password' to 'passwd'
|
||||||
|
to make it more plugin replaceable for the other mysql clients.
|
||||||
|
-Changed pack()/unpack() calls so it runs on 64 bit OSes too.
|
||||||
|
-Added support for unix_socket.
|
||||||
|
-Added support for no password.
|
||||||
|
-Renamed decorders to decoders.
|
||||||
|
-Better handling of non-existing decoder.
|
||||||
Regular → Executable
+6
-2
@@ -7,8 +7,8 @@ PyMySQL Installation
|
|||||||
This package contains a pure-Python MySQL client library.
|
This package contains a pure-Python MySQL client library.
|
||||||
Documentation on the MySQL client/server protocol can be found here:
|
Documentation on the MySQL client/server protocol can be found here:
|
||||||
http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol
|
http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol
|
||||||
If you would like to run the test suite, create a ~/.my.cnf file and
|
If you would like to run the test suite, edit the config parameters in
|
||||||
a database called "test_pymysql". The goal of pymysql is to be a drop-in
|
pymysql/tests/base.py. The goal of pymysql is to be a drop-in
|
||||||
replacement for MySQLdb and work on CPython 2.3+, Jython, IronPython, PyPy
|
replacement for MySQLdb and work on CPython 2.3+, Jython, IronPython, PyPy
|
||||||
and Python 3. We test for compatibility by simply changing the import
|
and Python 3. We test for compatibility by simply changing the import
|
||||||
statements in the Django MySQL backend and running its unit tests as well
|
statements in the Django MySQL backend and running its unit tests as well
|
||||||
@@ -34,4 +34,8 @@ Installation
|
|||||||
# ... or ...
|
# ... or ...
|
||||||
# python setup.py install
|
# python setup.py install
|
||||||
|
|
||||||
|
Python 3.0 Support
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Simply run the build-py3k.sh script from the local directory. It will
|
||||||
|
build a working package in the ./py3k directory.
|
||||||
@@ -23,13 +23,13 @@ THE SOFTWARE.
|
|||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
VERSION = (0, 4, None)
|
VERSION = (0, 5, None)
|
||||||
|
|
||||||
from constants import FIELD_TYPE
|
from constants import FIELD_TYPE
|
||||||
from converters import escape_dict, escape_sequence, escape_string
|
from converters import escape_dict, escape_sequence, escape_string
|
||||||
from err import Warning, Error, InterfaceError, DataError, \
|
from err import Warning, Error, InterfaceError, DataError, \
|
||||||
DatabaseError, OperationalError, IntegrityError, InternalError, \
|
DatabaseError, OperationalError, IntegrityError, InternalError, \
|
||||||
NotSupportedError, ProgrammingError
|
NotSupportedError, ProgrammingError, MySQLError
|
||||||
from times import Date, Time, Timestamp, \
|
from times import Date, Time, Timestamp, \
|
||||||
DateFromTicks, TimeFromTicks, TimestampFromTicks
|
DateFromTicks, TimeFromTicks, TimestampFromTicks
|
||||||
|
|
||||||
@@ -121,12 +121,11 @@ __all__ = [
|
|||||||
'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER',
|
'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER',
|
||||||
'NotSupportedError', 'DBAPISet', 'OperationalError', 'ProgrammingError',
|
'NotSupportedError', 'DBAPISet', 'OperationalError', 'ProgrammingError',
|
||||||
'ROWID', 'STRING', 'TIME', 'TIMESTAMP', 'Warning', 'apilevel', 'connect',
|
'ROWID', 'STRING', 'TIME', 'TIMESTAMP', 'Warning', 'apilevel', 'connect',
|
||||||
'connections', 'constants', 'converters', 'cursors', 'debug', 'escape',
|
'connections', 'constants', 'converters', 'cursors',
|
||||||
'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info',
|
'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info',
|
||||||
'paramstyle', 'string_literal', 'threadsafety', 'version_info',
|
'paramstyle', 'threadsafety', 'version_info',
|
||||||
|
|
||||||
"install_as_MySQLdb",
|
"install_as_MySQLdb",
|
||||||
|
|
||||||
"NULL","__version__",
|
"NULL","__version__",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -172,4 +172,3 @@ def charset_by_name(name):
|
|||||||
def charset_by_id(id):
|
def charset_by_id(id):
|
||||||
return _charsets.by_id(id)
|
return _charsets.by_id(id)
|
||||||
|
|
||||||
|
|
||||||
@@ -25,6 +25,12 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
import StringIO
|
import StringIO
|
||||||
|
|
||||||
|
try:
|
||||||
|
import getpass
|
||||||
|
DEFAULT_USER = getpass.getuser()
|
||||||
|
except ImportError:
|
||||||
|
DEFAULT_USER = None
|
||||||
|
|
||||||
from charset import MBLENGTH, charset_by_name, charset_by_id
|
from charset import MBLENGTH, charset_by_name, charset_by_id
|
||||||
from cursors import Cursor
|
from cursors import Cursor
|
||||||
from constants import FIELD_TYPE, FLAG
|
from constants import FIELD_TYPE, FLAG
|
||||||
@@ -50,7 +56,6 @@ UNSIGNED_INT24_LENGTH = 3
|
|||||||
UNSIGNED_INT64_LENGTH = 8
|
UNSIGNED_INT64_LENGTH = 8
|
||||||
|
|
||||||
DEFAULT_CHARSET = 'latin1'
|
DEFAULT_CHARSET = 'latin1'
|
||||||
MAX_PACKET_LENGTH = 256*256*256-1
|
|
||||||
|
|
||||||
|
|
||||||
def dump_packet(data):
|
def dump_packet(data):
|
||||||
@@ -59,13 +64,16 @@ def dump_packet(data):
|
|||||||
if byte2int(data) >= 65 and byte2int(data) <= 122: #data.isalnum():
|
if byte2int(data) >= 65 and byte2int(data) <= 122: #data.isalnum():
|
||||||
return data
|
return data
|
||||||
return '.'
|
return '.'
|
||||||
print "packet length %d" % len(data)
|
|
||||||
print "method call[1]: %s" % sys._getframe(1).f_code.co_name
|
try:
|
||||||
print "method call[2]: %s" % sys._getframe(2).f_code.co_name
|
print "packet length %d" % len(data)
|
||||||
print "method call[3]: %s" % sys._getframe(3).f_code.co_name
|
print "method call[1]: %s" % sys._getframe(1).f_code.co_name
|
||||||
print "method call[4]: %s" % sys._getframe(4).f_code.co_name
|
print "method call[2]: %s" % sys._getframe(2).f_code.co_name
|
||||||
print "method call[5]: %s" % sys._getframe(5).f_code.co_name
|
print "method call[3]: %s" % sys._getframe(3).f_code.co_name
|
||||||
print "-" * 88
|
print "method call[4]: %s" % sys._getframe(4).f_code.co_name
|
||||||
|
print "method call[5]: %s" % sys._getframe(5).f_code.co_name
|
||||||
|
print "-" * 88
|
||||||
|
except ValueError: pass
|
||||||
dump_data = [data[i:i+16] for i in xrange(len(data)) if i%16 == 0]
|
dump_data = [data[i:i+16] for i in xrange(len(data)) if i%16 == 0]
|
||||||
for d in dump_data:
|
for d in dump_data:
|
||||||
print ' '.join(map(lambda x:"%02X" % byte2int(x), d)) + \
|
print ' '.join(map(lambda x:"%02X" % byte2int(x), d)) + \
|
||||||
@@ -153,18 +161,28 @@ def unpack_uint16(n):
|
|||||||
# TODO: stop using bit-shifting in these functions...
|
# TODO: stop using bit-shifting in these functions...
|
||||||
# TODO: rename to "uint" to make it clear they're unsigned...
|
# TODO: rename to "uint" to make it clear they're unsigned...
|
||||||
def unpack_int24(n):
|
def unpack_int24(n):
|
||||||
return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0] << 8) +\
|
try:
|
||||||
(struct.unpack('B',n[2])[0] << 16)
|
return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0] << 8) +\
|
||||||
|
(struct.unpack('B',n[2])[0] << 16)
|
||||||
|
except TypeError:
|
||||||
|
return n[0] + (n[1] << 8) + (n[2] << 16)
|
||||||
|
|
||||||
def unpack_int32(n):
|
def unpack_int32(n):
|
||||||
return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0] << 8) +\
|
try:
|
||||||
(struct.unpack('B',n[2])[0] << 16) + (struct.unpack('B', n[3])[0] << 24)
|
return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0] << 8) +\
|
||||||
|
(struct.unpack('B',n[2])[0] << 16) + (struct.unpack('B', n[3])[0] << 24)
|
||||||
|
except TypeError:
|
||||||
|
return n[0] + (n[1] << 8) + (n[2] << 16) + (n[3] << 24)
|
||||||
|
|
||||||
def unpack_int64(n):
|
def unpack_int64(n):
|
||||||
return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0]<<8) +\
|
try:
|
||||||
(struct.unpack('B',n[2])[0] << 16) + (struct.unpack('B',n[3])[0]<<24)+\
|
return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0]<<8) +\
|
||||||
(struct.unpack('B',n[4])[0] << 32) + (struct.unpack('B',n[5])[0]<<40)+\
|
(struct.unpack('B',n[2])[0] << 16) + (struct.unpack('B',n[3])[0]<<24)+\
|
||||||
(struct.unpack('B',n[6])[0] << 48) + (struct.unpack('B',n[7])[0]<<56)
|
(struct.unpack('B',n[4])[0] << 32) + (struct.unpack('B',n[5])[0]<<40)+\
|
||||||
|
(struct.unpack('B',n[6])[0] << 48) + (struct.unpack('B',n[7])[0]<<56)
|
||||||
|
except TypeError:
|
||||||
|
return n[0] + (n[1] << 8) + (n[2] << 16) + (n[3] << 24) +\
|
||||||
|
(n[4] << 32) + (n[5] << 40) + (n[6] << 48) + (n[7] << 56)
|
||||||
|
|
||||||
def defaulterrorhandler(connection, cursor, errorclass, errorvalue):
|
def defaulterrorhandler(connection, cursor, errorclass, errorvalue):
|
||||||
err = errorclass, errorvalue
|
err = errorclass, errorvalue
|
||||||
@@ -189,19 +207,16 @@ class MysqlPacket(object):
|
|||||||
from the network socket, removes packet header and provides an interface
|
from the network socket, removes packet header and provides an interface
|
||||||
for reading/parsing the packet results."""
|
for reading/parsing the packet results."""
|
||||||
|
|
||||||
def __init__(self, socket):
|
def __init__(self, connection):
|
||||||
|
self.connection = connection
|
||||||
self.__position = 0
|
self.__position = 0
|
||||||
self.__recv_packet(socket)
|
self.__recv_packet()
|
||||||
del socket
|
|
||||||
|
|
||||||
def __recv_packet(self, socket):
|
def __recv_packet(self):
|
||||||
"""Parse the packet header and read entire packet payload into buffer."""
|
"""Parse the packet header and read entire packet payload into buffer."""
|
||||||
packet_header = socket.recv(4)
|
packet_header = self.connection.rfile.read(4)
|
||||||
while len(packet_header) < 4:
|
if len(packet_header) < 4:
|
||||||
d = socket.recv(4 - len(packet_header))
|
raise OperationalError(2013, "Lost connection to MySQL server during query")
|
||||||
if len(d) == 0:
|
|
||||||
raise OperationalError(2013, "Lost connection to MySQL server during query")
|
|
||||||
packet_header += d
|
|
||||||
|
|
||||||
if DEBUG: dump_packet(packet_header)
|
if DEBUG: dump_packet(packet_header)
|
||||||
packet_length_bin = packet_header[:3]
|
packet_length_bin = packet_header[:3]
|
||||||
@@ -210,16 +225,11 @@ class MysqlPacket(object):
|
|||||||
|
|
||||||
bin_length = packet_length_bin + int2byte(0) # pad little-endian number
|
bin_length = packet_length_bin + int2byte(0) # pad little-endian number
|
||||||
bytes_to_read = struct.unpack('<I', bin_length)[0]
|
bytes_to_read = struct.unpack('<I', bin_length)[0]
|
||||||
|
recv_data = self.connection.rfile.read(bytes_to_read)
|
||||||
payload_buff = [] # this is faster than cStringIO
|
if len(recv_data) < bytes_to_read:
|
||||||
while bytes_to_read > 0:
|
raise OperationalError(2013, "Lost connection to MySQL server during query")
|
||||||
recv_data = socket.recv(bytes_to_read)
|
if DEBUG: dump_packet(recv_data)
|
||||||
if len(recv_data) == 0:
|
self.__data = recv_data
|
||||||
raise OperationalError(2013, "Lost connection to MySQL server during query")
|
|
||||||
if DEBUG: dump_packet(recv_data)
|
|
||||||
payload_buff.append(recv_data)
|
|
||||||
bytes_to_read -= len(recv_data)
|
|
||||||
self.__data = join_bytes(payload_buff)
|
|
||||||
|
|
||||||
def packet_number(self): return self.__packet_number
|
def packet_number(self): return self.__packet_number
|
||||||
|
|
||||||
@@ -354,7 +364,7 @@ class FieldDescriptorPacket(MysqlPacket):
|
|||||||
self.db = self.read_length_coded_string()
|
self.db = self.read_length_coded_string()
|
||||||
self.table_name = self.read_length_coded_string()
|
self.table_name = self.read_length_coded_string()
|
||||||
self.org_table = self.read_length_coded_string()
|
self.org_table = self.read_length_coded_string()
|
||||||
self.name = self.read_length_coded_string()
|
self.name = self.read_length_coded_string().decode(self.connection.charset)
|
||||||
self.org_name = self.read_length_coded_string()
|
self.org_name = self.read_length_coded_string()
|
||||||
self.advance(1) # non-null filler
|
self.advance(1) # non-null filler
|
||||||
self.charsetnr = struct.unpack('<H', self.read(2))[0]
|
self.charsetnr = struct.unpack('<H', self.read(2))[0]
|
||||||
@@ -396,6 +406,58 @@ class FieldDescriptorPacket(MysqlPacket):
|
|||||||
% (self.__class__, self.db, self.table_name, self.name,
|
% (self.__class__, self.db, self.table_name, self.name,
|
||||||
self.type_code))
|
self.type_code))
|
||||||
|
|
||||||
|
class OKPacketWrapper(object):
|
||||||
|
"""
|
||||||
|
OK Packet Wrapper. It uses an existing packet object, and wraps
|
||||||
|
around it, exposing useful variables while still providing access
|
||||||
|
to the original packet objects variables and methods.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, from_packet):
|
||||||
|
if not from_packet.is_ok_packet():
|
||||||
|
raise ValueError('Cannot create ' + str(self.__class__.__name__)
|
||||||
|
+ ' object from invalid packet type')
|
||||||
|
|
||||||
|
self.packet = from_packet
|
||||||
|
self.packet.advance(1)
|
||||||
|
|
||||||
|
self.affected_rows = self.packet.read_length_coded_binary()
|
||||||
|
self.insert_id = self.packet.read_length_coded_binary()
|
||||||
|
self.server_status = struct.unpack('<H', self.packet.read(2))[0]
|
||||||
|
self.warning_count = struct.unpack('<H', self.packet.read(2))[0]
|
||||||
|
self.message = self.packet.read_all()
|
||||||
|
|
||||||
|
def __getattr__(self, key):
|
||||||
|
if hasattr(self.packet, key):
|
||||||
|
return getattr(self.packet, key)
|
||||||
|
|
||||||
|
raise AttributeError(str(self.__class__)
|
||||||
|
+ " instance has no attribute '" + key + "'")
|
||||||
|
|
||||||
|
class EOFPacketWrapper(object):
|
||||||
|
"""
|
||||||
|
EOF Packet Wrapper. It uses an existing packet object, and wraps
|
||||||
|
around it, exposing useful variables while still providing access
|
||||||
|
to the original packet objects variables and methods.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, from_packet):
|
||||||
|
if not from_packet.is_eof_packet():
|
||||||
|
raise ValueError('Cannot create ' + str(self.__class__.__name__)
|
||||||
|
+ ' object from invalid packet type')
|
||||||
|
|
||||||
|
self.packet = from_packet
|
||||||
|
self.warning_count = self.packet.read(2)
|
||||||
|
server_status = struct.unpack('<h', self.packet.read(2))[0]
|
||||||
|
self.has_next = (server_status
|
||||||
|
& SERVER_STATUS.SERVER_MORE_RESULTS_EXISTS)
|
||||||
|
|
||||||
|
def __getattr__(self, key):
|
||||||
|
if hasattr(self.packet, key):
|
||||||
|
return getattr(self.packet, key)
|
||||||
|
|
||||||
|
raise AttributeError(str(self.__class__)
|
||||||
|
+ " instance has no attribute '" + key + "'")
|
||||||
|
|
||||||
class Connection(object):
|
class Connection(object):
|
||||||
"""
|
"""
|
||||||
@@ -482,12 +544,12 @@ class Connection(object):
|
|||||||
host = _config("host", host)
|
host = _config("host", host)
|
||||||
db = _config("db",db)
|
db = _config("db",db)
|
||||||
unix_socket = _config("socket",unix_socket)
|
unix_socket = _config("socket",unix_socket)
|
||||||
port = _config("port", port)
|
port = int(_config("port", port))
|
||||||
charset = _config("default-character-set", charset)
|
charset = _config("default-character-set", charset)
|
||||||
|
|
||||||
self.host = host
|
self.host = host
|
||||||
self.port = port
|
self.port = port
|
||||||
self.user = user
|
self.user = user or DEFAULT_USER
|
||||||
self.password = passwd
|
self.password = passwd
|
||||||
self.db = db
|
self.db = db
|
||||||
self.unix_socket = unix_socket
|
self.unix_socket = unix_socket
|
||||||
@@ -498,7 +560,7 @@ class Connection(object):
|
|||||||
self.charset = DEFAULT_CHARSET
|
self.charset = DEFAULT_CHARSET
|
||||||
self.use_unicode = False
|
self.use_unicode = False
|
||||||
|
|
||||||
if use_unicode:
|
if use_unicode is not None:
|
||||||
self.use_unicode = use_unicode
|
self.use_unicode = use_unicode
|
||||||
|
|
||||||
client_flag |= CAPABILITIES
|
client_flag |= CAPABILITIES
|
||||||
@@ -512,14 +574,15 @@ class Connection(object):
|
|||||||
|
|
||||||
self._connect()
|
self._connect()
|
||||||
|
|
||||||
|
self._result = None
|
||||||
|
self._affected_rows = 0
|
||||||
|
self.host_info = "Not connected"
|
||||||
|
|
||||||
self.messages = []
|
self.messages = []
|
||||||
self.set_charset(charset)
|
self.set_charset(charset)
|
||||||
self.encoders = encoders
|
self.encoders = encoders
|
||||||
self.decoders = conv
|
self.decoders = conv
|
||||||
|
|
||||||
self._affected_rows = 0
|
|
||||||
self.host_info = "Not connected"
|
|
||||||
|
|
||||||
self.autocommit(False)
|
self.autocommit(False)
|
||||||
|
|
||||||
if sql_mode is not None:
|
if sql_mode is not None:
|
||||||
@@ -537,10 +600,16 @@ class Connection(object):
|
|||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
''' Send the quit message and close the socket '''
|
''' Send the quit message and close the socket '''
|
||||||
|
if self.socket is None:
|
||||||
|
raise Error("Already closed")
|
||||||
send_data = struct.pack('<i',1) + int2byte(COM_QUIT)
|
send_data = struct.pack('<i',1) + int2byte(COM_QUIT)
|
||||||
self.socket.send(send_data)
|
self.wfile.write(send_data)
|
||||||
|
self.wfile.close()
|
||||||
|
self.rfile.close()
|
||||||
self.socket.close()
|
self.socket.close()
|
||||||
self.socket = None
|
self.socket = None
|
||||||
|
self.rfile = None
|
||||||
|
self.wfile = None
|
||||||
|
|
||||||
def autocommit(self, value):
|
def autocommit(self, value):
|
||||||
''' Set whether or not to commit after every execute() '''
|
''' Set whether or not to commit after every execute() '''
|
||||||
@@ -578,8 +647,10 @@ class Connection(object):
|
|||||||
''' Alias for escape() '''
|
''' Alias for escape() '''
|
||||||
return escape_item(obj, self.charset)
|
return escape_item(obj, self.charset)
|
||||||
|
|
||||||
def cursor(self):
|
def cursor(self, cursor=None):
|
||||||
''' Create a new cursor to execute queries with '''
|
''' Create a new cursor to execute queries with '''
|
||||||
|
if cursor:
|
||||||
|
return cursor(self)
|
||||||
return self.cursorclass(self)
|
return self.cursorclass(self)
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
@@ -594,9 +665,11 @@ class Connection(object):
|
|||||||
self.commit()
|
self.commit()
|
||||||
|
|
||||||
# The following methods are INTERNAL USE ONLY (called from Cursor)
|
# The following methods are INTERNAL USE ONLY (called from Cursor)
|
||||||
def query(self, sql):
|
def query(self, sql, unbuffered=False):
|
||||||
|
if DEBUG:
|
||||||
|
print "sending query: %s" % sql
|
||||||
self._execute_command(COM_QUERY, sql)
|
self._execute_command(COM_QUERY, sql)
|
||||||
self._affected_rows = self._read_query_result()
|
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||||||
return self._affected_rows
|
return self._affected_rows
|
||||||
|
|
||||||
def next_result(self):
|
def next_result(self):
|
||||||
@@ -621,6 +694,8 @@ class Connection(object):
|
|||||||
''' Check if the server is alive '''
|
''' Check if the server is alive '''
|
||||||
try:
|
try:
|
||||||
self._execute_command(COM_PING, "")
|
self._execute_command(COM_PING, "")
|
||||||
|
pkt = self.read_packet()
|
||||||
|
return pkt.is_ok_packet()
|
||||||
except:
|
except:
|
||||||
if reconnect:
|
if reconnect:
|
||||||
self._connect()
|
self._connect()
|
||||||
@@ -630,9 +705,6 @@ class Connection(object):
|
|||||||
self.errorhandler(None, exc, value)
|
self.errorhandler(None, exc, value)
|
||||||
return
|
return
|
||||||
|
|
||||||
pkt = self.read_packet()
|
|
||||||
return pkt.is_ok_packet()
|
|
||||||
|
|
||||||
def set_charset(self, charset):
|
def set_charset(self, charset):
|
||||||
try:
|
try:
|
||||||
if charset:
|
if charset:
|
||||||
@@ -663,55 +735,59 @@ class Connection(object):
|
|||||||
self.host_info = "socket %s:%d" % (self.host, self.port)
|
self.host_info = "socket %s:%d" % (self.host, self.port)
|
||||||
if DEBUG: print 'connected using socket'
|
if DEBUG: print 'connected using socket'
|
||||||
self.socket = sock
|
self.socket = sock
|
||||||
|
self.rfile = self.socket.makefile("rb")
|
||||||
|
self.wfile = self.socket.makefile("wb")
|
||||||
self._get_server_information()
|
self._get_server_information()
|
||||||
self._request_authentication()
|
self._request_authentication()
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
raise OperationalError(2003, "Can't connect to MySQL server on %r (%d)" % (self.host, e.args[0]))
|
raise OperationalError(2003, "Can't connect to MySQL server on %r (%s)" % (self.host, e.args[0]))
|
||||||
|
|
||||||
def read_packet(self, packet_type=MysqlPacket):
|
def read_packet(self, packet_type=MysqlPacket):
|
||||||
"""Read an entire "mysql packet" in its entirety from the network
|
"""Read an entire "mysql packet" in its entirety from the network
|
||||||
and return a MysqlPacket type that represents the results."""
|
and return a MysqlPacket type that represents the results."""
|
||||||
|
|
||||||
# TODO: is socket.recv(small_number) significantly slower than
|
packet = packet_type(self)
|
||||||
# socket.recv(large_number)? if so, maybe we should buffer
|
|
||||||
# the socket.recv() (though that obviously makes memory management
|
|
||||||
# more complicated.
|
|
||||||
packet = packet_type(self.socket)
|
|
||||||
packet.check_error()
|
packet.check_error()
|
||||||
return packet
|
return packet
|
||||||
|
|
||||||
def _read_query_result(self):
|
def _read_query_result(self, unbuffered=False):
|
||||||
result = MySQLResult(self)
|
if unbuffered:
|
||||||
result.read()
|
try:
|
||||||
|
result = MySQLResult(self)
|
||||||
|
result.init_unbuffered_query()
|
||||||
|
except:
|
||||||
|
result.unbuffered_active = False
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
result = MySQLResult(self)
|
||||||
|
result.read()
|
||||||
self._result = result
|
self._result = result
|
||||||
return result.affected_rows
|
return result.affected_rows
|
||||||
|
|
||||||
|
def insert_id(self):
|
||||||
|
if self._result:
|
||||||
|
return self._result.insert_id
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
def _send_command(self, command, sql):
|
def _send_command(self, command, sql):
|
||||||
#send_data = struct.pack('<i', len(sql) + 1) + command + sql
|
#send_data = struct.pack('<i', len(sql) + 1) + command + sql
|
||||||
# could probably be more efficient, at least it's correct
|
# could probably be more efficient, at least it's correct
|
||||||
if not self.socket:
|
if not self.socket:
|
||||||
self.errorhandler(None, InterfaceError, "(0, '')")
|
self.errorhandler(None, InterfaceError, "(0, '')")
|
||||||
|
|
||||||
|
# If the last query was unbuffered, make sure it finishes before
|
||||||
|
# sending new commands
|
||||||
|
if self._result is not None and self._result.unbuffered_active:
|
||||||
|
self._result._finish_unbuffered_query()
|
||||||
|
|
||||||
if isinstance(sql, unicode):
|
if isinstance(sql, unicode):
|
||||||
sql = sql.encode(self.charset)
|
sql = sql.encode(self.charset)
|
||||||
|
|
||||||
buf = int2byte(command) + sql
|
prelude = struct.pack('<i', len(sql)+1) + int2byte(command)
|
||||||
pckt_no = 0
|
self.wfile.write(prelude + sql)
|
||||||
while len(buf) >= MAX_PACKET_LENGTH:
|
self.wfile.flush()
|
||||||
header = struct.pack('<i', MAX_PACKET_LENGTH)[:-1]+int2byte(pckt_no)
|
if DEBUG: dump_packet(prelude + sql)
|
||||||
send_data = header + buf[:MAX_PACKET_LENGTH]
|
|
||||||
self.socket.send(send_data)
|
|
||||||
if DEBUG: dump_packet(send_data)
|
|
||||||
buf = buf[MAX_PACKET_LENGTH:]
|
|
||||||
pckt_no += 1
|
|
||||||
header = struct.pack('<i', len(buf))[:-1]+int2byte(pckt_no)
|
|
||||||
self.socket.send(header+buf)
|
|
||||||
|
|
||||||
|
|
||||||
#sock = self.socket
|
|
||||||
#sock.send(send_data)
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
def _execute_command(self, command, sql):
|
def _execute_command(self, command, sql):
|
||||||
self._send_command(command, sql)
|
self._send_command(command, sql)
|
||||||
@@ -720,7 +796,6 @@ class Connection(object):
|
|||||||
self._send_authentication()
|
self._send_authentication()
|
||||||
|
|
||||||
def _send_authentication(self):
|
def _send_authentication(self):
|
||||||
sock = self.socket
|
|
||||||
self.client_flag |= CAPABILITIES
|
self.client_flag |= CAPABILITIES
|
||||||
if self.server_version.startswith('5'):
|
if self.server_version.startswith('5'):
|
||||||
self.client_flag |= MULTI_RESULTS
|
self.client_flag |= MULTI_RESULTS
|
||||||
@@ -742,12 +817,15 @@ class Connection(object):
|
|||||||
|
|
||||||
if DEBUG: dump_packet(data)
|
if DEBUG: dump_packet(data)
|
||||||
|
|
||||||
sock.send(data)
|
self.wfile.write(data)
|
||||||
sock = self.socket = ssl.wrap_socket(sock, keyfile=self.key,
|
self.wfile.flush()
|
||||||
certfile=self.cert,
|
self.socket = ssl.wrap_self.socketet(self.socket, keyfile=self.key,
|
||||||
ssl_version=ssl.PROTOCOL_TLSv1,
|
certfile=self.cert,
|
||||||
cert_reqs=ssl.CERT_REQUIRED,
|
ssl_version=ssl.PROTOCOL_TLSv1,
|
||||||
ca_certs=self.ca)
|
cert_reqs=ssl.CERT_REQUIRED,
|
||||||
|
ca_certs=self.ca)
|
||||||
|
self.rfile = self.socket.makefile("rb")
|
||||||
|
self.wfile = self.socket.makefile("wb")
|
||||||
|
|
||||||
data = data_init + self.user+int2byte(0) + _scramble(self.password.encode(self.charset), self.salt)
|
data = data_init + self.user+int2byte(0) + _scramble(self.password.encode(self.charset), self.salt)
|
||||||
|
|
||||||
@@ -760,9 +838,10 @@ class Connection(object):
|
|||||||
|
|
||||||
if DEBUG: dump_packet(data)
|
if DEBUG: dump_packet(data)
|
||||||
|
|
||||||
sock.send(data)
|
self.wfile.write(data)
|
||||||
|
self.wfile.flush()
|
||||||
|
|
||||||
auth_packet = MysqlPacket(sock)
|
auth_packet = MysqlPacket(self)
|
||||||
auth_packet.check_error()
|
auth_packet.check_error()
|
||||||
if DEBUG: auth_packet.dump()
|
if DEBUG: auth_packet.dump()
|
||||||
|
|
||||||
@@ -776,8 +855,9 @@ class Connection(object):
|
|||||||
data = _scramble_323(self.password.encode(self.charset), self.salt.encode(self.charset)) + int2byte(0)
|
data = _scramble_323(self.password.encode(self.charset), self.salt.encode(self.charset)) + int2byte(0)
|
||||||
data = pack_int24(len(data)) + int2byte(next_packet) + data
|
data = pack_int24(len(data)) + int2byte(next_packet) + data
|
||||||
|
|
||||||
sock.send(data)
|
self.wfile.write(data)
|
||||||
auth_packet = MysqlPacket(sock)
|
self.wfile.flush()
|
||||||
|
auth_packet = MysqlPacket(self)
|
||||||
auth_packet.check_error()
|
auth_packet.check_error()
|
||||||
if DEBUG: auth_packet.dump()
|
if DEBUG: auth_packet.dump()
|
||||||
|
|
||||||
@@ -796,9 +876,8 @@ class Connection(object):
|
|||||||
return self.protocol_version
|
return self.protocol_version
|
||||||
|
|
||||||
def _get_server_information(self):
|
def _get_server_information(self):
|
||||||
sock = self.socket
|
|
||||||
i = 0
|
i = 0
|
||||||
packet = MysqlPacket(sock)
|
packet = MysqlPacket(self)
|
||||||
data = packet.get_all_data()
|
data = packet.get_all_data()
|
||||||
|
|
||||||
if DEBUG: dump_packet(data)
|
if DEBUG: dump_packet(data)
|
||||||
@@ -862,6 +941,11 @@ class MySQLResult(object):
|
|||||||
self.description = None
|
self.description = None
|
||||||
self.rows = None
|
self.rows = None
|
||||||
self.has_next = None
|
self.has_next = None
|
||||||
|
self.unbuffered_active = False
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
if self.unbuffered_active:
|
||||||
|
self._finish_unbuffered_query()
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
self.first_packet = self.connection.read_packet()
|
self.first_packet = self.connection.read_packet()
|
||||||
@@ -872,19 +956,78 @@ class MySQLResult(object):
|
|||||||
else:
|
else:
|
||||||
self._read_result_packet()
|
self._read_result_packet()
|
||||||
|
|
||||||
|
def init_unbuffered_query(self):
|
||||||
|
self.unbuffered_active = True
|
||||||
|
self.first_packet = self.connection.read_packet()
|
||||||
|
|
||||||
|
if self.first_packet.is_ok_packet():
|
||||||
|
self._read_ok_packet()
|
||||||
|
self.unbuffered_active = False
|
||||||
|
else:
|
||||||
|
self.field_count = byte2int(self.first_packet.read(1))
|
||||||
|
self._get_descriptions()
|
||||||
|
|
||||||
|
# Apparently, MySQLdb picks this number because it's the maximum
|
||||||
|
# value of a 64bit unsigned integer. Since we're emulating MySQLdb,
|
||||||
|
# we set it to this instead of None, which would be preferred.
|
||||||
|
self.affected_rows = 18446744073709551615
|
||||||
|
|
||||||
def _read_ok_packet(self):
|
def _read_ok_packet(self):
|
||||||
self.first_packet.advance(1) # field_count (always '0')
|
ok_packet = OKPacketWrapper(self.first_packet)
|
||||||
self.affected_rows = self.first_packet.read_length_coded_binary()
|
self.affected_rows = ok_packet.affected_rows
|
||||||
self.insert_id = self.first_packet.read_length_coded_binary()
|
self.insert_id = ok_packet.insert_id
|
||||||
self.server_status = struct.unpack('<H', self.first_packet.read(2))[0]
|
self.server_status = ok_packet.server_status
|
||||||
self.warning_count = struct.unpack('<H', self.first_packet.read(2))[0]
|
self.warning_count = ok_packet.warning_count
|
||||||
self.message = self.first_packet.read_all()
|
self.message = ok_packet.message
|
||||||
|
|
||||||
|
def _check_packet_is_eof(self, packet):
|
||||||
|
if packet.is_eof_packet():
|
||||||
|
eof_packet = EOFPacketWrapper(packet)
|
||||||
|
self.warning_count = eof_packet.warning_count
|
||||||
|
self.has_next = eof_packet.has_next
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def _read_result_packet(self):
|
def _read_result_packet(self):
|
||||||
self.field_count = byte2int(self.first_packet.read(1))
|
self.field_count = byte2int(self.first_packet.read(1))
|
||||||
self._get_descriptions()
|
self._get_descriptions()
|
||||||
self._read_rowdata_packet()
|
self._read_rowdata_packet()
|
||||||
|
|
||||||
|
def _read_rowdata_packet_unbuffered(self):
|
||||||
|
# Check if in an active query
|
||||||
|
if self.unbuffered_active == False: return
|
||||||
|
|
||||||
|
# EOF
|
||||||
|
packet = self.connection.read_packet()
|
||||||
|
if self._check_packet_is_eof(packet):
|
||||||
|
self.unbuffered_active = False
|
||||||
|
self.rows = None
|
||||||
|
return
|
||||||
|
|
||||||
|
row = []
|
||||||
|
for field in self.fields:
|
||||||
|
data = packet.read_length_coded_string()
|
||||||
|
converted = None
|
||||||
|
if field.type_code in self.connection.decoders:
|
||||||
|
converter = self.connection.decoders[field.type_code]
|
||||||
|
if DEBUG: print "DEBUG: field=%s, converter=%s" % (field, converter)
|
||||||
|
if data != None:
|
||||||
|
converted = converter(self.connection, field, data)
|
||||||
|
row.append(converted)
|
||||||
|
|
||||||
|
self.affected_rows = 1
|
||||||
|
self.rows = tuple((row))
|
||||||
|
if DEBUG: self.rows
|
||||||
|
|
||||||
|
def _finish_unbuffered_query(self):
|
||||||
|
# After much reading on the MySQL protocol, it appears that there is,
|
||||||
|
# in fact, no way to stop MySQL from sending all the data after
|
||||||
|
# executing a query, so we just spin, and wait for an EOF packet.
|
||||||
|
while self.unbuffered_active:
|
||||||
|
packet = self.connection.read_packet()
|
||||||
|
if self._check_packet_is_eof(packet):
|
||||||
|
self.unbuffered_active = False
|
||||||
|
|
||||||
# TODO: implement this as an iteratable so that it is more
|
# TODO: implement this as an iteratable so that it is more
|
||||||
# memory efficient and lower-latency to client...
|
# memory efficient and lower-latency to client...
|
||||||
def _read_rowdata_packet(self):
|
def _read_rowdata_packet(self):
|
||||||
@@ -892,24 +1035,18 @@ class MySQLResult(object):
|
|||||||
rows = []
|
rows = []
|
||||||
while True:
|
while True:
|
||||||
packet = self.connection.read_packet()
|
packet = self.connection.read_packet()
|
||||||
if packet.is_eof_packet():
|
if self._check_packet_is_eof(packet):
|
||||||
self.warning_count = packet.read(2)
|
|
||||||
server_status = struct.unpack('<h', packet.read(2))[0]
|
|
||||||
self.has_next = (server_status
|
|
||||||
& SERVER_STATUS.SERVER_MORE_RESULTS_EXISTS)
|
|
||||||
break
|
break
|
||||||
|
|
||||||
row = []
|
row = []
|
||||||
for field in self.fields:
|
for field in self.fields:
|
||||||
|
data = packet.read_length_coded_string()
|
||||||
|
converted = None
|
||||||
if field.type_code in self.connection.decoders:
|
if field.type_code in self.connection.decoders:
|
||||||
converter = self.connection.decoders[field.type_code]
|
converter = self.connection.decoders[field.type_code]
|
||||||
|
|
||||||
if DEBUG: print "DEBUG: field=%s, converter=%s" % (field, converter)
|
if DEBUG: print "DEBUG: field=%s, converter=%s" % (field, converter)
|
||||||
data = packet.read_length_coded_string()
|
|
||||||
converted = None
|
|
||||||
if data != None:
|
if data != None:
|
||||||
converted = converter(self.connection, field, data)
|
converted = converter(self.connection, field, data)
|
||||||
|
|
||||||
row.append(converted)
|
row.append(converted)
|
||||||
|
|
||||||
rows.append(tuple(row))
|
rows.append(tuple(row))
|
||||||
@@ -930,4 +1067,3 @@ class MySQLResult(object):
|
|||||||
eof_packet = self.connection.read_packet()
|
eof_packet = self.connection.read_packet()
|
||||||
assert eof_packet.is_eof_packet(), 'Protocol error, expecting EOF'
|
assert eof_packet.is_eof_packet(), 'Protocol error, expecting EOF'
|
||||||
self.description = tuple(description)
|
self.description = tuple(description)
|
||||||
|
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
import re
|
import re
|
||||||
import datetime
|
import datetime
|
||||||
import time
|
import time
|
||||||
|
import sys
|
||||||
|
|
||||||
from constants import FIELD_TYPE, FLAG
|
from constants import FIELD_TYPE, FLAG
|
||||||
from charset import charset_by_id
|
from charset import charset_by_id
|
||||||
|
|
||||||
|
PYTHON3 = sys.version_info[0] > 2
|
||||||
|
|
||||||
try:
|
try:
|
||||||
set
|
set
|
||||||
except NameError:
|
except NameError:
|
||||||
@@ -22,12 +25,12 @@ def escape_item(val, charset):
|
|||||||
return escape_sequence(val, charset)
|
return escape_sequence(val, charset)
|
||||||
if type(val) is dict:
|
if type(val) is dict:
|
||||||
return escape_dict(val, charset)
|
return escape_dict(val, charset)
|
||||||
if hasattr(val, "decode") and not isinstance(val, unicode):
|
if PYTHON3 and hasattr(val, "decode") and not isinstance(val, unicode):
|
||||||
# deal with py3k bytes
|
# deal with py3k bytes
|
||||||
val = val.decode(charset)
|
val = val.decode(charset)
|
||||||
encoder = encoders[type(val)]
|
encoder = encoders[type(val)]
|
||||||
val = encoder(val)
|
val = encoder(val)
|
||||||
if type(val) is str:
|
if type(val) in [str, int]:
|
||||||
return val
|
return val
|
||||||
val = val.encode(charset)
|
val = val.encode(charset)
|
||||||
return val
|
return val
|
||||||
@@ -44,7 +47,7 @@ def escape_sequence(val, charset):
|
|||||||
for item in val:
|
for item in val:
|
||||||
quoted = escape_item(item, charset)
|
quoted = escape_item(item, charset)
|
||||||
n.append(quoted)
|
n.append(quoted)
|
||||||
return tuple(n)
|
return "(" + ",".join(n) + ")"
|
||||||
|
|
||||||
def escape_set(val, charset):
|
def escape_set(val, charset):
|
||||||
val = map(lambda x: escape_item(x, charset), val)
|
val = map(lambda x: escape_item(x, charset), val)
|
||||||
@@ -56,7 +59,10 @@ def escape_bool(value):
|
|||||||
def escape_object(value):
|
def escape_object(value):
|
||||||
return str(value)
|
return str(value)
|
||||||
|
|
||||||
escape_int = escape_long = escape_object
|
def escape_int(value):
|
||||||
|
return value
|
||||||
|
|
||||||
|
escape_long = escape_object
|
||||||
|
|
||||||
def escape_float(value):
|
def escape_float(value):
|
||||||
return ('%.15g' % value)
|
return ('%.15g' % value)
|
||||||
@@ -142,16 +148,19 @@ def convert_timedelta(connection, field, obj):
|
|||||||
can accept values as (+|-)DD HH:MM:SS. The latter format will not
|
can accept values as (+|-)DD HH:MM:SS. The latter format will not
|
||||||
be parsed correctly by this function.
|
be parsed correctly by this function.
|
||||||
"""
|
"""
|
||||||
from math import modf
|
|
||||||
try:
|
try:
|
||||||
|
microseconds = 0
|
||||||
if not isinstance(obj, unicode):
|
if not isinstance(obj, unicode):
|
||||||
obj = obj.decode(connection.charset)
|
obj = obj.decode(connection.charset)
|
||||||
hours, minutes, seconds = tuple([int(x) for x in obj.split(':')])
|
if "." in obj:
|
||||||
|
(obj, tail) = obj.split('.')
|
||||||
|
microseconds = int(tail)
|
||||||
|
hours, minutes, seconds = obj.split(':')
|
||||||
tdelta = datetime.timedelta(
|
tdelta = datetime.timedelta(
|
||||||
hours = int(hours),
|
hours = int(hours),
|
||||||
minutes = int(minutes),
|
minutes = int(minutes),
|
||||||
seconds = int(seconds),
|
seconds = int(seconds),
|
||||||
microseconds = int(modf(float(seconds))[0]*1000000),
|
microseconds = microseconds
|
||||||
)
|
)
|
||||||
return tdelta
|
return tdelta
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -179,12 +188,14 @@ def convert_time(connection, field, obj):
|
|||||||
to be treated as time-of-day and not a time offset, then you can
|
to be treated as time-of-day and not a time offset, then you can
|
||||||
use set this function as the converter for FIELD_TYPE.TIME.
|
use set this function as the converter for FIELD_TYPE.TIME.
|
||||||
"""
|
"""
|
||||||
from math import modf
|
|
||||||
try:
|
try:
|
||||||
hour, minute, second = obj.split(':')
|
microseconds = 0
|
||||||
return datetime.time(hour=int(hour), minute=int(minute),
|
if "." in obj:
|
||||||
second=int(second),
|
(obj, tail) = obj.split('.')
|
||||||
microsecond=int(modf(float(second))[0]*1000000))
|
microseconds = int(tail)
|
||||||
|
hours, minutes, seconds = obj.split(':')
|
||||||
|
return datetime.time(hour=int(hours), minute=int(minutes),
|
||||||
|
second=int(seconds), microsecond=microseconds)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -267,8 +278,6 @@ def convert_characters(connection, field, data):
|
|||||||
elif connection.charset != field_charset:
|
elif connection.charset != field_charset:
|
||||||
data = data.decode(field_charset)
|
data = data.decode(field_charset)
|
||||||
data = data.encode(connection.charset)
|
data = data.encode(connection.charset)
|
||||||
else:
|
|
||||||
data = data.decode(connection.charset)
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def convert_int(connection, field, data):
|
def convert_int(connection, field, data):
|
||||||
@@ -334,6 +343,7 @@ try:
|
|||||||
# python version > 2.3
|
# python version > 2.3
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
def convert_decimal(connection, field, data):
|
def convert_decimal(connection, field, data):
|
||||||
|
data = data.decode(connection.charset)
|
||||||
return Decimal(data)
|
return Decimal(data)
|
||||||
decoders[FIELD_TYPE.DECIMAL] = convert_decimal
|
decoders[FIELD_TYPE.DECIMAL] = convert_decimal
|
||||||
decoders[FIELD_TYPE.NEWDECIMAL] = convert_decimal
|
decoders[FIELD_TYPE.NEWDECIMAL] = convert_decimal
|
||||||
@@ -344,4 +354,3 @@ try:
|
|||||||
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -92,12 +92,21 @@ class Cursor(object):
|
|||||||
|
|
||||||
# TODO: make sure that conn.escape is correct
|
# TODO: make sure that conn.escape is correct
|
||||||
|
|
||||||
if args is not None:
|
|
||||||
query = query % conn.escape(args)
|
|
||||||
|
|
||||||
if isinstance(query, unicode):
|
if isinstance(query, unicode):
|
||||||
query = query.encode(charset)
|
query = query.encode(charset)
|
||||||
|
|
||||||
|
if args is not None:
|
||||||
|
if isinstance(args, tuple) or isinstance(args, list):
|
||||||
|
escaped_args = tuple(conn.escape(arg) for arg in args)
|
||||||
|
elif isinstance(args, dict):
|
||||||
|
escaped_args = dict((key, conn.escape(val)) for (key, val) in args.items())
|
||||||
|
else:
|
||||||
|
#If it's not a dictionary let's try escaping it anyways.
|
||||||
|
#Worst case it will throw a Value error
|
||||||
|
escaped_args = conn.escape(args)
|
||||||
|
|
||||||
|
query = query % escaped_args
|
||||||
|
|
||||||
result = 0
|
result = 0
|
||||||
try:
|
try:
|
||||||
result = self._query(query)
|
result = self._query(query)
|
||||||
@@ -113,12 +122,12 @@ class Cursor(object):
|
|||||||
def executemany(self, query, args):
|
def executemany(self, query, args):
|
||||||
''' Run several data against one query '''
|
''' Run several data against one query '''
|
||||||
del self.messages[:]
|
del self.messages[:]
|
||||||
conn = self._get_db()
|
#conn = self._get_db()
|
||||||
if not args:
|
if not args:
|
||||||
return
|
return
|
||||||
charset = conn.charset
|
#charset = conn.charset
|
||||||
if isinstance(query, unicode):
|
#if isinstance(query, unicode):
|
||||||
query = query.encode(charset)
|
# query = query.encode(charset)
|
||||||
|
|
||||||
self.rowcount = sum([ self.execute(query, arg) for arg in args ])
|
self.rowcount = sum([ self.execute(query, arg) for arg in args ])
|
||||||
return self.rowcount
|
return self.rowcount
|
||||||
@@ -231,12 +240,9 @@ class Cursor(object):
|
|||||||
self.lastrowid = conn._result.insert_id
|
self.lastrowid = conn._result.insert_id
|
||||||
self._rows = conn._result.rows
|
self._rows = conn._result.rows
|
||||||
self._has_next = conn._result.has_next
|
self._has_next = conn._result.has_next
|
||||||
conn._result = None
|
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
self._check_executed()
|
return iter(self.fetchone, None)
|
||||||
result = self.rownumber and self._rows[self.rownumber:] or self._rows
|
|
||||||
return iter(result)
|
|
||||||
|
|
||||||
Warning = Warning
|
Warning = Warning
|
||||||
Error = Error
|
Error = Error
|
||||||
@@ -249,3 +255,156 @@ class Cursor(object):
|
|||||||
ProgrammingError = ProgrammingError
|
ProgrammingError = ProgrammingError
|
||||||
NotSupportedError = NotSupportedError
|
NotSupportedError = NotSupportedError
|
||||||
|
|
||||||
|
class DictCursor(Cursor):
|
||||||
|
"""A cursor which returns results as a dictionary"""
|
||||||
|
|
||||||
|
def execute(self, query, args=None):
|
||||||
|
result = super(DictCursor, self).execute(query, args)
|
||||||
|
if self.description:
|
||||||
|
self._fields = [ field[0] for field in self.description ]
|
||||||
|
return result
|
||||||
|
|
||||||
|
def fetchone(self):
|
||||||
|
''' Fetch the next row '''
|
||||||
|
self._check_executed()
|
||||||
|
if self._rows is None or self.rownumber >= len(self._rows):
|
||||||
|
return None
|
||||||
|
result = dict(zip(self._fields, self._rows[self.rownumber]))
|
||||||
|
self.rownumber += 1
|
||||||
|
return result
|
||||||
|
|
||||||
|
def fetchmany(self, size=None):
|
||||||
|
''' Fetch several rows '''
|
||||||
|
self._check_executed()
|
||||||
|
if self._rows is None:
|
||||||
|
return None
|
||||||
|
end = self.rownumber + (size or self.arraysize)
|
||||||
|
result = [ dict(zip(self._fields, r)) for r in self._rows[self.rownumber:end] ]
|
||||||
|
self.rownumber = min(end, len(self._rows))
|
||||||
|
return tuple(result)
|
||||||
|
|
||||||
|
def fetchall(self):
|
||||||
|
''' Fetch all the rows '''
|
||||||
|
self._check_executed()
|
||||||
|
if self._rows is None:
|
||||||
|
return None
|
||||||
|
if self.rownumber:
|
||||||
|
result = [ dict(zip(self._fields, r)) for r in self._rows[self.rownumber:] ]
|
||||||
|
else:
|
||||||
|
result = [ dict(zip(self._fields, r)) for r in self._rows ]
|
||||||
|
self.rownumber = len(self._rows)
|
||||||
|
return tuple(result)
|
||||||
|
|
||||||
|
class SSCursor(Cursor):
|
||||||
|
"""
|
||||||
|
Unbuffered Cursor, mainly useful for queries that return a lot of data,
|
||||||
|
or for connections to remote servers over a slow network.
|
||||||
|
|
||||||
|
Instead of copying every row of data into a buffer, this will fetch
|
||||||
|
rows as needed. The upside of this, is the client uses much less memory,
|
||||||
|
and rows are returned much faster when traveling over a slow network,
|
||||||
|
or if the result set is very big.
|
||||||
|
|
||||||
|
There are limitations, though. The MySQL protocol doesn't support
|
||||||
|
returning the total number of rows, so the only way to tell how many rows
|
||||||
|
there are is to iterate over every row returned. Also, it currently isn't
|
||||||
|
possible to scroll backwards, as only the current row is held in memory.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
conn = self._get_db()
|
||||||
|
conn._result._finish_unbuffered_query()
|
||||||
|
|
||||||
|
try:
|
||||||
|
if self._has_next:
|
||||||
|
while self.nextset(): pass
|
||||||
|
except: pass
|
||||||
|
|
||||||
|
def _query(self, q):
|
||||||
|
conn = self._get_db()
|
||||||
|
self._last_executed = q
|
||||||
|
conn.query(q, unbuffered=True)
|
||||||
|
self._do_get_result()
|
||||||
|
return self.rowcount
|
||||||
|
|
||||||
|
def read_next(self):
|
||||||
|
""" Read next row """
|
||||||
|
|
||||||
|
conn = self._get_db()
|
||||||
|
conn._result._read_rowdata_packet_unbuffered()
|
||||||
|
return conn._result.rows
|
||||||
|
|
||||||
|
def fetchone(self):
|
||||||
|
""" Fetch next row """
|
||||||
|
|
||||||
|
self._check_executed()
|
||||||
|
row = self.read_next()
|
||||||
|
if row is None:
|
||||||
|
return None
|
||||||
|
self.rownumber += 1
|
||||||
|
return row
|
||||||
|
|
||||||
|
def fetchall(self):
|
||||||
|
"""
|
||||||
|
Fetch all, as per MySQLdb. Pretty useless for large queries, as
|
||||||
|
it is buffered. See fetchall_unbuffered(), if you want an unbuffered
|
||||||
|
generator version of this method.
|
||||||
|
"""
|
||||||
|
|
||||||
|
rows = []
|
||||||
|
while True:
|
||||||
|
row = self.fetchone()
|
||||||
|
if row is None:
|
||||||
|
break
|
||||||
|
rows.append(row)
|
||||||
|
return tuple(rows)
|
||||||
|
|
||||||
|
def fetchall_unbuffered(self):
|
||||||
|
"""
|
||||||
|
Fetch all, implemented as a generator, which isn't to standard,
|
||||||
|
however, it doesn't make sense to return everything in a list, as that
|
||||||
|
would use ridiculous memory for large result sets.
|
||||||
|
"""
|
||||||
|
|
||||||
|
row = self.fetchone()
|
||||||
|
while row is not None:
|
||||||
|
yield row
|
||||||
|
row = self.fetchone()
|
||||||
|
|
||||||
|
def fetchmany(self, size=None):
|
||||||
|
""" Fetch many """
|
||||||
|
|
||||||
|
self._check_executed()
|
||||||
|
if size is None:
|
||||||
|
size = self.arraysize
|
||||||
|
|
||||||
|
rows = []
|
||||||
|
for i in range(0, size):
|
||||||
|
row = self.read_next()
|
||||||
|
if row is None:
|
||||||
|
break
|
||||||
|
rows.append(row)
|
||||||
|
self.rownumber += 1
|
||||||
|
return tuple(rows)
|
||||||
|
|
||||||
|
def scroll(self, value, mode='relative'):
|
||||||
|
self._check_executed()
|
||||||
|
if not mode == 'relative' and not mode == 'absolute':
|
||||||
|
self.errorhandler(self, ProgrammingError,
|
||||||
|
"unknown scroll mode %s" % mode)
|
||||||
|
|
||||||
|
if mode == 'relative':
|
||||||
|
if value < 0:
|
||||||
|
self.errorhandler(self, NotSupportedError,
|
||||||
|
"Backwards scrolling not supported by this cursor")
|
||||||
|
|
||||||
|
for i in range(0, value): self.read_next()
|
||||||
|
self.rownumber += value
|
||||||
|
else:
|
||||||
|
if value < self.rownumber:
|
||||||
|
self.errorhandler(self, NotSupportedError,
|
||||||
|
"Backwards scrolling not supported by this cursor")
|
||||||
|
|
||||||
|
end = value - self.rownumber
|
||||||
|
for i in range(0, end): self.read_next()
|
||||||
|
self.rownumber = value
|
||||||
@@ -2,19 +2,20 @@ import struct
|
|||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
Exception, Warning
|
StandardError, Warning
|
||||||
except ImportError:
|
except ImportError:
|
||||||
try:
|
try:
|
||||||
from exceptions import Exception, Warning
|
from exceptions import StandardError, Warning
|
||||||
except ImportError:
|
except ImportError:
|
||||||
import sys
|
import sys
|
||||||
e = sys.modules['exceptions']
|
e = sys.modules['exceptions']
|
||||||
Exception = e.Exception
|
StandardError = e.StandardError
|
||||||
Warning = e.Warning
|
Warning = e.Warning
|
||||||
|
|
||||||
from constants import ER
|
from constants import ER
|
||||||
|
import sys
|
||||||
|
|
||||||
class MySQLError(Exception):
|
class MySQLError(StandardError):
|
||||||
|
|
||||||
"""Exception related to operation with MySQL."""
|
"""Exception related to operation with MySQL."""
|
||||||
|
|
||||||
@@ -106,13 +107,19 @@ _map_error(IntegrityError, ER.DUP_ENTRY, ER.NO_REFERENCED_ROW,
|
|||||||
ER.CANNOT_ADD_FOREIGN)
|
ER.CANNOT_ADD_FOREIGN)
|
||||||
_map_error(NotSupportedError, ER.WARNING_NOT_COMPLETE_ROLLBACK,
|
_map_error(NotSupportedError, ER.WARNING_NOT_COMPLETE_ROLLBACK,
|
||||||
ER.NOT_SUPPORTED_YET, ER.FEATURE_DISABLED, ER.UNKNOWN_STORAGE_ENGINE)
|
ER.NOT_SUPPORTED_YET, ER.FEATURE_DISABLED, ER.UNKNOWN_STORAGE_ENGINE)
|
||||||
|
_map_error(OperationalError, ER.DBACCESS_DENIED_ERROR, ER.ACCESS_DENIED_ERROR,
|
||||||
|
ER.TABLEACCESS_DENIED_ERROR, ER.COLUMNACCESS_DENIED_ERROR)
|
||||||
|
|
||||||
del _map_error, ER
|
del _map_error, ER
|
||||||
|
|
||||||
|
|
||||||
def _get_error_info(data):
|
def _get_error_info(data):
|
||||||
errno = struct.unpack('<h', data[1:3])[0]
|
errno = struct.unpack('<h', data[1:3])[0]
|
||||||
if data[3] == "#":
|
if sys.version_info[0] == 3:
|
||||||
|
is_41 = data[3] == ord("#")
|
||||||
|
else:
|
||||||
|
is_41 = data[3] == "#"
|
||||||
|
if is_41:
|
||||||
# version 4.1
|
# version 4.1
|
||||||
sqlstate = data[4:9].decode("utf8")
|
sqlstate = data[4:9].decode("utf8")
|
||||||
errorvalue = data[9:].decode("utf8")
|
errorvalue = data[9:].decode("utf8")
|
||||||
@@ -138,4 +145,3 @@ def raise_mysql_exception(data):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,6 +1,12 @@
|
|||||||
from gluon.contrib.pymysql.tests.test_issues import *
|
from pymysql.tests.test_issues import *
|
||||||
from gluon.contrib.pymysql.tests.test_example import *
|
from pymysql.tests.test_example import *
|
||||||
from gluon.contrib.pymysql.tests.test_basic import *
|
from pymysql.tests.test_basic import *
|
||||||
|
from pymysql.tests.test_DictCursor import *
|
||||||
|
|
||||||
|
import sys
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
# MySQLdb tests were designed for Python 3
|
||||||
|
from pymysql.tests.thirdparty import *
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import unittest
|
import unittest
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
from gluon.contrib import pymysql
|
import pymysql
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
class PyMySQLTestCase(unittest.TestCase):
|
class PyMySQLTestCase(unittest.TestCase):
|
||||||
|
# Edit this to suit your test environment.
|
||||||
databases = [
|
databases = [
|
||||||
{"host":"localhost","user":"root",
|
{"host":"localhost","user":"root",
|
||||||
"passwd":"","db":"test_pymysql", "use_unicode": True},
|
"passwd":"","db":"test_pymysql", "use_unicode": True},
|
||||||
{"host":"localhost","user":"root","passwd":"","db":"test_pymysql2"}]
|
{"host":"localhost","user":"root","passwd":"","db":"test_pymysql2"}]
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
try:
|
self.connections = []
|
||||||
self.connections = []
|
|
||||||
|
|
||||||
for params in self.databases:
|
for params in self.databases:
|
||||||
self.connections.append(pymysql.connect(**params))
|
self.connections.append(pymysql.connect(**params))
|
||||||
except pymysql.err.OperationalError as e:
|
|
||||||
self.skipTest('Cannot connect to MySQL - skipping pymysql tests because of (%s) %s' % (type(e), e))
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
for connection in self.connections:
|
for connection in self.connections:
|
||||||
|
|||||||
+56
@@ -0,0 +1,56 @@
|
|||||||
|
from pymysql.tests import base
|
||||||
|
import pymysql.cursors
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
class TestDictCursor(base.PyMySQLTestCase):
|
||||||
|
|
||||||
|
def test_DictCursor(self):
|
||||||
|
#all assert test compare to the structure as would come out from MySQLdb
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor(pymysql.cursors.DictCursor)
|
||||||
|
# create a table ane some data to query
|
||||||
|
c.execute("""CREATE TABLE dictcursor (name char(20), age int , DOB datetime)""")
|
||||||
|
data = (("bob",21,"1990-02-06 23:04:56"),
|
||||||
|
("jim",56,"1955-05-09 13:12:45"),
|
||||||
|
("fred",100,"1911-09-12 01:01:01"))
|
||||||
|
bob = {'name':'bob','age':21,'DOB':datetime.datetime(1990, 02, 6, 23, 04, 56)}
|
||||||
|
jim = {'name':'jim','age':56,'DOB':datetime.datetime(1955, 05, 9, 13, 12, 45)}
|
||||||
|
fred = {'name':'fred','age':100,'DOB':datetime.datetime(1911, 9, 12, 1, 1, 1)}
|
||||||
|
try:
|
||||||
|
c.executemany("insert into dictcursor values (%s,%s,%s)", data)
|
||||||
|
# try an update which should return no rows
|
||||||
|
c.execute("update dictcursor set age=20 where name='bob'")
|
||||||
|
bob['age'] = 20
|
||||||
|
# pull back the single row dict for bob and check
|
||||||
|
c.execute("SELECT * from dictcursor where name='bob'")
|
||||||
|
r = c.fetchone()
|
||||||
|
self.assertEqual(bob,r,"fetchone via DictCursor failed")
|
||||||
|
# same again, but via fetchall => tuple)
|
||||||
|
c.execute("SELECT * from dictcursor where name='bob'")
|
||||||
|
r = c.fetchall()
|
||||||
|
self.assertEqual((bob,),r,"fetch a 1 row result via fetchall failed via DictCursor")
|
||||||
|
# same test again but iterate over the
|
||||||
|
c.execute("SELECT * from dictcursor where name='bob'")
|
||||||
|
for r in c:
|
||||||
|
self.assertEqual(bob, r,"fetch a 1 row result via iteration failed via DictCursor")
|
||||||
|
# get all 3 row via fetchall
|
||||||
|
c.execute("SELECT * from dictcursor")
|
||||||
|
r = c.fetchall()
|
||||||
|
self.assertEqual((bob,jim,fred), r, "fetchall failed via DictCursor")
|
||||||
|
#same test again but do a list comprehension
|
||||||
|
c.execute("SELECT * from dictcursor")
|
||||||
|
r = [x for x in c]
|
||||||
|
self.assertEqual([bob,jim,fred], r, "list comprehension failed via DictCursor")
|
||||||
|
# get all 2 row via fetchmany
|
||||||
|
c.execute("SELECT * from dictcursor")
|
||||||
|
r = c.fetchmany(2)
|
||||||
|
self.assertEqual((bob,jim), r, "fetchmany failed via DictCursor")
|
||||||
|
finally:
|
||||||
|
c.execute("drop table dictcursor")
|
||||||
|
|
||||||
|
__all__ = ["TestDictCursor"]
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import unittest
|
||||||
|
unittest.main()
|
||||||
Executable
+100
@@ -0,0 +1,100 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
from pymysql.tests import base
|
||||||
|
import pymysql.cursors
|
||||||
|
except:
|
||||||
|
# For local testing from top-level directory, without installing
|
||||||
|
sys.path.append('../pymysql')
|
||||||
|
from pymysql.tests import base
|
||||||
|
import pymysql.cursors
|
||||||
|
|
||||||
|
class TestSSCursor(base.PyMySQLTestCase):
|
||||||
|
def test_SSCursor(self):
|
||||||
|
affected_rows = 18446744073709551615
|
||||||
|
|
||||||
|
conn = self.connections[0]
|
||||||
|
data = [
|
||||||
|
('America', '', 'America/Jamaica'),
|
||||||
|
('America', '', 'America/Los_Angeles'),
|
||||||
|
('America', '', 'America/Lima'),
|
||||||
|
('America', '', 'America/New_York'),
|
||||||
|
('America', '', 'America/Menominee'),
|
||||||
|
('America', '', 'America/Havana'),
|
||||||
|
('America', '', 'America/El_Salvador'),
|
||||||
|
('America', '', 'America/Costa_Rica'),
|
||||||
|
('America', '', 'America/Denver'),
|
||||||
|
('America', '', 'America/Detroit'),]
|
||||||
|
|
||||||
|
try:
|
||||||
|
cursor = conn.cursor(pymysql.cursors.SSCursor)
|
||||||
|
|
||||||
|
# Create table
|
||||||
|
cursor.execute(('CREATE TABLE tz_data ('
|
||||||
|
'region VARCHAR(64),'
|
||||||
|
'zone VARCHAR(64),'
|
||||||
|
'name VARCHAR(64))'))
|
||||||
|
|
||||||
|
# Test INSERT
|
||||||
|
for i in data:
|
||||||
|
cursor.execute('INSERT INTO tz_data VALUES (%s, %s, %s)', i)
|
||||||
|
self.assertEqual(conn.affected_rows(), 1, 'affected_rows does not match')
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Test fetchone()
|
||||||
|
iter = 0
|
||||||
|
cursor.execute('SELECT * FROM tz_data')
|
||||||
|
while True:
|
||||||
|
row = cursor.fetchone()
|
||||||
|
if row is None:
|
||||||
|
break
|
||||||
|
iter += 1
|
||||||
|
|
||||||
|
# Test cursor.rowcount
|
||||||
|
self.assertEqual(cursor.rowcount, affected_rows,
|
||||||
|
'cursor.rowcount != %s' % (str(affected_rows)))
|
||||||
|
|
||||||
|
# Test cursor.rownumber
|
||||||
|
self.assertEqual(cursor.rownumber, iter,
|
||||||
|
'cursor.rowcount != %s' % (str(iter)))
|
||||||
|
|
||||||
|
# Test row came out the same as it went in
|
||||||
|
self.assertEqual((row in data), True,
|
||||||
|
'Row not found in source data')
|
||||||
|
|
||||||
|
# Test fetchall
|
||||||
|
cursor.execute('SELECT * FROM tz_data')
|
||||||
|
self.assertEqual(len(cursor.fetchall()), len(data),
|
||||||
|
'fetchall failed. Number of rows does not match')
|
||||||
|
|
||||||
|
# Test fetchmany
|
||||||
|
cursor.execute('SELECT * FROM tz_data')
|
||||||
|
self.assertEqual(len(cursor.fetchmany(2)), 2,
|
||||||
|
'fetchmany failed. Number of rows does not match')
|
||||||
|
|
||||||
|
# So MySQLdb won't throw "Commands out of sync"
|
||||||
|
while True:
|
||||||
|
res = cursor.fetchone()
|
||||||
|
if res is None:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Test update, affected_rows()
|
||||||
|
cursor.execute('UPDATE tz_data SET zone = %s', ['Foo'])
|
||||||
|
conn.commit()
|
||||||
|
self.assertEqual(cursor.rowcount, len(data),
|
||||||
|
'Update failed. affected_rows != %s' % (str(len(data))))
|
||||||
|
|
||||||
|
# Test executemany
|
||||||
|
cursor.executemany('INSERT INTO tz_data VALUES (%s, %s, %s)', data)
|
||||||
|
self.assertEqual(cursor.rowcount, len(data),
|
||||||
|
'executemany failed. cursor.rowcount != %s' % (str(len(data))))
|
||||||
|
|
||||||
|
finally:
|
||||||
|
cursor.execute('DROP TABLE tz_data')
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
__all__ = ["TestSSCursor"]
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import unittest
|
||||||
|
unittest.main()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from gluon.contrib.pymysql.tests import base
|
from pymysql.tests import base
|
||||||
from gluon.contrib.pymysql import util
|
from pymysql import util
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
@@ -55,6 +55,31 @@ class TestConversion(base.PyMySQLTestCase):
|
|||||||
finally:
|
finally:
|
||||||
c.execute("drop table test_dict")
|
c.execute("drop table test_dict")
|
||||||
|
|
||||||
|
def test_string(self):
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute("create table test_dict (a text)")
|
||||||
|
test_value = "I am a test string"
|
||||||
|
try:
|
||||||
|
c.execute("insert into test_dict (a) values (%s)", test_value)
|
||||||
|
c.execute("select a from test_dict")
|
||||||
|
self.assertEqual((test_value,), c.fetchone())
|
||||||
|
finally:
|
||||||
|
c.execute("drop table test_dict")
|
||||||
|
|
||||||
|
def test_integer(self):
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute("create table test_dict (a integer)")
|
||||||
|
test_value = 12345
|
||||||
|
try:
|
||||||
|
c.execute("insert into test_dict (a) values (%s)", test_value)
|
||||||
|
c.execute("select a from test_dict")
|
||||||
|
self.assertEqual((test_value,), c.fetchone())
|
||||||
|
finally:
|
||||||
|
c.execute("drop table test_dict")
|
||||||
|
|
||||||
|
|
||||||
def test_big_blob(self):
|
def test_big_blob(self):
|
||||||
""" test tons of data """
|
""" test tons of data """
|
||||||
conn = self.connections[0]
|
conn = self.connections[0]
|
||||||
@@ -68,6 +93,26 @@ class TestConversion(base.PyMySQLTestCase):
|
|||||||
finally:
|
finally:
|
||||||
c.execute("drop table test_big_blob")
|
c.execute("drop table test_big_blob")
|
||||||
|
|
||||||
|
def test_untyped(self):
|
||||||
|
""" test conversion of null, empty string """
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute("select null,''")
|
||||||
|
self.assertEqual((None,u''), c.fetchone())
|
||||||
|
c.execute("select '',null")
|
||||||
|
self.assertEqual((u'',None), c.fetchone())
|
||||||
|
|
||||||
|
def test_datetime(self):
|
||||||
|
""" test conversion of null, empty string """
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute("select time('12:30'), time('23:12:59'), time('23:12:59.05100')")
|
||||||
|
self.assertEqual((datetime.timedelta(0, 45000),
|
||||||
|
datetime.timedelta(0, 83579),
|
||||||
|
datetime.timedelta(0, 83579, 51000)),
|
||||||
|
c.fetchone())
|
||||||
|
|
||||||
|
|
||||||
class TestCursor(base.PyMySQLTestCase):
|
class TestCursor(base.PyMySQLTestCase):
|
||||||
# this test case does not work quite right yet, however,
|
# this test case does not work quite right yet, however,
|
||||||
# we substitute in None for the erroneous field which is
|
# we substitute in None for the erroneous field which is
|
||||||
@@ -134,6 +179,33 @@ class TestCursor(base.PyMySQLTestCase):
|
|||||||
finally:
|
finally:
|
||||||
c.execute("drop table test_nr")
|
c.execute("drop table test_nr")
|
||||||
|
|
||||||
|
def test_aggregates(self):
|
||||||
|
""" test aggregate functions """
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
try:
|
||||||
|
c.execute('create table test_aggregates (i integer)')
|
||||||
|
for i in xrange(0, 10):
|
||||||
|
c.execute('insert into test_aggregates (i) values (%s)', (i,))
|
||||||
|
c.execute('select sum(i) from test_aggregates')
|
||||||
|
r, = c.fetchone()
|
||||||
|
self.assertEqual(sum(range(0,10)), r)
|
||||||
|
finally:
|
||||||
|
c.execute('drop table test_aggregates')
|
||||||
|
|
||||||
|
def test_single_tuple(self):
|
||||||
|
""" test a single tuple """
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
try:
|
||||||
|
c.execute("create table mystuff (id integer primary key)")
|
||||||
|
c.execute("insert into mystuff (id) values (1)")
|
||||||
|
c.execute("insert into mystuff (id) values (2)")
|
||||||
|
c.execute("select id from mystuff where id in %s", ((1,),))
|
||||||
|
self.assertEqual([(1,)], list(c.fetchall()))
|
||||||
|
finally:
|
||||||
|
c.execute("drop table mystuff")
|
||||||
|
|
||||||
__all__ = ["TestConversion","TestCursor"]
|
__all__ = ["TestConversion","TestCursor"]
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from gluon.contrib import pymysql
|
import pymysql
|
||||||
from gluon.contrib.pymysql.tests import base
|
from pymysql.tests import base
|
||||||
|
|
||||||
class TestExample(base.PyMySQLTestCase):
|
class TestExample(base.PyMySQLTestCase):
|
||||||
def test_example(self):
|
def test_example(self):
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from gluon.contrib import pymysql
|
import pymysql
|
||||||
from gluon.contrib.pymysql.tests import base
|
from pymysql.tests import base
|
||||||
|
import unittest
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@@ -11,6 +12,10 @@ except AttributeError:
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
# backwards compatibility:
|
||||||
|
if not hasattr(unittest, "skip"):
|
||||||
|
unittest.skip = lambda message: lambda f: f
|
||||||
|
|
||||||
class TestOldIssues(base.PyMySQLTestCase):
|
class TestOldIssues(base.PyMySQLTestCase):
|
||||||
def test_issue_3(self):
|
def test_issue_3(self):
|
||||||
""" undefined methods datetime_or_None, date_or_None """
|
""" undefined methods datetime_or_None, date_or_None """
|
||||||
@@ -89,15 +94,15 @@ KEY (`station`,`dh`,`echeance`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;""")
|
|||||||
""" can't handle large result fields """
|
""" can't handle large result fields """
|
||||||
conn = self.connections[0]
|
conn = self.connections[0]
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
cur.execute("create table issue13 (t text)")
|
|
||||||
try:
|
try:
|
||||||
|
cur.execute("create table issue13 (t text)")
|
||||||
# ticket says 18k
|
# ticket says 18k
|
||||||
size = 18*1024
|
size = 18*1024
|
||||||
cur.execute("insert into issue13 (t) values (%s)", ("x" * size,))
|
cur.execute("insert into issue13 (t) values (%s)", ("x" * size,))
|
||||||
cur.execute("select t from issue13")
|
cur.execute("select t from issue13")
|
||||||
# use assert_ so that obscenely huge error messages don't print
|
# use assertTrue so that obscenely huge error messages don't print
|
||||||
r = cur.fetchone()[0]
|
r = cur.fetchone()[0]
|
||||||
self.assert_("x" * size == r)
|
self.assertTrue("x" * size == r)
|
||||||
finally:
|
finally:
|
||||||
cur.execute("drop table issue13")
|
cur.execute("drop table issue13")
|
||||||
|
|
||||||
@@ -115,7 +120,7 @@ KEY (`station`,`dh`,`echeance`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;""")
|
|||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
c.execute("create table issue15 (t varchar(32))")
|
c.execute("create table issue15 (t varchar(32))")
|
||||||
try:
|
try:
|
||||||
c.execute("insert into issue15 (t) values (%s)", (u'\xe4\xf6\xfc'))
|
c.execute("insert into issue15 (t) values (%s)", (u'\xe4\xf6\xfc',))
|
||||||
c.execute("select t from issue15")
|
c.execute("select t from issue15")
|
||||||
self.assertEqual(u'\xe4\xf6\xfc', c.fetchone()[0])
|
self.assertEqual(u'\xe4\xf6\xfc', c.fetchone()[0])
|
||||||
finally:
|
finally:
|
||||||
@@ -133,6 +138,7 @@ KEY (`station`,`dh`,`echeance`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;""")
|
|||||||
finally:
|
finally:
|
||||||
c.execute("drop table issue16")
|
c.execute("drop table issue16")
|
||||||
|
|
||||||
|
@unittest.skip("test_issue_17() requires a custom, legacy MySQL configuration and will not be run.")
|
||||||
def test_issue_17(self):
|
def test_issue_17(self):
|
||||||
""" could not connect mysql use passwod """
|
""" could not connect mysql use passwod """
|
||||||
conn = self.connections[0]
|
conn = self.connections[0]
|
||||||
@@ -181,23 +187,22 @@ class TestNewIssues(base.PyMySQLTestCase):
|
|||||||
finally:
|
finally:
|
||||||
c.execute(_uni("drop table hei\xc3\x9fe", "utf8"))
|
c.execute(_uni("drop table hei\xc3\x9fe", "utf8"))
|
||||||
|
|
||||||
# Will fail without manual intervention:
|
@unittest.skip("This test requires manual intervention")
|
||||||
#def test_issue_35(self):
|
def test_issue_35(self):
|
||||||
#
|
conn = self.connections[0]
|
||||||
# conn = self.connections[0]
|
c = conn.cursor()
|
||||||
# c = conn.cursor()
|
print "sudo killall -9 mysqld within the next 10 seconds"
|
||||||
# print "sudo killall -9 mysqld within the next 10 seconds"
|
try:
|
||||||
# try:
|
c.execute("select sleep(10)")
|
||||||
# c.execute("select sleep(10)")
|
self.fail()
|
||||||
# self.fail()
|
except pymysql.OperationalError, e:
|
||||||
# except pymysql.OperationalError, e:
|
self.assertEqual(2013, e.args[0])
|
||||||
# self.assertEqual(2013, e.args[0])
|
|
||||||
|
|
||||||
def test_issue_36(self):
|
def test_issue_36(self):
|
||||||
conn = self.connections[0]
|
conn = self.connections[0]
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
# kill connections[0]
|
# kill connections[0]
|
||||||
original_count = c.execute("show processlist")
|
c.execute("show processlist")
|
||||||
kill_id = None
|
kill_id = None
|
||||||
for id,user,host,db,command,time,state,info in c.fetchall():
|
for id,user,host,db,command,time,state,info in c.fetchall():
|
||||||
if info == "show processlist":
|
if info == "show processlist":
|
||||||
@@ -212,8 +217,13 @@ class TestNewIssues(base.PyMySQLTestCase):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
# check the process list from the other connection
|
# check the process list from the other connection
|
||||||
self.assertEqual(original_count - 1, self.connections[1].cursor().execute("show processlist"))
|
try:
|
||||||
del self.connections[0]
|
c = self.connections[1].cursor()
|
||||||
|
c.execute("show processlist")
|
||||||
|
ids = [row[0] for row in c.fetchall()]
|
||||||
|
self.assertFalse(kill_id in ids)
|
||||||
|
finally:
|
||||||
|
del self.connections[0]
|
||||||
|
|
||||||
def test_issue_37(self):
|
def test_issue_37(self):
|
||||||
conn = self.connections[0]
|
conn = self.connections[0]
|
||||||
@@ -230,10 +240,38 @@ class TestNewIssues(base.PyMySQLTestCase):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
c.execute("create table issue38 (id integer, data mediumblob)")
|
c.execute("create table issue38 (id integer, data mediumblob)")
|
||||||
c.execute("insert into issue38 values (1, %s)", datum)
|
c.execute("insert into issue38 values (1, %s)", (datum,))
|
||||||
finally:
|
finally:
|
||||||
c.execute("drop table issue38")
|
c.execute("drop table issue38")
|
||||||
__all__ = ["TestOldIssues", "TestNewIssues"]
|
|
||||||
|
def disabled_test_issue_54(self):
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
big_sql = "select * from issue54 where "
|
||||||
|
big_sql += " and ".join("%d=%d" % (i,i) for i in xrange(0, 100000))
|
||||||
|
|
||||||
|
try:
|
||||||
|
c.execute("create table issue54 (id integer primary key)")
|
||||||
|
c.execute("insert into issue54 (id) values (7)")
|
||||||
|
c.execute(big_sql)
|
||||||
|
self.assertEqual(7, c.fetchone()[0])
|
||||||
|
finally:
|
||||||
|
c.execute("drop table issue54")
|
||||||
|
|
||||||
|
class TestGitHubIssues(base.PyMySQLTestCase):
|
||||||
|
def test_issue_66(self):
|
||||||
|
conn = self.connections[0]
|
||||||
|
c = conn.cursor()
|
||||||
|
self.assertEqual(0, conn.insert_id())
|
||||||
|
try:
|
||||||
|
c.execute("create table issue66 (id integer primary key auto_increment, x integer)")
|
||||||
|
c.execute("insert into issue66 (x) values (1)")
|
||||||
|
c.execute("insert into issue66 (x) values (1)")
|
||||||
|
self.assertEqual(2, conn.insert_id())
|
||||||
|
finally:
|
||||||
|
c.execute("drop table issue66")
|
||||||
|
|
||||||
|
__all__ = ["TestOldIssues", "TestNewIssues", "TestGitHubIssues"]
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import unittest
|
import unittest
|
||||||
|
|||||||
@@ -14,4 +14,3 @@ def TimeFromTicks(ticks):
|
|||||||
|
|
||||||
def TimestampFromTicks(ticks):
|
def TimestampFromTicks(ticks):
|
||||||
return datetime(*localtime(ticks)[:6])
|
return datetime(*localtime(ticks)[:6])
|
||||||
|
|
||||||
@@ -17,4 +17,3 @@ def join_bytes(bs):
|
|||||||
for b in bs[1:]:
|
for b in bs[1:]:
|
||||||
rv += b
|
rv += b
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import os
|
||||||
|
import pyuca
|
||||||
|
|
||||||
|
unicode_collator = pyuca.Collator(os.path.join(os.path.dirname(__file__), 'allkeys.txt'))
|
||||||
|
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,133 @@
|
|||||||
|
# pyuca - Unicode Collation Algorithm
|
||||||
|
# Version: 2006-02-13
|
||||||
|
#
|
||||||
|
# James Tauber
|
||||||
|
# http://jtauber.com/
|
||||||
|
|
||||||
|
# Copyright (c) 2006 James Tauber
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Preliminary implementation of the Unicode Collation Algorithm.
|
||||||
|
|
||||||
|
|
||||||
|
This only implements the simple parts of the algorithm but I have successfully
|
||||||
|
tested it using the Default Unicode Collation Element Table (DUCET) to collate
|
||||||
|
Ancient Greek correctly.
|
||||||
|
|
||||||
|
Usage example:
|
||||||
|
|
||||||
|
from pyuca import Collator
|
||||||
|
c = Collator("allkeys.txt")
|
||||||
|
|
||||||
|
sorted_words = sorted(words, key=c.sort_key)
|
||||||
|
|
||||||
|
allkeys.txt (1 MB) is available at
|
||||||
|
|
||||||
|
http://www.unicode.org/Public/UCA/latest/allkeys.txt
|
||||||
|
|
||||||
|
but you can always subset this for just the characters you are dealing with.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Trie:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.root = [None, {}]
|
||||||
|
|
||||||
|
def add(self, key, value):
|
||||||
|
curr_node = self.root
|
||||||
|
for part in key:
|
||||||
|
curr_node = curr_node[1].setdefault(part, [None, {}])
|
||||||
|
curr_node[0] = value
|
||||||
|
|
||||||
|
def find_prefix(self, key):
|
||||||
|
curr_node = self.root
|
||||||
|
remainder = key
|
||||||
|
for part in key:
|
||||||
|
if part not in curr_node[1]:
|
||||||
|
break
|
||||||
|
curr_node = curr_node[1][part]
|
||||||
|
remainder = remainder[1:]
|
||||||
|
return (curr_node[0], remainder)
|
||||||
|
|
||||||
|
|
||||||
|
class Collator:
|
||||||
|
|
||||||
|
def __init__(self, filename):
|
||||||
|
self.table = Trie()
|
||||||
|
self.load(filename)
|
||||||
|
|
||||||
|
def load(self, filename):
|
||||||
|
for line in open(filename):
|
||||||
|
if line.startswith("#") or line.startswith("%"):
|
||||||
|
continue
|
||||||
|
if line.strip() == "":
|
||||||
|
continue
|
||||||
|
line = line[:line.find("#")] + "\n"
|
||||||
|
line = line[:line.find("%")] + "\n"
|
||||||
|
line = line.strip()
|
||||||
|
|
||||||
|
if line.startswith("@"):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
semicolon = line.find(";")
|
||||||
|
charList = line[:semicolon].strip().split()
|
||||||
|
x = line[semicolon:]
|
||||||
|
collElements = []
|
||||||
|
while True:
|
||||||
|
begin = x.find("[")
|
||||||
|
if begin == -1:
|
||||||
|
break
|
||||||
|
end = x[begin:].find("]")
|
||||||
|
collElement = x[begin:begin+end+1]
|
||||||
|
x = x[begin + 1:]
|
||||||
|
|
||||||
|
alt = collElement[1]
|
||||||
|
chars = collElement[2:-1].split(".")
|
||||||
|
|
||||||
|
collElements.append((alt, chars))
|
||||||
|
integer_points = [int(ch, 16) for ch in charList]
|
||||||
|
self.table.add(integer_points, collElements)
|
||||||
|
|
||||||
|
def sort_key(self, string):
|
||||||
|
|
||||||
|
collation_elements = []
|
||||||
|
|
||||||
|
lookup_key = [ord(ch) for ch in string]
|
||||||
|
while lookup_key:
|
||||||
|
value, lookup_key = self.table.find_prefix(lookup_key)
|
||||||
|
if not value:
|
||||||
|
# @@@
|
||||||
|
raise ValueError, map(hex, lookup_key)
|
||||||
|
collation_elements.extend(value)
|
||||||
|
|
||||||
|
sort_key = []
|
||||||
|
|
||||||
|
for level in range(4):
|
||||||
|
if level:
|
||||||
|
sort_key.append(0) # level separator
|
||||||
|
for element in collation_elements:
|
||||||
|
ce_l = int(element[1][level], 16)
|
||||||
|
if ce_l:
|
||||||
|
sort_key.append(ce_l)
|
||||||
|
|
||||||
|
return tuple(sort_key)
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf8 -*-
|
||||||
|
# Plural-Forms for af (Afrikaans (South Africa))
|
||||||
|
|
||||||
|
nplurals=2 # Afrikaans language has 2 forms:
|
||||||
|
# 1 singular and 1 plural
|
||||||
|
|
||||||
|
# Determine plural_id for number *n* as sequence of positive
|
||||||
|
# integers: 0,1,...
|
||||||
|
# NOTE! For singular form ALWAYS return plural_id = 0
|
||||||
|
get_plural_id = lambda n: int(n != 1)
|
||||||
|
|
||||||
|
# Construct and return plural form of *word* using
|
||||||
|
# *plural_id* (which ALWAYS>0). This function will be executed
|
||||||
|
# for words (or phrases) not found in plural_dict dictionary
|
||||||
|
# construct_plural_form = lambda word, plural_id: (word + 'suffix')
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf8 -*-
|
||||||
|
# Plural-Forms for bg (Bulgarian)
|
||||||
|
|
||||||
|
nplurals=2 # Bulgarian language has 2 forms:
|
||||||
|
# 1 singular and 1 plural
|
||||||
|
|
||||||
|
# Determine plural_id for number *n* as sequence of positive
|
||||||
|
# integers: 0,1,...
|
||||||
|
# NOTE! For singular form ALWAYS return plural_id = 0
|
||||||
|
get_plural_id = lambda n: int(n != 1)
|
||||||
|
|
||||||
|
# Construct and return plural form of *word* using
|
||||||
|
# *plural_id* (which ALWAYS>0). This function will be executed
|
||||||
|
# for words (or phrases) not found in plural_dict dictionary
|
||||||
|
# construct_plural_form = lambda word, plural_id: (word + 'suffix')
|
||||||
|
|
||||||
Loaded 100 of 141 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user