1
0
mirror of https://github.com/django/django.git synced 2025-07-04 17:59:13 +00:00

gis: Merged revisions 4786-5490 via svnmerge from

http://code.djangoproject.com/svn/django/trunk

git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@5492 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jeremy Dunck 2007-06-18 16:48:27 +00:00
parent 48c9f87e1f
commit bdcc95e5cc
350 changed files with 45979 additions and 19391 deletions

51
AUTHORS
View File

@ -41,12 +41,17 @@ And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --
people who have submitted patches, reported bugs, added translations, helped
answer newbie questions, and generally made Django that much better:
adurdin@gmail.com
alang@bright-green.com
Marty Alchin <gulopine@gamemusic.org>
Daniel Alves Barbosa de Oliveira Vaz <danielvaz@gmail.com>
Andreas
andy@jadedplanet.net
Fabrice Aneche <akh@nobugware.com>
ant9000@netwise.it
David Ascher <http://ascher.ca/>
david@kazserve.org
Arthur <avandorp@gmail.com>
axiak@mit.edu
Jiri Barton
Ned Batchelder <http://www.nedbatchelder.com/>
Shannon -jj Behrens <http://jjinux.blogspot.com/>
@ -63,32 +68,45 @@ answer newbie questions, and generally made Django that much better:
Chris Chamberlin <dja@cdc.msbx.net>
Amit Chakradeo <http://amit.chakradeo.net/>
ChaosKCW
ivan.chelubeev@gmail.com
Bryan Chow <bryan at verdjn dot com>
Michal Chruszcz <troll@pld-linux.org>
Ian Clelland <clelland@gmail.com>
crankycoder@gmail.com
Pete Crosier <pete.crosier@gmail.com>
Matt Croydon <http://www.postneo.com/>
flavio.curella@gmail.com
Jure Cuhalev <gandalf@owca.info>
dackze+django@gmail.com
David Danier <goliath.mailinglist@gmx.de>
Dirk Datzert <dummy@habmalnefrage.de>
Jonathan Daugherty (cygnus) <http://www.cprogrammer.org/>
dave@thebarproject.com
Jason Davies (Esaj) <http://www.jasondavies.com/>
Alex Dedul
deric@monowerks.com
Max Derkachev <mderk@yandex.ru>
Jordan Dimov <s3x3y1@gmail.com>
dne@mayonnaise.net
Maximillian Dornseif <md@hudora.de>
Jeremy Dunck <http://dunck.us/>
Andrew Durdin <adurdin@gmail.com>
Andy Dustman <farcepest@gmail.com>
Clint Ecker
enlight
Enrico <rico.bl@gmail.com>
Ludvig Ericson <ludvig.ericson@gmail.com>
Dirk Eschler <dirk.eschler@gmx.net>
Marc Fargas <telenieko@telenieko.com>
favo@exoweb.net
Bill Fenner <fenner@gmail.com>
Matthew Flanagan <http://wadofstuff.blogspot.com>
Eric Floehr <eric@intellovations.com>
Jorge Gajon <gajon@gajon.org>
gandalf@owca.info
Baishampayan Ghose
martin.glueck@gmail.com
GomoX <gomo@datafull.com>
Simon Greenhill <dev@simon.net.nz>
Owen Griffiths
Espen Grindhaug <http://grindhaug.org/>
@ -100,40 +118,49 @@ answer newbie questions, and generally made Django that much better:
hipertracker@gmail.com
Ian Holsman <http://feh.holsman.net/>
Kieran Holland <http://www.kieranholland.com>
Sung-Jin Hong <serialx.net@gmail.com>
Robert Rock Howard <http://djangomojo.com/>
Jason Huggins <http://www.jrandolph.com/blog/>
Hyun Mi Ae
Tom Insam
Baurzhan Ismagulov <ibr@radix50.net>
jcrasta@gmail.com
Zak Johnson <zakj@nox.cx>
Michael Josephson <http://www.sdjournal.com/>
jpellerin@gmail.com
junzhang.jn@gmail.com
Antti Kaihola <http://akaihola.blogspot.com/>
Ben Dean Kawamura <ben.dean.kawamura@gmail.com>
ian.g.kelly@gmail.com
Garth Kidd <http://www.deadlybloodyserious.com/>
kilian <kilian.cavalotti@lip6.fr>
Sune Kirkeby <http://ibofobi.dk/>
Bastian Kleineidam <calvin@debian.org>
Cameron Knight (ckknight)
Gasper Koren
Martin Kosír <martin@martinkosir.net>
Meir Kriheli <http://mksoft.co.il/>
Bruce Kroeze <http://coderseye.com/>
Joseph Kocherhans
konrad@gwu.edu
lakin.wecker@gmail.com
Nick Lane <nick.lane.au@gmail.com>
Stuart Langridge <http://www.kryogenix.org/>
Nicola Larosa <nico@teknico.net>
Eugene Lazutkin <http://lazutkin.com/blog/>
Jeong-Min Lee <falsetru@gmail.com>
Jannis Leidel <jl@websushi.org>
Christopher Lenz <http://www.cmlenz.net/>
lerouxb@gmail.com
Waylan Limberg <waylan@gmail.com>
limodou
mattmcc
Matt McClanahan <http://mmcc.cx/>
Martin Maney <http://www.chipy.org/Martin_Maney>
masonsimon+django@gmail.com
Manuzhai
Petar Marić <http://www.petarmaric.com/>
Nuno Mariz <nmariz@gmail.com>
marijn@metronomo.cl
mark@junklight.com
Yasushi Masuda <whosaysni@gmail.com>
mattycakes@gmail.com
@ -144,15 +171,18 @@ answer newbie questions, and generally made Django that much better:
mitakummaa@gmail.com
mmarshall
Eric Moritz <http://eric.themoritzfamily.com/>
mrmachine <real.human@mrmachine.net>
Robin Munn <http://www.geekforgod.com/>
Robert Myers <myer0052@gmail.com>
Nebojša Dorđević
Gopal Narayanan <gopastro@gmail.com>
Fraser Nevett <mail@nevett.org>
Sam Newman <http://www.magpiebrain.com/>
Neal Norwitz <nnorwitz@google.com>
oggie rob <oz.robharvey@gmail.com>
Jay Parlar <parlar@gmail.com>
pavithran s <pavithran.s@gmail.com>
Barry Pederson <bp@barryp.org>
pgross@thoughtworks.com
phaedo <http://phaedo.cx/>
phil@produxion.net
@ -161,14 +191,19 @@ answer newbie questions, and generally made Django that much better:
Luke Plant <http://lukeplant.me.uk/>
plisk
Daniel Poelzleithner <http://poelzi.org/>
polpak@yahoo.com
J. Rademaker
Michael Radziej <mir@noris.de>
ramiro
Ramiro Morales <rm0@gmx.net>
Massimiliano Ravelli <massimiliano.ravelli@gmail.com>
Brian Ray <http://brianray.chipy.org/>
remco@diji.biz
rhettg@gmail.com
Henrique Romano <onaiort@gmail.com>
Armin Ronacher
Oliver Rutherfurd <http://rutherfurd.net/>
Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/>
Vinay Sajip <vinay_sajip@yahoo.co.uk>
David Schein
scott@staplefish.com
serbaut@gmail.com
@ -176,25 +211,35 @@ answer newbie questions, and generally made Django that much better:
SmileyChris <smileychris@gmail.com>
smurf@smurf.noris.de
sopel
Wiliam Alves de Souza <wiliamsouza83@gmail.com>
Georgi Stanojevski <glisha@gmail.com>
Vasiliy Stavenko <stavenko@gmail.com>
Thomas Steinacher <http://www.eggdrop.ch/>
nowell strite
Radek Švarz <http://www.svarz.cz/translate/>
Swaroop C H <http://www.swaroopch.info>
Aaron Swartz <http://www.aaronsw.com/>
Ville Säävuori <http://www.unessa.net/>
Tyson Tate <tyson@fallingbullets.com>
Frank Tegtmeyer <fte@fte.to>
thebjorn <bp@datakortet.no>
Zach Thompson <zthompson47@gmail.com>
Tom Tobin
Joe Topjian <http://joe.terrarum.net/geek/code/python/django/>
torne-django@wolfpuppy.org.uk
Karen Tracey <graybark@bellsouth.net>
Makoto Tsuyuki <mtsuyuki@gmail.com>
tt@gurgle.no
Amit Upadhyay
Geert Vanderkelen
viestards.lists@gmail.com
Milton Waddams
wam-djangobug@wamber.net
wangchun <yaohua2000@gmail.com>
Dan Watson <http://theidioteque.net/>
Chris Wesseling <Chris.Wesseling@cwi.nl>
James Wheare <django@sparemint.com>
charly.wilhelm@gmail.com
Rachel Willmer <http://www.willmer.com/kb/>
Gary Wilson <gary.wilson@gmail.com>
wojtek

View File

@ -1,10 +1,15 @@
include README
include AUTHORS
include INSTALL
include LICENSE
include MANIFEST.in
recursive-include docs *
recursive-include scripts *
recursive-include examples *
recursive-include extras *
recursive-include django/conf/locale *
recursive-include django/contrib/admin/templates *
recursive-include django/contrib/admin/media *
recursive-include django/contrib/comments/templates *
recursive-include django/contrib/databrowse/templates *
recursive-include django/contrib/sitemaps/templates *

View File

@ -1 +1,8 @@
VERSION = (0, 96, None)
VERSION = (0, 97, 'pre')
def get_version():
"Returns the version as a human-format string."
v = '.'.join([str(i) for i in VERSION[:-1]])
if VERSION[-1]:
v += '-' + VERSION[-1]
return v

View File

@ -31,9 +31,9 @@ def compile_messages(locale=None):
os.environ['djangocompilemo'] = pf + '.mo'
os.environ['djangocompilepo'] = pf + '.po'
if sys.platform == 'win32': # Different shell-variable syntax
cmd = 'msgfmt -o "%djangocompilemo%" "%djangocompilepo%"'
cmd = 'msgfmt --check-format -o "%djangocompilemo%" "%djangocompilepo%"'
else:
cmd = 'msgfmt -o "$djangocompilemo" "$djangocompilepo"'
cmd = 'msgfmt --check-format -o "$djangocompilemo" "$djangocompilepo"'
os.system(cmd)
def main():

View File

@ -7,13 +7,13 @@ Can be run as a cronjob to clean out old data from the database (only expired
sessions at the moment).
"""
from django.db import backend, connection, transaction
import datetime
from django.db import transaction
from django.contrib.sessions.models import Session
def clean_up():
# Clean up old database records
cursor = connection.cursor()
cursor.execute("DELETE FROM %s WHERE %s < NOW()" % \
(backend.quote_name('django_session'), backend.quote_name('expire_date')))
"""Clean up expired sessions."""
Session.objects.filter(expire_date__lt=datetime.datetime.now()).delete()
transaction.commit_unless_managed()
if __name__ == "__main__":

View File

@ -81,7 +81,7 @@ def make_messages():
src = pythonize_re.sub('\n#', src)
open(os.path.join(dirpath, '%s.py' % file), "wb").write(src)
thefile = '%s.py' % file
cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy --from-code UTF-8 -o - "%s"' % (
cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
(stdin, stdout, stderr) = os.popen3(cmd, 'b')
msgs = stdout.read()
@ -103,7 +103,7 @@ def make_messages():
open(os.path.join(dirpath, '%s.py' % file), "wb").write(templatize(src))
thefile = '%s.py' % file
if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy --from-code UTF-8 -o - "%s"' % (
cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
(stdin, stdout, stderr) = os.popen3(cmd, 'b')
msgs = stdout.read()

View File

@ -22,7 +22,7 @@ def gather_stats(p):
else:
continue
print "Processing %s" % f
if profiles.has_key(path):
if path in profiles:
profiles[path].add(prof)
else:
profiles[path] = prof

View File

@ -38,6 +38,7 @@ LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('ar', gettext_noop('Arabic')),
('bn', gettext_noop('Bengali')),
('bg', gettext_noop('Bulgarian')),
('ca', gettext_noop('Catalan')),
('cs', gettext_noop('Czech')),
('cy', gettext_noop('Welsh')),
@ -55,6 +56,7 @@ LANGUAGES = (
('is', gettext_noop('Icelandic')),
('it', gettext_noop('Italian')),
('ja', gettext_noop('Japanese')),
('ko', gettext_noop('Korean')),
('kn', gettext_noop('Kannada')),
('lv', gettext_noop('Latvian')),
('mk', gettext_noop('Macedonian')),
@ -118,6 +120,7 @@ EMAIL_PORT = 25
# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False
# List of strings representing installed apps.
INSTALLED_APPS = ()
@ -141,6 +144,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
# 'django.core.context_processors.request',
)
@ -237,7 +241,8 @@ TRANSACTIONS_MANAGED = False
# The User-Agent string to use when checking for URL validity through the
# isExistingURL validator.
URL_VALIDATOR_USER_AGENT = "Django/0.96pre (http://www.djangoproject.com)"
from django import get_version
URL_VALIDATOR_USER_AGENT = "Django/%s (http://www.djangoproject.com)" % get_version()
##############
# MIDDLEWARE #
@ -311,6 +316,12 @@ BANNED_IPS = ()
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
LOGIN_URL = '/accounts/login/'
LOGOUT_URL = '/accounts/logout/'
LOGIN_REDIRECT_URL = '/accounts/profile/'
###########
# TESTING #
###########
@ -322,6 +333,13 @@ TEST_RUNNER = 'django.test.simple.run_tests'
# If None, a name of 'test_' + DATABASE_NAME will be assumed
TEST_DATABASE_NAME = None
# Strings used to set the character set and collation order for the test
# database. These values are passed literally to the server, so they are
# backend-dependent. If None, no special settings are sent (system defaults are
# used).
TEST_DATABASE_CHARSET = None
TEST_DATABASE_COLLATION = None
############
# FIXTURES #
############

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,106 @@
# translation of djangojs.po to Bulgarian
#
msgid ""
msgstr ""
"Project-Id-Version: djangojs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: 2007-05-12 17:51+0300\n"
"Last-Translator: Jordan Dimov <s3x3y1@gmail.com>\n"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr "Налични %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "Избери всички"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "Добави"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "Премахни"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr "Избрахме %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "Направете своя избор и щракнете "
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "Изчисти всички"
#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr "Януари Февруари Март Април Май Юни Юли Август Септември Октомври Ноември Декември"
#: contrib/admin/media/js/dateparse.js:27
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Неделя Понеделник Вторник Сряда Четвъртък Петък Събота"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "Н П В С Ч П С"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
msgid "Now"
msgstr "Сега"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
msgid "Clock"
msgstr "Часовник"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
msgid "Choose a time"
msgstr "Избери време"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Midnight"
msgstr "Полунощ"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "6 a.m."
msgstr "6 a.m."
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "Noon"
msgstr "По обяд"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
msgid "Cancel"
msgstr "Отказ"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
msgid "Today"
msgstr "Днес"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
msgid "Calendar"
msgstr "Календар"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
msgid "Yesterday"
msgstr "Вчера"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
msgid "Tomorrow"
msgstr "Утре"

File diff suppressed because it is too large Load Diff

View File

@ -3,20 +3,19 @@
# Copyright (C)
# This file is distributed under the same license as the PACKAGE package.
#
# Jorge Gajon <gajon@gajon.org>, 2005.
# Marc Fargas <marc@fargas.com>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: djangojs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-02-15 11:05+1100\n"
"PO-Revision-Date: 2007-01-19 10:30+0100\n"
"POT-Creation-Date: 2007-05-20 18:25+0200\n"
"PO-Revision-Date: 2007-05-20 18:24+0200\n"
"Last-Translator: Marc Fargas <marc@fargas.com>\n"
"Language-Team: <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"X-Generator: VIM 7.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
@ -54,7 +53,7 @@ msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
"Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre Desembre"
"Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre Desembre"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
@ -92,7 +91,7 @@ msgstr "Migdia"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr "Cancel·lar"
msgstr "Cancel·lar"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
@ -109,13 +108,13 @@ msgstr "Ahir"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr "Demà"
msgstr "Demà"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
msgstr "Mostrar"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""
msgstr "Ocultar"

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-16 10:13+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: panos laganakos <panos.laganakos@gmail.com>\n"
"Last-Translator: Orestis Markou <orestis@orestis.gr>\n"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@ -164,9 +164,9 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
"Αυτο το σχόλιο σημειώθηκε απο %(χρήστη)ες\n"
"Αυτο το σχόλιο σημειώθηκε απο %(user)s\n"
"\n"
"%(κείμενο)α"
"%(text)s"
#: contrib/comments/models.py:265
msgid "flag date"

File diff suppressed because it is too large Load Diff

View File

@ -305,7 +305,7 @@ msgstr "Japon
#: conf/global_settings.py:58
msgid "Latvian"
msgstr ""
msgstr "Latvio"
#: conf/global_settings.py:59
msgid "Macedonian"
@ -611,7 +611,7 @@ msgstr "La URL %s no apunta a una imagen v
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
msgstr ""
"Los números de teléfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" "
"Los números de teléfono deben guardar el formato XXX-XXX-XXXX. \"%s\" "
"no es válido."
#: core/validators.py:196
@ -726,10 +726,10 @@ msgid "Please enter a valid decimal number with a whole part of at most %s digit
msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
msgstr[0] ""
"Por favor, introduzca un número decimal válido con a lo más %s dígito en "
"total."
"su parte entera."
msgstr[1] ""
"Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
"total."
"su parte entera."
#: core/validators.py:426
#, python-format
@ -958,7 +958,7 @@ msgid ""
"digits and underscores)."
msgstr ""
"Requerido. 30 caracteres o menos. Sólo caracteres alfanuméricos (letras, "
"dígutos y guiones bajos)."
"dígitos y guiones bajos)."
#: contrib/auth/models.py:91
msgid "first name"
@ -1107,7 +1107,7 @@ msgstr "Las contrase
#: contrib/auth/forms.py:124
msgid "Your old password was entered incorrectly. Please enter it again."
msgstr ""
"Tu contraseña antígua es incorrecta. Por favor, vuelve a introducirla "
"Tu contraseña antigua es incorrecta. Por favor, vuelve a introducirla "
"correctamente."
#: contrib/comments/models.py:67 contrib/comments/models.py:166
@ -1707,7 +1707,7 @@ msgid ""
msgstr ""
"Ha ocurrido un error. Se ha informado a los administradores del sitio "
"mediante correo electrónico y debería arreglarse en breve. Gracias por su "
"paciencia"
"paciencia."
#: contrib/admin/templates/admin/search_form.html:8
msgid "Go"
@ -1899,7 +1899,7 @@ msgid ""
"the appropriate user."
msgstr ""
"Algo va mal con la instalación de la base de datos. Asegúrate que las tablas "
"necesarias han sido creadas, y que la base de datos puede ser leida por el "
"necesarias han sido creadas, y que la base de datos puede ser leída por el "
"usuario apropiado."
#: contrib/admin/templates/admin/filter.html:2
@ -1912,7 +1912,7 @@ msgid ""
"First, enter a username and password. Then, you'll be able to edit more user "
"options."
msgstr ""
"Primero, introduzca un nombre de usuario y una contraseña. Luego, podrá "
"Primero introduzca un nombre de usuario y una contraseña. Luego podrá "
"editar el resto de opciones del usuario."
#: contrib/admin/templates/admin/auth/user/add_form.html:12
@ -2105,7 +2105,7 @@ msgstr "vista:"
#: contrib/admin/views/doc.py:164
#, python-format
msgid "App %r not found"
msgstr "Applicación %r no encontrada"
msgstr "Aplicación %r no encontrada"
#: contrib/admin/views/doc.py:171
#, python-format
@ -2326,12 +2326,12 @@ msgstr "Cambiar clave: %s"
#: contrib/localflavor/usa/forms.py:17
msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
msgstr "Introduzca un código zip en el formato XXXXX o XXXX-XXXX."
msgstr "Introduzca un código postal en el formato XXXXX o XXXX-XXXX."
#: contrib/localflavor/uk/forms.py:18
msgid "Enter a postcode. A space is required between the two postcode parts."
msgstr ""
"Introduzca in código postal. Se necesita un espacio entre las dos partes del "
"Introduzca un código postal. Se necesita un espacio entre las dos partes del "
"código."
#: contrib/sessions/models.py:51

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -8,26 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: djangojs 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-03-30 13:28+0200\n"
"PO-Revision-Date: 2006-03-30 13:35+0200\n"
"POT-Creation-Date: 2007-05-06 13:08+0300\n"
"PO-Revision-Date: 2007-05-06 13:08+0300\n"
"Last-Translator: Meir Kriheli <meir@mksoft.co.il>\n"
"Language-Team: Hebrew\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
"ינואר פברואר מרץ אפריל מאי יוני יולי אוגוסט ספטמבר אוקטובר נובמבר דצמבר"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "ראשון שני שלישי רביעי חמישי שישי שבת"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
@ -58,54 +46,75 @@ msgstr "יש לסמן את ההרשאות המבוקשות וללחוץ על "
msgid "Clear all"
msgstr "איפוס הכל"
#: contrib/admin/media/js/calendar.js:24
#: contrib/admin/media/js/dateparse.js:32
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
"ינואר פברואר מרץ אפריל מאי יוני יולי אוגוסט ספטמבר אוקטובר נובמבר דצמבר"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "ר ש ש ר ח ש ש"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "ראשון שני שלישי רביעי חמישי שישי שבת"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr "הצג"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr "הסתר"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr "כעת"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr "שעון"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr "בחירת שעה"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr "חצות"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr "6 בבוקר"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr "צהריים"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr "ביטול"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr "היום"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr "לוח שנה"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr "אתמול"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr "מחר"

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
# Translation of django.po to japanese.
# Copyright (C) 2005,2006 THE PACKAGE'S COPYRIGHT HOLDER
# Copyright (C) 2005,2006,2007 makoto tsuyuki
# This file is distributed under the same license as the PACKAGE package.
# makoto tsuyuki <mtsuyuki@gmail.com>, 2005,2006,2007.
#
@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-02-15 23:43+0900\n"
"POT-Creation-Date: 2007-03-26 22:51+0900\n"
"PO-Revision-Date: 2006-05-18 00:28+0900\n"
"Last-Translator: makoto tsuyuki <mtsuyuki@gmail.com>\n"
"Language-Team: Japanese <django-ja@googlegroups.com>\n"
@ -92,70 +92,82 @@ msgid "Japanese"
msgstr "日本語"
#: conf/global_settings.py:58
msgid "Kannada"
msgstr "カンナダ語"
#: conf/global_settings.py:59
msgid "Latvian"
msgstr "ラトビア語"
#: conf/global_settings.py:59
#: conf/global_settings.py:60
msgid "Macedonian"
msgstr "マケドニア語"
#: conf/global_settings.py:60
#: conf/global_settings.py:61
msgid "Dutch"
msgstr "オランダ語"
#: conf/global_settings.py:61
#: conf/global_settings.py:62
msgid "Norwegian"
msgstr "ノルウェー語"
#: conf/global_settings.py:62
#: conf/global_settings.py:63
msgid "Polish"
msgstr "ポーランド語"
#: conf/global_settings.py:63
#: conf/global_settings.py:64
msgid "Portugese"
msgstr "ポルトガル語"
#: conf/global_settings.py:65
msgid "Brazilian"
msgstr "ブラジル語"
#: conf/global_settings.py:64
#: conf/global_settings.py:66
msgid "Romanian"
msgstr "ルーマニア語"
#: conf/global_settings.py:65
#: conf/global_settings.py:67
msgid "Russian"
msgstr "ロシア語"
#: conf/global_settings.py:66
#: conf/global_settings.py:68
msgid "Slovak"
msgstr "スロバキア語"
#: conf/global_settings.py:67
#: conf/global_settings.py:69
msgid "Slovenian"
msgstr "スロヴェニア語"
#: conf/global_settings.py:68
#: conf/global_settings.py:70
msgid "Serbian"
msgstr "セルビア語"
#: conf/global_settings.py:69
#: conf/global_settings.py:71
msgid "Swedish"
msgstr "スウェーデン語"
#: conf/global_settings.py:70
#: conf/global_settings.py:72
msgid "Tamil"
msgstr "タミル語"
#: conf/global_settings.py:71
#: conf/global_settings.py:73
msgid "Telugu"
msgstr "テルグ語"
#: conf/global_settings.py:74
msgid "Turkish"
msgstr "トルコ語"
#: conf/global_settings.py:72
#: conf/global_settings.py:75
msgid "Ukrainian"
msgstr "ウクライナ語"
#: conf/global_settings.py:73
#: conf/global_settings.py:76
msgid "Simplified Chinese"
msgstr "簡体字中国語"
#: conf/global_settings.py:74
#: conf/global_settings.py:77
msgid "Traditional Chinese"
msgstr "繁体字中国語"
@ -194,17 +206,17 @@ msgid "This year"
msgstr "今年"
#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
#: oldforms/__init__.py:572
#: oldforms/__init__.py:577
msgid "Yes"
msgstr "はい"
#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
#: oldforms/__init__.py:572
#: oldforms/__init__.py:577
msgid "No"
msgstr "いいえ"
#: contrib/admin/filterspecs.py:150 newforms/widgets.py:170
#: oldforms/__init__.py:572
#: oldforms/__init__.py:577
msgid "Unknown"
msgstr "不明"
@ -568,7 +580,8 @@ msgstr "確認のため、再度パスワードを入力してください。"
#: contrib/admin/templates/admin/auth/user/change_password.html:28
#, python-format
msgid "Enter a new password for the user <strong>%(username)s</strong>."
msgstr "<strong>%(username)s</strong>さんの新しいパスワードを入力してください。"
msgstr ""
"<strong>%(username)s</strong>さんの新しいパスワードを入力してください。"
#: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Bookmarklets"
@ -602,7 +615,6 @@ msgstr ""
msgid "Documentation for this page"
msgstr "このページのドキュメント"
# TODO
#: contrib/admin/templates/admin_doc/bookmarklets.html:20
msgid ""
"Jumps you from any page to the documentation for the view that generates "
@ -769,7 +781,7 @@ msgstr "現在:"
msgid "Change:"
msgstr "変更:"
#: contrib/admin/templatetags/admin_list.py:238
#: contrib/admin/templatetags/admin_list.py:247
msgid "All dates"
msgstr "いつでも"
@ -850,13 +862,13 @@ msgstr "アプリケーション %r が見つかりません"
#: contrib/admin/views/doc.py:171
#, python-format
msgid "Model %r not found in app %r"
msgstr "モデル %r が %r アプリケーションに見つかりません"
msgid "Model %(name)r not found in app %(label)r"
msgstr "モデル %(name)r が %(label)r アプリケーションに見つかりません"
#: contrib/admin/views/doc.py:183
#, python-format
msgid "the related `%s.%s` object"
msgstr "`%s.%s` (関連オブジェクト)"
msgid "the related `%(label)s.%(type)s` object"
msgstr "`%(label)s.%(type)s` (関連オブジェクト)"
#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
@ -865,8 +877,8 @@ msgstr "モデル :"
#: contrib/admin/views/doc.py:214
#, python-format
msgid "related `%s.%s` objects"
msgstr "`%s.%s` (関連オブジェクト)"
msgid "related `%(label)s.%(name)s` objects"
msgstr "`%(label)s.%(name)s` (関連オブジェクト)"
#: contrib/admin/views/doc.py:219
#, python-format
@ -984,7 +996,7 @@ msgid "Added %s."
msgstr "%s を追加しました。"
#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
#: contrib/admin/views/main.py:339 db/models/manipulators.py:306
#: contrib/admin/views/main.py:339 db/models/manipulators.py:308
msgid "and"
msgstr "と"
@ -1018,41 +1030,41 @@ msgstr "%(name)s \"%(obj)s\" を追加しました。続けて編集できます
msgid "Change %s"
msgstr "%s を変更"
#: contrib/admin/views/main.py:473
#: contrib/admin/views/main.py:476
#, python-format
msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
msgstr "%(name)s に %(fieldname)s が一つ以上あります: %(obj)s"
#: contrib/admin/views/main.py:478
#: contrib/admin/views/main.py:481
#, python-format
msgid "One or more %(fieldname)s in %(name)s:"
msgstr "%(name)s に %(fieldname)s が一つ以上あります:"
#: contrib/admin/views/main.py:511
#: contrib/admin/views/main.py:514
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "%(name)s \"%(obj)s\" を削除しました。"
#: contrib/admin/views/main.py:514
#: contrib/admin/views/main.py:517
msgid "Are you sure?"
msgstr "よろしいですか?"
#: contrib/admin/views/main.py:536
#: contrib/admin/views/main.py:539
#, python-format
msgid "Change history: %s"
msgstr "変更履歴: %s"
#: contrib/admin/views/main.py:570
#: contrib/admin/views/main.py:573
#, python-format
msgid "Select %s"
msgstr "%s を選択"
#: contrib/admin/views/main.py:570
#: contrib/admin/views/main.py:573
#, python-format
msgid "Select %s to change"
msgstr "変更する %s を選択"
#: contrib/admin/views/main.py:758
#: contrib/admin/views/main.py:768
msgid "Database error"
msgstr "データベースエラー"
@ -1147,8 +1159,8 @@ msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>."
msgstr ""
"'[algo]$[salt]$[hexdigest]'形式か、"
"<a href=\"password/\">パスワード変更フォーム</a>を使ってください。"
"'[algo]$[salt]$[hexdigest]'形式か、<a href=\"password/\">パスワード変更フォー"
"ム</a>を使ってください。"
#: contrib/auth/models.py:95
msgid "staff status"
@ -1517,15 +1529,15 @@ msgstr "コメント ID が不正です"
msgid "No voting for yourself"
msgstr "自分には投票できません。"
#: contrib/contenttypes/models.py:26
#: contrib/contenttypes/models.py:36
msgid "python model class name"
msgstr "Python モデルクラス名"
#: contrib/contenttypes/models.py:29
#: contrib/contenttypes/models.py:39
msgid "content type"
msgstr "コンテンツタイプ"
#: contrib/contenttypes/models.py:30
#: contrib/contenttypes/models.py:40
msgid "content types"
msgstr "コンテンツタイプ"
@ -1575,7 +1587,281 @@ msgstr "フラットページ"
msgid "flat pages"
msgstr "フラットページ"
#: contrib/localflavor/usa/forms.py:13
#: contrib/humanize/templatetags/humanize.py:17
msgid "th"
msgstr "番目"
#: contrib/humanize/templatetags/humanize.py:17
msgid "st"
msgstr "番目"
#: contrib/humanize/templatetags/humanize.py:17
msgid "nd"
msgstr "番目"
#: contrib/humanize/templatetags/humanize.py:17
msgid "rd"
msgstr "番目"
#: contrib/humanize/templatetags/humanize.py:47
#, python-format
msgid "%(value).1f million"
msgid_plural "%(value).1f million"
msgstr[0] "%(value).1f 百万"
msgstr[1] "%(value).1f 百万"
#: contrib/humanize/templatetags/humanize.py:50
#, python-format
msgid "%(value).1f billion"
msgid_plural "%(value).1f billion"
msgstr[0] "%(value).1f 十億"
msgstr[1] "%(value).1f 十億"
#: contrib/humanize/templatetags/humanize.py:53
#, python-format
msgid "%(value).1f trillion"
msgid_plural "%(value).1f trillion"
msgstr[0] "%(value).1f 兆"
msgstr[1] "%(value).1f 兆"
#: contrib/humanize/templatetags/humanize.py:68
msgid "one"
msgstr "1"
#: contrib/humanize/templatetags/humanize.py:68
msgid "two"
msgstr "2"
#: contrib/humanize/templatetags/humanize.py:68
msgid "three"
msgstr "3"
#: contrib/humanize/templatetags/humanize.py:68
msgid "four"
msgstr "4"
#: contrib/humanize/templatetags/humanize.py:68
msgid "five"
msgstr "5"
#: contrib/humanize/templatetags/humanize.py:68
msgid "six"
msgstr "6"
#: contrib/humanize/templatetags/humanize.py:68
msgid "seven"
msgstr "7"
#: contrib/humanize/templatetags/humanize.py:68
msgid "eight"
msgstr "8"
#: contrib/humanize/templatetags/humanize.py:68
msgid "nine"
msgstr "9"
#: contrib/localflavor/fr/forms.py:17
#, fuzzy
msgid "Enter a zip code in the format XXXXX."
msgstr "XXXXXの形式でZipコードを入力してください。"
#: contrib/localflavor/jp/forms.py:21
msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
#: contrib/localflavor/jp/jp_prefectures.py:4
msgid "Hokkaido"
msgstr "北海道"
#: contrib/localflavor/jp/jp_prefectures.py:5
msgid "Aomori"
msgstr "青森県"
#: contrib/localflavor/jp/jp_prefectures.py:6
msgid "Iwate"
msgstr "岩手県"
#: contrib/localflavor/jp/jp_prefectures.py:7
msgid "Miyagi"
msgstr "宮城県"
#: contrib/localflavor/jp/jp_prefectures.py:8
msgid "Akita"
msgstr "秋田県"
#: contrib/localflavor/jp/jp_prefectures.py:9
msgid "Yamagata"
msgstr "山形県"
#: contrib/localflavor/jp/jp_prefectures.py:10
msgid "Fukushima"
msgstr "福島県"
#: contrib/localflavor/jp/jp_prefectures.py:11
msgid "Ibaraki"
msgstr "茨城県"
#: contrib/localflavor/jp/jp_prefectures.py:12
msgid "Tochigi"
msgstr "栃木県"
#: contrib/localflavor/jp/jp_prefectures.py:13
msgid "Gunma"
msgstr "群馬県"
#: contrib/localflavor/jp/jp_prefectures.py:14
msgid "Saitama"
msgstr "埼玉県"
#: contrib/localflavor/jp/jp_prefectures.py:15
msgid "Chiba"
msgstr "千葉県"
#: contrib/localflavor/jp/jp_prefectures.py:16
msgid "Tokyo"
msgstr "東京都"
#: contrib/localflavor/jp/jp_prefectures.py:17
msgid "Kanagawa"
msgstr "神奈川県"
#: contrib/localflavor/jp/jp_prefectures.py:18
msgid "Yamanashi"
msgstr "山梨県"
#: contrib/localflavor/jp/jp_prefectures.py:19
msgid "Nagano"
msgstr "長野県"
#: contrib/localflavor/jp/jp_prefectures.py:20
msgid "Niigata"
msgstr "新潟県"
#: contrib/localflavor/jp/jp_prefectures.py:21
msgid "Toyama"
msgstr "富山県"
#: contrib/localflavor/jp/jp_prefectures.py:22
msgid "Ishikawa"
msgstr "石川県"
#: contrib/localflavor/jp/jp_prefectures.py:23
msgid "Fukui"
msgstr "福井県"
#: contrib/localflavor/jp/jp_prefectures.py:24
msgid "Gifu"
msgstr "岐阜県"
#: contrib/localflavor/jp/jp_prefectures.py:25
msgid "Shizuoka"
msgstr "静岡県"
#: contrib/localflavor/jp/jp_prefectures.py:26
msgid "Aichi"
msgstr "愛知県"
#: contrib/localflavor/jp/jp_prefectures.py:27
msgid "Mie"
msgstr "三重県"
#: contrib/localflavor/jp/jp_prefectures.py:28
msgid "Shiga"
msgstr "滋賀県"
#: contrib/localflavor/jp/jp_prefectures.py:29
msgid "Kyoto"
msgstr "京都府"
#: contrib/localflavor/jp/jp_prefectures.py:30
msgid "Osaka"
msgstr "大阪府"
#: contrib/localflavor/jp/jp_prefectures.py:31
msgid "Hyogo"
msgstr "兵庫県"
#: contrib/localflavor/jp/jp_prefectures.py:32
msgid "Nara"
msgstr "奈良県"
#: contrib/localflavor/jp/jp_prefectures.py:33
msgid "Wakayama"
msgstr "和歌山県"
#: contrib/localflavor/jp/jp_prefectures.py:34
msgid "Tottori"
msgstr "鳥取県"
#: contrib/localflavor/jp/jp_prefectures.py:35
msgid "Shimane"
msgstr "島根県"
#: contrib/localflavor/jp/jp_prefectures.py:36
msgid "Okayama"
msgstr "岡山県"
#: contrib/localflavor/jp/jp_prefectures.py:37
msgid "Hiroshima"
msgstr "広島県"
#: contrib/localflavor/jp/jp_prefectures.py:38
msgid "Yamaguchi"
msgstr "山口県"
#: contrib/localflavor/jp/jp_prefectures.py:39
msgid "Tokushima"
msgstr "徳島県"
#: contrib/localflavor/jp/jp_prefectures.py:40
msgid "Kagawa"
msgstr "香川県"
#: contrib/localflavor/jp/jp_prefectures.py:41
msgid "Ehime"
msgstr "愛媛県"
#: contrib/localflavor/jp/jp_prefectures.py:42
msgid "Kochi"
msgstr "高知県"
#: contrib/localflavor/jp/jp_prefectures.py:43
msgid "Fukuoka"
msgstr "福岡県"
#: contrib/localflavor/jp/jp_prefectures.py:44
msgid "Saga"
msgstr "佐賀県"
#: contrib/localflavor/jp/jp_prefectures.py:45
msgid "Nagasaki"
msgstr "長崎県"
#: contrib/localflavor/jp/jp_prefectures.py:46
msgid "Kumamoto"
msgstr "熊本県"
#: contrib/localflavor/jp/jp_prefectures.py:47
msgid "Oita"
msgstr "大分県"
#: contrib/localflavor/jp/jp_prefectures.py:48
msgid "Miyazaki"
msgstr "宮崎県"
#: contrib/localflavor/jp/jp_prefectures.py:49
msgid "Kagoshima"
msgstr "鹿児島県"
#: contrib/localflavor/jp/jp_prefectures.py:50
msgid "Okinawa"
msgstr "沖縄県"
#: contrib/localflavor/uk/forms.py:18
msgid "Enter a postcode. A space is required between the two postcode parts."
msgstr "ポスタルコードを入力してください。コードとコードの間は半角のスペースで区切ってください。"
#: contrib/localflavor/usa/forms.py:17
msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
@ -1607,23 +1893,23 @@ msgstr "リダイレクト"
msgid "redirects"
msgstr "リダイレクト"
#: contrib/sessions/models.py:51
#: contrib/sessions/models.py:68
msgid "session key"
msgstr "セッションキー"
#: contrib/sessions/models.py:52
#: contrib/sessions/models.py:69
msgid "session data"
msgstr "セッションデータ"
#: contrib/sessions/models.py:53
#: contrib/sessions/models.py:70
msgid "expire date"
msgstr "有効期限"
#: contrib/sessions/models.py:57
#: contrib/sessions/models.py:74
msgid "session"
msgstr "セッション"
#: contrib/sessions/models.py:58
#: contrib/sessions/models.py:75
msgid "sessions"
msgstr "セッション"
@ -1704,31 +1990,31 @@ msgstr "1900年以降を指定してください。"
#: core/validators.py:143
#, python-format
msgid "Invalid date: %s."
msgid "Invalid date: %s"
msgstr "無効な日付: %s"
#: core/validators.py:147 db/models/fields/__init__.py:454
#: core/validators.py:148 db/models/fields/__init__.py:457
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "YYYY-MM-DD形式で日付を入力してください。"
#: core/validators.py:152
#: core/validators.py:153
msgid "Enter a valid time in HH:MM format."
msgstr "HH:MM形式で時刻を入力してください。"
#: core/validators.py:156 db/models/fields/__init__.py:521
#: core/validators.py:157 db/models/fields/__init__.py:526
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
msgstr "YYYY-MM-DD HH:MM形式で日時を入力してください。"
#: core/validators.py:161 newforms/fields.py:269
#: core/validators.py:162 newforms/fields.py:269
msgid "Enter a valid e-mail address."
msgstr "有効なメールアドレスを入力してください。"
#: core/validators.py:173 core/validators.py:442 oldforms/__init__.py:667
#: core/validators.py:174 core/validators.py:445 oldforms/__init__.py:672
msgid "No file was submitted. Check the encoding type on the form."
msgstr ""
"ファイルが取得できませんでした。formのencoding typeを確認してください。"
#: core/validators.py:177
#: core/validators.py:178
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@ -1736,26 +2022,26 @@ msgstr ""
"画像をアップロードしてください。アップロードした画像は画像でないか、または壊"
"れています。"
#: core/validators.py:184
#: core/validators.py:185
#, python-format
msgid "The URL %s does not point to a valid image."
msgstr "URL ( %s ) は画像ではありません。"
#: core/validators.py:188
#: core/validators.py:189
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
msgstr "電話番号は XXX-XXX-XXXX 形式で入力してください。\"%s\" は無効です。"
#: core/validators.py:196
#: core/validators.py:197
#, python-format
msgid "The URL %s does not point to a valid QuickTime video."
msgstr "URL ( %s ) は QuickTime ビデオではありません。"
#: core/validators.py:200
#: core/validators.py:201
msgid "A valid URL is required."
msgstr "正しい URL を入力してください。"
#: core/validators.py:214
#: core/validators.py:215
#, python-format
msgid ""
"Valid HTML is required. Specific errors are:\n"
@ -1764,86 +2050,86 @@ msgstr ""
"有効な HTML を入力してください。エラー:\n"
"%s"
#: core/validators.py:221
#: core/validators.py:222
#, python-format
msgid "Badly formed XML: %s"
msgstr "不正な XML です: %s"
#: core/validators.py:238
#: core/validators.py:239
#, python-format
msgid "Invalid URL: %s"
msgstr "無効なURL: %s"
#: core/validators.py:243 core/validators.py:245
#: core/validators.py:244 core/validators.py:246
#, python-format
msgid "The URL %s is a broken link."
msgstr "URL ( %s ) はリンクが壊れています。"
#: core/validators.py:251
#: core/validators.py:252
msgid "Enter a valid U.S. state abbreviation."
msgstr "正しい米州略称を入力してください。"
#: core/validators.py:265
#: core/validators.py:266
#, python-format
msgid "Watch your mouth! The word %s is not allowed here."
msgid_plural "Watch your mouth! The words %s are not allowed here."
msgstr[0] "言葉使いに気を付けて! %s という言葉は使えません。"
msgstr[1] "言葉使いに気を付けて! %s という言葉は使えません。"
#: core/validators.py:272
#: core/validators.py:273
#, python-format
msgid "This field must match the '%s' field."
msgstr "このフィールドは '%s' フィールドと一致せねばなりません。"
#: core/validators.py:291
#: core/validators.py:292
msgid "Please enter something for at least one field."
msgstr "少なくとも一つのフィールドに何か入力してください。"
#: core/validators.py:300 core/validators.py:311
#: core/validators.py:301 core/validators.py:312
msgid "Please enter both fields or leave them both empty."
msgstr "両方のフィールドに入力するか、両方とも未入力にしてください。"
#: core/validators.py:318
#: core/validators.py:320
#, python-format
msgid "This field must be given if %(field)s is %(value)s"
msgstr ""
"%(field)s を %(value)s にするのなら、このフィールドに必ず入力してください。"
#: core/validators.py:330
#: core/validators.py:333
#, python-format
msgid "This field must be given if %(field)s is not %(value)s"
msgstr ""
"%(field)s を %(value)s にしないのなら、このフィールドに必ず入力してください。"
#: core/validators.py:349
#: core/validators.py:352
msgid "Duplicate values are not allowed."
msgstr "重複する値は認められません。"
#: core/validators.py:364
#: core/validators.py:367
#, python-format
msgid "This value must be between %s and %s."
msgstr "この値は %s から %s の間でなければなりません。"
msgid "This value must be between %(lower)s and %(upper)s."
msgstr "この値は %(lower)s から %(upper)s の間でなければなりません。"
#: core/validators.py:366
#: core/validators.py:369
#, python-format
msgid "This value must be at least %s."
msgstr "この値は %s 以上でなければなりません。"
#: core/validators.py:368
#: core/validators.py:371
#, python-format
msgid "This value must be no more than %s."
msgstr "この値は %s より小さくなければなりません。"
#: core/validators.py:404
#: core/validators.py:407
#, python-format
msgid "This value must be a power of %s."
msgstr "この値は %s の累乗でなければなりません。"
#: core/validators.py:415
#: core/validators.py:418
msgid "Please enter a valid decimal number."
msgstr "有効な 10 進数を入力してください。"
#: core/validators.py:419
#: core/validators.py:422
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
@ -1851,7 +2137,7 @@ msgid_plural ""
msgstr[0] "全体で %s 文字以下の数字を入力してください。"
msgstr[1] "全体で %s 文字以下の数字を入力してください。"
#: core/validators.py:422
#: core/validators.py:425
#, python-format
msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit."
@ -1860,7 +2146,7 @@ msgid_plural ""
msgstr[0] "整数部は %s 文字以下の数字を入力してください。"
msgstr[1] "整数部は %s 文字以下の数字を入力してください。"
#: core/validators.py:425
#: core/validators.py:428
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
@ -1868,37 +2154,37 @@ msgid_plural ""
msgstr[0] "小数部は %s 文字以下の数字を入力してください。"
msgstr[1] "小数部は %s 文字以下の数字を入力してください。"
#: core/validators.py:435
#: core/validators.py:438
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
msgstr "アップロードするファイルの大きさは %s バイト以上にしてください。"
#: core/validators.py:436
#: core/validators.py:439
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
msgstr "アップロードするファイルの大きさは %s 最大バイトまでです。"
#: core/validators.py:453
#: core/validators.py:456
msgid "The format for this field is wrong."
msgstr "フィールドの形式が正しくありません。"
#: core/validators.py:468
#: core/validators.py:471
msgid "This field is invalid."
msgstr "このフィールドは無効です。"
#: core/validators.py:504
#: core/validators.py:507
#, python-format
msgid "Could not retrieve anything from %s."
msgstr "%s から何も検索できませんでした。"
#: core/validators.py:507
#: core/validators.py:510
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr ""
"URL %(url)s は無効なコンテンツタイプヘッダ '%(contenttype)s' を返しました。"
#: core/validators.py:540
#: core/validators.py:543
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@ -1907,7 +2193,7 @@ msgstr ""
"%(line)s 行目から始まる %(tag)s タグを閉じてください (\"%(start)s\" で始まる"
"行です)。"
#: core/validators.py:544
#: core/validators.py:547
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
@ -1916,7 +2202,7 @@ msgstr ""
"%(line)s 行目から始まるテキストはこのコンテキストでは使えません。 (\"%(start)"
"s\" で始まる行です)。"
#: core/validators.py:549
#: core/validators.py:552
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@ -1925,7 +2211,7 @@ msgstr ""
"%(line)s 行目の \"%(attr)s\" は無効なアトリビュートです (\"%(start)s\" で始ま"
"る行です)。"
#: core/validators.py:554
#: core/validators.py:557
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@ -1934,7 +2220,7 @@ msgstr ""
"%(line)s 行目の \"<%(tag)s>\" は無効なタグです( \"%(start)s\" で始まる行で"
"す)。"
#: core/validators.py:558
#: core/validators.py:561
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
@ -1943,7 +2229,7 @@ msgstr ""
"%(line)s 行目のタグは必須アトリビュートが未入力です( \"%(start)s\" で始まる行"
"です)。"
#: core/validators.py:563
#: core/validators.py:566
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@ -1952,7 +2238,7 @@ msgstr ""
"%(line)s 行目の \"%(attr)s\" アトリビュートの値が正しくありません (\"%(start)"
"s\" で始まる行です) 。"
#: db/models/manipulators.py:305
#: db/models/manipulators.py:307
#, python-format
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
msgstr ""
@ -1963,29 +2249,33 @@ msgstr ""
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "%(fieldname)s に %(optname)s は既に存在します。"
#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
#: newforms/fields.py:78 newforms/fields.py:373 newforms/fields.py:449
#: newforms/fields.py:460 oldforms/__init__.py:352
#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274
#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621
#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450
#: newforms/fields.py:461 newforms/models.py:177 oldforms/__init__.py:357
msgid "This field is required."
msgstr "このフィールドは必須です。"
#: db/models/fields/__init__.py:366
#: db/models/fields/__init__.py:367
msgid "This value must be an integer."
msgstr "値は整数でなければなりません。"
#: db/models/fields/__init__.py:401
#: db/models/fields/__init__.py:402
msgid "This value must be either True or False."
msgstr "値は真: True または偽: False でなければなりません。"
#: db/models/fields/__init__.py:422
#: db/models/fields/__init__.py:423
msgid "This field cannot be null."
msgstr "このフィールドには NULL を指定できません。"
#: db/models/fields/__init__.py:625
#: db/models/fields/__init__.py:630
msgid "Enter a valid filename."
msgstr "正しいファイル名を入力してください。"
#: db/models/fields/__init__.py:751
msgid "This value must be either None, True or False."
msgstr "値は、空: None、真: True または偽: False でなければなりません。"
#: db/models/fields/related.py:53
#, python-format
msgid "Please enter a valid %s."
@ -2054,55 +2344,79 @@ msgstr "URLを正しく入力してください。"
msgid "This URL appears to be a broken link."
msgstr "このURLはリンクが壊れています。"
#: newforms/fields.py:359
#: newforms/fields.py:360 newforms/models.py:164
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "正しく選択してください。選択したものは候補にありません。"
#: newforms/fields.py:377 newforms/fields.py:453
#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181
msgid "Enter a list of values."
msgstr "リストを入力してください。"
#: newforms/fields.py:386
#: newforms/fields.py:387 newforms/models.py:187
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "正しく選択してください。 %s は候補にありません。"
#: oldforms/__init__.py:387
#: oldforms/__init__.py:392
#, python-format
msgid "Ensure your text is less than %s character."
msgid_plural "Ensure your text is less than %s characters."
msgstr[0] "%s 字以下で入力してください。"
msgstr[1] "%s 字以下で入力してください。"
#: oldforms/__init__.py:392
#: oldforms/__init__.py:397
msgid "Line breaks are not allowed here."
msgstr "改行はできません。"
#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610
#, python-format
msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
msgstr "正しく選択してください。; '%(data)s' は %(choices)s にありません。"
#: oldforms/__init__.py:669
#: oldforms/__init__.py:674
msgid "The submitted file is empty."
msgstr "入力されたファイルは空です。"
#: oldforms/__init__.py:725
#: oldforms/__init__.py:730
msgid "Enter a whole number between -32,768 and 32,767."
msgstr "-32,768 から 32,767 までの整数を入力してください。"
#: oldforms/__init__.py:735
#: oldforms/__init__.py:740
msgid "Enter a positive number."
msgstr "正の数を入力してください。"
#: oldforms/__init__.py:745
#: oldforms/__init__.py:750
msgid "Enter a whole number between 0 and 32,767."
msgstr "0 から 32,767 までの整数を入力してください。"
#: template/defaultfilters.py:436
#: template/defaultfilters.py:491
msgid "yes,no,maybe"
msgstr "はい,いいえ,たぶん"
#: utils/dateformat.py:40
msgid "p.m."
msgstr "p.m."
#: utils/dateformat.py:41
msgid "a.m."
msgstr "a.m."
#: utils/dateformat.py:46
msgid "PM"
msgstr "PM"
#: utils/dateformat.py:47
msgid "AM"
msgstr "AM"
#: utils/dateformat.py:95
msgid "midnight"
msgstr "0時"
#: utils/dateformat.py:97
msgid "noon"
msgstr "12時"
#: utils/dates.py:6
msgid "Monday"
msgstr "月曜日"

View File

@ -1,14 +1,12 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# Japanese translation for js.
# Copyright (C) 2005 makoto tsuyuki
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
# makoto tsuyuki <mtsuyuki@gmail.com>, 2005.
msgid ""
msgstr ""
"Project-Id-Version: Django 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-10-06 00:30+0900\n"
"POT-Creation-Date: 2007-03-26 23:41+0900\n"
"PO-Revision-Date: 2006-05-08 13:39+0900\n"
"Last-Translator: makoto tsuyuki <mtsuyuki@gmail.com>\n"
"Language-Team: Japanese <django-ja@googlegroups.com>\n"
@ -85,7 +83,7 @@ msgstr "時間を選択"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr "夜中"
msgstr "0時"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
@ -93,7 +91,7 @@ msgstr "午前 6 時"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr "正午"
msgstr "12時"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,118 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-04-06 11:10+0900\n"
"PO-Revision-Date: 2007-04-06 11:15+0900\n"
"Last-Translator: Hyun Mi Ae <happyhyun@gmail.com>\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/calendar.js:24
#: contrib/admin/media/js/dateparse.js:32
msgid ""
"January February March April May June July August September October November "
"December"
msgstr "1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "일 월 화 수 목 금 토"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "일요일 월요일 화요일 수요일 목요일 금요일 토요일"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr "이용 가능한 %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "모두 선택"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "추가"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "삭제"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr "선택된 %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "선택한 후 클릭하세요"
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "모두 삭제"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr "보기"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr "감추기"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr "현재"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr "시계"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr "시간 선택"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr "자정"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr "오전 6시"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr "정오"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr "취소"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr "오늘"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr "달력"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr "어제"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr "내일"

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-02-15 10:46+1100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Last-Translator: Gatis Tomsons <gatis.tomsons@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@ -19,64 +19,65 @@ msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
msgstr "Pieejams %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr ""
msgstr "Izvēlēties visu"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
msgstr "Pievienot"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
msgstr "Izņemt"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
msgstr "Izvēlies %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
msgstr "Izvēlies un klikšķini"
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
msgstr "Attīrīt visu"
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
msgstr "Janvāris Februāris Marts Aprīlis Maijs Jūnijs Jūlijs Augusts Septembris Oktobris Novembris"
"Decembris"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
msgstr "Svētdiena Pirmdiena Otrdiena Trešdiena Ceturtdiena Piektdiena Sestdiena"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr ""
msgstr "S M T W T F S"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
msgstr "Tagad"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
msgstr "Pulkstens"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
msgstr "Izvēlieties laiku"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
msgstr "Pusnakts"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
@ -84,35 +85,35 @@ msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
msgstr "Pusdienas laiks"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
msgstr "Atcelt"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
msgstr "Šodien"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
msgstr "Kalendārs"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
msgstr "Vakar"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
msgstr "Rīt"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
msgstr "Parādīt"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""
msgstr "Slēpt"

File diff suppressed because it is too large Load Diff

View File

@ -2202,10 +2202,11 @@ msgstr[0] "dag"
msgstr[1] "dagen"
#: utils/timesince.py:16
# In the timesince context it is stilistically wrong to use the plural for hour in Dutch.
msgid "hour"
msgid_plural "hours"
msgstr[0] "uur"
msgstr[1] "uren"
msgstr[1] "uur"
#: utils/timesince.py:17
msgid "minute"

View File

@ -1,4 +1,4 @@
# SOME DESCRIPTIVE TITLE.
# translation of django.po to
# Copyright (C) 2005 and beyond
# This file is distributed under the same license as the PACKAGE package.
# Espen Grindhaug <espen@grindhaug.org>, Nov 2005.
@ -6,74 +6,73 @@
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: django\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-16 10:12+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Espen Grndhaug <espen@grindhaug.org>\n"
"Language-Team: Norwegian\n"
"PO-Revision-Date: 2007-04-27 06:48+0200\n"
"Last-Translator: \n"
"Language-Team: <en@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
#: contrib/comments/models.py:67 contrib/comments/models.py:166
#, fuzzy
msgid "object ID"
msgstr "Vis objekt ID"
msgstr "objekt ID"
#: contrib/comments/models.py:68
msgid "headline"
msgstr ""
msgstr "overskrift"
#: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167
#, fuzzy
msgid "comment"
msgstr "innhold"
msgstr "kommentar"
#: contrib/comments/models.py:70
msgid "rating #1"
msgstr ""
msgstr "rangering #1 "
#: contrib/comments/models.py:71
msgid "rating #2"
msgstr ""
msgstr "rangering #2"
#: contrib/comments/models.py:72
msgid "rating #3"
msgstr ""
msgstr "rangering #3"
#: contrib/comments/models.py:73
msgid "rating #4"
msgstr ""
msgstr "rangering #4"
#: contrib/comments/models.py:74
msgid "rating #5"
msgstr ""
msgstr "rangering #5"
#: contrib/comments/models.py:75
msgid "rating #6"
msgstr ""
msgstr "rangering #6"
#: contrib/comments/models.py:76
msgid "rating #7"
msgstr ""
msgstr "rangering #7"
#: contrib/comments/models.py:77
msgid "rating #8"
msgstr ""
msgstr "rangering #8"
#: contrib/comments/models.py:82
msgid "is valid rating"
msgstr ""
msgstr "er gyldig rangering"
#: contrib/comments/models.py:83 contrib/comments/models.py:169
msgid "date/time submitted"
msgstr ""
msgstr "dato/tid for innsendelse"
#: contrib/comments/models.py:84 contrib/comments/models.py:170
msgid "is public"
msgstr ""
msgstr "er tilgjengelig for alle"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
msgid "IP address"
@ -81,23 +80,21 @@ msgstr "IP adresse"
#: contrib/comments/models.py:86
msgid "is removed"
msgstr ""
msgstr "er fjernet"
#: contrib/comments/models.py:86
msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead."
msgstr ""
msgstr "Aktiver denne avkryssningsboksen hvis kommentaren er upasende. Beskjeden \"Denne kommentaren er blitt fjernet\" vil bli vist istedet."
#: contrib/comments/models.py:91
#, fuzzy
msgid "comments"
msgstr "innhold"
msgstr "kommentarer"
#: contrib/comments/models.py:131 contrib/comments/models.py:207
#, fuzzy
msgid "Content object"
msgstr "innholds type"
msgstr "innholdsobjekt"
#: contrib/comments/models.py:159
#, python-format
@ -108,101 +105,97 @@ msgid ""
"\n"
"http://%(domain)s%(url)s"
msgstr ""
"Sendt av %(user)s på %(date)s\n"
"\n"
"%(comment)s\n"
"\n"
"http://%(domain)s%(url)s"
#: contrib/comments/models.py:168
#, fuzzy
msgid "person's name"
msgstr "fornavn"
msgstr "personens navn"
#: contrib/comments/models.py:171
#, fuzzy
msgid "ip address"
msgstr "IP adresse"
#: contrib/comments/models.py:173
msgid "approved by staff"
msgstr ""
msgstr "godkjent av moderator"
#: contrib/comments/models.py:176
#, fuzzy
msgid "free comment"
msgstr "tillat kommentarer"
msgstr "åpen kommentar"
#: contrib/comments/models.py:177
#, fuzzy
msgid "free comments"
msgstr "tillat kommentarer"
msgstr "åpne kommentarer"
#: contrib/comments/models.py:233
msgid "score"
msgstr ""
msgstr "poeng"
#: contrib/comments/models.py:234
#, fuzzy
msgid "score date"
msgstr "utløpsdato"
msgstr "poeng dato"
#: contrib/comments/models.py:237
msgid "karma score"
msgstr ""
msgstr "karma poeng"
#: contrib/comments/models.py:238
msgid "karma scores"
msgstr ""
msgstr "karma poeng"
#: contrib/comments/models.py:242
#, python-format
msgid "%(score)d rating by %(user)s"
msgstr ""
msgstr "%(score)d rangering av %(user)s"
#: contrib/comments/models.py:258
#, fuzzy, python-format
#, python-format
msgid ""
"This comment was flagged by %(user)s:\n"
"\n"
"%(text)s"
msgstr ""
"Denne kommentaren er skrevet med lite omtanke:\n"
"Denne kommentaren er flagget av %(user)s:\n"
"\n"
"%(text)s"
#: contrib/comments/models.py:265
#, fuzzy
msgid "flag date"
msgstr "flatside"
msgstr "flagg dato"
#: contrib/comments/models.py:268
#, fuzzy
msgid "user flag"
msgstr "Bruker"
msgstr "brukerflag"
#: contrib/comments/models.py:269
#, fuzzy
msgid "user flags"
msgstr "Brukere"
msgstr "brukerflag"
#: contrib/comments/models.py:273
#, python-format
msgid "Flag by %r"
msgstr ""
msgstr "Flagg med %r"
#: contrib/comments/models.py:278
#, fuzzy
msgid "deletion date"
msgstr "sesjon data"
msgstr "fjernet dato"
#: contrib/comments/models.py:280
msgid "moderator deletion"
msgstr ""
msgstr "fjernet av moderator"
#: contrib/comments/models.py:281
msgid "moderator deletions"
msgstr ""
msgstr "fjernet av moderator"
#: contrib/comments/models.py:285
#, python-format
msgid "Moderator deletion by %r"
msgstr ""
msgstr "Fjernet av moderator med %r"
#: contrib/comments/views/karma.py:19
msgid "Anonymous users cannot vote"
@ -214,16 +207,14 @@ msgstr "Ikke gyldig kommentar ID"
#: contrib/comments/views/karma.py:25
msgid "No voting for yourself"
msgstr "Du kan ikke stemme selv"
msgstr "Du kan ikke stemme på deg selv"
#: contrib/comments/views/comments.py:28
#, fuzzy
msgid ""
"This rating is required because you've entered at least one other rating."
msgstr "Denne bla bla.."
msgid "This rating is required because you've entered at least one other rating."
msgstr "Denne rangeringen er påkrevd fordi du har rangert en eller flere ting fra før "
#: contrib/comments/views/comments.py:112
#, fuzzy, python-format
#, python-format
msgid ""
"This comment was posted by a user who has posted fewer than %(count)s "
"comment:\n"
@ -246,13 +237,13 @@ msgstr[1] ""
"%(text)s"
#: contrib/comments/views/comments.py:117
#, fuzzy, python-format
#, python-format
msgid ""
"This comment was posted by a sketchy user:\n"
"\n"
"%(text)s"
msgstr ""
"Denne kommentaren er skrevet med lite omtanke:\n"
"Denne kommentaren er skrevet av en upålitelig bruker:\n"
"\n"
"%(text)s"
@ -281,8 +272,7 @@ msgstr "Skjemaet hadde en ugyldig verdi - objekt IDen var ugyldig"
#: contrib/comments/views/comments.py:257
#: contrib/comments/views/comments.py:321
msgid "The comment form didn't provide either 'preview' or 'post'"
msgstr ""
"Kommentar skjemaet returnerte ikke et 'forhåndsvisning' eller 'post' objekt"
msgstr "Kommentar skjemaet returnerte ikke et 'forhåndsvisning' eller 'post' objekt"
#: contrib/comments/templates/comments/form.html:6
#: contrib/comments/templates/comments/form.html:8
@ -296,9 +286,8 @@ msgid "Password:"
msgstr "Passord:"
#: contrib/comments/templates/comments/form.html:6
#, fuzzy
msgid "Forgotten your password?"
msgstr "Endre passord"
msgstr "Har du glemt passordet ditt ?"
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/object_history.html:3
@ -323,38 +312,35 @@ msgstr "Log ut"
#: contrib/comments/templates/comments/form.html:12
msgid "Ratings"
msgstr ""
msgstr "Rangeringer"
#: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23
msgid "Required"
msgstr ""
msgstr "Påkrevd"
#: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23
msgid "Optional"
msgstr ""
msgstr "Valgfri"
#: contrib/comments/templates/comments/form.html:23
msgid "Post a photo"
msgstr ""
msgstr "Send et foto"
#: contrib/comments/templates/comments/form.html:27
#: contrib/comments/templates/comments/freeform.html:5
#, fuzzy
msgid "Comment:"
msgstr "tillat kommentarer"
msgstr "Kommentar:"
#: contrib/comments/templates/comments/form.html:32
#: contrib/comments/templates/comments/freeform.html:9
#, fuzzy
msgid "Preview comment"
msgstr "tillat kommentarer"
msgstr "Forhåndvis kommentar"
#: contrib/comments/templates/comments/freeform.html:4
#, fuzzy
msgid "Your name:"
msgstr "brukernavn"
msgstr "Ditt navn:"
#: contrib/admin/filterspecs.py:40
#, python-format
@ -416,7 +402,7 @@ msgstr "objekt repr"
#: contrib/admin/models.py:21
msgid "action flag"
msgstr "handlings flagg"
msgstr "handlingsflagg"
#: contrib/admin/models.py:22
msgid "change message"
@ -424,11 +410,11 @@ msgstr "endre melding"
#: contrib/admin/models.py:25
msgid "log entry"
msgstr "logg notis"
msgstr "logg post"
#: contrib/admin/models.py:26
msgid "log entries"
msgstr "logg innlegg"
msgstr "logg poster"
#: contrib/admin/templatetags/admin_list.py:228
msgid "All dates"
@ -440,8 +426,8 @@ msgid ""
"Please enter a correct username and password. Note that both fields are case-"
"sensitive."
msgstr ""
"Vær snill å angi korrekt brukernavn og passord. La merke til at små og "
"store bokstaver er betraktet ulik."
"Vennligst angi korrekt brukernavn og passord. Merk at små og "
"store bokstaver er betraktet ulikt."
#: contrib/admin/views/decorators.py:23
#: contrib/admin/templates/admin/login.html:25
@ -452,18 +438,15 @@ msgstr "Logg inn"
msgid ""
"Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved."
msgstr ""
"Du må logge inn igjen, fordi sesjonen din har gått ut på dato, men ikke ikke "
"bekjymr deg informasjonen du sendte ble lagret."
msgstr "Du må logge inn igjen, fordi økten din har gått ut, men innlegget ditt ble lagret."
#: contrib/admin/views/decorators.py:68
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
msgstr ""
"Det ser ut som om nettleseren din ikke vill ta i mot informasjonskapsler "
"('cookies'). Vennligst omkonfigurer nettleseren din, last siden på ny og "
"prøv igjen."
"Det ser ut som om nettleseren din ikke støtter informasjonskapsler "
"('cookies'). Vennligst konfigurer nettleseren din, og prøv igjen."
#: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character."
@ -500,7 +483,7 @@ msgstr "Ny %s"
#: contrib/admin/views/main.py:336
#, python-format
msgid "Added %s."
msgstr "Lagt til %s"
msgstr "La til %s"
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
#: contrib/admin/views/main.py:340
@ -528,8 +511,7 @@ msgstr "%(name)s \"%(obj)s\" ble endret."
#: contrib/admin/views/main.py:354
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr "%(name)s \"%(obj)s\" ble endret. Du kan endre det igjen under."
#: contrib/admin/views/main.py:392
@ -742,8 +724,8 @@ msgid ""
"There's been an error. It's been reported to the site administrators via e-"
"mail and should be fixed shortly. Thanks for your patience."
msgstr ""
"Det har vært en feil. Feilen er blitt rapportert til administrator via e-"
"mail, og vill bli fikset snart. Takk for din tålmodighet."
"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-"
"post, og vil bli fikset snart. Takk for din tålmodighet."
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
@ -909,7 +891,7 @@ msgstr "Tilbakestill mitt passord"
#: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today."
msgstr "Takk for å bruke tid på internett siden i dag."
msgstr "Takk for at du valgte å bruke kvalitetstid på nettstedet idag."
#: contrib/admin/templates/registration/logged_out.html:10
msgid "Log in again"
@ -954,8 +936,7 @@ msgstr "Endre passord"
#: contrib/admin/templates/registration/password_reset_email.html:2
msgid "You're receiving this e-mail because you requested a password reset"
msgstr ""
"Du har mottatt denne e-posten fordi du ba om å tilbakestille passordet ditt"
msgstr "Du har mottatt denne e-posten fordi du ba om å tilbakestille passordet ditt"
#: contrib/admin/templates/registration/password_reset_email.html:3
#, python-format
@ -1002,6 +983,12 @@ msgid ""
"as \"internal\" (talk to your system administrator if you aren't sure if\n"
"your computer is \"internal\").</p>\n"
msgstr ""
"\n"
"<p class=\"help\">For å installere bokmerker, dra linken til verktøylinja\n"
"for bokmerker, eller høyreklikk og legg til i bokmerker. Nå kan du du velge\n"
"bokmerket fra hvilken som helst side på nettstedet. Noen av disse\n"
"bokmerkene krever at datamaskinen du bruker er markert som \"intern\"\n"
"(kontakt din systemadministrator hvis du er usikker på om maskinen din er \"intern\").</p>\n"
#: contrib/admin/templates/admin_doc/bookmarklets.html:19
msgid "Documentation for this page"
@ -1033,8 +1020,7 @@ msgstr "Endre dette objektet (åpnes i dette vinduet)"
#: contrib/admin/templates/admin_doc/bookmarklets.html:26
msgid "Jumps to the admin page for pages that represent a single object."
msgstr ""
"Hopp til administrasjonsiden for sidene som representerer et enkelt objekt."
msgstr "Hopp til administrasjonsiden for sidene som representerer et enkelt objekt."
#: contrib/admin/templates/admin_doc/bookmarklets.html:28
msgid "Edit this object (new window)"
@ -1069,7 +1055,7 @@ msgid ""
"This should be an absolute path, excluding the domain name. Example: '/"
"events/search/'."
msgstr ""
"Denne burde vær en fullstendig sti, uten domene navnet. Foreksempel: '/"
"Dette burde vært en fullstendig sti, uten domene navnet. Foreksempel: '/"
"nyheter/les/"
#: contrib/redirects/models.py:9
@ -1081,7 +1067,7 @@ msgid ""
"This can be either an absolute path (as above) or a full URL starting with "
"'http://'."
msgstr ""
"Denne kan enten være en fullstendig sti (som over), eller en hel "
"Dette kan enten være en fullstendig sti (som over), eller en hel "
"internettadresse som starter med 'http://'"
#: contrib/redirects/models.py:12
@ -1093,10 +1079,8 @@ msgid "redirects"
msgstr "omadresserelser"
#: contrib/flatpages/models.py:8
msgid ""
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr ""
"Eksempel: '/om/kontakt/'. Vær sikker på at du har en skråstrek forran og bak."
msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr "Eksempel: '/om/kontakt/'. Vær sikker på at du har en skråstrek forran og bak."
#: contrib/flatpages/models.py:9
msgid "title"
@ -1186,7 +1170,7 @@ msgstr "passord"
#: contrib/auth/models.py:59
msgid "Use '[algo]$[salt]$[hexdigest]'"
msgstr ""
msgstr "Bruk '[algo]$[salt]$[hexdigest]'"
#: contrib/auth/models.py:60
msgid "staff status"
@ -1256,7 +1240,7 @@ msgstr "Melding"
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in."
msgstr ""
msgstr "Din nettleser ser ikkeut til å støtte informasjonskapsler (cookies). Informasjonskapsler er påkrevd for å logge inn."
#: contrib/contenttypes/models.py:25
msgid "python model class name"
@ -1698,8 +1682,7 @@ msgstr "Internettadressen %s peker ikke til et godkjent bilde."
#: core/validators.py:159
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
msgstr ""
"Telefon nummeret må være i XXX-XXX-XXXX format. \"%s\" er ikke godkjent."
msgstr "Telefon nummeret må være i XXX-XXX-XXXX format. \"%s\" er ikke godkjent."
#: core/validators.py:167
#, python-format
@ -1732,7 +1715,7 @@ msgstr "Ikke godkjent URL: %s"
#: core/validators.py:206 core/validators.py:208
#, python-format
msgid "The URL %s is a broken link."
msgstr "Internettadresse fører til en side som ikke virker."
msgstr "Internettadresse %s fører til en side som ikke virker."
#: core/validators.py:214
msgid "Enter a valid U.S. state abbreviation."
@ -1784,30 +1767,26 @@ msgstr "Vennligst skriv inn et godkjent desimal tall."
#: core/validators.py:349
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
"Please enter a valid decimal number with at most %s total digits."
msgid_plural "Please enter a valid decimal number with at most %s total digits."
msgstr[0] "Skriv inn et desimal tall med maksimum %s total antall tall."
msgstr[1] "Skriv inn et desimal tall med maksimum %s total antall tall."
#: core/validators.py:352
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
"Please enter a valid decimal number with at most %s decimal places."
msgid_plural "Please enter a valid decimal number with at most %s decimal places."
msgstr[0] "Skriv inn et desimal tall med maksimum %s tall bak komma. "
msgstr[1] "Skriv inn et desimal tall med maksimum %s tall bak komma. "
#: core/validators.py:362
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
msgstr ""
"Vær sikker på at fila du prøver å laste opp er minimum %s bytes stor."
msgstr "Vær sikker på at fila du prøver å laste opp er minimum %s bytes stor."
#: core/validators.py:363
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
msgstr ""
"Vær sikker på at fila du prøver å laste opp er maksimum %s bytes stor."
msgstr "Vær sikker på at fila du prøver å laste opp er maksimum %s bytes stor."
#: core/validators.py:376
msgid "The format for this field is wrong."
@ -1824,8 +1803,7 @@ msgstr "Klarte ikke å motta noe fra %s."
#: core/validators.py:429
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr ""
"Internettadressen %(url)s returnerte en ikke godkjent Content-Type '%"
"(contenttype)s'."
@ -1881,7 +1859,7 @@ msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
"starts with \"%(start)s\".)"
msgstr ""
"\"%(attr)s\" tillegg på linje $(line)s har en ikke godkjent verdi. (Linjen "
"\"%(attr)s\" tillegg på linje %(line)s har en ikke godkjent verdi. (Linjen "
"starter med \"%(start)s\".)"
#: db/models/manipulators.py:302
@ -1892,7 +1870,7 @@ msgstr "%(object)s med %(type)s finnes allerede for angitt %(field)s."
#: db/models/fields/__init__.py:40
#, python-format
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "$(optname)s med %(fieldname)s finnes allerede."
msgstr "%(optname)s med %(fieldname)s finnes allerede."
#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
@ -1926,16 +1904,13 @@ msgid "Separate multiple IDs with commas."
msgstr "Separer Id-ene med kommaer."
#: db/models/fields/related.py:581
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mere enn en."
msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr "Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mere enn en."
#: db/models/fields/related.py:625
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
"Please enter valid %(self)s IDs. The values %(value)r are invalid."
msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
msgstr[0] "Skriv inn gyldige %(self)s ID-er. Verdien %(value)r er ikke gyldig."
msgstr[1] "Skriv inn gyldige %(self)s ID-er. Verdiene %(value)r er ikke gyldige."

View File

@ -1,19 +1,20 @@
# SOME DESCRIPTIVE TITLE.
# translation of djangojs.po to
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Espen Grindhaug <espen.grindhaug@mail.com>, 2006.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: djangojs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Espen Grindhaug <espen.grindhaug@gmail.com>\n"
"Language-Team: no\n"
"PO-Revision-Date: 2007-04-27 06:51+0200\n"
"Last-Translator: \n"
"Language-Team: <en@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
@ -21,7 +22,6 @@ msgid "Available %s"
msgstr "%s er tilgjengelige"
#: contrib/admin/media/js/SelectFilter2.js:41
#, fuzzy
msgid "Choose all"
msgstr "Velg alle"
@ -116,3 +116,4 @@ msgstr "I går"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
msgid "Tomorrow"
msgstr "I morgen"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,15 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# VLADO LABATH <vlado@labath.org>, 2005.
#
#, fuzzy
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: Django 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-18 19:38-0500\n"
"PO-Revision-Date: 2005-12-18 19:26-0500\n"
"Last-Translator: VLADO LABATH <vlado@labath.org>\n"
"Language-Team: LANGUAGE <sk@li.org>\n"
"POT-Creation-Date: 2007-04-01 19:21+0200\n"
"PO-Revision-Date: 2007-04-03 21:48+0200\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
@ -23,15 +18,15 @@ msgstr "Možný %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "Vyber všetko"
msgstr "Vybr všetko"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "Pridaj"
msgstr "Pridať"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "Vymaž"
msgstr "Vymazať"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
@ -40,13 +35,13 @@ msgstr "Vybrané %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "Vyber si svoju voľbu a klikni"
msgstr "Vyberte položku a kliknite"
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "Vyčisti všetko"
msgstr "Odstrániť vybrané"
#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
@ -55,7 +50,7 @@ msgstr ""
"Január Február Marec Apríl Máj Jún Júl August September Október November "
"December"
#: contrib/admin/media/js/dateparse.js:27
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Nedeľa Pondelok Utorok Streda Štvrtok Piatok Sobota"
@ -63,49 +58,59 @@ msgstr "Nedeľa Pondelok Utorok Streda Štvrtok Piatok Sobota"
msgid "S M T W T F S"
msgstr "N P U S Š P S"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr "Zobraziť"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr "Skryť"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr "Práve teraz"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr "Hodiny"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr "Vyber čas"
msgstr "Vybr čas"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr "Polnoc"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr "6 ráno"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr "Poludnie"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr "Zruš"
msgstr "Zruš"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr "Dnes"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr "Kalendár"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr "Včera"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr "Zajtra"

Binary file not shown.

View File

@ -0,0 +1,107 @@
# Copyright (C) 2007
# This file is distributed under the same license as the PACKAGE package.
#
msgid ""
msgstr ""
"Project-Id-Version: DJANGO-JS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: 2007-03-31 21:29+0100\n"
"Last-Translator: Gasper Koren <skrat@owca.info>\n"
"Language-Team: SLOVENIAN <lugos-slo@lugos.si>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Slovenian\n"
"X-Poedit-Country: SLOVENIA\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr "Možne %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "Izberi vse"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "Dodaj"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "Odstrani"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr "Izberite %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "Izberite in kliknite"
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "Izbriši vse"
#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24
msgid "January February March April May June July August September October November December"
msgstr "Januar Februar Marec April Maj Junij Julij Avgust September Oktober November December"
#: contrib/admin/media/js/dateparse.js:27
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Nedelja Ponedeljek Torek Sreda Četrtek Petek Sobota"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "N P T S Č P S"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
msgid "Now"
msgstr "Sedaj"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
msgid "Clock"
msgstr "URA"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
msgid "Choose a time"
msgstr "Izberite čas"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Midnight"
msgstr "Polnoč"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "6 a.m."
msgstr "Ob 6h"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "Noon"
msgstr "Opoldne"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
msgid "Cancel"
msgstr "Prekliči"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
msgid "Today"
msgstr "Danes"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
msgid "Calendar"
msgstr "Koledar"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
msgid "Yesterday"
msgstr "Včeraj"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
msgid "Tomorrow"
msgstr "Jutri"

File diff suppressed because it is too large Load Diff

View File

@ -2,9 +2,6 @@
# Copyright (C) 2005
# This file is distributed under the same license as the Django package.
#
#
# Robin Sonefors <ozamosi@blinkenlights.se>, 2005.
# Mikko Hellsing <mikko@sorl.net>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: djangojs\n"

View File

@ -2,19 +2,19 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# pavithran <pavithran.s@gmail.com>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: django\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-09-25 15:43+0200\n"
"PO-Revision-Date: 2007-02-28 18:35+0530\n"
"PO-Revision-Date: 2007-05-19 12:44+0530\n"
"Last-Translator: pavithran <pavithran.s@gmail.com>\n"
"Language-Team: Telugu <indlinux-telugu@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; nplurals=n>1;"
#: contrib/comments/models.py:67 contrib/comments/models.py:166
msgid "object ID"
@ -144,7 +144,7 @@ msgstr "కర్మ స్కొరులు"
#: contrib/comments/models.py:242
#, python-format
msgid "%(score)d rating by %(user)s"
msgstr "%(user) రేటింగ్"
msgstr "%(score)d కి %(user)s రేటింగ్"
#: contrib/comments/models.py:258
#, python-format
@ -153,9 +153,9 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
"%(user)s చేత చేయబడ్డ వ్యాఖ్యానములు"
"%(user)s చేత చేయబడ్డ వ్యాఖ్యానములు:\n"
"\n"
"%(text)లు"
"%(text)s"
#: contrib/comments/models.py:265
msgid "flag date"
@ -163,11 +163,11 @@ msgstr "ఫ్లాగ్ తేది "
#: contrib/comments/models.py:268
msgid "user flag"
msgstr "యూర్ ఫ్లాగ్"
msgstr "యూర్ ఫ్లాగ్"
#: contrib/comments/models.py:269
msgid "user flags"
msgstr "యూర్ ఫ్లాగులు"
msgstr "యూర్ ఫ్లాగులు"
#: contrib/comments/models.py:273
#, python-format
@ -193,7 +193,7 @@ msgstr "మొదరేటర్ తీసివేసిన %r"
#: contrib/comments/views/karma.py:19
msgid "Anonymous users cannot vote"
msgstr "అపరిచిత యూఙరులు వోటు వేయలేరు"
msgstr "అపరిచిత యూజర్లు వోటు వేయలేరు"
#: contrib/comments/views/karma.py:23
msgid "Invalid comment ID"
@ -220,12 +220,12 @@ msgid_plural ""
"\n"
"%(text)s"
msgstr[0] ""
"ఈ వ్యాఖ్యానము చేసిన యూఙర్ %(count)లు కన్న తక్కువ సమర్పించాడు "
"ఈ వ్యాఖ్యానము చేసిన యూజర్ %(count)s లు కన్న తక్కువ సమర్పించాడు "
"వ్యాఖ్యానము:\n"
"\n"
"%(text)s"
msgstr[1] ""
"ఈ వ్యాఖ్యానము చేసిన యూఙర్ %(count)లు కన్న తక్కువ సమర్పించాడు"
"ఈ వ్యాఖ్యానము చేసిన యూజర్ %(count)s లు కన్న తక్కువ సమర్పించాడు"
"వ్యాఖ్యానములు:\n"
"\n"
"%(text)s"
@ -237,7 +237,7 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
"ఈ వ్యాఖ్యానము స్కెచి యూర్ చేసాడు :\n"
"ఈ వ్యాఖ్యానము స్కెచి యూర్ చేసాడు :\n"
"\n"
"%(text)s"
@ -274,7 +274,7 @@ msgstr "వ్యాఖ్యానము ఫార్మ్ లో 'ప్ర
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/login.html:17
msgid "Username:"
msgstr "యూర్ పేరు"
msgstr "యూర్ పేరు"
#: contrib/comments/templates/comments/form.html:6
#: contrib/admin/templates/admin/object_history.html:3
@ -343,7 +343,8 @@ msgstr "మీ పేరు"
msgid ""
"<h3>By %s:</h3>\n"
"<ul>\n"
msgstr "<h3> %s తో:</h3>\n"
msgstr ""
"<h3> %s తో:</h3>\n"
"<ul>\n"
#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
@ -353,15 +354,15 @@ msgstr "అన్నీ"
#: contrib/admin/filterspecs.py:109
msgid "Any date"
msgstr "ఏ రోైన"
msgstr "ఏ రోైన"
#: contrib/admin/filterspecs.py:110
msgid "Today"
msgstr "ఈ రోు"
msgstr "ఈ రోు"
#: contrib/admin/filterspecs.py:113
msgid "Past 7 days"
msgstr "గత 7 రోుల గా"
msgstr "గత 7 రోుల గా"
#: contrib/admin/filterspecs.py:115
msgid "This month"
@ -413,13 +414,13 @@ msgstr "లాగ్ ఎంట్రీలు"
#: contrib/admin/templatetags/admin_list.py:230
msgid "All dates"
msgstr "అన్నీ రోులు"
msgstr "అన్నీ రోులు"
#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
msgid ""
"Please enter a correct username and password. Note that both fields are case-"
"sensitive."
msgstr "దయచేసి సరైన యూర్ పేరు పాస్ వర్డ్ ఇవ్వండి"
msgstr "దయచేసి సరైన యూర్ పేరు పాస్ వర్డ్ ఇవ్వండి"
#: contrib/admin/views/decorators.py:24
#: contrib/admin/templates/admin/login.html:25
@ -430,22 +431,22 @@ msgstr "లాగ్ ఇన్"
msgid ""
"Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved."
msgstr "దయచేసి మళీ లాగ్ ఇన్ అవ్వండి ఎందుకంటే మీ సేస్సన్ ముగిసింది . బాధపడకండి మీ సమర్పన దాచిపెట్టాము"
msgstr "దయచేసి మళ్ళీ లాగ్ ఇన్ అవ్వండి ఎందుకంటే మీ సేస్సన్ ముగిసింది . బాధపడకండి మీ సమర్పన దాచిపెట్టాము"
#: contrib/admin/views/decorators.py:69
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
msgstr "మీ బ్రౌర్ పై కుకీస్ అంగీకరించబడేటట్లు చేయలేదు . దయ చేసి కుకీస్ ఎనేబల్ చేసి ,మళ్ళీ ట్రై చేయండి"
msgstr "మీ బ్రౌర్ పై కుకీస్ అంగీకరించేటట్లు చేయలేదు . దయ చేసి కుకీస్ ఎనేబల్ చేసి ,మళ్ళీ ట్రై చేయండి"
#: contrib/admin/views/decorators.py:83
msgid "Usernames cannot contain the '@' character."
msgstr "యూర్ పేరు లో '@' అక్షరము ఉందకూడడు"
msgstr "యూర్ పేరు లో '@' అక్షరము ఉందకూడడు"
#: contrib/admin/views/decorators.py:85
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr "మీ ఈ మెయిల్ అడ్రస్ మీ యూర్ పేరు కాదు . '%s' ఇచ్చి చూడండి "
msgstr "మీ ఈ మెయిల్ అడ్రస్ మీ యూర్ పేరు కాదు . '%s' ఇచ్చి చూడండి "
#: contrib/admin/views/main.py:223
msgid "Site administration"
@ -454,7 +455,7 @@ msgstr "సైట్ నిర్వాహన"
#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "%(name)s \"%(obj)s\"యప్రదంగా కలపబడ్డడి"
msgstr "%(name)s \"%(obj)s\"యప్రదంగా కలపబడ్డడి"
#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
#: contrib/admin/views/auth.py:22
@ -464,12 +465,12 @@ msgstr "మీరు మళ్ళీ దీనినీ క్రింద మ
#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
#, python-format
msgid "You may add another %s below."
msgstr "మీరు ఇంకొక %s ని క్రింద త చేయొచ్చు"
msgstr "మీరు ఇంకొక %s ని క్రింద త చేయొచ్చు"
#: contrib/admin/views/main.py:289
#, python-format
msgid "Add %s"
msgstr "%s ని త చేయండి "
msgstr "%s ని త చేయండి "
#: contrib/admin/views/main.py:335
#, python-format
@ -493,17 +494,17 @@ msgstr "%s తీసివేయబడ్డడి"
#: contrib/admin/views/main.py:342
msgid "No fields changed."
msgstr "మార్చబడలేదు"
msgstr "ఫీల్డ్స్ ఏమి మార్చబడలేదు"
#: contrib/admin/views/main.py:345
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "%(name)s \"%(obj)s\" యప్రదంగా మార్చబడిండి"
msgstr "%(name)s \"%(obj)s\" యప్రదంగా మార్చబడిండి"
#: contrib/admin/views/main.py:353
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr "%(name)s \"%(obj)s\" యప్రదంగా కలపబడ్డడి .మీరు మళ్ళీ దీనినీ క్రింద మార్చవచ్చు"
msgstr "%(name)s \"%(obj)s\" యప్రదంగా కలపబడ్డడి .మీరు మళ్ళీ దీనినీ క్రింద మార్చవచ్చు"
#: contrib/admin/views/main.py:391
#, python-format
@ -513,17 +514,17 @@ msgstr "%s ని మార్చంది"
#: contrib/admin/views/main.py:473
#, python-format
msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %(name)లు లో %(fieldname)లు : %(obj)లు "
msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %(name)s లో %(fieldname)s : %(obj)s "
#: contrib/admin/views/main.py:478
#, python-format
msgid "One or more %(fieldname)s in %(name)s:"
msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %(name)లు లో %(fieldname)లు"
msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %(name)s లో %(fieldname)s"
#: contrib/admin/views/main.py:511
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "%(name)లు \"%(obj)s\"ఙయప్రదంగా తీసివేయబడ్డడి"
msgstr "%(name)s \"%(obj)s\"జయప్రదంగా తీసివేయబడ్డడి"
#: contrib/admin/views/main.py:514
msgid "Are you sure?"
@ -532,7 +533,7 @@ msgstr "మీరు కచ్చితంగా ఉన్నారా?"
#: contrib/admin/views/main.py:536
#, python-format
msgid "Change history: %s"
msgstr "మార్చబడిన పురాణము"
msgstr "మార్చబడిన పురాణము: %s"
#: contrib/admin/views/main.py:570
#, python-format
@ -601,7 +602,7 @@ msgstr ""
#: contrib/admin/views/doc.py:229
#, python-format
msgid "Fields on %s objects"
msgstr "వస్తువు"
msgstr "%s వస్తువులలో ఫీల్డ్స్ "
#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
@ -682,7 +683,7 @@ msgstr ""
#: contrib/admin/views/auth.py:28
msgid "Add user"
msgstr "యూఙర్"
msgstr "యూజర్ ని జత చేయండి"
#: contrib/admin/templates/admin/object_history.html:3
#: contrib/admin/templates/admin/change_list.html:5
@ -742,7 +743,7 @@ msgstr "తేది/వేళ"
#: contrib/admin/templates/admin/object_history.html:19
msgid "User"
msgstr "యూర్"
msgstr "యూర్"
#: contrib/admin/templates/admin/object_history.html:20
msgid "Action"
@ -760,11 +761,11 @@ msgstr ""
#: contrib/admin/templates/admin/base_site.html:4
msgid "Django site admin"
msgstr "డ్ాంగొ యొక్క నిర్వాహనదారులు"
msgstr "డ్ాంగొ యొక్క నిర్వాహనదారులు"
#: contrib/admin/templates/admin/base_site.html:7
msgid "Django administration"
msgstr "డ్ాంగొ నిర్వాహన"
msgstr "డ్ాంగొ నిర్వాహన"
#: contrib/admin/templates/admin/500.html:4
msgid "Server error"
@ -782,31 +783,31 @@ msgstr "సర్వర్ తప్పు <em>(500)</em>"
msgid ""
"There's been an error. It's been reported to the site administrators via e-"
"mail and should be fixed shortly. Thanks for your patience."
msgstr "తప్పు రిగిండి . దానిని నిర్వాహనాధికారులు కి ఈ మెయిల్ చేయబడ్డడి,మీ ఓపిక కి ధన్యవాదములు"
msgstr "తప్పు రిగిండి . దానిని నిర్వాహనాధికారులు కి ఈ మెయిల్ చేయబడ్డడి,మీ ఓపిక కి ధన్యవాదములు"
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
msgid "Page not found"
msgstr "పేి దొరకలేదు"
msgstr "పేి దొరకలేదు"
#: contrib/admin/templates/admin/404.html:10
msgid "We're sorry, but the requested page could not be found."
msgstr "క్షమించండి మీరు కోరిన పేి దొరకలేడు"
msgstr "క్షమించండి మీరు కోరిన పేి దొరకలేడు"
#: contrib/admin/templates/admin/index.html:17
#, python-format
msgid "Models available in the %(name)s application."
msgstr "మొడల్ లు %(name)లో దొరికే అప్ప్లికేషన్"
msgstr "మొడల్ లు %(name)s లో దొరికే అప్ప్లికేషన్"
#: contrib/admin/templates/admin/index.html:18
#, python-format
msgid "%(name)s"
msgstr ""
msgstr "%(name)s"
#: contrib/admin/templates/admin/index.html:28
#: contrib/admin/templates/admin/change_form.html:15
msgid "Add"
msgstr "త చేయి"
msgstr "త చేయి"
#: contrib/admin/templates/admin/index.html:34
msgid "Change"
@ -831,7 +832,7 @@ msgstr "ఏమి దొరకలేదు"
#: contrib/admin/templates/admin/change_list.html:11
#, python-format
msgid "Add %(name)s"
msgstr "%(name)లు ఙత చేయు"
msgstr "%(name)s జత చేయు"
#: contrib/admin/templates/admin/login.html:22
msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
@ -943,7 +944,7 @@ msgstr ""
#: contrib/admin/templates/admin/auth/user/add_form.html:12
msgid "Username"
msgstr "యూర్ పేరు"
msgstr "యూర్ పేరు"
#: contrib/admin/templates/admin/auth/user/add_form.html:18
msgid "Password"
@ -967,7 +968,7 @@ msgstr "పాస్ వర్డ్ మార్పు"
#: contrib/admin/templates/registration/password_change_done.html:6
#: contrib/admin/templates/registration/password_change_done.html:10
msgid "Password change successful"
msgstr "పాస్ వర్డ్ మార్పు యప్రదమైండి "
msgstr "పాస్ వర్డ్ మార్పు యప్రదమైండి "
#: contrib/admin/templates/registration/password_change_done.html:12
msgid "Your password was changed."
@ -1005,7 +1006,7 @@ msgstr "మళ్ళీ లాగ్ ఇన్ అవ్వండి"
#: contrib/admin/templates/registration/password_reset_done.html:6
#: contrib/admin/templates/registration/password_reset_done.html:10
msgid "Password reset successful"
msgstr "పాస్ వర్డ్ రీసెట్ యప్రదమైండి"
msgstr "పాస్ వర్డ్ రీసెట్ యప్రదమైండి"
#: contrib/admin/templates/registration/password_reset_done.html:12
msgid ""
@ -1051,11 +1052,11 @@ msgstr "మీ కొత్త పాస్ వర్డ్ : %(new_password)s
#: contrib/admin/templates/registration/password_reset_email.html:7
msgid "Feel free to change this password by going to this page:"
msgstr "నిస్సందేహము గా ఈ పేి క్ కి వెళ్ళి పాస్ వర్డ్ మార్చుకోండి "
msgstr "నిస్సందేహము గా ఈ పేి క్ కి వెళ్ళి పాస్ వర్డ్ మార్చుకోండి "
#: contrib/admin/templates/registration/password_reset_email.html:11
msgid "Your username, in case you've forgotten:"
msgstr "మీ యూర్ పేరు, ఒక వేళ మర్చిపోయి ఉంటే "
msgstr "మీ యూర్ పేరు, ఒక వేళ మర్చిపోయి ఉంటే "
#: contrib/admin/templates/registration/password_reset_email.html:13
msgid "Thanks for using our site!"
@ -1103,19 +1104,19 @@ msgstr "వస్తువు ఇడి చూడండి"
msgid ""
"Shows the content-type and unique ID for pages that represent a single "
"object."
msgstr "వస్తువు"
msgstr ""
#: contrib/admin/templates/admin_doc/bookmarklets.html:25
msgid "Edit this object (current window)"
msgstr "వస్తువు"
msgstr "వస్తువు ని మార్చండి (ప్రస్తుత విండొ)"
#: contrib/admin/templates/admin_doc/bookmarklets.html:26
msgid "Jumps to the admin page for pages that represent a single object."
msgstr "వస్తువు"
msgstr ""
#: contrib/admin/templates/admin_doc/bookmarklets.html:28
msgid "Edit this object (new window)"
msgstr "వస్తువు"
msgstr "వస్తువు ని మార్చండి(కొత్త విండొ) "
#: contrib/admin/templates/admin_doc/bookmarklets.html:29
msgid "As above, but opens the admin page in a new window."
@ -1197,7 +1198,7 @@ msgstr "నమొదు చేయటము అవసరం"
#: contrib/flatpages/models.py:14
msgid "If this is checked, only logged-in users will be able to view the page."
msgstr "ఇది చెక్ చేసి ఉంటే కేవలం లాగ్గడ్ ఇన్ యూఙర్లు పేఙి చూడలేస్తారు"
msgstr "ఇది చెక్ చేసి ఉంటే కేవలం లాగ్గడ్ ఇన్ యూజర్లు పేజి చూడలేస్తారు"
#: contrib/flatpages/models.py:18
msgid "flat page"
@ -1237,7 +1238,7 @@ msgstr "గుంపులు"
#: contrib/auth/models.py:90
msgid "username"
msgstr "యూర్ పేరు"
msgstr "యూర్ పేరు"
#: contrib/auth/models.py:90
msgid ""
@ -1309,15 +1310,15 @@ msgstr ""
#: contrib/auth/models.py:102
msgid "user permissions"
msgstr "యూర్ అనుమతులు"
msgstr "యూర్ అనుమతులు"
#: contrib/auth/models.py:105
msgid "user"
msgstr "యూర్"
msgstr "యూర్"
#: contrib/auth/models.py:106
msgid "users"
msgstr "యూర్లు"
msgstr "యూర్లు"
#: contrib/auth/models.py:111
msgid "Personal info"
@ -1427,7 +1428,7 @@ msgstr "ఆదివారము"
#: utils/dates.py:14
msgid "January"
msgstr "ాన్వరి "
msgstr "ాన్వరి "
#: utils/dates.py:14
msgid "February"
@ -1447,11 +1448,11 @@ msgstr "మే"
#: utils/dates.py:14 utils/dates.py:27
msgid "June"
msgstr "ూను"
msgstr "ూను"
#: utils/dates.py:15 utils/dates.py:27
msgid "July"
msgstr "ులై"
msgstr "ులై"
#: utils/dates.py:15
msgid "August"
@ -1475,7 +1476,7 @@ msgstr "డిసెంబర్"
#: utils/dates.py:19
msgid "jan"
msgstr "ాన్"
msgstr "ాన్"
#: utils/dates.py:19
msgid "feb"
@ -1495,11 +1496,11 @@ msgstr "మే"
#: utils/dates.py:19
msgid "jun"
msgstr "ూన్"
msgstr "ూన్"
#: utils/dates.py:20
msgid "jul"
msgstr "ుల్"
msgstr "ుల్"
#: utils/dates.py:20
msgid "aug"
@ -1523,7 +1524,7 @@ msgstr "డిస్"
#: utils/dates.py:27
msgid "Jan."
msgstr "ాన్"
msgstr "ాన్"
#: utils/dates.py:27
msgid "Feb."
@ -1570,8 +1571,8 @@ msgstr[1] "వారాలు"
#: utils/timesince.py:15
msgid "day"
msgid_plural "days"
msgstr[0] "రోు"
msgstr[1] "రోులు"
msgstr[0] "రోు"
msgstr[1] "రోులు"
#: utils/timesince.py:16
msgid "hour"
@ -1615,7 +1616,7 @@ msgstr "బెంగాలి"
#: conf/global_settings.py:41
msgid "Czech"
msgstr "క్ెఖ్"
msgstr "క్ెఖ్"
#: conf/global_settings.py:42
msgid "Welsh"
@ -1627,7 +1628,7 @@ msgstr "డానిశ్"
#: conf/global_settings.py:44
msgid "German"
msgstr "ెర్మన్"
msgstr "ెర్మన్"
#: conf/global_settings.py:45
msgid "Greek"
@ -1643,7 +1644,7 @@ msgstr "స్పానిష్"
#: conf/global_settings.py:48
msgid "Argentinean Spanish"
msgstr "అర్ంటీనా స్పానిష్"
msgstr "అర్ంటీనా స్పానిష్"
#: conf/global_settings.py:49
msgid "Finnish"
@ -1675,7 +1676,7 @@ msgstr "ఇటాలియవ్"
#: conf/global_settings.py:56
msgid "Japanese"
msgstr "పనీస్"
msgstr "పనీస్"
#: conf/global_settings.py:57
msgid "Dutch"
@ -1683,11 +1684,11 @@ msgstr "డట్చ్"
#: conf/global_settings.py:58
msgid "Norwegian"
msgstr "నార్వీియన్"
msgstr "నార్వీియన్"
#: conf/global_settings.py:59
msgid "Brazilian"
msgstr "బ్రీలియన్"
msgstr "బ్రీలియన్"
#: conf/global_settings.py:60
msgid "Romanian"
@ -1794,7 +1795,7 @@ msgstr "సంవత్సరము 1900 లేక దాని తరువా
#: core/validators.py:142
#, python-format
msgid "Invalid date: %s."
msgstr "సరికాని తారీఖు"
msgstr "సరికాని తారీఖు : %s."
#: core/validators.py:146 db/models/fields/__init__.py:415
msgid "Enter a valid date in YYYY-MM-DD format."
@ -1846,8 +1847,10 @@ msgstr "సరైన URL కావాలి"
msgid ""
"Valid HTML is required. Specific errors are:\n"
"%s"
msgstr "సరైన HTML ఇవ్వండి .ప్రత్యేకమైన తప్పులు :\n"
msgstr ""
"సరైన HTML ఇవ్వండి .ప్రత్యేకమైన తప్పులు :\n"
"%s"
#: core/validators.py:220
#, python-format
msgid "Badly formed XML: %s"
@ -1856,7 +1859,7 @@ msgstr ""
#: core/validators.py:230
#, python-format
msgid "Invalid URL: %s"
msgstr ""
msgstr "సరికాని URL: %s"
#: core/validators.py:234 core/validators.py:236
#, python-format
@ -1865,7 +1868,7 @@ msgstr ""
#: core/validators.py:242
msgid "Enter a valid U.S. state abbreviation."
msgstr "దయచేసి సరైన అగ్ర రా్య సంక్షేపము చేసిన రాష్ట్రము పేరు ఇవ్వండి"
msgstr "దయచేసి సరైన అగ్ర రా్య సంక్షేపము చేసిన రాష్ట్రము పేరు ఇవ్వండి"
#: core/validators.py:256
#, python-format
@ -2004,27 +2007,27 @@ msgstr ""
#: views/generic/create_update.py:43
#, python-format
msgid "The %(verbose_name)s was created successfully."
msgstr "%(verbose_name)లు ఙయప్రదంగా తయారయింది"
msgstr "%(verbose_name)s జయప్రదంగా తయారయింది"
#: views/generic/create_update.py:117
#, python-format
msgid "The %(verbose_name)s was updated successfully."
msgstr "%(verbose_name)లు ఙయప్రదంగా @@"
msgstr "%(verbose_name)s జయప్రదంగా @@"
#: views/generic/create_update.py:184
#, python-format
msgid "The %(verbose_name)s was deleted."
msgstr "%(verbose_name)లు తీసివేయబడినది"
msgstr "%(verbose_name)s తీసివేయబడినది"
#: db/models/manipulators.py:302
#, python-format
msgid "%(object)s with this %(type)s already exists for the given %(field)s."
msgstr "%(field)ల లో %(object)తో %(type) ఉన్నాయి"
msgstr "%(field)s లో %(object)s తో %(type)s ఉన్నాయి"
#: db/models/fields/__init__.py:40
#, python-format
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "%(optname)లు తో %(fieldname) ముందే ఉన్నాయి ."
msgstr "%(optname)s తో %(fieldname)s ముందే ఉన్నాయి ."
#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
@ -2082,7 +2085,7 @@ msgstr "లైన్ బ్రేక్స్ కి ఇక్కడ ఆన
#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
#, python-format
msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
msgstr "సరైనది ఎంచుకోండి; %(choices) లో '%(data)s' లేవు "
msgstr "సరైనది ఎంచుకోండి; %(choices)s లో '%(data)s' లేవు "
#: forms/__init__.py:663
msgid "The submitted file is empty."

View File

@ -1344,7 +1344,7 @@ msgstr "四月"
#: utils/dates.py:19
msgid "may"
msgstr "月"
msgstr "月"
#: utils/dates.py:19
msgid "jun"

View File

@ -46,7 +46,7 @@ msgstr "清除全部"
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid "January February March April May June July August September October November December"
msgstr "一月 二月 三月 四月 五月 六月 六月 七月 八月 九月 十月 十一月 十二月"
msgstr "一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"

View File

@ -38,8 +38,9 @@ USE_I18N = True
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = ''
# URL that handles the media served from MEDIA_ROOT.
# Example: "http://media.lawrence.com"
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = ''
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a

View File

@ -1,19 +1,32 @@
from django.core.urlresolvers import RegexURLPattern, RegexURLResolver
from django.core.exceptions import ImproperlyConfigured
__all__ = ['handler404', 'handler500', 'include', 'patterns']
__all__ = ['handler404', 'handler500', 'include', 'patterns', 'url']
handler404 = 'django.views.defaults.page_not_found'
handler500 = 'django.views.defaults.server_error'
include = lambda urlconf_module: [urlconf_module]
def patterns(prefix, *tuples):
def patterns(prefix, *args):
pattern_list = []
for t in tuples:
regex, view_or_include = t[:2]
default_kwargs = t[2:]
if type(view_or_include) == list:
pattern_list.append(RegexURLResolver(regex, view_or_include[0], *default_kwargs))
else:
pattern_list.append(RegexURLPattern(regex, prefix and (prefix + '.' + view_or_include) or view_or_include, *default_kwargs))
for t in args:
if isinstance(t, (list, tuple)):
t = url(prefix=prefix, *t)
elif isinstance(t, RegexURLPattern):
t.add_prefix(prefix)
pattern_list.append(t)
return pattern_list
def url(regex, view, kwargs=None, name=None, prefix=''):
if type(view) == list:
# For include(...) processing.
return RegexURLResolver(regex, view[0], kwargs)
else:
if isinstance(view, basestring):
if not view:
raise ImproperlyConfigured('Empty URL pattern view name not permitted (for pattern %r)' % regex)
if prefix:
view = prefix + '.' + view
return RegexURLPattern(regex, view, kwargs, name)

View File

@ -26,7 +26,7 @@ form .aligned p, form .aligned ul { margin-left:7em; padding-left:30px; }
form .aligned table p { margin-left:0; padding-left:0; }
form .aligned p.help { padding-left:38px; }
.aligned .vCheckboxLabel { float:none !important; display:inline; padding-left:4px; }
.colM .aligned .vLargeTextField, colM .aligned .vXMLLargeTextField { width:610px; }
.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { width:610px; }
.checkbox-row p.help { margin-left:0; padding-left:0 !important; }
/* WIDE FIELDSETS */

View File

@ -72,6 +72,7 @@ def result_headers(cl):
for i, field_name in enumerate(lookup_opts.admin.list_display):
try:
f = lookup_opts.get_field(field_name)
admin_order_field = None
except models.FieldDoesNotExist:
# For non-field list_display values, check for the function
# attribute "short_description". If that doesn't exist, fall
@ -86,7 +87,8 @@ def result_headers(cl):
header = field_name.replace('_', ' ')
# It is a non-field, but perhaps one that is sortable
if not getattr(getattr(cl.model, field_name), "admin_order_field", None):
admin_order_field = getattr(getattr(cl.model, field_name), "admin_order_field", None)
if not admin_order_field:
yield {"text": header}
continue
@ -101,7 +103,7 @@ def result_headers(cl):
th_classes = []
new_order_type = 'asc'
if field_name == cl.order_field:
if field_name == cl.order_field or admin_order_field == cl.order_field:
th_classes.append('sorted %sending' % cl.order_type.lower())
new_order_type = {'asc': 'desc', 'desc': 'asc'}[cl.order_type.lower()]
@ -166,8 +168,8 @@ def items_for_result(cl, result):
# Booleans are special: We use images.
elif isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField):
result_repr = _boolean_icon(field_val)
# FloatFields are special: Zero-pad the decimals.
elif isinstance(f, models.FloatField):
# DecimalFields are special: Zero-pad the decimals.
elif isinstance(f, models.DecimalField):
if field_val is not None:
result_repr = ('%%.%sf' % f.decimal_places) % field_val
else:

View File

@ -74,7 +74,7 @@ class FieldWidgetNode(template.Node):
self.bound_field_var = bound_field_var
def get_nodelist(cls, klass):
if not cls.nodelists.has_key(klass):
if klass not in cls.nodelists:
try:
field_class_name = klass.__name__
template_name = "widget/%s.html" % class_name_to_underscored(field_class_name)
@ -94,15 +94,15 @@ class FieldWidgetNode(template.Node):
return cls.nodelists[klass]
get_nodelist = classmethod(get_nodelist)
def render(self, context):
def iter_render(self, context):
bound_field = template.resolve_variable(self.bound_field_var, context)
context.push()
context['bound_field'] = bound_field
output = self.get_nodelist(bound_field.field.__class__).render(context)
for chunk in self.get_nodelist(bound_field.field.__class__).iter_render(context):
yield chunk
context.pop()
return output
class FieldWrapper(object):
def __init__(self, field ):
@ -157,7 +157,7 @@ class EditInlineNode(template.Node):
def __init__(self, rel_var):
self.rel_var = rel_var
def render(self, context):
def iter_render(self, context):
relation = template.resolve_variable(self.rel_var, context)
context.push()
if relation.field.rel.edit_inline == models.TABULAR:
@ -169,10 +169,9 @@ class EditInlineNode(template.Node):
original = context.get('original', None)
bound_related_object = relation.bind(context['form'], original, bound_related_object_class)
context['bound_related_object'] = bound_related_object
t = loader.get_template(bound_related_object.template_name())
output = t.render(context)
for chunk in loader.get_template(bound_related_object.template_name()).iter_render(context):
yield chunk
context.pop()
return output
def output_all(form_fields):
return ''.join([str(f) for f in form_fields])

View File

@ -7,7 +7,7 @@ class AdminApplistNode(template.Node):
def __init__(self, varname):
self.varname = varname
def render(self, context):
def iter_render(self, context):
from django.db import models
from django.utils.text import capfirst
app_list = []
@ -54,7 +54,7 @@ class AdminApplistNode(template.Node):
'models': model_list,
})
context[self.varname] = app_list
return ''
return ()
def get_admin_app_list(parser, token):
"""

View File

@ -10,11 +10,14 @@ class AdminLogNode(template.Node):
def __repr__(self):
return "<GetAdminLog Node>"
def render(self, context):
if self.user is not None and not self.user.isdigit():
self.user = context[self.user].id
context[self.varname] = LogEntry.objects.filter(user__id__exact=self.user).select_related()[:self.limit]
return ''
def iter_render(self, context):
if self.user is None:
context[self.varname] = LogEntry.objects.all().select_related()[:self.limit]
else:
if not self.user.isdigit():
self.user = context[self.user].id
context[self.varname] = LogEntry.objects.filter(user__id__exact=self.user).select_related()[:self.limit]
return ()
class DoGetAdminLog:
"""

View File

@ -17,7 +17,7 @@ def user_add_stage(request):
if not errors:
new_user = manipulator.save(new_data)
msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': 'user', 'obj': new_user}
if request.POST.has_key("_addanother"):
if "_addanother" in request.POST:
request.user.message_set.create(message=msg)
return HttpResponseRedirect(request.path)
else:
@ -29,7 +29,7 @@ def user_add_stage(request):
return render_to_response('admin/auth/user/add_form.html', {
'title': _('Add user'),
'form': form,
'is_popup': request.REQUEST.has_key('_popup'),
'is_popup': '_popup' in request.REQUEST,
'add': True,
'change': False,
'has_delete_permission': False,
@ -63,7 +63,7 @@ def user_change_password(request, id):
return render_to_response('admin/auth/user/change_password.html', {
'title': _('Change password: %s') % escape(user.username),
'form': form,
'is_popup': request.REQUEST.has_key('_popup'),
'is_popup': '_popup' in request.REQUEST,
'add': True,
'change': False,
'has_delete_permission': False,

View File

@ -12,7 +12,7 @@ LOGIN_FORM_KEY = 'this_is_the_login_form'
def _display_login_form(request, error_message=''):
request.session.set_test_cookie()
if request.POST and request.POST.has_key('post_data'):
if request.POST and 'post_data' in request.POST:
# User has failed login BUT has previously saved post data.
post_data = request.POST['post_data']
elif request.POST:
@ -48,7 +48,7 @@ def staff_member_required(view_func):
def _checklogin(request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_staff:
# The user is valid. Continue to the admin page.
if request.POST.has_key('post_data'):
if 'post_data' in request.POST:
# User must have re-authenticated through a different window
# or tab.
request.POST = _decode_post_data(request.POST['post_data'])
@ -57,7 +57,7 @@ def staff_member_required(view_func):
assert hasattr(request, 'session'), "The Django admin requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
# If this isn't already the login page, display it.
if not request.POST.has_key(LOGIN_FORM_KEY):
if LOGIN_FORM_KEY not in request.POST:
if request.POST:
message = _("Please log in again, because your session has expired. Don't worry: Your submission has been saved.")
else:
@ -90,11 +90,9 @@ def staff_member_required(view_func):
if user.is_active and user.is_staff:
login(request, user)
# TODO: set last_login with an event.
user.last_login = datetime.datetime.now()
user.save()
if request.POST.has_key('post_data'):
if 'post_data' in request.POST:
post_data = _decode_post_data(request.POST['post_data'])
if post_data and not post_data.has_key(LOGIN_FORM_KEY):
if post_data and LOGIN_FORM_KEY not in post_data:
# overwrite request.POST with the saved post_data, and continue
request.POST = post_data
request.user = user

View File

@ -294,10 +294,11 @@ DATA_TYPE_MAPPING = {
'CommaSeparatedIntegerField': _('Comma-separated integers'),
'DateField' : _('Date (without time)'),
'DateTimeField' : _('Date (with time)'),
'DecimalField' : _('Decimal number'),
'EmailField' : _('E-mail address'),
'FileField' : _('File path'),
'FilePathField' : _('File path'),
'FloatField' : _('Decimal number'),
'FloatField' : _('Floating point number'),
'ForeignKey' : _('Integer'),
'ImageField' : _('File path'),
'IntegerField' : _('Integer'),

View File

@ -257,17 +257,17 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po
msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': opts.verbose_name, 'obj': new_object}
# Here, we distinguish between different save types by checking for
# the presence of keys in request.POST.
if request.POST.has_key("_continue"):
if "_continue" in request.POST:
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
if request.POST.has_key("_popup"):
if "_popup" in request.POST:
post_url_continue += "?_popup=1"
return HttpResponseRedirect(post_url_continue % pk_value)
if request.POST.has_key("_popup"):
if "_popup" in request.POST:
if type(pk_value) is str: # Quote if string, so JavaScript doesn't think it's a variable.
pk_value = '"%s"' % pk_value.replace('"', '\\"')
return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %s, "%s");</script>' % \
(pk_value, str(new_object).replace('"', '\\"')))
elif request.POST.has_key("_addanother"):
elif "_addanother" in request.POST:
request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % opts.verbose_name))
return HttpResponseRedirect(request.path)
else:
@ -288,7 +288,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po
c = template.RequestContext(request, {
'title': _('Add %s') % opts.verbose_name,
'form': form,
'is_popup': request.REQUEST.has_key('_popup'),
'is_popup': '_popup' in request.REQUEST,
'show_delete': show_delete,
})
@ -308,7 +308,7 @@ def change_stage(request, app_label, model_name, object_id):
if not request.user.has_perm(app_label + '.' + opts.get_change_permission()):
raise PermissionDenied
if request.POST and request.POST.has_key("_saveasnew"):
if request.POST and "_saveasnew" in request.POST:
return add_stage(request, app_label, model_name, form_url='../../add/')
try:
@ -343,16 +343,16 @@ def change_stage(request, app_label, model_name, object_id):
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), CHANGE, change_message)
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object}
if request.POST.has_key("_continue"):
if "_continue" in request.POST:
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
if request.REQUEST.has_key('_popup'):
if '_popup' in request.REQUEST:
return HttpResponseRedirect(request.path + "?_popup=1")
else:
return HttpResponseRedirect(request.path)
elif request.POST.has_key("_saveasnew"):
elif "_saveasnew" in request.POST:
request.user.message_set.create(message=_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': opts.verbose_name, 'obj': new_object})
return HttpResponseRedirect("../%s/" % pk_value)
elif request.POST.has_key("_addanother"):
elif "_addanother" in request.POST:
request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % opts.verbose_name))
return HttpResponseRedirect("../add/")
else:
@ -392,7 +392,7 @@ def change_stage(request, app_label, model_name, object_id):
'form': form,
'object_id': object_id,
'original': manipulator.original_object,
'is_popup': request.REQUEST.has_key('_popup'),
'is_popup': '_popup' in request.REQUEST,
})
return render_change_form(model, manipulator, c, change=True)
change_stage = staff_member_required(never_cache(change_stage))
@ -558,12 +558,12 @@ class ChangeList(object):
self.page_num = int(request.GET.get(PAGE_VAR, 0))
except ValueError:
self.page_num = 0
self.show_all = request.GET.has_key(ALL_VAR)
self.is_popup = request.GET.has_key(IS_POPUP_VAR)
self.show_all = ALL_VAR in request.GET
self.is_popup = IS_POPUP_VAR in request.GET
self.params = dict(request.GET.items())
if self.params.has_key(PAGE_VAR):
if PAGE_VAR in self.params:
del self.params[PAGE_VAR]
if self.params.has_key(ERROR_FLAG):
if ERROR_FLAG in self.params:
del self.params[ERROR_FLAG]
self.order_field, self.order_type = self.get_ordering()
@ -594,7 +594,7 @@ class ChangeList(object):
if k.startswith(r):
del p[k]
for k, v in new_params.items():
if p.has_key(k) and v is None:
if k in p and v is None:
del p[k]
elif v is not None:
p[k] = v
@ -656,7 +656,7 @@ class ChangeList(object):
order_field, order_type = ordering[0][1:], 'desc'
else:
order_field, order_type = ordering[0], 'asc'
if params.has_key(ORDER_VAR):
if ORDER_VAR in params:
try:
field_name = lookup_opts.admin.list_display[int(params[ORDER_VAR])]
try:
@ -674,7 +674,7 @@ class ChangeList(object):
order_field = f.name
except (IndexError, ValueError):
pass # Invalid ordering specified. Just use the default.
if params.has_key(ORDER_TYPE_VAR) and params[ORDER_TYPE_VAR] in ('asc', 'desc'):
if ORDER_TYPE_VAR in params and params[ORDER_TYPE_VAR] in ('asc', 'desc'):
order_type = params[ORDER_TYPE_VAR]
return order_field, order_type
@ -682,7 +682,7 @@ class ChangeList(object):
qs = self.manager.get_query_set()
lookup_params = self.params.copy() # a dictionary of the query string
for i in (ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, SEARCH_VAR, IS_POPUP_VAR):
if lookup_params.has_key(i):
if i in lookup_params:
del lookup_params[i]
# Apply lookup parameters from the query string.

View File

@ -1,8 +1,8 @@
import datetime
from django.core.exceptions import ImproperlyConfigured
SESSION_KEY = '_auth_user_id'
BACKEND_SESSION_KEY = '_auth_user_backend'
LOGIN_URL = '/accounts/login/'
REDIRECT_FIELD_NAME = 'next'
def load_backend(path):
@ -49,8 +49,12 @@ def login(request, user):
if user is None:
user = request.user
# TODO: It would be nice to support different login methods, like signed cookies.
user.last_login = datetime.datetime.now()
user.save()
request.session[SESSION_KEY] = user.id
request.session[BACKEND_SESSION_KEY] = user.backend
if hasattr(request, 'user'):
request.user = user
def logout(request):
"""
@ -64,6 +68,9 @@ def logout(request):
del request.session[BACKEND_SESSION_KEY]
except KeyError:
pass
if hasattr(request, 'user'):
from django.contrib.auth.models import AnonymousUser
request.user = AnonymousUser()
def get_user(request):
from django.contrib.auth.models import AnonymousUser

View File

@ -1,13 +1,16 @@
from django.contrib.auth import LOGIN_URL, REDIRECT_FIELD_NAME
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.http import HttpResponseRedirect
from urllib import quote
def user_passes_test(test_func, login_url=LOGIN_URL):
def user_passes_test(test_func, login_url=None):
"""
Decorator for views that checks that the user passes the given test,
redirecting to the log-in page if necessary. The test should be a callable
that takes the user object and returns True if the user passes.
"""
if not login_url:
from django.conf import settings
login_url = settings.LOGIN_URL
def _dec(view_func):
def _checklogin(request, *args, **kwargs):
if test_func(request.user):
@ -27,7 +30,7 @@ login_required.__doc__ = (
"""
)
def permission_required(perm, login_url=LOGIN_URL):
def permission_required(perm, login_url=None):
"""
Decorator for views that checks whether a user has a particular permission
enabled, redirecting to the log-in page if necessary.

View File

@ -17,6 +17,12 @@ def check_password(raw_password, enc_password):
elif algo == 'sha1':
import sha
return hsh == sha.new(salt+raw_password).hexdigest()
elif algo == 'crypt':
try:
import crypt
except ImportError:
raise ValueError, "Crypt password algorithm not supported in this environment."
return hsh == crypt.crypt(raw_password, salt)
raise ValueError, "Got unknown password algorithm type in password."
class SiteProfileNotAvailable(Exception):
@ -38,6 +44,7 @@ class Permission(models.Model):
name = models.CharField(_('name'), maxlength=50)
content_type = models.ForeignKey(ContentType)
codename = models.CharField(_('codename'), maxlength=100)
class Meta:
verbose_name = _('permission')
verbose_name_plural = _('permissions')
@ -45,7 +52,7 @@ class Permission(models.Model):
ordering = ('content_type', 'codename')
def __str__(self):
return "%s | %s" % (self.content_type, self.name)
return "%s | %s | %s" % (self.content_type.app_label, self.content_type, self.name)
class Group(models.Model):
"""Groups are a generic way of categorizing users to apply permissions, or some other label, to those users. A user can belong to any number of groups.
@ -56,10 +63,12 @@ class Group(models.Model):
"""
name = models.CharField(_('name'), maxlength=80, unique=True)
permissions = models.ManyToManyField(Permission, verbose_name=_('permissions'), blank=True, filter_interface=models.HORIZONTAL)
class Meta:
verbose_name = _('group')
verbose_name_plural = _('groups')
ordering = ('name',)
class Admin:
search_fields = ('name',)
@ -95,16 +104,18 @@ class User(models.Model):
is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site."))
is_active = models.BooleanField(_('active'), default=True, help_text=_("Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."))
is_superuser = models.BooleanField(_('superuser status'), default=False, help_text=_("Designates that this user has all permissions without explicitly assigning them."))
last_login = models.DateTimeField(_('last login'), default=models.LazyDate())
date_joined = models.DateTimeField(_('date joined'), default=models.LazyDate())
last_login = models.DateTimeField(_('last login'), default=datetime.datetime.now)
date_joined = models.DateTimeField(_('date joined'), default=datetime.datetime.now)
groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True,
help_text=_("In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."))
user_permissions = models.ManyToManyField(Permission, verbose_name=_('user permissions'), blank=True, filter_interface=models.HORIZONTAL)
objects = UserManager()
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
ordering = ('username',)
class Admin:
fields = (
(None, {'fields': ('username', 'password')}),
@ -268,7 +279,7 @@ class AnonymousUser(object):
pass
def __str__(self):
return 'AnonymousUser'
return _('AnonymousUser')
def __eq__(self, other):
return isinstance(other, self.__class__)

View File

@ -6,7 +6,7 @@ from django.template import RequestContext
from django.contrib.sites.models import Site
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import LOGIN_URL, REDIRECT_FIELD_NAME
from django.contrib.auth import REDIRECT_FIELD_NAME
def login(request, template_name='registration/login.html'):
"Displays the login form and handles the login action."
@ -17,7 +17,8 @@ def login(request, template_name='registration/login.html'):
if not errors:
# Light security check -- make sure redirect_to isn't garbage.
if not redirect_to or '://' in redirect_to or ' ' in redirect_to:
redirect_to = '/accounts/profile/'
from django.conf import settings
redirect_to = settings.LOGIN_REDIRECT_URL
from django.contrib.auth import login
login(request, manipulator.get_user())
request.session.delete_test_cookie()
@ -41,12 +42,18 @@ def logout(request, next_page=None, template_name='registration/logged_out.html'
# Redirect to this page until the session has been cleared.
return HttpResponseRedirect(next_page or request.path)
def logout_then_login(request, login_url=LOGIN_URL):
def logout_then_login(request, login_url=None):
"Logs out the user if he is logged in. Then redirects to the log-in page."
if not login_url:
from django.conf import settings
login_url = settings.LOGIN_URL
return logout(request, login_url)
def redirect_to_login(next, login_url=LOGIN_URL):
def redirect_to_login(next, login_url=None):
"Redirects the user to the login page, passing the given 'next' page"
if not login_url:
from django.conf import settings
login_url = settings.LOGIN_URL
return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, next))
def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html',

View File

@ -23,16 +23,19 @@ class LatestFreeCommentsFeed(Feed):
self._site = Site.objects.get_current()
return "Latest comments on %s" % self._site.name
def get_query_set(self):
return self.comments_class.objects.filter(site__pk=settings.SITE_ID, is_public=True)
def items(self):
return self.comments_class.objects.filter(site__pk=settings.SITE_ID, is_public=True)[:40]
return self.get_query_set()[:40]
class LatestCommentsFeed(LatestFreeCommentsFeed):
"""Feed of latest free comments on the current site"""
comments_class = Comment
def items(self):
qs = LatestFreeCommentsFeed.items(self)
def get_query_set(self):
qs = super(LatestCommentsFeed, self).get_query_set()
qs = qs.filter(is_removed=False)
if settings.COMMENTS_BANNED_USERS_GROUP:
where = ['user_id NOT IN (SELECT user_id FROM auth_users_group WHERE group_id = %s)']

View File

@ -209,7 +209,7 @@ class FreeComment(models.Model):
class KarmaScoreManager(models.Manager):
def vote(self, user_id, comment_id, score):
try:
karma = self.objects.get(comment__pk=comment_id, user__pk=user_id)
karma = self.get(comment__pk=comment_id, user__pk=user_id)
except self.model.DoesNotExist:
karma = self.model(None, user_id=user_id, comment_id=comment_id, score=score, scored_date=datetime.datetime.now())
karma.save()

View File

@ -3,7 +3,7 @@
<form {% if photos_optional or photos_required %}enctype="multipart/form-data" {% endif %}action="/comments/post/" method="post">
{% if user.is_authenticated %}
<p>{% trans "Username:" %} <strong>{{ user.username }}</strong> (<a href="/accounts/logout/">{% trans "Log out" %}</a>)</p>
<p>{% trans "Username:" %} <strong>{{ user.username }}</strong> (<a href="{{ logout_url }}">{% trans "Log out" %}</a>)</p>
{% else %}
<p><label for="id_username">{% trans "Username:" %}</label> <input type="text" name="username" id="id_username" /><br />{% trans "Password:" %} <input type="password" name="password" id="id_password" /> (<a href="/accounts/password_reset/">{% trans "Forgotten your password?" %}</a>)</p>
{% endif %}

View File

@ -24,7 +24,8 @@ class CommentFormNode(template.Node):
self.photo_options, self.rating_options = photo_options, rating_options
self.is_public = is_public
def render(self, context):
def iter_render(self, context):
from django.conf import settings
from django.utils.text import normalize_newlines
import base64
context.push()
@ -32,7 +33,7 @@ class CommentFormNode(template.Node):
try:
self.obj_id = template.resolve_variable(self.obj_id_lookup_var, context)
except template.VariableDoesNotExist:
return ''
return
# Validate that this object ID is valid for this content-type.
# We only have to do this validation if obj_id_lookup_var is provided,
# because do_comment_form() validates hard-coded object IDs.
@ -64,10 +65,11 @@ class CommentFormNode(template.Node):
if self.rating_options:
context['rating_range'], context['rating_choices'] = Comment.objects.get_rating_options(self.rating_options)
context['hash'] = Comment.objects.get_security_hash(context['options'], context['photo_options'], context['rating_options'], context['target'])
context['logout_url'] = settings.LOGOUT_URL
default_form = loader.get_template(COMMENT_FORM)
output = default_form.render(context)
for chunk in default_form.iter_render(context):
yield chunk
context.pop()
return output
class CommentCountNode(template.Node):
def __init__(self, package, module, context_var_name, obj_id, var_name, free):
@ -75,7 +77,7 @@ class CommentCountNode(template.Node):
self.context_var_name, self.obj_id = context_var_name, obj_id
self.var_name, self.free = var_name, free
def render(self, context):
def iter_render(self, context):
from django.conf import settings
manager = self.free and FreeComment.objects or Comment.objects
if self.context_var_name is not None:
@ -84,7 +86,7 @@ class CommentCountNode(template.Node):
content_type__app_label__exact=self.package,
content_type__model__exact=self.module, site__id__exact=settings.SITE_ID).count()
context[self.var_name] = comment_count
return ''
return ()
class CommentListNode(template.Node):
def __init__(self, package, module, context_var_name, obj_id, var_name, free, ordering, extra_kwargs=None):
@ -94,14 +96,14 @@ class CommentListNode(template.Node):
self.ordering = ordering
self.extra_kwargs = extra_kwargs or {}
def render(self, context):
def iter_render(self, context):
from django.conf import settings
get_list_function = self.free and FreeComment.objects.filter or Comment.objects.get_list_with_karma
if self.context_var_name is not None:
try:
self.obj_id = template.resolve_variable(self.context_var_name, context)
except template.VariableDoesNotExist:
return ''
return ()
kwargs = {
'object_id__exact': self.obj_id,
'content_type__app_label__exact': self.package,
@ -114,7 +116,7 @@ class CommentListNode(template.Node):
comment_list = get_list_function(**kwargs).order_by(self.ordering + 'submit_date').select_related()
if not self.free:
if context.has_key('user') and context['user'].is_authenticated():
if 'user' in context and context['user'].is_authenticated():
user_id = context['user'].id
context['user_can_moderate_comments'] = Comment.objects.user_is_moderator(context['user'])
else:
@ -125,7 +127,7 @@ class CommentListNode(template.Node):
comment_list = [c for c in comment_list if not c.is_hidden or (user_id == c.user_id)]
context[self.var_name] = comment_list
return ''
return ()
class DoCommentForm:
"""

View File

@ -217,10 +217,10 @@ def post_comment(request):
errors = manipulator.get_validation_errors(new_data)
# If user gave correct username/password and wasn't already logged in, log them in
# so they don't have to enter a username/password again.
if manipulator.get_user() and not manipulator.get_user().is_authenticated() and new_data.has_key('password') and manipulator.get_user().check_password(new_data['password']):
if manipulator.get_user() and not manipulator.get_user().is_authenticated() and 'password' in new_data and manipulator.get_user().check_password(new_data['password']):
from django.contrib.auth import login
login(request, manipulator.get_user())
if errors or request.POST.has_key('preview'):
if errors or 'preview' in request.POST:
class CommentFormWrapper(oldforms.FormWrapper):
def __init__(self, manipulator, new_data, errors, rating_choices):
oldforms.FormWrapper.__init__(self, manipulator, new_data, errors)
@ -244,7 +244,7 @@ def post_comment(request):
'rating_range': rating_range,
'rating_choices': rating_choices,
}, context_instance=RequestContext(request))
elif request.POST.has_key('post'):
elif 'post' in request.POST:
# If the IP is banned, mail the admins, do NOT save the comment, and
# serve up the "Thanks for posting" page as if the comment WAS posted.
if request.META['REMOTE_ADDR'] in settings.BANNED_IPS:
@ -298,7 +298,7 @@ def post_free_comment(request):
new_data['is_public'] = IS_PUBLIC in option_list
manipulator = PublicFreeCommentManipulator()
errors = manipulator.get_validation_errors(new_data)
if errors or request.POST.has_key('preview'):
if errors or 'preview' in request.POST:
comment = errors and '' or manipulator.get_comment(new_data)
return render_to_response('comments/free_preview.html', {
'comment': comment,
@ -307,7 +307,7 @@ def post_free_comment(request):
'target': target,
'hash': security_hash,
}, context_instance=RequestContext(request))
elif request.POST.has_key('post'):
elif 'post' in request.POST:
# If the IP is banned, mail the admins, do NOT save the comment, and
# serve up the "Thanks for posting" page as if the comment WAS posted.
if request.META['REMOTE_ADDR'] in settings.BANNED_IPS:
@ -330,7 +330,7 @@ def comment_was_posted(request):
The object the comment was posted on
"""
obj = None
if request.GET.has_key('c'):
if 'c' in request.GET:
content_type_id, object_id = request.GET['c'].split(':')
try:
content_type = ContentType.objects.get(pk=content_type_id)

View File

@ -37,7 +37,7 @@ class GenericForeignKey(object):
def instance_pre_init(self, signal, sender, args, kwargs):
# Handle initalizing an object with the generic FK instaed of
# content-type/object-id fields.
if kwargs.has_key(self.name):
if self.name in kwargs:
value = kwargs.pop(self.name)
kwargs[self.ct_field] = self.get_content_type(value)
kwargs[self.fk_field] = value._get_pk_val()

View File

@ -0,0 +1 @@
from django.contrib.databrowse.sites import DatabrowsePlugin, ModelDatabrowse, DatabrowseSite, site

View File

@ -0,0 +1,192 @@
"""
These classes are light wrappers around Django's database API that provide
convenience functionality and permalink functions for the databrowse app.
"""
from django.db import models
from django.utils import dateformat
from django.utils.text import capfirst
from django.utils.translation import get_date_formats
EMPTY_VALUE = '(None)'
class EasyModel(object):
def __init__(self, site, model):
self.site = site
self.model = model
self.model_list = site.registry.keys()
self.verbose_name = model._meta.verbose_name
self.verbose_name_plural = model._meta.verbose_name_plural
def __repr__(self):
return '<EasyModel for %s>' % self.model._meta.object_name
def model_databrowse(self):
"Returns the ModelDatabrowse class for this model."
return self.site.registry[self.model]
def url(self):
return '%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name)
def objects(self, **kwargs):
for obj in self.model._default_manager.filter(**kwargs):
yield EasyInstance(self, obj)
def object_by_pk(self, pk):
return EasyInstance(self, self.model._default_manager.get(pk=pk))
def sample_objects(self):
for obj in self.model._default_manager.all()[:3]:
yield EasyInstance(self, obj)
def field(self, name):
try:
f = self.model._meta.get_field(name)
except models.FieldDoesNotExist:
return None
return EasyField(self, f)
def fields(self):
return [EasyField(self, f) for f in (self.model._meta.fields + self.model._meta.many_to_many)]
class EasyField(object):
def __init__(self, easy_model, field):
self.model, self.field = easy_model, field
def __repr__(self):
return '<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name)
def choices(self):
for value, label in self.field.choices:
yield EasyChoice(self.model, self, value, label)
def url(self):
if self.field.choices:
return '%s%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name)
elif self.field.rel:
return '%s%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name)
class EasyChoice(object):
def __init__(self, easy_model, field, value, label):
self.model, self.field = easy_model, field
self.value, self.label = value, label
def __repr__(self):
return '<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name)
def url(self):
return '%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, self.value)
class EasyInstance(object):
def __init__(self, easy_model, instance):
self.model, self.instance = easy_model, instance
def __repr__(self):
return '<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val())
def __str__(self):
val = str(self.instance)
if len(val) > 30:
return val[:30] + '...'
return val
def pk(self):
return self.instance._get_pk_val()
def url(self):
return '%s%s/%s/objects/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.pk())
def fields(self):
"""
Generator that yields EasyInstanceFields for each field in this
EasyInstance's model.
"""
for f in self.model.model._meta.fields + self.model.model._meta.many_to_many:
yield EasyInstanceField(self.model, self, f)
def related_objects(self):
"""
Generator that yields dictionaries of all models that have this
EasyInstance's model as a ForeignKey or ManyToManyField, along with
lists of related objects.
"""
for rel_object in self.model.model._meta.get_all_related_objects() + self.model.model._meta.get_all_related_many_to_many_objects():
if rel_object.model not in self.model.model_list:
continue # Skip models that aren't in the model_list
em = EasyModel(self.model.site, rel_object.model)
yield {
'model': em,
'related_field': rel_object.field.verbose_name,
'object_list': [EasyInstance(em, i) for i in getattr(self.instance, rel_object.get_accessor_name()).all()],
}
class EasyInstanceField(object):
def __init__(self, easy_model, instance, field):
self.model, self.field, self.instance = easy_model, field, instance
self.raw_value = getattr(instance.instance, field.name)
def __repr__(self):
return '<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name)
def values(self):
"""
Returns a list of values for this field for this instance. It's a list
so we can accomodate many-to-many fields.
"""
# This import is deliberately inside the function because it causes
# some settings to be imported, and we don't want to do that at the
# module level.
if self.field.rel:
if isinstance(self.field.rel, models.ManyToOneRel):
objs = getattr(self.instance.instance, self.field.name)
elif isinstance(self.field.rel, models.ManyToManyRel): # ManyToManyRel
return list(getattr(self.instance.instance, self.field.name).all())
elif self.field.choices:
objs = dict(self.field.choices).get(self.raw_value, EMPTY_VALUE)
elif isinstance(self.field, models.DateField) or isinstance(self.field, models.TimeField):
if self.raw_value:
date_format, datetime_format, time_format = get_date_formats()
if isinstance(self.field, models.DateTimeField):
objs = capfirst(dateformat.format(self.raw_value, datetime_format))
elif isinstance(self.field, models.TimeField):
objs = capfirst(dateformat.time_format(self.raw_value, time_format))
else:
objs = capfirst(dateformat.format(self.raw_value, date_format))
else:
objs = EMPTY_VALUE
elif isinstance(self.field, models.BooleanField) or isinstance(self.field, models.NullBooleanField):
objs = {True: 'Yes', False: 'No', None: 'Unknown'}[self.raw_value]
else:
objs = self.raw_value
return [objs]
def urls(self):
"Returns a list of (value, URL) tuples."
# First, check the urls() method for each plugin.
plugin_urls = []
for plugin_name, plugin in self.model.model_databrowse().plugins.items():
urls = plugin.urls(plugin_name, self)
if urls is not None:
#plugin_urls.append(urls)
values = self.values()
return zip(self.values(), urls)
if self.field.rel:
m = EasyModel(self.model.site, self.field.rel.to)
if self.field.rel.to in self.model.model_list:
lst = []
for value in self.values():
url = '%s%s/%s/objects/%s/' % (self.model.site.root_url, m.model._meta.app_label, m.model._meta.module_name, value._get_pk_val())
lst.append((str(value), url))
else:
lst = [(value, None) for value in self.values()]
elif self.field.choices:
lst = []
for value in self.values():
url = '%s%s/%s/fields/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name, self.raw_value)
lst.append((value, url))
elif isinstance(self.field, models.URLField):
val = self.values()[0]
lst = [(val, val)]
else:
lst = [(self.values()[0], None)]
return lst

View File

@ -0,0 +1,84 @@
from django import http
from django.db import models
from django.contrib.databrowse.datastructures import EasyModel
from django.contrib.databrowse.sites import DatabrowsePlugin
from django.shortcuts import render_to_response
from django.utils.text import capfirst
from django.utils.translation import get_date_formats
from django.views.generic import date_based
import datetime
import time
class CalendarPlugin(DatabrowsePlugin):
def __init__(self, field_names=None):
self.field_names = field_names
def field_dict(self, model):
"""
Helper function that returns a dictionary of all DateFields or
DateTimeFields in the given model. If self.field_names is set, it takes
take that into account when building the dictionary.
"""
if self.field_names is None:
return dict([(f.name, f) for f in model._meta.fields if isinstance(f, models.DateField)])
else:
return dict([(f.name, f) for f in model._meta.fields if isinstance(f, models.DateField) and f.name in self.field_names])
def model_index_html(self, request, model, site):
fields = self.field_dict(model)
if not fields:
return ''
return '<p class="filter"><strong>View calendar by:</strong> %s</p>' % \
', '.join(['<a href="calendars/%s/">%s</a>' % (f.name, capfirst(f.verbose_name)) for f in fields.values()])
def urls(self, plugin_name, easy_instance_field):
if isinstance(easy_instance_field.field, models.DateField):
return ['%s%s/%s/%s/%s/%s/' % (easy_instance_field.model.url(),
plugin_name, easy_instance_field.field.name,
easy_instance_field.raw_value.year,
easy_instance_field.raw_value.strftime('%b').lower(),
easy_instance_field.raw_value.day)]
def model_view(self, request, model_databrowse, url):
self.model, self.site = model_databrowse.model, model_databrowse.site
self.fields = self.field_dict(self.model)
# If the model has no DateFields, there's no point in going further.
if not self.fields:
raise http.Http404('The requested model has no calendars.')
if url is None:
return self.homepage_view(request)
url_bits = url.split('/')
if self.fields.has_key(url_bits[0]):
return self.calendar_view(request, self.fields[url_bits[0]], *url_bits[1:])
raise http.Http404('The requested page does not exist.')
def homepage_view(self, request):
easy_model = EasyModel(self.site, self.model)
field_list = self.fields.values()
field_list.sort(lambda x, y: cmp(x.verbose_name, y.verbose_name))
return render_to_response('databrowse/calendar_homepage.html', {'root_url': self.site.root_url, 'model': easy_model, 'field_list': field_list})
def calendar_view(self, request, field, year=None, month=None, day=None):
easy_model = EasyModel(self.site, self.model)
extra_context = {'root_url': self.site.root_url, 'model': easy_model, 'field': field}
if day is not None:
# TODO: The objects in this template should be EasyInstances
return date_based.archive_day(request, year, month, day, self.model.objects.all(), field.name,
template_name='databrowse/calendar_day.html', allow_empty=False, allow_future=True,
extra_context=extra_context)
elif month is not None:
return date_based.archive_month(request, year, month, self.model.objects.all(), field.name,
template_name='databrowse/calendar_month.html', allow_empty=False, allow_future=True,
extra_context=extra_context)
elif year is not None:
return date_based.archive_year(request, year, self.model.objects.all(), field.name,
template_name='databrowse/calendar_year.html', allow_empty=False, allow_future=True,
extra_context=extra_context)
else:
return date_based.archive_index(request, self.model.objects.all(), field.name,
template_name='databrowse/calendar_main.html', allow_empty=True, allow_future=True,
extra_context=extra_context)
assert False, ('%s, %s, %s, %s' % (field, year, month, day))

Some files were not shown because too many files have changed in this diff Show More