diff --git a/AUTHORS b/AUTHORS index ec4a222a4e..cca3247981 100644 --- a/AUTHORS +++ b/AUTHORS @@ -42,6 +42,7 @@ people who have submitted patches, reported bugs, added translations, helped answer newbie questions, and generally made Django that much better: adurdin@gmail.com + Daniel Alves Barbosa de Oliveira Vaz Andreas andy@jadedplanet.net Fabrice Aneche @@ -64,9 +65,11 @@ answer newbie questions, and generally made Django that much better: Chris Chamberlin Amit Chakradeo ChaosKCW + ivan.chelubeev@gmail.com Ian Clelland crankycoder@gmail.com Matt Croydon + flavio.curella@gmail.com Jure Cuhalev dackze+django@gmail.com Dirk Datzert @@ -125,6 +128,7 @@ answer newbie questions, and generally made Django that much better: Nicola Larosa Eugene Lazutkin Jeong-Min Lee + Jannis Leidel Christopher Lenz lerouxb@gmail.com Waylan Limberg @@ -154,6 +158,7 @@ answer newbie questions, and generally made Django that much better: oggie rob Jay Parlar pavithran s + Barry Pederson pgross@thoughtworks.com phaedo phil@produxion.net @@ -177,13 +182,17 @@ answer newbie questions, and generally made Django that much better: SmileyChris smurf@smurf.noris.de sopel + Wiliam Alves de Souza Georgi Stanojevski Thomas Steinacher nowell strite Radek Švarz Swaroop C H Aaron Swartz + Ville Säävuori Tyson Tate + thebjorn + Zach Thompson Tom Tobin Joe Topjian torne-django@wolfpuppy.org.uk diff --git a/MANIFEST.in b/MANIFEST.in index 11b60bcc14..a47b6e30f1 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,8 +1,12 @@ +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 * diff --git a/django/__init__.py b/django/__init__.py index a7875103ce..71ac421a6d 100644 --- a/django/__init__.py +++ b/django/__init__.py @@ -1 +1 @@ -VERSION = (0, 96, 'newforms-admin') +VERSION = (0, 97, 'newforms-admin') diff --git a/django/bin/compile-messages.py b/django/bin/compile-messages.py index f2193d3122..2e1e908bbf 100755 --- a/django/bin/compile-messages.py +++ b/django/bin/compile-messages.py @@ -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(): diff --git a/django/conf/locale/en/LC_MESSAGES/django.mo b/django/conf/locale/en/LC_MESSAGES/django.mo index 6c4dbe4b4e..038e794a83 100644 Binary files a/django/conf/locale/en/LC_MESSAGES/django.mo and b/django/conf/locale/en/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/en/LC_MESSAGES/django.po b/django/conf/locale/en/LC_MESSAGES/django.po index feba39f7cd..7e36c6358c 100644 --- a/django/conf/locale/en/LC_MESSAGES/django.po +++ b/django/conf/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-25 15:43+0200\n" +"POT-Creation-Date: 2007-04-05 01:32+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,6 +15,1168 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" + +#: db/models/manipulators.py:308 contrib/admin/views/main.py:335 +#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339 +msgid "and" +msgstr "" + +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "" + +#: db/models/fields/related.py:644 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#: db/models/fields/related.py:691 +#, 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." +msgstr[0] "" +msgstr[1] "" + +#: db/models/fields/__init__.py:42 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274 +#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621 +#: oldforms/__init__.py:357 newforms/fields.py:80 newforms/fields.py:376 +#: newforms/fields.py:452 newforms/fields.py:463 newforms/models.py:178 +msgid "This field is required." +msgstr "" + +#: db/models/fields/__init__.py:367 +msgid "This value must be an integer." +msgstr "" + +#: db/models/fields/__init__.py:402 +msgid "This value must be either True or False." +msgstr "" + +#: db/models/fields/__init__.py:423 +msgid "This field cannot be null." +msgstr "" + +#: db/models/fields/__init__.py:457 core/validators.py:148 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "" + +#: db/models/fields/__init__.py:526 core/validators.py:157 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "" + +#: 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 "" + +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "" + +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "" + +#: conf/global_settings.py:41 +msgid "Catalan" +msgstr "" + +#: conf/global_settings.py:42 +msgid "Czech" +msgstr "" + +#: conf/global_settings.py:43 +msgid "Welsh" +msgstr "" + +#: conf/global_settings.py:44 +msgid "Danish" +msgstr "" + +#: conf/global_settings.py:45 +msgid "German" +msgstr "" + +#: conf/global_settings.py:46 +msgid "Greek" +msgstr "" + +#: conf/global_settings.py:47 +msgid "English" +msgstr "" + +#: conf/global_settings.py:48 +msgid "Spanish" +msgstr "" + +#: conf/global_settings.py:49 +msgid "Argentinean Spanish" +msgstr "" + +#: conf/global_settings.py:50 +msgid "Finnish" +msgstr "" + +#: conf/global_settings.py:51 +msgid "French" +msgstr "" + +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "" + +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "" + +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "" + +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "" + +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "" + +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "" + +#: conf/global_settings.py:58 +msgid "Kannada" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Latvian" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Macedonian" +msgstr "" + +#: conf/global_settings.py:61 +msgid "Dutch" +msgstr "" + +#: conf/global_settings.py:62 +msgid "Norwegian" +msgstr "" + +#: conf/global_settings.py:63 +msgid "Polish" +msgstr "" + +#: conf/global_settings.py:64 +msgid "Portugese" +msgstr "" + +#: conf/global_settings.py:65 +msgid "Brazilian" +msgstr "" + +#: conf/global_settings.py:66 +msgid "Romanian" +msgstr "" + +#: conf/global_settings.py:67 +msgid "Russian" +msgstr "" + +#: conf/global_settings.py:68 +msgid "Slovak" +msgstr "" + +#: conf/global_settings.py:69 +msgid "Slovenian" +msgstr "" + +#: conf/global_settings.py:70 +msgid "Serbian" +msgstr "" + +#: conf/global_settings.py:71 +msgid "Swedish" +msgstr "" + +#: conf/global_settings.py:72 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:73 +msgid "Telugu" +msgstr "" + +#: conf/global_settings.py:74 +msgid "Turkish" +msgstr "" + +#: conf/global_settings.py:75 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:76 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:77 +msgid "Traditional Chinese" +msgstr "" + +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: utils/dates.py:6 +msgid "Monday" +msgstr "" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Thursday" +msgstr "" + +#: utils/dates.py:6 +msgid "Friday" +msgstr "" + +#: utils/dates.py:7 +msgid "Saturday" +msgstr "" + +#: utils/dates.py:7 +msgid "Sunday" +msgstr "" + +#: utils/dates.py:14 +msgid "January" +msgstr "" + +#: utils/dates.py:14 +msgid "February" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "" + +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "" + +#: utils/dates.py:15 +msgid "August" +msgstr "" + +#: utils/dates.py:15 +msgid "September" +msgstr "" + +#: utils/dates.py:15 +msgid "October" +msgstr "" + +#: utils/dates.py:15 +msgid "November" +msgstr "" + +#: utils/dates.py:16 +msgid "December" +msgstr "" + +#: utils/dates.py:19 +msgid "jan" +msgstr "" + +#: utils/dates.py:19 +msgid "feb" +msgstr "" + +#: utils/dates.py:19 +msgid "mar" +msgstr "" + +#: utils/dates.py:19 +msgid "apr" +msgstr "" + +#: utils/dates.py:19 +msgid "may" +msgstr "" + +#: utils/dates.py:19 +msgid "jun" +msgstr "" + +#: utils/dates.py:20 +msgid "jul" +msgstr "" + +#: utils/dates.py:20 +msgid "aug" +msgstr "" + +#: utils/dates.py:20 +msgid "sep" +msgstr "" + +#: utils/dates.py:20 +msgid "oct" +msgstr "" + +#: utils/dates.py:20 +msgid "nov" +msgstr "" + +#: utils/dates.py:20 +msgid "dec" +msgstr "" + +#: utils/dates.py:27 +msgid "Jan." +msgstr "" + +#: utils/dates.py:27 +msgid "Feb." +msgstr "" + +#: utils/dates.py:28 +msgid "Aug." +msgstr "" + +#: utils/dates.py:28 +msgid "Sept." +msgstr "" + +#: utils/dates.py:28 +msgid "Oct." +msgstr "" + +#: utils/dates.py:28 +msgid "Nov." +msgstr "" + +#: utils/dates.py:28 +msgid "Dec." +msgstr "" + +#: utils/dateformat.py:40 +msgid "p.m." +msgstr "" + +#: utils/dateformat.py:41 +msgid "a.m." +msgstr "" + +#: utils/dateformat.py:46 +msgid "PM" +msgstr "" + +#: utils/dateformat.py:47 +msgid "AM" +msgstr "" + +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "" + +#: utils/dateformat.py:97 +msgid "noon" +msgstr "" + +#: utils/translation/trans_real.py:358 +msgid "DATE_FORMAT" +msgstr "N j, Y" + +#: utils/translation/trans_real.py:359 +msgid "DATETIME_FORMAT" +msgstr "N j, Y, P" + +#: utils/translation/trans_real.py:360 +msgid "TIME_FORMAT" +msgstr "P" + +#: utils/translation/trans_real.py:376 +msgid "YEAR_MONTH_FORMAT" +msgstr "F Y" + +#: utils/translation/trans_real.py:377 +msgid "MONTH_DAY_FORMAT" +msgstr "F j" + +#: 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] "" +msgstr[1] "" + +#: oldforms/__init__.py:397 +msgid "Line breaks are not allowed here." +msgstr "" + +#: 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 "" + +#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:150 +#: newforms/widgets.py:174 +msgid "Unknown" +msgstr "" + +#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143 +#: newforms/widgets.py:174 +msgid "Yes" +msgstr "" + +#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143 +#: newforms/widgets.py:174 +msgid "No" +msgstr "" + +#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +#: oldforms/__init__.py:674 +msgid "The submitted file is empty." +msgstr "" + +#: oldforms/__init__.py:730 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: oldforms/__init__.py:740 +msgid "Enter a positive number." +msgstr "" + +#: oldforms/__init__.py:750 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + +#: contrib/localflavor/no/forms.py:15 +msgid "Enter a zip code in the format XXXX." +msgstr "" + +#: contrib/localflavor/no/forms.py:36 +msgid "Enter a valid Norwegian social security number." +msgstr "" + +#: contrib/localflavor/it/forms.py:14 contrib/localflavor/fr/forms.py:17 +#: contrib/localflavor/fi/forms.py:14 contrib/localflavor/de/forms.py:16 +msgid "Enter a zip code in the format XXXXX." +msgstr "" + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "" + +#: 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/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "" + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "" + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:46 +msgid "Enter a valid Finnish social security number." +msgstr "" + +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "" + +#: contrib/localflavor/de/forms.py:63 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format" +msgstr "" + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "" + +#: contrib/localflavor/usa/forms.py:18 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "" + +#: contrib/localflavor/usa/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "" + +#: contrib/sessions/models.py:68 +msgid "session key" +msgstr "" + +#: contrib/sessions/models.py:69 +msgid "session data" +msgstr "" + +#: contrib/sessions/models.py:70 +msgid "expire date" +msgstr "" + +#: contrib/sessions/models.py:74 +msgid "session" +msgstr "" + +#: contrib/sessions/models.py:75 +msgid "sessions" +msgstr "" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "" + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "" + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" + +#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "" + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "" + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "" + +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "" + +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "" + +#: contrib/auth/models.py:42 +msgid "permission" +msgstr "" + +#: contrib/auth/models.py:43 contrib/auth/models.py:58 +msgid "permissions" +msgstr "" + +#: contrib/auth/models.py:60 +msgid "group" +msgstr "" + +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +msgid "groups" +msgstr "" + +#: contrib/auth/models.py:90 +msgid "username" +msgstr "" + +#: contrib/auth/models.py:90 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" + +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "" + +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "" + +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "" + +#: contrib/auth/models.py:94 +msgid "password" +msgstr "" + +#: contrib/auth/models.py:94 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" + +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "" + +#: contrib/auth/models.py:95 +msgid "Designates whether the user can log into this admin site." +msgstr "" + +#: contrib/auth/models.py:96 +msgid "active" +msgstr "" + +#: contrib/auth/models.py:96 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "" + +#: contrib/auth/models.py:97 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "" + +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "" + +#: contrib/auth/models.py:101 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" + +#: contrib/auth/models.py:102 +msgid "user permissions" +msgstr "" + +#: contrib/auth/models.py:105 +msgid "user" +msgstr "" + +#: contrib/auth/models.py:106 +msgid "users" +msgstr "" + +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "" + +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "" + +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "" + +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "" + +#: contrib/auth/models.py:258 +msgid "message" +msgstr "" + +#: 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] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "one" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "three" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "four" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "five" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "nine" +msgstr "" + +#: contrib/contenttypes/models.py:36 +msgid "python model class name" +msgstr "" + +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "" + +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "" + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "" + +#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315 +msgid "URL" +msgstr "" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "" + #: contrib/comments/models.py:67 contrib/comments/models.py:166 msgid "object ID" msgstr "" @@ -187,6 +1349,75 @@ msgstr "" msgid "Moderator deletion by %r" msgstr "" +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:17 +msgid "Username:" +msgstr "" + +#: contrib/comments/templates/comments/form.html:6 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +msgid "Log out" +msgstr "" + +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "" + +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "" + +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "" + #: contrib/comments/views/karma.py:19 msgid "Anonymous users cannot vote" msgstr "" @@ -254,72 +1485,20 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" +#: contrib/sites/models.py:10 +msgid "domain name" msgstr "" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Log out" +#: contrib/sites/models.py:11 +msgid "display name" msgstr "" -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" +#: contrib/sites/models.py:15 +msgid "site" msgstr "" -#: contrib/comments/templates/comments/form.html:8 -msgid "Forgotten your password?" -msgstr "" - -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "" - -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "" - -#: contrib/comments/templates/comments/form.html:28 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "" - -#: contrib/comments/templates/comments/form.html:35 -#: contrib/comments/templates/comments/freeform.html:10 -msgid "Preview comment" -msgstr "" - -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" +#: contrib/sites/models.py:16 +msgid "sites" msgstr "" #: contrib/admin/filterspecs.py:40 @@ -354,18 +1533,6 @@ msgstr "" msgid "This year" msgstr "" -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "" - -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "" - -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "" - #: contrib/admin/models.py:16 msgid "action time" msgstr "" @@ -394,53 +1561,489 @@ msgstr "" msgid "log entries" msgstr "" -#: contrib/admin/templatetags/admin_list.py:230 +#: contrib/admin/templatetags/admin_list.py:247 msgid "All dates" 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." +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/invalid_setup.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/auth/user/change_password.html:12 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +msgid "Home" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:15 +#: contrib/admin/templates/admin/auth/user/change_password.html:46 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +msgid "Change password" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:9 +msgid "Delete" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "" + +#: contrib/admin/templates/admin/500.html:10 +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 "" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "" + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:21 +msgid "History" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "N j, Y, P" + +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:21 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "" + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "" + +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:15 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:32 +#: contrib/admin/templates/admin/auth/user/change_password.html:24 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "" + +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." msgstr "" -#: contrib/admin/views/decorators.py:24 #: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:24 msgid "Log in" msgstr "" -#: contrib/admin/views/decorators.py:62 -msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." -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 "" - -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "" - -#: contrib/admin/views/decorators.py:85 +#: contrib/admin/templates/admin/index.html:17 #, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." +msgid "Models available in the %(name)s application." +msgstr "" + +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "" + +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "" + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +msgid "Password" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +msgid "Password (again)" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +#: contrib/admin/templates/admin/auth/user/change_password.html:40 +msgid "Enter the same password as above, for verification." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "" + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:10 +msgid "Password reset" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_done.html:12 +msgid "" +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_form.html:6 +#: contrib/admin/templates/registration/password_change_form.html:10 +#: contrib/admin/templates/registration/password_change_done.html:4 +msgid "Password change" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:12 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "" + +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "" + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:12 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll reset " +"your password and e-mail the new one to you." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" msgstr "" #: contrib/admin/views/main.py:223 msgid "Site administration" msgstr "" -#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17 +#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." msgstr "" #: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347 -#: contrib/admin/views/auth.py:22 +#: contrib/admin/views/auth.py:24 msgid "You may edit it again below." msgstr "" @@ -459,11 +2062,6 @@ msgstr "" msgid "Added %s." msgstr "" -#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 -#: contrib/admin/views/main.py:339 -msgid "and" -msgstr "" - #: contrib/admin/views/main.py:337 #, python-format msgid "Changed %s." @@ -494,44 +2092,65 @@ msgstr "" msgid "Change %s" msgstr "" -#: 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 "" -#: contrib/admin/views/main.py:478 +#: contrib/admin/views/main.py:481 #, python-format msgid "One or more %(fieldname)s in %(name)s:" msgstr "" -#: contrib/admin/views/main.py:511 +#: contrib/admin/views/main.py:514 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgstr "" -#: 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 "" -#: contrib/admin/views/main.py:570 +#: contrib/admin/views/main.py:573 #, python-format msgid "Select %s" msgstr "" -#: contrib/admin/views/main.py:570 +#: contrib/admin/views/main.py:573 #, python-format msgid "Select %s to change" msgstr "" -#: contrib/admin/views/main.py:758 +#: contrib/admin/views/main.py:768 msgid "Database error" msgstr "" +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +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 "" + +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + #: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 #: contrib/admin/views/doc.py:50 msgid "tag:" @@ -554,12 +2173,12 @@ msgstr "" #: contrib/admin/views/doc.py:171 #, python-format -msgid "Model %r not found in app %r" +msgid "Model %(name)r not found in app %(label)r" msgstr "" #: contrib/admin/views/doc.py:183 #, python-format -msgid "the related `%s.%s` object" +msgid "the related `%(label)s.%(type)s` object" msgstr "" #: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 @@ -569,7 +2188,7 @@ msgstr "" #: contrib/admin/views/doc.py:214 #, python-format -msgid "related `%s.%s` objects" +msgid "related `%(label)s.%(name)s` objects" msgstr "" #: contrib/admin/views/doc.py:219 @@ -647,10 +2266,6 @@ msgstr "" msgid "Time" msgstr "" -#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "" - #: contrib/admin/views/doc.py:316 msgid "U.S. state (two uppercase letters)" msgstr "" @@ -664,1331 +2279,86 @@ msgstr "" msgid "%s does not appear to be a urlpattern object" msgstr "" -#: contrib/admin/views/auth.py:28 +#: contrib/admin/views/auth.py:30 msgid "Add user" msgstr "" -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Documentation" +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." msgstr "" -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Change password" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/500.html:4 -#: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/base.html:30 -#: contrib/admin/templates/admin/delete_confirmation.html:6 -#: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/admin/invalid_setup.html:4 -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/logged_out.html:4 -#: contrib/admin/templates/registration/password_reset_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Home" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "" - -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "N j, Y, P" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "" - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "" - -#: contrib/admin/templates/admin/500.html:10 -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 "" - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "" - -#: contrib/admin/templates/admin/index.html:17 +#: contrib/admin/views/auth.py:64 #, python-format -msgid "Models available in the %(name)s application." +msgid "Change password: %s" msgstr "" -#: contrib/admin/templates/admin/index.html:18 +#: newforms/fields.py:103 newforms/fields.py:256 #, python-format -msgid "%(name)s" +msgid "Ensure this value has at most %d characters." msgstr "" -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "" - -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "" - -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "" - -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "" - -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "" - -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "" - -#: contrib/admin/templates/admin/change_list.html:11 +#: newforms/fields.py:105 newforms/fields.py:258 #, python-format -msgid "Add %(name)s" +msgid "Ensure this value has at least %d characters." msgstr "" -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "" - -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "" - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "" - -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, python-format -msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " -"related objects, but your account doesn't have permission to delete the " -"following types of objects:" -msgstr "" - -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, python-format -msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " -"All of the following related items will be deleted:" -msgstr "" - -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr "" - -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "1 result" -msgid_plural "%(counter)s results" -msgstr[0] "" -msgstr[1] "" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "%(full_result_count)s total" -msgstr "" - -#: contrib/admin/templates/admin/pagination.html:10 -msgid "Show all" -msgstr "" - -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "" - -#: contrib/admin/templates/admin/change_form.html:21 -msgid "View on site" -msgstr "" - -#: contrib/admin/templates/admin/change_form.html:30 -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" - -#: contrib/admin/templates/admin/change_form.html:48 -msgid "Ordering" -msgstr "" - -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "" - -#: contrib/admin/templates/admin/invalid_setup.html:8 -msgid "" -"Something's wrong with your database installation. Make sure the appropriate " -"database tables have been created, and make sure the database is readable by " -"the appropriate user." -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:6 -msgid "" -"First, enter a username and password. Then, you'll be able to edit more user " -"options." -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:12 -msgid "Username" -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:18 -msgid "Password" -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:23 -msgid "Password (again)" -msgstr "" - -#: contrib/admin/templates/admin/auth/user/add_form.html:24 -msgid "Enter the same password as above, for verification." -msgstr "" - -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/registration/password_change_form.html:6 -#: contrib/admin/templates/registration/password_change_form.html:10 -msgid "Password change" -msgstr "" - -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "" - -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "" - -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:6 -#: contrib/admin/templates/registration/password_reset_form.html:10 -#: contrib/admin/templates/registration/password_reset_done.html:4 -msgid "Password reset" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_form.html:12 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." -msgstr "" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "" - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_done.html:12 -msgid "" -"We've e-mailed a new password to the e-mail address you submitted. You " -"should be receiving it shortly." -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:12 -msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "" - -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "" - -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

To install bookmarklets, drag the link to your bookmarks\n" -"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" -"select the bookmarklet from any page in the site. Note that some of these\n" -"bookmarklets require you to be viewing the site from a computer designated\n" -"as \"internal\" (talk to your system administrator if you aren't sure if\n" -"your computer is \"internal\").

\n" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 -msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "" - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "" - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "" - -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "" - -#: contrib/redirects/models.py:8 -msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" - -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "" - -#: contrib/redirects/models.py:10 -msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." -msgstr "" - -#: contrib/redirects/models.py:13 -msgid "redirect" -msgstr "" - -#: contrib/redirects/models.py:14 -msgid "redirects" -msgstr "" - -#: contrib/flatpages/models.py:8 -msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" - -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "" - -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "" - -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "" - -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "" - -#: contrib/flatpages/models.py:13 -msgid "" -"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " -"will use 'flatpages/default.html'." -msgstr "" - -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "" - -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "" - -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "" - -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "" - -#: contrib/auth/views.py:39 -msgid "Logged out" -msgstr "" - -#: contrib/auth/models.py:38 contrib/auth/models.py:57 -msgid "name" -msgstr "" - -#: contrib/auth/models.py:40 -msgid "codename" -msgstr "" - -#: contrib/auth/models.py:42 -msgid "permission" -msgstr "" - -#: contrib/auth/models.py:43 contrib/auth/models.py:58 -msgid "permissions" -msgstr "" - -#: contrib/auth/models.py:60 -msgid "group" -msgstr "" - -#: contrib/auth/models.py:61 contrib/auth/models.py:100 -msgid "groups" -msgstr "" - -#: contrib/auth/models.py:90 -msgid "username" -msgstr "" - -#: contrib/auth/models.py:90 -msgid "" -"Required. 30 characters or fewer. Alphanumeric characters only (letters, " -"digits and underscores)." -msgstr "" - -#: contrib/auth/models.py:91 -msgid "first name" -msgstr "" - -#: contrib/auth/models.py:92 -msgid "last name" -msgstr "" - -#: contrib/auth/models.py:93 -msgid "e-mail address" -msgstr "" - -#: contrib/auth/models.py:94 -msgid "password" -msgstr "" - -#: contrib/auth/models.py:94 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "" - -#: contrib/auth/models.py:95 -msgid "staff status" -msgstr "" - -#: contrib/auth/models.py:95 -msgid "Designates whether the user can log into this admin site." -msgstr "" - -#: contrib/auth/models.py:96 -msgid "active" -msgstr "" - -#: contrib/auth/models.py:96 -msgid "" -"Designates whether this user can log into the Django admin. Unselect this " -"instead of deleting accounts." -msgstr "" - -#: contrib/auth/models.py:97 -msgid "superuser status" -msgstr "" - -#: contrib/auth/models.py:97 -msgid "" -"Designates that this user has all permissions without explicitly assigning " -"them." -msgstr "" - -#: contrib/auth/models.py:98 -msgid "last login" -msgstr "" - -#: contrib/auth/models.py:99 -msgid "date joined" -msgstr "" - -#: contrib/auth/models.py:101 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." -msgstr "" - -#: contrib/auth/models.py:102 -msgid "user permissions" -msgstr "" - -#: contrib/auth/models.py:105 -msgid "user" -msgstr "" - -#: contrib/auth/models.py:106 -msgid "users" -msgstr "" - -#: contrib/auth/models.py:111 -msgid "Personal info" -msgstr "" - -#: contrib/auth/models.py:112 -msgid "Permissions" -msgstr "" - -#: contrib/auth/models.py:113 -msgid "Important dates" -msgstr "" - -#: contrib/auth/models.py:114 -msgid "Groups" -msgstr "" - -#: contrib/auth/models.py:256 -msgid "message" -msgstr "" - -#: contrib/auth/forms.py:52 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -msgstr "" - -#: contrib/auth/forms.py:61 -msgid "This account is inactive." -msgstr "" - -#: contrib/contenttypes/models.py:20 -msgid "python model class name" -msgstr "" - -#: contrib/contenttypes/models.py:23 -msgid "content type" -msgstr "" - -#: contrib/contenttypes/models.py:24 -msgid "content types" -msgstr "" - -#: contrib/sessions/models.py:51 -msgid "session key" -msgstr "" - -#: contrib/sessions/models.py:52 -msgid "session data" -msgstr "" - -#: contrib/sessions/models.py:53 -msgid "expire date" -msgstr "" - -#: contrib/sessions/models.py:57 -msgid "session" -msgstr "" - -#: contrib/sessions/models.py:58 -msgid "sessions" -msgstr "" - -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "" - -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "" - -#: contrib/sites/models.py:15 -msgid "site" -msgstr "" - -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "" - -#: utils/dates.py:6 -msgid "Monday" -msgstr "" - -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "" - -#: utils/dates.py:6 -msgid "Wednesday" -msgstr "" - -#: utils/dates.py:6 -msgid "Thursday" -msgstr "" - -#: utils/dates.py:6 -msgid "Friday" -msgstr "" - -#: utils/dates.py:7 -msgid "Saturday" -msgstr "" - -#: utils/dates.py:7 -msgid "Sunday" -msgstr "" - -#: utils/dates.py:14 -msgid "January" -msgstr "" - -#: utils/dates.py:14 -msgid "February" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "" - -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "" - -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "" - -#: utils/dates.py:15 -msgid "August" -msgstr "" - -#: utils/dates.py:15 -msgid "September" -msgstr "" - -#: utils/dates.py:15 -msgid "October" -msgstr "" - -#: utils/dates.py:15 -msgid "November" -msgstr "" - -#: utils/dates.py:16 -msgid "December" -msgstr "" - -#: utils/dates.py:19 -msgid "jan" -msgstr "" - -#: utils/dates.py:19 -msgid "feb" -msgstr "" - -#: utils/dates.py:19 -msgid "mar" -msgstr "" - -#: utils/dates.py:19 -msgid "apr" -msgstr "" - -#: utils/dates.py:19 -msgid "may" -msgstr "" - -#: utils/dates.py:19 -msgid "jun" -msgstr "" - -#: utils/dates.py:20 -msgid "jul" -msgstr "" - -#: utils/dates.py:20 -msgid "aug" -msgstr "" - -#: utils/dates.py:20 -msgid "sep" -msgstr "" - -#: utils/dates.py:20 -msgid "oct" -msgstr "" - -#: utils/dates.py:20 -msgid "nov" -msgstr "" - -#: utils/dates.py:20 -msgid "dec" -msgstr "" - -#: utils/dates.py:27 -msgid "Jan." -msgstr "" - -#: utils/dates.py:27 -msgid "Feb." -msgstr "" - -#: utils/dates.py:28 -msgid "Aug." -msgstr "" - -#: utils/dates.py:28 -msgid "Sept." -msgstr "" - -#: utils/dates.py:28 -msgid "Oct." -msgstr "" - -#: utils/dates.py:28 -msgid "Nov." -msgstr "" - -#: utils/dates.py:28 -msgid "Dec." -msgstr "" - -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "" -msgstr[1] "" - -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "" -msgstr[1] "" - -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" - -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "" -msgstr[1] "" - -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" - -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" - -#: utils/translation/trans_real.py:362 -msgid "DATE_FORMAT" -msgstr "N j, Y" - -#: utils/translation/trans_real.py:363 -msgid "DATETIME_FORMAT" -msgstr "N j, Y, P" - -#: utils/translation/trans_real.py:364 -msgid "TIME_FORMAT" -msgstr "P" - -#: utils/translation/trans_real.py:380 -msgid "YEAR_MONTH_FORMAT" -msgstr "F Y" - -#: utils/translation/trans_real.py:381 -msgid "MONTH_DAY_FORMAT" -msgstr "F j" - -#: conf/global_settings.py:39 -msgid "Arabic" -msgstr "" - -#: conf/global_settings.py:40 -msgid "Bengali" -msgstr "" - -#: conf/global_settings.py:41 -msgid "Czech" -msgstr "" - -#: conf/global_settings.py:42 -msgid "Welsh" -msgstr "" - -#: conf/global_settings.py:43 -msgid "Danish" -msgstr "" - -#: conf/global_settings.py:44 -msgid "German" -msgstr "" - -#: conf/global_settings.py:45 -msgid "Greek" -msgstr "" - -#: conf/global_settings.py:46 -msgid "English" -msgstr "" - -#: conf/global_settings.py:47 -msgid "Spanish" -msgstr "" - -#: conf/global_settings.py:48 -msgid "Argentinean Spanish" -msgstr "" - -#: conf/global_settings.py:49 -msgid "Finnish" -msgstr "" - -#: conf/global_settings.py:50 -msgid "French" -msgstr "" - -#: conf/global_settings.py:51 -msgid "Galician" -msgstr "" - -#: conf/global_settings.py:52 -msgid "Hungarian" -msgstr "" - -#: conf/global_settings.py:53 -msgid "Hebrew" -msgstr "" - -#: conf/global_settings.py:54 -msgid "Icelandic" -msgstr "" - -#: conf/global_settings.py:55 -msgid "Italian" -msgstr "" - -#: conf/global_settings.py:56 -msgid "Japanese" -msgstr "" - -#: conf/global_settings.py:57 -msgid "Dutch" -msgstr "" - -#: conf/global_settings.py:58 -msgid "Norwegian" -msgstr "" - -#: conf/global_settings.py:59 -msgid "Brazilian" -msgstr "" - -#: conf/global_settings.py:60 -msgid "Romanian" -msgstr "" - -#: conf/global_settings.py:61 -msgid "Russian" -msgstr "" - -#: conf/global_settings.py:62 -msgid "Slovak" -msgstr "" - -#: conf/global_settings.py:63 -msgid "Slovenian" -msgstr "" - -#: conf/global_settings.py:64 -msgid "Serbian" -msgstr "" - -#: conf/global_settings.py:65 -msgid "Swedish" -msgstr "" - -#: conf/global_settings.py:66 -msgid "Tamil" -msgstr "" - -#: conf/global_settings.py:67 -msgid "Turkish" -msgstr "" - -#: conf/global_settings.py:68 -msgid "Ukrainian" -msgstr "" - -#: conf/global_settings.py:69 -msgid "Simplified Chinese" -msgstr "" - -#: conf/global_settings.py:70 -msgid "Traditional Chinese" -msgstr "" - -#: core/validators.py:63 -msgid "This value must contain only letters, numbers and underscores." -msgstr "" - -#: core/validators.py:67 -msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." -msgstr "" - -#: core/validators.py:71 -msgid "This value must contain only letters, numbers, underscores or hyphens." -msgstr "" - -#: core/validators.py:75 -msgid "Uppercase letters are not allowed here." -msgstr "" - -#: core/validators.py:79 -msgid "Lowercase letters are not allowed here." -msgstr "" - -#: core/validators.py:86 -msgid "Enter only digits separated by commas." -msgstr "" - -#: core/validators.py:98 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "" - -#: core/validators.py:102 -msgid "Please enter a valid IP address." -msgstr "" - -#: core/validators.py:106 -msgid "Empty values are not allowed here." -msgstr "" - -#: core/validators.py:110 -msgid "Non-numeric characters aren't allowed here." -msgstr "" - -#: core/validators.py:114 -msgid "This value can't be comprised solely of digits." -msgstr "" - -#: core/validators.py:119 +#: newforms/fields.py:128 core/validators.py:120 msgid "Enter a whole number." msgstr "" -#: core/validators.py:123 -msgid "Only alphabetical characters are allowed here." -msgstr "" - -#: core/validators.py:138 -msgid "Year must be 1900 or later." -msgstr "" - -#: core/validators.py:142 +#: newforms/fields.py:130 #, python-format -msgid "Invalid date: %s." +msgid "Ensure this value is less than or equal to %s." msgstr "" -#: core/validators.py:146 db/models/fields/__init__.py:415 -msgid "Enter a valid date in YYYY-MM-DD format." +#: newforms/fields.py:132 +#, python-format +msgid "Ensure this value is greater than or equal to %s." msgstr "" -#: core/validators.py:151 -msgid "Enter a valid time in HH:MM format." +#: newforms/fields.py:165 +msgid "Enter a valid date." msgstr "" -#: core/validators.py:155 db/models/fields/__init__.py:477 -msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +#: newforms/fields.py:192 +msgid "Enter a valid time." msgstr "" -#: core/validators.py:160 +#: newforms/fields.py:228 +msgid "Enter a valid date/time." +msgstr "" + +#: newforms/fields.py:242 +msgid "Enter a valid value." +msgstr "" + +#: newforms/fields.py:271 core/validators.py:162 msgid "Enter a valid e-mail address." msgstr "" -#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661 -msgid "No file was submitted. Check the encoding type on the form." +#: newforms/fields.py:289 newforms/fields.py:311 +msgid "Enter a valid URL." msgstr "" -#: core/validators.py:176 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." +#: newforms/fields.py:313 +msgid "This URL appears to be a broken link." msgstr "" -#: core/validators.py:183 +#: newforms/fields.py:362 newforms/models.py:165 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#: newforms/fields.py:380 newforms/fields.py:456 newforms/models.py:182 +msgid "Enter a list of values." +msgstr "" + +#: newforms/fields.py:389 newforms/models.py:188 #, python-format -msgid "The URL %s does not point to a valid image." +msgid "Select a valid choice. %s is not one of the available choices." msgstr "" -#: core/validators.py:187 -#, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "" - -#: core/validators.py:195 -#, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "" - -#: core/validators.py:199 -msgid "A valid URL is required." -msgstr "" - -#: core/validators.py:213 -#, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" -msgstr "" - -#: core/validators.py:220 -#, python-format -msgid "Badly formed XML: %s" -msgstr "" - -#: core/validators.py:230 -#, python-format -msgid "Invalid URL: %s" -msgstr "" - -#: core/validators.py:234 core/validators.py:236 -#, python-format -msgid "The URL %s is a broken link." -msgstr "" - -#: core/validators.py:242 -msgid "Enter a valid U.S. state abbreviation." -msgstr "" - -#: core/validators.py:256 -#, 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] "" -msgstr[1] "" - -#: core/validators.py:263 -#, python-format -msgid "This field must match the '%s' field." -msgstr "" - -#: core/validators.py:282 -msgid "Please enter something for at least one field." -msgstr "" - -#: core/validators.py:291 core/validators.py:302 -msgid "Please enter both fields or leave them both empty." -msgstr "" - -#: core/validators.py:309 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "" - -#: core/validators.py:321 -#, python-format -msgid "This field must be given if %(field)s is not %(value)s" -msgstr "" - -#: core/validators.py:340 -msgid "Duplicate values are not allowed." -msgstr "" - -#: core/validators.py:363 -#, python-format -msgid "This value must be a power of %s." -msgstr "" - -#: core/validators.py:374 -msgid "Please enter a valid decimal number." -msgstr "" - -#: core/validators.py:378 -#, 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." -msgstr[0] "" -msgstr[1] "" - -#: core/validators.py:381 -#, python-format -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] "" -msgstr[1] "" - -#: core/validators.py:384 -#, 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." -msgstr[0] "" -msgstr[1] "" - -#: core/validators.py:394 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "" - -#: core/validators.py:395 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "" - -#: core/validators.py:412 -msgid "The format for this field is wrong." -msgstr "" - -#: core/validators.py:427 -msgid "This field is invalid." -msgstr "" - -#: core/validators.py:463 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "" - -#: core/validators.py:466 -#, python-format -msgid "" -"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "" - -#: core/validators.py:499 -#, python-format -msgid "" -"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " -"\"%(start)s\".)" -msgstr "" - -#: core/validators.py:503 -#, python-format -msgid "" -"Some text starting on line %(line)s is not allowed in that context. (Line " -"starts with \"%(start)s\".)" -msgstr "" - -#: core/validators.py:508 -#, python-format -msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" -msgstr "" - -#: core/validators.py:513 -#, python-format -msgid "" -"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" -"(start)s\".)" -msgstr "" - -#: core/validators.py:517 -#, python-format -msgid "" -"A tag on line %(line)s is missing one or more required attributes. (Line " -"starts with \"%(start)s\".)" -msgstr "" - -#: core/validators.py:522 -#, python-format -msgid "" -"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " -"starts with \"%(start)s\".)" +#: template/defaultfilters.py:491 +msgid "yes,no,maybe" msgstr "" #: views/generic/create_update.py:43 @@ -2006,92 +2376,270 @@ msgstr "" msgid "The %(verbose_name)s was deleted." msgstr "" -#: db/models/manipulators.py:302 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." +#: core/validators.py:64 +msgid "This value must contain only letters, numbers and underscores." msgstr "" -#: db/models/fields/__init__.py:40 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "" - -#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562 -#: forms/__init__.py:346 -msgid "This field is required." -msgstr "" - -#: db/models/fields/__init__.py:340 -msgid "This value must be an integer." -msgstr "" - -#: db/models/fields/__init__.py:372 -msgid "This value must be either True or False." -msgstr "" - -#: db/models/fields/__init__.py:388 -msgid "This field cannot be null." -msgstr "" - -#: db/models/fields/__init__.py:571 -msgid "Enter a valid filename." -msgstr "" - -#: db/models/fields/related.py:51 -#, python-format -msgid "Please enter a valid %s." -msgstr "" - -#: db/models/fields/related.py:618 -msgid "Separate multiple IDs with commas." -msgstr "" - -#: db/models/fields/related.py:620 +#: core/validators.py:68 msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." msgstr "" -#: db/models/fields/related.py:664 +#: core/validators.py:72 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "" + +#: core/validators.py:76 +msgid "Uppercase letters are not allowed here." +msgstr "" + +#: core/validators.py:80 +msgid "Lowercase letters are not allowed here." +msgstr "" + +#: core/validators.py:87 +msgid "Enter only digits separated by commas." +msgstr "" + +#: core/validators.py:99 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "" + +#: core/validators.py:103 +msgid "Please enter a valid IP address." +msgstr "" + +#: core/validators.py:107 +msgid "Empty values are not allowed here." +msgstr "" + +#: core/validators.py:111 +msgid "Non-numeric characters aren't allowed here." +msgstr "" + +#: core/validators.py:115 +msgid "This value can't be comprised solely of digits." +msgstr "" + +#: core/validators.py:124 +msgid "Only alphabetical characters are allowed here." +msgstr "" + +#: core/validators.py:139 +msgid "Year must be 1900 or later." +msgstr "" + +#: core/validators.py:143 #, python-format -msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid "Invalid date: %s" +msgstr "" + +#: core/validators.py:153 +msgid "Enter a valid time in HH:MM format." +msgstr "" + +#: core/validators.py:178 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: core/validators.py:185 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "" + +#: core/validators.py:189 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" + +#: core/validators.py:197 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "" + +#: core/validators.py:201 +msgid "A valid URL is required." +msgstr "" + +#: core/validators.py:215 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" + +#: core/validators.py:222 +#, python-format +msgid "Badly formed XML: %s" +msgstr "" + +#: core/validators.py:239 +#, python-format +msgid "Invalid URL: %s" +msgstr "" + +#: core/validators.py:244 core/validators.py:246 +#, python-format +msgid "The URL %s is a broken link." +msgstr "" + +#: core/validators.py:252 +msgid "Enter a valid U.S. state abbreviation." +msgstr "" + +#: 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] "" +msgstr[1] "" + +#: core/validators.py:273 +#, python-format +msgid "This field must match the '%s' field." +msgstr "" + +#: core/validators.py:292 +msgid "Please enter something for at least one field." +msgstr "" + +#: core/validators.py:301 core/validators.py:312 +msgid "Please enter both fields or leave them both empty." +msgstr "" + +#: core/validators.py:320 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "" + +#: core/validators.py:333 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "" + +#: core/validators.py:352 +msgid "Duplicate values are not allowed." +msgstr "" + +#: core/validators.py:367 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "" + +#: core/validators.py:369 +#, python-format +msgid "This value must be at least %s." +msgstr "" + +#: core/validators.py:371 +#, python-format +msgid "This value must be no more than %s." +msgstr "" + +#: core/validators.py:407 +#, python-format +msgid "This value must be a power of %s." +msgstr "" + +#: core/validators.py:418 +msgid "Please enter a valid decimal number." +msgstr "" + +#: core/validators.py:422 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." msgid_plural "" -"Please enter valid %(self)s IDs. The values %(value)r are invalid." +"Please enter a valid decimal number with at most %s total digits." msgstr[0] "" msgstr[1] "" -#: forms/__init__.py:381 +#: core/validators.py:425 #, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." +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] "" msgstr[1] "" -#: forms/__init__.py:386 -msgid "Line breaks are not allowed here." -msgstr "" - -#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599 +#: core/validators.py:428 #, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +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." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:438 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." msgstr "" -#: forms/__init__.py:663 -msgid "The submitted file is empty." +#: core/validators.py:439 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." msgstr "" -#: forms/__init__.py:719 -msgid "Enter a whole number between -32,768 and 32,767." +#: core/validators.py:456 +msgid "The format for this field is wrong." msgstr "" -#: forms/__init__.py:729 -msgid "Enter a positive number." +#: core/validators.py:471 +msgid "This field is invalid." msgstr "" -#: forms/__init__.py:739 -msgid "Enter a whole number between 0 and 32,767." +#: core/validators.py:507 +#, python-format +msgid "Could not retrieve anything from %s." msgstr "" -#: template/defaultfilters.py:401 -msgid "yes,no,maybe" +#: core/validators.py:510 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" + +#: core/validators.py:543 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" + +#: core/validators.py:547 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: core/validators.py:552 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: core/validators.py:557 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: core/validators.py:561 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: core/validators.py:566 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" msgstr "" diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.mo b/django/conf/locale/es_AR/LC_MESSAGES/django.mo index b7f777611b..7fb381c78f 100644 Binary files a/django/conf/locale/es_AR/LC_MESSAGES/django.mo and b/django/conf/locale/es_AR/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.po b/django/conf/locale/es_AR/LC_MESSAGES/django.po index c299f2c502..27472353e4 100644 --- a/django/conf/locale/es_AR/LC_MESSAGES/django.po +++ b/django/conf/locale/es_AR/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-02-25 17:21-0300\n" -"PO-Revision-Date: 2007-02-25 17:46-0300\n" +"POT-Creation-Date: 2007-03-24 11:16-0300\n" +"PO-Revision-Date: 2007-03-24 11:54-0300\n" "Last-Translator: Ramiro Morales \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" @@ -16,1529 +16,156 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: contrib/contenttypes/models.py:26 -msgid "python model class name" -msgstr "nombre de la clase python del modelo" - -#: contrib/contenttypes/models.py:29 -msgid "content type" -msgstr "tipo de contenido" - -#: contrib/contenttypes/models.py:30 -msgid "content types" -msgstr "tipos de contenido" - -#: contrib/auth/views.py:39 -msgid "Logged out" -msgstr "Sesin cerrada" - -#: contrib/auth/models.py:38 contrib/auth/models.py:57 -msgid "name" -msgstr "nombre" - -#: contrib/auth/models.py:40 -msgid "codename" -msgstr "nombre en cdigo" - -#: contrib/auth/models.py:42 -msgid "permission" -msgstr "permiso" - -#: contrib/auth/models.py:43 contrib/auth/models.py:58 -msgid "permissions" -msgstr "permisos" - -#: contrib/auth/models.py:60 -msgid "group" -msgstr "grupo" - -#: contrib/auth/models.py:61 contrib/auth/models.py:100 -msgid "groups" -msgstr "grupos" - -#: contrib/auth/models.py:90 -msgid "username" -msgstr "nombre de usuario" - -#: contrib/auth/models.py:90 -msgid "" -"Required. 30 characters or fewer. Alphanumeric characters only (letters, " -"digits and underscores)." -msgstr "" -"Requerido. Longitud mxima 30 caracteres alfanumricos (letras, dgitos y " -"guiones bajos)." - -#: contrib/auth/models.py:91 -msgid "first name" -msgstr "nombre" - -#: contrib/auth/models.py:92 -msgid "last name" -msgstr "apellido" - -#: contrib/auth/models.py:93 -msgid "e-mail address" -msgstr "direccin de correo" - -#: contrib/auth/models.py:94 -msgid "password" -msgstr "contrasea" - -#: contrib/auth/models.py:94 -msgid "" -"Use '[algo]$[salt]$[hexdigest]' or use the change " -"password form." -msgstr "" -"Use '[algo]$[salt]$[hexdigest]' o use el formulario de " -"cambio de contrasea." - -#: contrib/auth/models.py:95 -msgid "staff status" -msgstr "es staff" - -#: contrib/auth/models.py:95 -msgid "Designates whether the user can log into this admin site." -msgstr "Indica si el usuario puede ingresar a este sitio de administracin." - -#: contrib/auth/models.py:96 -msgid "active" -msgstr "activo" - -#: contrib/auth/models.py:96 -msgid "" -"Designates whether this user can log into the Django admin. Unselect this " -"instead of deleting accounts." -msgstr "" -"Indica si el usuario puede ingresar al sitio de administracin Django." -"Desactive este campo en lugar de eliminar usuarios." - -#: contrib/auth/models.py:97 -msgid "superuser status" -msgstr "es superusuario" - -#: contrib/auth/models.py:97 -msgid "" -"Designates that this user has all permissions without explicitly assigning " -"them." -msgstr "" -"Indica que este usuario posee todos los permisos, sin asignarle los mismos " -"explcitamente." - -#: contrib/auth/models.py:98 -msgid "last login" -msgstr "ltimo registro" - -#: contrib/auth/models.py:99 -msgid "date joined" -msgstr "fecha de creacin" - -#: contrib/auth/models.py:101 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." -msgstr "" -"Adems de los permisos asignados manualmente, este usuario tambin poseer " -"todos los permisos de los grupos a los que pertenezca." - -#: contrib/auth/models.py:102 -msgid "user permissions" -msgstr "permisos de usuario" - -#: contrib/auth/models.py:105 -msgid "user" -msgstr "usuario" - -#: contrib/auth/models.py:106 -msgid "users" -msgstr "usuarios" - -#: contrib/auth/models.py:111 -msgid "Personal info" -msgstr "Informacin personal" - -#: contrib/auth/models.py:112 -msgid "Permissions" -msgstr "Permisos" - -#: contrib/auth/models.py:113 -msgid "Important dates" -msgstr "Fechas importantes" - -#: contrib/auth/models.py:114 -msgid "Groups" -msgstr "Grupos" - -#: contrib/auth/models.py:258 -msgid "message" -msgstr "mensaje" - -#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 -msgid "The two password fields didn't match." -msgstr "Los dos campos de contraseas no coinciden entre si." - -#: contrib/auth/forms.py:25 -msgid "A user with that username already exists." -msgstr "Ya existe un usuario con ese nombre." - -#: contrib/auth/forms.py:53 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -msgstr "" -"Su navegador Web aparenta no tener cookies activas. Las cookies son un " -"requerimiento para poder ingresar." - -#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 -msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." -msgstr "" -"Por favor introduzca un nombre de usuario y una contrasea correctos. Note " -"que ambos campos son sensibles a maysculas/minsculas." - -#: contrib/auth/forms.py:62 -msgid "This account is inactive." -msgstr "Esta cuenta est inactiva" - -#: contrib/auth/forms.py:85 -msgid "" -"That e-mail address doesn't have an associated user account. Are you sure " -"you've registered?" -msgstr "" -"Esa direccin de e-mail no est asociada a ninguna cuenta de usuario. Est " -"seguro de que ya se ha registrado?" - -#: contrib/auth/forms.py:117 -msgid "The two 'new password' fields didn't match." -msgstr "Los dos campos 'nueva contrasea' no coinciden entre si." - -#: contrib/auth/forms.py:124 -msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "" -"La antigua contrasea ingresada es incorrecta. Por favor ingrsela " -"nuevamente." - -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "redirigir desde" - -#: contrib/redirects/models.py:8 -msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" -"Esta ruta debera ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" -"events/search/'." - -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "redirigir a" - -#: contrib/redirects/models.py:10 -msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." -msgstr "" -"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que " -"empiece con 'http://'." - -#: contrib/redirects/models.py:13 -msgid "redirect" -msgstr "redireccin" - -#: contrib/redirects/models.py:14 -msgid "redirects" -msgstr "redirecciones" - -#: contrib/comments/models.py:67 contrib/comments/models.py:166 -msgid "object ID" -msgstr "ID de objeto" - -#: contrib/comments/models.py:68 -msgid "headline" -msgstr "encabezado" - -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "comentario" - -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "calificacin 1" - -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "calificacin 2" - -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "calificacin 3" - -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "calificacin 4" - -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "calificacin 5" - -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "calificacin 6" - -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "calificacin 7" - -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "calificacin 8" - -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "es calificacin vlida" - -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "fecha/hora de envo" - -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -msgid "is public" -msgstr "es pblico" - -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 -msgid "IP address" -msgstr "Direccin IP" - -#: contrib/comments/models.py:86 -msgid "is removed" -msgstr "est eliminado" - -#: 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 "" -"Marque esta caja si el comentario es inapropiado. En su lugar se mostrar " -"\"Este comentario ha sido eliminado\"." - -#: contrib/comments/models.py:91 -msgid "comments" -msgstr "comentarios" - -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "Objeto contenido" - -#: contrib/comments/models.py:159 +#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450 +#: newforms/fields.py:461 newforms/models.py:177 +#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274 +#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621 +#: oldforms/__init__.py:357 +msgid "This field is required." +msgstr "Este campo es obligatorio." + +#: newforms/fields.py:101 newforms/fields.py:254 #, python-format -msgid "" -"Posted by %(user)s at %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" -msgstr "" -"Enviado por %(user)s el %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" +msgid "Ensure this value has at most %d characters." +msgstr "Asegrese de que este valor tenga como mximo %d caracteres." -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "nombre de la persona" - -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "direccin ip" - -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "aprobado por el staff" - -#: contrib/comments/models.py:176 -msgid "free comment" -msgstr "comentario libre" - -#: contrib/comments/models.py:177 -msgid "free comments" -msgstr "comentarios libres" - -#: contrib/comments/models.py:233 -msgid "score" -msgstr "puntuacin" - -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "fecha de la puntuacin" - -#: contrib/comments/models.py:237 -msgid "karma score" -msgstr "punto karma" - -#: contrib/comments/models.py:238 -msgid "karma scores" -msgstr "puntos karma" - -#: contrib/comments/models.py:242 +#: newforms/fields.py:103 newforms/fields.py:256 #, python-format -msgid "%(score)d rating by %(user)s" -msgstr "puntuado %(score)d por %(user)s" +msgid "Ensure this value has at least %d characters." +msgstr "Asegrese de que este valor tenga al menos %d caracteres." -#: contrib/comments/models.py:258 +#: newforms/fields.py:126 core/validators.py:120 +msgid "Enter a whole number." +msgstr "Introduzca un nmero entero." + +#: newforms/fields.py:128 #, python-format -msgid "" -"This comment was flagged by %(user)s:\n" -"\n" -"%(text)s" -msgstr "" -"Este comentario fue marcado por %(user)s:\n" -"\n" -"%(text)s" +msgid "Ensure this value is less than or equal to %s." +msgstr "Asegrese de que este valor sea menor o igual a %s." -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "fecha de la marca" - -#: contrib/comments/models.py:268 -msgid "user flag" -msgstr "marca de usuario" - -#: contrib/comments/models.py:269 -msgid "user flags" -msgstr "marcas de usuario" - -#: contrib/comments/models.py:273 +#: newforms/fields.py:130 #, python-format -msgid "Flag by %r" -msgstr "Marca de %r" +msgid "Ensure this value is greater than or equal to %s." +msgstr "Asegrese de que este valor sea mayor o igual a %s." -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "fecha de eliminacin" +#: newforms/fields.py:163 +msgid "Enter a valid date." +msgstr "Ingrese una fecha vlida." -#: contrib/comments/models.py:280 -msgid "moderator deletion" -msgstr "Eliminacin por moderador" +#: newforms/fields.py:190 +msgid "Enter a valid time." +msgstr "Introduzca una hora vlida." -#: contrib/comments/models.py:281 -msgid "moderator deletions" -msgstr "eliminaciones por moderador" +#: newforms/fields.py:226 +msgid "Enter a valid date/time." +msgstr "Introduzca una fecha/hora vlida." -#: contrib/comments/models.py:285 +#: newforms/fields.py:240 +msgid "Enter a valid value." +msgstr "Introduzca un valor vlido." + +#: newforms/fields.py:269 core/validators.py:162 +msgid "Enter a valid e-mail address." +msgstr "Introduzca una direccin de correo electrnico vlida" + +#: newforms/fields.py:287 newforms/fields.py:309 +msgid "Enter a valid URL." +msgstr "Introduzca una URL vlida." + +#: newforms/fields.py:311 +msgid "This URL appears to be a broken link." +msgstr "La URL parece ser un enlace roto." + +#: newforms/fields.py:360 newforms/models.py:164 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Seleccione una opcin vlida. Esa opcin no es una de las opciones " +"disponibles." + +#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181 +msgid "Enter a list of values." +msgstr "Introduzca una lista de valores." + +#: newforms/fields.py:387 newforms/models.py:187 #, python-format -msgid "Moderator deletion by %r" -msgstr "Eliminacin del moderador %r" - -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Los usuarios annimos no pueden votar" - -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "ID de comentario no vlido" - -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "No puedes votarte t mismo" - -#: contrib/comments/views/comments.py:27 -msgid "" -"This rating is required because you've entered at least one other rating." -msgstr "Se precisa esta puntuacin porque ha introducido al menos otra ms." - -#: contrib/comments/views/comments.py:111 -#, python-format -msgid "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comment:\n" -"\n" -"%(text)s" -msgid_plural "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comments:\n" -"\n" -"%(text)s" -msgstr[0] "" -"Este comentario lo envi un usuario que ha enviado menos de %(count)s " -"comentario:\n" -"\n" -"%(text)s" -msgstr[1] "" -"Este comentario lo envi un usuario que ha enviado menos de %(count)s " -"comentarios:\n" -"\n" -"%(text)s" - -#: contrib/comments/views/comments.py:116 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" +msgid "Select a valid choice. %s is not one of the available choices." msgstr "" -"Este comentario ha sido enviado por un usuario 'semi-annimo':\n" -"\n" -"%(text)s" +"Seleccione una opcin vlida. %s no es una de las opciones disponibles." -#: contrib/comments/views/comments.py:188 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Slo se admiten POSTs" - -#: contrib/comments/views/comments.py:192 -#: contrib/comments/views/comments.py:284 -msgid "One or more of the required fields wasn't submitted" -msgstr "No se proporcion uno o ms de los siguientes campos requeridos" - -#: contrib/comments/views/comments.py:196 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" -msgstr "" -"Alguien est jugando con el formulario de comentarios (violacin de " -"seguridad)" - -#: contrib/comments/views/comments.py:206 -#: contrib/comments/views/comments.py:292 -msgid "" -"The comment form had an invalid 'target' parameter -- the object ID was " -"invalid" -msgstr "" -"El formulario de comentarios tiene un parmetro 'target' no vlido (el ID de " -"objeto era invlido)" - -#: contrib/comments/views/comments.py:257 -#: contrib/comments/views/comments.py:321 -msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "El formulario de comentario no proporcion 'previsualizar' ni 'enviar'" - -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Su nombre:" - -#: contrib/comments/templates/comments/freeform.html:5 -#: contrib/comments/templates/comments/form.html:28 -msgid "Comment:" -msgstr "Comentario:" - -#: contrib/comments/templates/comments/freeform.html:10 -#: contrib/comments/templates/comments/form.html:35 -msgid "Preview comment" -msgstr "Previsualizar comentario" - -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" -msgstr "Usuario:" - -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/auth/user/change_password.html:9 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Log out" -msgstr "Cerrar sesin" - -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Contrasea:" - -#: contrib/comments/templates/comments/form.html:8 -msgid "Forgotten your password?" -msgstr "Olvid su contrasea?" - -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "Calificaciones" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "Requerido" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "Opcional" - -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "Enviar una foto" - -#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315 -msgid "URL" -msgstr "URL" - -#: contrib/flatpages/models.py:8 -msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" -"Ejemplo: '/about/contact/'. Asegrese de que pone barras al principio y al " -"final." - -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "ttulo" - -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "contenido" - -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "activar comentarios" - -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "nombre de plantilla" - -#: contrib/flatpages/models.py:13 -msgid "" -"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " -"will use 'flatpages/default.html'." -msgstr "" -"Ejemplo: 'flatpages/contact_page.html'. Si no lo proporciona, el sistema " -"usar 'flatpages/default.html'." - -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "debe estar registrado" - -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "Si est marcado, slo los usuarios registrados podrn ver la pgina." - -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "pgina esttica" - -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "pginas estticas" - -#: contrib/sessions/models.py:51 -msgid "session key" -msgstr "clave de sesin" - -#: contrib/sessions/models.py:52 -msgid "session data" -msgstr "datos de sesin" - -#: contrib/sessions/models.py:53 -msgid "expire date" -msgstr "fecha de caducidad" - -#: contrib/sessions/models.py:57 -msgid "session" -msgstr "sesin" - -#: contrib/sessions/models.py:58 -msgid "sessions" -msgstr "sesiones" - -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "nombre de dominio" - -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "nombre para visualizar" - -#: contrib/sites/models.py:15 -msgid "site" -msgstr "sitio" - -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "sitios" - -#: contrib/admin/filterspecs.py:40 -#, python-format -msgid "" -"

By %s:

\n" -"
    \n" -msgstr "" -"

    Por %s:

    \n" -"
      \n" - -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 -msgid "All" -msgstr "Todos/as" - -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Cualquier fecha" - -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "Hoy" - -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "ltimos 7 das" - -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Este mes" - -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Este ao" - -#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170 -#: oldforms/__init__.py:572 -msgid "Yes" -msgstr "S" - -#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170 -#: oldforms/__init__.py:572 -msgid "No" -msgstr "No" - -#: contrib/admin/filterspecs.py:150 newforms/widgets.py:170 -#: oldforms/__init__.py:572 +#: newforms/widgets.py:170 contrib/admin/filterspecs.py:150 +#: oldforms/__init__.py:577 msgid "Unknown" msgstr "Desconocido" -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "hora de accin" +#: newforms/widgets.py:170 contrib/admin/filterspecs.py:143 +#: oldforms/__init__.py:577 +msgid "Yes" +msgstr "S" -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "id de objeto" +#: newforms/widgets.py:170 contrib/admin/filterspecs.py:143 +#: oldforms/__init__.py:577 +msgid "No" +msgstr "No" -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "repr de objeto" - -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "marca de accin" - -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "mensaje de cambio" - -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "entrada de registro" - -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "entradas de registro" - -#: contrib/admin/templatetags/admin_list.py:238 -msgid "All dates" -msgstr "Todas las fechas" - -#: contrib/admin/views/decorators.py:24 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Identificarse" - -#: contrib/admin/views/decorators.py:62 -msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." +#: utils/dateformat.py:40 +msgid "p.m." msgstr "" -"Por favor, identifquese de nuevo porque su sesin ha caducado. No se " -"preocupe: se ha guardado su envo." -#: 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." +#: utils/dateformat.py:41 +msgid "a.m." msgstr "" -"Parece que su navegador no est configurado para aceptar cookies. Actvelas " -"por favor, recargue esta pgina, e intntelo de nuevo." -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "Los nombres de usuario no pueden contener el carcter '@'." - -#: contrib/admin/views/decorators.py:85 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." +#: utils/dateformat.py:46 +msgid "PM" msgstr "" -"Su direccin de correo no es su nombre de usuario. Pruebe con '%s' en su " -"lugar." -#: contrib/admin/views/main.py:223 -msgid "Site administration" -msgstr "Sitio administrativo" - -#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "Se agreg con xito %(name)s \"%(obj)s\"." - -#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347 -#: contrib/admin/views/auth.py:24 -msgid "You may edit it again below." -msgstr "Puede modificarlo nuevamente abajo." - -#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 -#, python-format -msgid "You may add another %s below." -msgstr "Puede agregar otro %s abajo." - -#: contrib/admin/views/main.py:289 -#, python-format -msgid "Add %s" -msgstr "Agregar %s" - -#: contrib/admin/views/main.py:335 -#, python-format -msgid "Added %s." -msgstr "Agregado %s." - -#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 -#: contrib/admin/views/main.py:339 db/models/manipulators.py:306 -msgid "and" -msgstr "y" - -#: contrib/admin/views/main.py:337 -#, python-format -msgid "Changed %s." -msgstr "Modifica %s." - -#: contrib/admin/views/main.py:339 -#, python-format -msgid "Deleted %s." -msgstr "Elimina %s." - -#: contrib/admin/views/main.py:342 -msgid "No fields changed." -msgstr "No ha modificado ningn campo." - -#: contrib/admin/views/main.py:345 -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "Se modific con xito %(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." +#: utils/dateformat.py:47 +msgid "AM" msgstr "" -"Se agreg con xito %(name)s \"%(obj)s. Puede modificarlo nuevamente abajo." -#: contrib/admin/views/main.py:391 -#, python-format -msgid "Change %s" -msgstr "Modificar %s" - -#: contrib/admin/views/main.py:473 -#, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Uno o ms %(fieldname)s en %(name)s: %(obj)s" - -#: contrib/admin/views/main.py:478 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Uno o ms %(fieldname)s en %(name)s:" - -#: contrib/admin/views/main.py:511 -#, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "Se elimin con xito %(name)s \"%(obj)s\"." - -#: contrib/admin/views/main.py:514 -msgid "Are you sure?" -msgstr "Est seguro?" - -#: contrib/admin/views/main.py:536 -#, python-format -msgid "Change history: %s" -msgstr "Historia de modificaciones: %s" - -#: contrib/admin/views/main.py:570 -#, python-format -msgid "Select %s" -msgstr "Seleccione %s" - -#: contrib/admin/views/main.py:570 -#, python-format -msgid "Select %s to change" -msgstr "Seleccione %s a modificar" - -#: contrib/admin/views/main.py:758 -msgid "Database error" -msgstr "Error de base de datos" - -#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 -#: contrib/admin/views/doc.py:50 -msgid "tag:" -msgstr "etiqueta:" - -#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 -#: contrib/admin/views/doc.py:81 -msgid "filter:" -msgstr "Filtrar:" - -#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 -#: contrib/admin/views/doc.py:139 -msgid "view:" -msgstr "ver:" - -#: contrib/admin/views/doc.py:164 -#, python-format -msgid "App %r not found" -msgstr "App %r no encontrada" - -#: contrib/admin/views/doc.py:171 -#, python-format -msgid "Model %r not found in app %r" -msgstr "Modelo %r no encontrado en app %r" - -#: contrib/admin/views/doc.py:183 -#, python-format -msgid "the related `%s.%s` object" -msgstr "El objeto relacionado `%s.%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 -msgid "model:" -msgstr "modelo:" - -#: contrib/admin/views/doc.py:214 -#, python-format -msgid "related `%s.%s` objects" -msgstr "objetos relacionados `%s.%s`" - -#: contrib/admin/views/doc.py:219 -#, python-format -msgid "all %s" -msgstr "todos %s" - -#: contrib/admin/views/doc.py:224 -#, python-format -msgid "number of %s" -msgstr "nmero de %s" - -#: contrib/admin/views/doc.py:229 -#, python-format -msgid "Fields on %s objects" -msgstr "Campos en %s objetos" - -#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 -msgid "Integer" -msgstr "Entero" - -#: contrib/admin/views/doc.py:292 -msgid "Boolean (Either True or False)" -msgstr "Booleano (Verdadero o Falso)" - -#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 -#, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Cadena (mximo %(maxlength)s)" - -#: contrib/admin/views/doc.py:294 -msgid "Comma-separated integers" -msgstr "Enteros separados por comas" - -#: contrib/admin/views/doc.py:295 -msgid "Date (without time)" -msgstr "Fecha (sin hora)" - -#: contrib/admin/views/doc.py:296 -msgid "Date (with time)" -msgstr "Fecha (con hora)" - -#: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "Direccin de correo electrnico" - -#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "Ruta de archivo" - -#: contrib/admin/views/doc.py:300 -msgid "Decimal number" -msgstr "Nmero decimal" - -#: contrib/admin/views/doc.py:306 -msgid "Boolean (Either True, False or None)" -msgstr "Booleano (Verdadero, Falso o Nulo)" - -#: contrib/admin/views/doc.py:307 -msgid "Relation to parent model" -msgstr "Relacin con el modelo padre" - -#: contrib/admin/views/doc.py:308 -msgid "Phone number" -msgstr "Nmero de telfono" - -#: contrib/admin/views/doc.py:313 -msgid "Text" -msgstr "Texto" - -#: contrib/admin/views/doc.py:314 -msgid "Time" -msgstr "Hora" - -#: contrib/admin/views/doc.py:316 -msgid "U.S. state (two uppercase letters)" -msgstr "Estado de los EEUU (dos letras maysculas)" - -#: contrib/admin/views/doc.py:317 -msgid "XML text" -msgstr "Texto XML" - -#: contrib/admin/views/doc.py:343 -#, python-format -msgid "%s does not appear to be a urlpattern object" -msgstr "%s no parece ser un objeto urlpattern" - -#: contrib/admin/views/auth.py:30 -msgid "Add user" -msgstr "Agregar usuario" - -#: contrib/admin/views/auth.py:57 -msgid "Password changed successfully." -msgstr "Cambio de contrasea exitoso" - -#: contrib/admin/views/auth.py:64 -#, python-format -msgid "Change password: %s" -msgstr "Cambiar contrasea: %S" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Actualmente" - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "Modificar:" - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Fecha:" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Hora:" - -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/auth/user/change_password.html:9 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Documentation" -msgstr "Documentacin" - -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/auth/user/change_password.html:9 -#: contrib/admin/templates/admin/auth/user/change_password.html:15 -#: contrib/admin/templates/admin/auth/user/change_password.html:46 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Change password" -msgstr "Cambiar contrasea" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/500.html:4 -#: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/admin/base.html:30 -#: contrib/admin/templates/admin/delete_confirmation.html:6 -#: contrib/admin/templates/admin/invalid_setup.html:4 -#: contrib/admin/templates/admin/auth/user/change_password.html:12 -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/logged_out.html:4 -#: contrib/admin/templates/registration/password_reset_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Home" -msgstr "Inicio" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:21 -msgid "History" -msgstr "Historia" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Fecha/hora" - -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Usuario" - -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Accin" - -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j M Y P" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Este objeto no tiene historia de modificaciones. Probablemente no fue " -"aadido usando este sitio de administracin." - -#: contrib/admin/templates/admin/change_list.html:12 -#, python-format -msgid "Add %(name)s" -msgstr "Agregar %(name)s" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr " Por %(filter_title)s " - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Error del servidor" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Error del servidor (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Error de servidor (500)" - -#: contrib/admin/templates/admin/500.html:10 -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 "" -"Ha ocurrido un error. Se ha informado a los administradores del sitio " -"mediante correo electrnico y debera arreglarse en breve. Gracias por su " -"paciencia" - -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Buscar" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "1 result" -msgid_plural "%(counter)s results" -msgstr[0] "un resultado" -msgstr[1] "%(counter)s resultados" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "%(full_result_count)s total" -msgstr "total: %(full_result_count)s" - -#: contrib/admin/templates/admin/pagination.html:10 -msgid "Show all" -msgstr "Mostrar todos/as" - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Sitio de administracin de Django" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administracin de Django" - -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "Modelos disponibles en la aplicacin %(name)s." - -#: contrib/admin/templates/admin/index.html:18 -#, python-format -msgid "%(name)s" -msgstr "%(name)s" - -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Agregar" - -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Modificar" - -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "No tiene permiso para editar nada." - -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Acciones recientes" - -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "Mis acciones" - -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Ninguna disponible" - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Pgina no encontrada" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." - -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "Filtrar" - -#: contrib/admin/templates/admin/change_form.html:22 -msgid "View on site" -msgstr "Ver en el sitio" - -#: contrib/admin/templates/admin/change_form.html:32 -#: contrib/admin/templates/admin/auth/user/change_password.html:24 -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "Por favor, corrija el siguiente error." -msgstr[1] "Por favor, corrija los siguientes errores." - -#: contrib/admin/templates/admin/change_form.html:50 -msgid "Ordering" -msgstr "Ordenacin" - -#: contrib/admin/templates/admin/change_form.html:53 -msgid "Order:" -msgstr "Orden:" - -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "Bienvenido," - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Eliminar" - -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, python-format -msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " -"related objects, but your account doesn't have permission to delete the " -"following types of objects:" -msgstr "" -"Eliminar el %(object_name)s '%(escaped_object)s' provocara la eliminacin " -"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los " -"siguientes tipos de objetos:" - -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, python-format -msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " -"All of the following related items will be deleted:" -msgstr "" -"Est seguro de que quiere eliminar los %(object_name)s \"%(escaped_object)s" -"\"? Se eliminarn los siguientes objetos relacionados:" - -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "S, estoy seguro" - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Grabar como nuevo" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Grabar y aadir otro" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Grabar y continuar editando" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Grabar" - -#: contrib/admin/templates/admin/invalid_setup.html:8 -msgid "" -"Something's wrong with your database installation. Make sure the appropriate " -"database tables have been created, and make sure the database is readable by " -"the appropriate user." -msgstr "" -"hay algn problema con su instalacin de base de datos. Asegrese de que las " -"tablas de la misma hayan sido creadas, y asegrese de que el usuario " -"apropiado tenga permisos de escritura en la base de datos." - -#: contrib/admin/templates/admin/auth/user/change_password.html:28 -#, python-format -msgid "Enter a new password for the user %(username)s." -msgstr "" -"Introduzca una nueva contrasena para el usuario %(username)s." - -#: contrib/admin/templates/admin/auth/user/change_password.html:34 -#: contrib/admin/templates/admin/auth/user/add_form.html:18 -msgid "Password" -msgstr "Contrasea:" - -#: contrib/admin/templates/admin/auth/user/change_password.html:39 -#: contrib/admin/templates/admin/auth/user/add_form.html:23 -msgid "Password (again)" -msgstr "Contrasea (de nuevo)" - -#: contrib/admin/templates/admin/auth/user/change_password.html:40 -#: contrib/admin/templates/admin/auth/user/add_form.html:24 -msgid "Enter the same password as above, for verification." -msgstr "Para verificacin, introduzca la misma contrasea que ingres arriba." - -#: contrib/admin/templates/admin/auth/user/add_form.html:6 -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 contrasea. Luego podr " -"configurar opciones adicionales." - -#: contrib/admin/templates/admin/auth/user/add_form.html:12 -msgid "Username" -msgstr "Nombre de usuario:" - -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/registration/password_change_form.html:6 -#: contrib/admin/templates/registration/password_change_form.html:10 -msgid "Password change" -msgstr "Cambio de contrasea" - -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "Cambio de contrasea exitoso" - -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "Su contrasea ha sido cambiada." - -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:6 -#: contrib/admin/templates/registration/password_reset_form.html:10 -#: contrib/admin/templates/registration/password_reset_done.html:4 -msgid "Password reset" -msgstr "Recuperar contrasea" - -#: contrib/admin/templates/registration/password_reset_form.html:12 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." -msgstr "" -"Ha olvidado su contrasea? Introduzca su direccin de correo electrnico, y " -"crearemos una nueva que le enviaremos por correo." - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "Direccin de correo electrnico:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Recuperar mi cntrasea" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Identificarse de nuevo" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "Recuperacin de contrasea exitosa" - -#: contrib/admin/templates/registration/password_reset_done.html:12 -msgid "" -"We've e-mailed a new password to the e-mail address you submitted. You " -"should be receiving it shortly." -msgstr "" -"Le hemos enviado una nueva contrasea a la direccin que ha suministrado. " -"Debera recibirla en breve." - -#: contrib/admin/templates/registration/password_change_form.html:12 -msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" -"Por favor, introduzca su contrasea antigua, por seguridad, y despus " -"introduzca la nueva contrasea dos veces para verificar que la ha escrito " -"correctamente." - -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Contrasea antigua:" - -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Contrasea nueva:" - -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Confirme contrasea:" - -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Cambiar mi contrasea" - -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "" -"Est recibiendo este mensaje debido a que solicit recuperar la contrasea" - -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "de su cuenta de usuario en %(site_name)s." - -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "Su nueva contrasea es: %(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 "Puede cambiarla accediendo a esta pgina:" - -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "Su nombre de usuario, en caso de haberlo olvidado:" - -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "Gracias por usar nuestro sitio!" - -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "El equipo de %(site_name)s" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Bookmarklets" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Bookmarklets de documentacin" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

      To install bookmarklets, drag the link to your bookmarks\n" -"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" -"select the bookmarklet from any page in the site. Note that some of these\n" -"bookmarklets require you to be viewing the site from a computer designated\n" -"as \"internal\" (talk to your system administrator if you aren't sure if\n" -"your computer is \"internal\").

      \n" -msgstr "" -"\n" -"

      Para instalar bookmarklets, arrastre el enlace a su barra\n" -"de favoritos, o pulse con el botn derecho el enlace y adalo a sus " -"favoritos.\n" -"Ahora puede sleccionar el bookmarklet desde cualquier pgina en el sitio.\n" -"Observer que algunos de estos bookmarklets precisan que est viendo\n" -"el sitio desde un equipo sealado como \"interno\" (hable\n" -"con su administrador de sistemas si no est seguro de si el suyo lo es).\n" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Documentacin de esta pgina" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 -msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." -msgstr "" -"Le lleva desde cualquier pgina a la documentacin de la vista que la genera." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Mostrar ID de objeto" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "" -"Muestra el tipo de contenido e ID unvoco de las pginas que representan un " -"nico objeto." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Editar este objeto (ventana actual)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" -"Le lleva a la pgina de administracin de pginas que representan un nico " -"objeto." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Editar este objeto (nueva ventana)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "" -"Como antes, pero abre la pgina de administracin en una nueva ventana." - -#: contrib/localflavor/uk/forms.py:18 -msgid "Enter a postcode. A space is required between the two postcode parts." -msgstr "" -"Introduzca un postcode. Se requiere un espacio entre ambas partes del " -"postcode." - -#: contrib/localflavor/usa/forms.py:17 -msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." -msgstr "Introduzca un zip code en el formato XXXXX o XXXXX-XXXX." +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "medianoche" + +#: utils/dateformat.py:97 +msgid "noon" +msgstr "medioda" + +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "ao" +msgstr[1] "aos" + +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "mes" +msgstr[1] "meses" + +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "semana" +msgstr[1] "semanas" + +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "da" +msgstr[1] "das" + +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "hora" +msgstr[1] "horas" + +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuto" +msgstr[1] "minutos" #: utils/dates.py:6 msgid "Monday" @@ -1692,42 +319,6 @@ msgstr "Nov." msgid "Dec." msgstr "Dic." -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "ao" -msgstr[1] "aos" - -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "mes" -msgstr[1] "meses" - -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "semana" -msgstr[1] "semanas" - -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "da" -msgstr[1] "das" - -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "hora" -msgstr[1] "horas" - -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuto" -msgstr[1] "minutos" - #: utils/translation/trans_real.py:362 msgid "DATE_FORMAT" msgstr "j N Y" @@ -1748,6 +339,1706 @@ msgstr "F Y" msgid "MONTH_DAY_FORMAT" msgstr "j \\de F" +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "redirigir desde" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debera ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" +"events/search/'." + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "redirigir a" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que " +"empiece con 'http://'." + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "redireccin" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "redirecciones" + +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "nombre" + +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "nombre en cdigo" + +#: contrib/auth/models.py:42 +msgid "permission" +msgstr "permiso" + +#: contrib/auth/models.py:43 contrib/auth/models.py:58 +msgid "permissions" +msgstr "permisos" + +#: contrib/auth/models.py:60 +msgid "group" +msgstr "grupo" + +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +msgid "groups" +msgstr "grupos" + +#: contrib/auth/models.py:90 +msgid "username" +msgstr "nombre de usuario" + +#: contrib/auth/models.py:90 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" +"Requerido. Longitud mxima 30 caracteres alfanumricos (letras, dgitos y " +"guiones bajos)." + +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "nombre" + +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "apellido" + +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "direccin de correo" + +#: contrib/auth/models.py:94 +msgid "password" +msgstr "contrasea" + +#: contrib/auth/models.py:94 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Use '[algo]$[salt]$[hexdigest]' o use el formulario de " +"cambio de contrasea." + +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "es staff" + +#: contrib/auth/models.py:95 +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede ingresar a este sitio de administracin." + +#: contrib/auth/models.py:96 +msgid "active" +msgstr "activo" + +#: contrib/auth/models.py:96 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario puede ingresar al sitio de administracin Django." +"Desactive este campo en lugar de eliminar usuarios." + +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "es superusuario" + +#: contrib/auth/models.py:97 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario posee todos los permisos, sin asignarle los mismos " +"explcitamente." + +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "ltimo ingreso" + +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "fecha de creacin" + +#: contrib/auth/models.py:101 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Adems de los permisos asignados manualmente, este usuario tambin poseer " +"todos los permisos de los grupos a los que pertenezca." + +#: contrib/auth/models.py:102 +msgid "user permissions" +msgstr "permisos de usuario" + +#: contrib/auth/models.py:105 +msgid "user" +msgstr "usuario" + +#: contrib/auth/models.py:106 +msgid "users" +msgstr "usuarios" + +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "Informacin personal" + +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "Permisos" + +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "Fechas importantes" + +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "Grupos" + +#: contrib/auth/models.py:258 +msgid "message" +msgstr "mensaje" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Los dos campos de contraseas no coinciden entre si." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con ese nombre." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Su navegador Web aparenta no tener cookies activas. Las cookies son un " +"requerimiento para poder ingresar." + +#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Por favor introduzca un nombre de usuario y una contrasea correctos. Note " +"que ambos campos son sensibles a maysculas/minsculas." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Esta cuenta est inactiva" + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" +"Esa direccin de e-mail no est asociada a ninguna cuenta de usuario. Est " +"seguro de que ya se ha registrado?" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Los dos campos 'nueva contrasea' no coinciden entre si." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La antigua contrasea ingresada es incorrecta. Por favor ingrsela " +"nuevamente." + +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "Sesin cerrada" + +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

      By %s:

      \n" +"
        \n" +msgstr "" +"

        Por %s:

        \n" +"
          \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Todos/as" + +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Cualquier fecha" + +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Hoy" + +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "ltimos 7 das" + +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Este mes" + +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Este ao" + +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "hora de accin" + +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "id de objeto" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "repr de objeto" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "marca de accin" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "mensaje de cambio" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "entrada de registro" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "entradas de registro" + +#: contrib/admin/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Identificarse" + +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Por favor, identifquese de nuevo porque su sesin ha caducado. No se " +"preocupe: se ha guardado su envo." + +#: 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 "" +"Parece que su navegador no est configurado para aceptar cookies. Actvelas " +"por favor, recargue esta pgina, e intntelo de nuevo." + +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Los nombres de usuario no pueden contener el carcter '@'." + +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Su direccin de correo no es su nombre de usuario. Intente nuevamente " +"usando '%s'." + +#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "Se agreg con xito %(name)s \"%(obj)s\"." + +#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 +#: contrib/admin/views/main.py:347 +msgid "You may edit it again below." +msgstr "Puede modificarlo nuevamente abajo." + +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "Agregar usuario" + +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "Cambio de contrasea exitoso" + +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contrasea: %S" + +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "etiqueta:" + +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "filtrar:" + +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "ver:" + +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Aplicacin %r no encontrada" + +#: contrib/admin/views/doc.py:171 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "Modelo %(name)r no encontrado en aplicacin %(label)r" + +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "el objeto relacionado `%(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 +msgid "model:" +msgstr "modelo:" + +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "objetos relacionados `%(label)s.%(name)s`" + +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "todos %s" + +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "nmero de %s" + +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Campos en %s objetos" + +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 +#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 +#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 +msgid "Integer" +msgstr "Entero" + +#: contrib/admin/views/doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" + +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "Cadena (mximo %(maxlength)s)" + +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" + +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#: contrib/admin/views/doc.py:297 +msgid "E-mail address" +msgstr "Direccin de correo electrnico" + +#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 +#: contrib/admin/views/doc.py:302 +msgid "File path" +msgstr "Ruta de archivo" + +#: contrib/admin/views/doc.py:300 +msgid "Decimal number" +msgstr "Nmero decimal" + +#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85 +msgid "IP address" +msgstr "Direccin IP" + +#: contrib/admin/views/doc.py:306 +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +#: contrib/admin/views/doc.py:307 +msgid "Relation to parent model" +msgstr "Relacin con el modelo padre" + +#: contrib/admin/views/doc.py:308 +msgid "Phone number" +msgstr "Nmero de telfono" + +#: contrib/admin/views/doc.py:313 +msgid "Text" +msgstr "Texto" + +#: contrib/admin/views/doc.py:314 +msgid "Time" +msgstr "Hora" + +#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" + +#: contrib/admin/views/doc.py:316 +msgid "U.S. state (two uppercase letters)" +msgstr "Estado de los EE.UU. (dos letras maysculas)" + +#: contrib/admin/views/doc.py:317 +msgid "XML text" +msgstr "Texto XML" + +#: contrib/admin/views/doc.py:343 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" + +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Sitio administrativo" + +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 +#, python-format +msgid "You may add another %s below." +msgstr "Puede agregar otro %s abajo." + +#: contrib/admin/views/main.py:289 +#, python-format +msgid "Add %s" +msgstr "Agregar %s" + +#: contrib/admin/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "Agregado %s." + +#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 +msgid "and" +msgstr "y" + +#: contrib/admin/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "Modifica %s." + +#: contrib/admin/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "Elimina %s." + +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "No ha modificado ningn campo." + +#: contrib/admin/views/main.py:345 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "Se modific con xito %(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 "" +"Se agreg con xito %(name)s \"%(obj)s. Puede modificarlo nuevamente abajo." + +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#: contrib/admin/views/main.py:476 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Uno o ms %(fieldname)s en %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:481 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Uno o ms %(fieldname)s en %(name)s:" + +#: contrib/admin/views/main.py:514 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se elimin con xito %(name)s \"%(obj)s\"." + +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "Est seguro?" + +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "Historia de modificaciones: %s" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "Seleccione %s" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s a modificar" + +#: contrib/admin/views/main.py:768 +msgid "Database error" +msgstr "Error de base de datos" + +#: contrib/admin/templatetags/admin_list.py:247 +msgid "All dates" +msgstr "Todas las fechas" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Fecha:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Hora:" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Actualmente" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Modificar:" + +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "Modelos disponibles en la aplicacin %(name)s." + +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" + +#: contrib/admin/templates/admin/index.html:28 +#: contrib/admin/templates/admin/change_form.html:15 +msgid "Add" +msgstr "Agregar" + +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Modificar" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Acciones recientes" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Mis acciones" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Ninguna disponible" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtrar" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Buscar" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "un resultado" +msgstr[1] "%(counter)s resultados" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "total: %(full_result_count)s" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Mostrar todos/as" + +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Documentacin" + +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:15 +#: contrib/admin/templates/admin/auth/user/change_password.html:46 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +msgid "Change password" +msgstr "Cambiar contrasea" + +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/comments/templates/comments/form.html:6 +msgid "Log out" +msgstr "Cerrar sesin" + +#: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/invalid_setup.html:4 +#: contrib/admin/templates/admin/auth/user/change_password.html:12 +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Home" +msgstr "Inicio" + +#: contrib/admin/templates/admin/change_form.html:21 +#: contrib/admin/templates/admin/object_history.html:5 +msgid "History" +msgstr "Historia" + +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Ver en el sitio" + +#: contrib/admin/templates/admin/change_form.html:32 +#: contrib/admin/templates/admin/auth/user/change_password.html:24 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Por favor, corrija el siguiente error." +msgstr[1] "Por favor, corrija los siguientes errores." + +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Ordenacin" + +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Orden:" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Pgina no encontrada" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Sitio de administracin de Django" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administracin de Django" + +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" + +#: contrib/admin/templates/admin/login.html:17 +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +msgid "Username:" +msgstr "Usuario:" + +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "Contrasea:" + +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Bienvenido," + +#: contrib/admin/templates/admin/submit_line.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:9 +msgid "Delete" +msgstr "Eliminar" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Grabar como nuevo" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Grabar y aadir otro" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Grabar y continuar editando" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Grabar" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Fecha/hora" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Usuario" + +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Accin" + +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j M Y P" + +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene historia de modificaciones. Probablemente no fu " +"aadido usando este sitio de administracin." + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Error del servidor" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +#: contrib/admin/templates/admin/500.html:10 +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 "" +"Ha ocurrido un error. Se ha informado a los administradores del sitio " +"mediante correo electrnico y debera ser solucionado en breve. Gracias " +"por su paciencia." + +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocara la eliminacin " +"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los " +"siguientes tipos de objetos:" + +#: contrib/admin/templates/admin/delete_confirmation.html:21 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Est seguro de que quiere eliminar los %(object_name)s \"%(escaped_object)s" +"\"? Se eliminarn los siguientes objetos relacionados:" + +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "S, estoy seguro" + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Hay algn problema con su instalacin de base de datos. Asegrese de que las " +"tablas de la misma hayan sido creadas, y asegrese de que el usuario " +"apropiado tenga permisos de lectura en la base de datos." + +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduzca una nueva contrasea para el usuario %(username)s" +"." + +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +msgid "Password" +msgstr "Contrasea:" + +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +msgid "Password (again)" +msgstr "Contrasea (de nuevo)" + +#: contrib/admin/templates/admin/auth/user/change_password.html:40 +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +msgid "Enter the same password as above, for verification." +msgstr "Para verificacin, introduzca la misma contrasea que ingres arriba." + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +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 contrasea. Luego podr " +"configurar opciones adicionales." + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Nombre de usuario:" + +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_form.html:6 +#: contrib/admin/templates/registration/password_change_form.html:10 +msgid "Password change" +msgstr "Cambio de contrasea" + +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "Cambio de contrasea exitoso" + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "Su contrasea ha sido cambiada." + +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:10 +#: contrib/admin/templates/registration/password_reset_done.html:4 +msgid "Password reset" +msgstr "Recuperar contrasea" + +#: contrib/admin/templates/registration/password_reset_form.html:12 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll reset " +"your password and e-mail the new one to you." +msgstr "" +"Ha olvidado su contrasea? Introduzca su direccin de correo electrnico, y " +"crearemos una nueva que le enviaremos por correo." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Direccin de correo electrnico:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Recuperar mi contrasea" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Recuperacin de contrasea exitosa" + +#: contrib/admin/templates/registration/password_reset_done.html:12 +msgid "" +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." +msgstr "" +"Le hemos enviado una nueva contrasea a la direccin que ha suministrado. " +"Debera recibirla en breve." + +#: contrib/admin/templates/registration/password_change_form.html:12 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, por razones de seguridad, introduzca su contrasea antigua, y " +"luego introduzca la nueva contrasea dos veces para verificar que la ha " +"escrito correctamente." + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Contrasea antigua:" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Contrasea nueva:" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Confirme contrasea:" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Cambiar mi contrasea" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "" +"Est recibiendo este mensaje debido a que solicit recuperar la contrasea" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "de su cuenta de usuario en %(site_name)s." + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Su nueva contrasea es: %(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 "Puede cambiarla accediendo a esta pgina:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "Gracias por usar nuestro sitio!" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Identificarse de nuevo" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentacin" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

          To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

          \n" +msgstr "" +"\n" +"

          Para instalar bookmarklets, arrastre el enlace a su barra\n" +"de favoritos, o pulse con el botn derecho el enlace y adalo a sus " +"favoritos.\n" +"Ahora puede seleccionar el bookmarklet desde cualquier pgina en el sitio.\n" +"Tenga en cuenta que algunos de estos bookmarklets precisan que est viendo\n" +"el sitio desde un equipo sealado como \"interno\" (hable\n" +"con su administrador de sistemas si no est seguro de si el suyo lo es).\n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Documentacin de esta pgina" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Le lleva desde cualquier pgina a la documentacin de la vista que la genera." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Mostrar ID de objeto" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Muestra el tipo de contenido e ID unvoco de las pginas que representan un " +"nico objeto." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Editar este objeto (ventana actual)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" +"Le lleva a la pgina de administracin de pginas que representan un nico " +"objeto." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Editar este objeto (nueva ventana)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" +"Como antes, pero abre la pgina de administracin en una nueva ventana." + +#: contrib/sites/models.py:10 +msgid "domain name" +msgstr "nombre de dominio" + +#: contrib/sites/models.py:11 +msgid "display name" +msgstr "nombre para visualizar" + +#: contrib/sites/models.py:15 +msgid "site" +msgstr "sitio" + +#: contrib/sites/models.py:16 +msgid "sites" +msgstr "sitios" + +#: contrib/sessions/models.py:68 +msgid "session key" +msgstr "clave de sesin" + +#: contrib/sessions/models.py:69 +msgid "session data" +msgstr "datos de sesin" + +#: contrib/sessions/models.py:70 +msgid "expire date" +msgstr "fecha de caducidad" + +#: contrib/sessions/models.py:74 +msgid "session" +msgstr "sesin" + +#: contrib/sessions/models.py:75 +msgid "sessions" +msgstr "sesiones" + +#: contrib/contenttypes/models.py:36 +msgid "python model class name" +msgstr "nombre de la clase python del modelo" + +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "tipo de contenido" + +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "tipos de contenido" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Ejemplo: '/about/contact/'. Asegrese de que pone barras al principio y al " +"final." + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "ttulo" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "contenido" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "activar comentarios" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "nombre de plantilla" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Ejemplo: 'flatpages/contact_page.html'. Si no lo proporciona, el sistema " +"usar 'flatpages/default.html'." + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "debe estar registrado" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si est marcado, slo los usuarios registrados podrn ver la pgina." + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "pgina esttica" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "pginas estticas" + +#: contrib/localflavor/usa/forms.py:17 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "Introduzca un zip code en el formato XXXXX o XXXXX-XXXX." + +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "" +"Introduzca un postcode. Se requiere un espacio entre las dos secciones del " +"mismo." + +#: contrib/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "ID de objeto" + +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "encabezado" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "comentario" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "calificacin 1" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "calificacin 2" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "calificacin 3" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "calificacin 4" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "calificacin 5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "calificacin 6" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "calificacin 7" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "calificacin 8" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "es calificacin vlida" + +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "fecha/hora de envo" + +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "es pblico" + +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "est eliminado" + +#: 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 "" +"Marque esta caja si el comentario es inapropiado. En su lugar se mostrar " +"\"Este comentario ha sido eliminado\"." + +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "comentarios" + +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "Objeto contenido" + +#: contrib/comments/models.py:159 +#, python-format +msgid "" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" +msgstr "" +"Enviado por %(user)s el %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" + +#: contrib/comments/models.py:168 +msgid "person's name" +msgstr "nombre de la persona" + +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "direccin ip" + +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "aprobado por el staff" + +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "comentario libre" + +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "comentarios libres" + +#: contrib/comments/models.py:233 +msgid "score" +msgstr "puntuacin" + +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "fecha de la puntuacin" + +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "punto karma" + +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "puntos karma" + +#: contrib/comments/models.py:242 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "puntuado %(score)d por %(user)s" + +#: contrib/comments/models.py:258 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" +"Este comentario fue marcado por %(user)s:\n" +"\n" +"%(text)s" + +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "fecha de la marca" + +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "marca de usuario" + +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "marcas de usuario" + +#: contrib/comments/models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "Marca de %r" + +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "fecha de eliminacin" + +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "Eliminacin por moderador" + +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "eliminaciones por moderador" + +#: contrib/comments/models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "Eliminacin del moderador %r" + +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Los usuarios annimos no pueden votar" + +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "ID de comentario no vlido" + +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "Ud. no puede votarse a s mismo" + +#: contrib/comments/views/comments.py:27 +msgid "" +"This rating is required because you've entered at least one other rating." +msgstr "Se precisa esta puntuacin porque ha introducido al menos otra ms." + +#: contrib/comments/views/comments.py:111 +#, python-format +msgid "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comment:\n" +"\n" +"%(text)s" +msgid_plural "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" +"\n" +"%(text)s" +msgstr[0] "" +"Este comentario lo envi un usuario que ha enviado menos de %(count)s " +"comentario:\n" +"\n" +"%(text)s" +msgstr[1] "" +"Este comentario lo envi un usuario que ha enviado menos de %(count)s " +"comentarios:\n" +"\n" +"%(text)s" + +#: contrib/comments/views/comments.py:116 +#, python-format +msgid "" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" +msgstr "" +"Este comentario ha sido enviado por un usuario 'semi-annimo':\n" +"\n" +"%(text)s" + +#: contrib/comments/views/comments.py:188 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "Slo se admiten POSTs" + +#: contrib/comments/views/comments.py:192 +#: contrib/comments/views/comments.py:284 +msgid "One or more of the required fields wasn't submitted" +msgstr "No se proporcion uno o ms de los siguientes campos requeridos" + +#: contrib/comments/views/comments.py:196 +#: contrib/comments/views/comments.py:286 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "" +"Alguien est jugando con el formulario de comentarios (violacin de " +"seguridad)" + +#: contrib/comments/views/comments.py:206 +#: contrib/comments/views/comments.py:292 +msgid "" +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "" +"El formulario de comentarios tiene un parmetro 'target' no vlido (el ID de " +"objeto era invlido)" + +#: contrib/comments/views/comments.py:257 +#: contrib/comments/views/comments.py:321 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "El formulario de comentario no proporcion 'previsualizar' ni 'enviar'" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Olvid su contrasea?" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Calificaciones" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Requerido" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Opcional" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Enviar una foto" + +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "Comentario:" + +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "Previsualizar comentario" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Su nombre:" + +#: 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 milln" +msgstr[1] "%(value).1f millones" + +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f millardo" +msgstr[1] "%(value).1f millardos" + +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billn" +msgstr[1] "%(value).1f billones" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "one" +msgstr "uno" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "dos" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "three" +msgstr "tres" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "four" +msgstr "cuatro" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "five" +msgstr "cinco" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "seis" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "siete" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "ocho" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "nine" +msgstr "nueve" + +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "Ya existe un(a) %(object)s con este/a %(type)s para %(field)s." + +#: db/models/fields/__init__.py:42 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "Ya existe %(optname)s con este %(fieldname)s." + +#: db/models/fields/__init__.py:367 +msgid "This value must be an integer." +msgstr "Este valor debe ser un nmero entero." + +#: db/models/fields/__init__.py:402 +msgid "This value must be either True or False." +msgstr "Este valor debe ser True o False." + +#: db/models/fields/__init__.py:423 +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +#: db/models/fields/__init__.py:457 core/validators.py:148 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Introduzca una fecha vlida en formato AAAA-MM-DD." + +#: db/models/fields/__init__.py:526 core/validators.py:157 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "Introduzca una fecha/hora vlida en formato AAAA-MM-DD HH:MM." + +#: db/models/fields/__init__.py:630 +msgid "Enter a valid filename." +msgstr "Introduzca un nombre de archivo vlido." + +#: db/models/fields/__init__.py:751 +msgid "This value must be either None, True or False." +msgstr "Este valor debe ser None, True o False." + +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "Por favor, introduzca un %s vlido." + +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr " Separe mltiples identificadores con comas." + +#: db/models/fields/related.py:644 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenga presionada \"Control\" (\"Command\" en una Mac) para seleccionar " +"ms de uno." + +#: db/models/fields/related.py:691 +#, 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." +msgstr[0] "" +"Por favor, introduzca IDs de %(self)s vlidos. El valor %(value)r no es " +"vlido." +msgstr[1] "" +"Por favor, introduzca IDs de %(self)s vlidos. Los valores %(value)r no son " +"vlidos." + +#: 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] "Asegrese de que su texto tiene menos de %s caracter." +msgstr[1] "Asegrese de que su texto tiene menos de %s caracteres." + +#: oldforms/__init__.py:397 +msgid "Line breaks are not allowed here." +msgstr "No se permiten saltos de lnea." + +#: 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 "Seleccione una opcin vlida; '%(data)s' no est en %(choices)s." + +#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se envi un archivo. Verifique el tipo de codificacin en el formulario." + +#: oldforms/__init__.py:674 +msgid "The submitted file is empty." +msgstr "El archivo enviado est vaco." + +#: oldforms/__init__.py:730 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Introduzca un nmero entero entre -32.768 y 32.767." + +#: oldforms/__init__.py:740 +msgid "Enter a positive number." +msgstr "Introduzca un nmero positivo." + +#: oldforms/__init__.py:750 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Introduzca un nmero entero entre 0 y 32.767." + +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "Se cre con xito %(verbose_name)." + +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "Se actualiz con xito %(verbose_name)s." + +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "Se elimin %(verbose_name)s." + #: conf/global_settings.py:39 msgid "Arabic" msgstr "rabe" @@ -1825,141 +2116,88 @@ msgid "Japanese" msgstr "Japons" #: conf/global_settings.py:58 -msgid "Latvian" -msgstr "Latvio" +msgid "Kannada" +msgstr "Canars" #: conf/global_settings.py:59 +msgid "Latvian" +msgstr "Letn" + +#: conf/global_settings.py:60 msgid "Macedonian" msgstr "Macedonio" -#: conf/global_settings.py:60 +#: conf/global_settings.py:61 msgid "Dutch" msgstr "Holands" -#: conf/global_settings.py:61 +#: conf/global_settings.py:62 msgid "Norwegian" msgstr "Noruego" -#: conf/global_settings.py:62 +#: conf/global_settings.py:63 msgid "Polish" msgstr "Polaco" -#: conf/global_settings.py:63 +#: conf/global_settings.py:64 +msgid "Portugese" +msgstr "Portugus" + +#: conf/global_settings.py:65 msgid "Brazilian" msgstr "Brasileo" -#: conf/global_settings.py:64 +#: conf/global_settings.py:66 msgid "Romanian" msgstr "Rumano" -#: conf/global_settings.py:65 +#: conf/global_settings.py:67 msgid "Russian" msgstr "Ruso" -#: conf/global_settings.py:66 +#: conf/global_settings.py:68 msgid "Slovak" msgstr "Eslovaco" -#: conf/global_settings.py:67 +#: conf/global_settings.py:69 msgid "Slovenian" msgstr "Esloveno" -#: conf/global_settings.py:68 +#: conf/global_settings.py:70 msgid "Serbian" msgstr "Serbio" -#: conf/global_settings.py:69 +#: conf/global_settings.py:71 msgid "Swedish" msgstr "Sueco" -#: conf/global_settings.py:70 +#: conf/global_settings.py:72 msgid "Tamil" msgstr "Tamil" -#: conf/global_settings.py:71 +#: conf/global_settings.py:73 +msgid "Telugu" +msgstr "Telugu" + +#: conf/global_settings.py:74 msgid "Turkish" msgstr "Turco" -#: conf/global_settings.py:72 +#: conf/global_settings.py:75 msgid "Ukrainian" msgstr "Ucraniano" -#: conf/global_settings.py:73 +#: conf/global_settings.py:76 msgid "Simplified Chinese" msgstr "Chino simplificado" -#: conf/global_settings.py:74 +#: conf/global_settings.py:77 msgid "Traditional Chinese" msgstr "Chino tradicional" -#: db/models/manipulators.py:305 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "Ya existe un(a) %(object)s con este/a %(type)s para %(field)s." - -#: db/models/fields/__init__.py:42 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "Ya existe %(optname)s con este %(fieldname)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:374 newforms/fields.py:450 -#: newforms/fields.py:461 newforms/models.py:177 oldforms/__init__.py:352 -msgid "This field is required." -msgstr "Este campo es obligatorio." - -#: db/models/fields/__init__.py:366 -msgid "This value must be an integer." -msgstr "Este valor debe ser un nmero entero." - -#: db/models/fields/__init__.py:401 -msgid "This value must be either True or False." -msgstr "Este valor debe ser True o False." - -#: db/models/fields/__init__.py:422 -msgid "This field cannot be null." -msgstr "Este campo no puede ser nulo." - -#: db/models/fields/__init__.py:454 core/validators.py:147 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Introduzca una fecha vlida en formato AAAA-MM-DD." - -#: db/models/fields/__init__.py:521 core/validators.py:156 -msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "Introduzca una fecha/hora vlida en formato YYYY-MM-DD HH:MM." - -#: db/models/fields/__init__.py:625 -msgid "Enter a valid filename." -msgstr "Introduzca un nombre de achivo vlido." - -#: db/models/fields/related.py:53 -#, python-format -msgid "Please enter a valid %s." -msgstr "Por favor, introduzca un %s vlido." - -#: db/models/fields/related.py:642 -msgid "Separate multiple IDs with commas." -msgstr " Separe mltiples IDs con comas." - -#: db/models/fields/related.py:644 -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" -"Mantenga presionada \"Control\" (\"Command\" en un Mac) para seleccionar ms " -"de uno." - -#: db/models/fields/related.py:691 -#, 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." -msgstr[0] "" -"Por favor, introduzca IDs de %(self)s vlidos. El valor %(value)r no es " -"vlido." -msgstr[1] "" -"Por favor, introduzca IDs de %(self)s vlidos. Los valores %(value)r no son " -"vlidos." +#: template/defaultfilters.py:491 +msgid "yes,no,maybe" +msgstr "si,no,talvez" #: core/validators.py:64 msgid "This value must contain only letters, numbers and underscores." @@ -2010,10 +2248,6 @@ msgstr "No se admiten caracteres no num msgid "This value can't be comprised solely of digits." msgstr "Este valor no puede estar formado slo por dgitos." -#: core/validators.py:120 newforms/fields.py:126 -msgid "Enter a whole number." -msgstr "Introduzca un nmero entero." - #: core/validators.py:124 msgid "Only alphabetical characters are allowed here." msgstr "Slo se admiten caracteres alfabticos." @@ -2024,23 +2258,14 @@ msgstr "El a #: core/validators.py:143 #, python-format -msgid "Invalid date: %s." -msgstr "Fecha no vlida: %s." +msgid "Invalid date: %s" +msgstr "Fecha no vlida: %s" -#: core/validators.py:152 +#: core/validators.py:153 msgid "Enter a valid time in HH:MM format." msgstr "Introduzca una hora vlida en formato HH:MM." -#: core/validators.py:161 newforms/fields.py:269 -msgid "Enter a valid e-mail address." -msgstr "Introduzca una direccin de correo electrnico vlida" - -#: core/validators.py:173 core/validators.py:444 oldforms/__init__.py:667 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "" -"No se envi un archivo. Verifique el tipo de codificacin en el formulario." - -#: 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." @@ -2048,28 +2273,28 @@ msgstr "" "Enve una imagen vlida. El archivo que ha enviado no era una imagen o se " "trataba de una imagen corrupta." -#: core/validators.py:184 +#: core/validators.py:185 #, python-format msgid "The URL %s does not point to a valid image." msgstr "La URL %s no apunta a una imagen vlida." -#: core/validators.py:188 +#: core/validators.py:189 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "" -"Los nmeros telefnicos deben respetar el formato XXX-XXX-XXXX. \"%s\" no es " -"vlido." +"Los nmeros telefnicos deben respetar el formato XXX-XXX-XXXX. \"%s\" " +"no es vlido." -#: core/validators.py:196 +#: core/validators.py:197 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "La URL %s no apunta a un vdeo QuickTime vlido." -#: core/validators.py:200 +#: core/validators.py:201 msgid "A valid URL is required." msgstr "Se precisa una URL vlida." -#: core/validators.py:214 +#: core/validators.py:215 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" @@ -2078,96 +2303,96 @@ msgstr "" "Se precisa HTML vlido. Los errores especficos son:\n" "%s" -#: core/validators.py:221 +#: core/validators.py:222 #, python-format msgid "Badly formed XML: %s" msgstr "XML mal formado: %s" -#: core/validators.py:238 +#: core/validators.py:239 #, python-format msgid "Invalid URL: %s" msgstr "URL no vlida: %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 "La URL %s es un enlace roto." -#: core/validators.py:251 +#: core/validators.py:252 msgid "Enter a valid U.S. state abbreviation." -msgstr "Introduzca una abreviatura vlida de estado de los EEUU." +msgstr "Introduzca una abreviatura vlida de estado de los EE.UU." -#: 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] "Vigila tu boca! Aqu no admitimos la palabra %s." msgstr[1] "Vigila tu boca! Aqu no admitimos las palabras %s." -#: core/validators.py:272 +#: core/validators.py:273 #, python-format msgid "This field must match the '%s' field." msgstr "Este campo debe concordar con el campo '%s'." -#: core/validators.py:291 +#: core/validators.py:292 msgid "Please enter something for at least one field." msgstr "Por favor, introduzca algo en al menos un campo." -#: 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 "Por favor, rellene ambos campos o deje ambos vacos." -#: core/validators.py:319 +#: core/validators.py:320 #, python-format msgid "This field must be given if %(field)s is %(value)s" msgstr "Se debe proporcionar este campo si %(field)s es %(value)s" -#: core/validators.py:332 +#: core/validators.py:333 #, python-format msgid "This field must be given if %(field)s is not %(value)s" msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s" -#: core/validators.py:351 +#: core/validators.py:352 msgid "Duplicate values are not allowed." msgstr "No se admiten valores duplicados." -#: core/validators.py:366 +#: core/validators.py:367 #, python-format -msgid "This value must be between %s and %s." -msgstr "Este valor debe ser estar entre %s y %s." +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "Este valor debe estar entre %(lower)s y %(upper)s." -#: core/validators.py:368 +#: core/validators.py:369 #, python-format msgid "This value must be at least %s." msgstr "Este valor debe ser al menos %s." -#: core/validators.py:370 +#: core/validators.py:371 #, python-format msgid "This value must be no more than %s." msgstr "Este valor debe ser no mayor que %s." -#: core/validators.py:406 +#: core/validators.py:407 #, python-format msgid "This value must be a power of %s." msgstr "Este valor debe ser una potencia de %s." -#: core/validators.py:417 +#: core/validators.py:418 msgid "Please enter a valid decimal number." msgstr "Por favor, introduzca un nmero decimal vlido." -#: core/validators.py:421 +#: core/validators.py:422 #, 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." msgstr[0] "" -"Por favor, introduzca un nmero decimal vlido con con un mximo de un " +"Por favor, introduzca un nmero decimal vlido con un mximo de un " "dgito en total." msgstr[1] "" "Por favor, introduzca un nmero decimal vlido con un maximo de %s dgitos " "en total." -#: core/validators.py:424 +#: core/validators.py:425 #, python-format msgid "" "Please enter a valid decimal number with a whole part of at most %s digit." @@ -2180,7 +2405,7 @@ msgstr[1] "" "Por favor, introduzca un nmero decimal vlido con un mximo de %s dgitos " "enteros." -#: core/validators.py:427 +#: core/validators.py:428 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." msgid_plural "" @@ -2192,34 +2417,32 @@ msgstr[1] "" "Por favor, introduzca un nmero decimal vlido con un mximo de %s " "posiciones decimales." -#: core/validators.py:437 +#: core/validators.py:438 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." msgstr "" -"Asegrese de que el archivo que enva es de un tamao mnimo de " -"%s bytes." +"Asegrese de que el archivo que enva es de un tamao mnimo de %s bytes." -#: core/validators.py:438 +#: core/validators.py:439 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." msgstr "" -"Asegrese de que el archivo que enva es de un tamao mximo de " -"%s bytes." +"Asegrese de que el archivo que enva es de un tamao mximo de %s bytes." -#: core/validators.py:455 +#: core/validators.py:456 msgid "The format for this field is wrong." msgstr "El formato de este campo es incorrecto." -#: core/validators.py:470 +#: core/validators.py:471 msgid "This field is invalid." msgstr "Este campo no es vlido." -#: core/validators.py:506 +#: core/validators.py:507 #, python-format msgid "Could not retrieve anything from %s." -msgstr "No pude obtener nada de %s." +msgstr "No se pudo obtener nada de %s." -#: core/validators.py:509 +#: core/validators.py:510 #, python-format msgid "" "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." @@ -2227,170 +2450,59 @@ msgstr "" "La URL %(url)s devolvi la cabecera Content-Type '%(contenttype)s', que no " "es vlida." -#: core/validators.py:542 +#: core/validators.py:543 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " "\"%(start)s\".)" msgstr "" "Por favor, cierre la etiqueta %(tag)s de la lnea %(line)s. (La lnea " -"empieza por \"%(start)s\".)" +"empieza con \"%(start)s\".)" -#: core/validators.py:546 +#: core/validators.py:547 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " "starts with \"%(start)s\".)" msgstr "" "Parte del texto que comienza en la lnea %(line)s no est permitido en ese " -"contexto. (La lnea empieza por \"%(start)s\".)" +"contexto. (La lnea empieza con \"%(start)s\".)" -#: core/validators.py:551 +#: core/validators.py:552 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" "(start)s\".)" msgstr "" "El \"%(attr)s\" de la lnea %(line)s no es un atributo vlido. (La lnea " -"empieza por \"%(start)s\".)" +"empieza con \"%(start)s\".)" -#: core/validators.py:556 +#: core/validators.py:557 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" "(start)s\".)" msgstr "" "La \"<%(tag)s>\" de la lnea %(line)s no es una etiqueta vlida. (La lnea " -"empieza por \"%(start)s\".)" +"empieza con \"%(start)s\".)" -#: core/validators.py:560 +#: core/validators.py:561 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " "starts with \"%(start)s\".)" msgstr "" "A una etiqueta de la lnea %(line)s le faltan uno o ms atributos " -"requeridos. (La lnea empieza por \"%(start)s\".)" +"requeridos. (La lnea empieza con \"%(start)s\".)" -#: core/validators.py:565 +#: core/validators.py:566 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " "starts with \"%(start)s\".)" msgstr "" "El atributo \"%(attr)s\" de la lnea %(line)s tiene un valor que no es " -"vlido. (La lnea empieza por \"%(start)s\".)" - -#: template/defaultfilters.py:490 -msgid "yes,no,maybe" -msgstr "si,no,talvez" - -#: views/generic/create_update.py:43 -#, python-format -msgid "The %(verbose_name)s was created successfully." -msgstr "Se cre con xito %(verbose_name)." - -#: views/generic/create_update.py:117 -#, python-format -msgid "The %(verbose_name)s was updated successfully." -msgstr "Se actualiz con xito %(verbose_name)s." - -#: views/generic/create_update.py:184 -#, python-format -msgid "The %(verbose_name)s was deleted." -msgstr "Se elimin %(verbose_name)s." - -#: newforms/fields.py:101 newforms/fields.py:254 -#, python-format -msgid "Ensure this value has at most %d characters." -msgstr "Asegrese de que este valor tenga como mximo %d caracteres." - -#: newforms/fields.py:103 newforms/fields.py:256 -#, python-format -msgid "Ensure this value has at least %d characters." -msgstr "Asegrese de que este valor tenga al menos %d caracteres." - -#: newforms/fields.py:128 -#, python-format -msgid "Ensure this value is less than or equal to %s." -msgstr "Asegrese de que este valor sea menor o igual a %s." - -#: newforms/fields.py:130 -#, python-format -msgid "Ensure this value is greater than or equal to %s." -msgstr "Asegrese de que este valor sea mayor o igual a %s." - -#: newforms/fields.py:163 -msgid "Enter a valid date." -msgstr "Ingrse una fecha vlida." - -#: newforms/fields.py:190 -msgid "Enter a valid time." -msgstr "Introduzca una hora vlida." - -#: newforms/fields.py:226 -msgid "Enter a valid date/time." -msgstr "Introduzca una fecha/hora vlida." - -#: newforms/fields.py:240 -msgid "Enter a valid value." -msgstr "Introduzca un valor vlido." - -#: newforms/fields.py:287 newforms/fields.py:309 -msgid "Enter a valid URL." -msgstr "Introduzca una URL vlida." - -#: newforms/fields.py:311 -msgid "This URL appears to be a broken link." -msgstr "La URL parece ser un enlace roto." - -#: newforms/fields.py:360 newforms/models.py:164 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" -"Seleccione una opcin vlida. Esa opcin no es una de las opciones " -"disponibles." - -#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181 -msgid "Enter a list of values." -msgstr "Introduzca una lista de valores." - -#: newforms/fields.py:387 newforms/models.py:187 -#, python-format -msgid "Select a valid choice. %s is not one of the available choices." -msgstr "" -"Seleccione una opcin vlida. %s no es una de las opciones disponibles." - -#: oldforms/__init__.py:387 -#, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "Asegrese de que su texto tiene menos de %s caracter." -msgstr[1] "Asegrese de que su texto tiene menos de %s caracteres." - -#: oldforms/__init__.py:392 -msgid "Line breaks are not allowed here." -msgstr "No se permiten saltos de lnea." - -#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605 -#, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "Seleccione una opcin vlida; '%(data)s' no est en %(choices)s." - -#: oldforms/__init__.py:669 -msgid "The submitted file is empty." -msgstr "El archivo enviado est vaco." - -#: oldforms/__init__.py:725 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Introduzca un nmero entero entre -32.768 y 32.767." - -#: oldforms/__init__.py:735 -msgid "Enter a positive number." -msgstr "Introduzca un nmero positivo." - -#: oldforms/__init__.py:745 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Introduzca un nmero entero entre 0 y 32.767." +"vlido. (La lnea empieza con \"%(start)s\".)" #~ msgid "Use '[algo]$[salt]$[hexdigest]'" #~ msgstr "Use '[algoritmo]$[salt]$[hexdigest]'" diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo index 14b8a935a1..7250343b45 100644 Binary files a/django/conf/locale/fr/LC_MESSAGES/django.mo and b/django/conf/locale/fr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po index 62f3b46c37..14fc0083b8 100644 --- a/django/conf/locale/fr/LC_MESSAGES/django.po +++ b/django/conf/locale/fr/LC_MESSAGES/django.po @@ -673,19 +673,19 @@ msgstr "L'URL est un lien cassé." #: contrib/humanize/templatetags/humanize.py:16 msgid "th" -msgstr "e" +msgstr "e" #: contrib/humanize/templatetags/humanize.py:16 msgid "st" -msgstr "er" +msgstr "er" #: contrib/humanize/templatetags/humanize.py:16 msgid "nd" -msgstr "d" +msgstr "d" #: contrib/humanize/templatetags/humanize.py:16 msgid "rd" -msgstr "e" +msgstr "e" #: contrib/humanize/templatetags/humanize.py:48 #, python-format @@ -1346,7 +1346,7 @@ msgstr "Sélectionnez %s pour changer" #: contrib/admin/views/main.py:768 msgid "Database error" -msgstr "" +msgstr "Erreur de base de données" #: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 #: contrib/admin/views/doc.py:50 @@ -1391,7 +1391,7 @@ msgstr "les objets `%(label)s.%(type)s en relation" #: contrib/admin/views/doc.py:219 #, python-format msgid "all %s" -msgstr "" +msgstr "tous les %s" #: contrib/admin/views/doc.py:224 #, python-format @@ -1401,7 +1401,7 @@ msgstr "nombre de %s" #: contrib/admin/views/doc.py:229 #, python-format msgid "Fields on %s objects" -msgstr "" +msgstr "Champs sur les objets %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 @@ -1613,7 +1613,8 @@ msgid "" "Something's wrong with your database installation. Make sure the appropriate " "database tables have been created, and make sure the database is readable by " "the appropriate user." -msgstr "" +msgstr "Quelque chose ne va pas avec votre base de données. Vérifiez que les" +"bonnes bases ont été créées, et qu'elle est lisible par le bon utilisateur." #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" @@ -1930,6 +1931,13 @@ msgid "" "as \"internal\" (talk to your system administrator if you aren't sure if\n" "your computer is \"internal\").

          \n" msgstr "" +"\n" +"

          Pour installer des bookmarklets, faîtes glisser le lien vers\n" +"votre barre de marques-pages, ou cliquez droit dessus et ajoutez-y le.\n" +"Maintenant vous pouvez le sélectionner depuis n'importe quelle page\n" +"du site. Notez que certains d'entre eux nécessitent que vous visionniez\n" +"le site depuis un ordinateur dit \"interne\" (veuillez contacter votre\n" +"administrateur système si vous n'êtes pas sûr que votre ordinateur le soit).

          \n" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "Documentation for this page" diff --git a/django/conf/locale/ja/LC_MESSAGES/django.mo b/django/conf/locale/ja/LC_MESSAGES/django.mo index 97b8f4145b..07d3994755 100644 Binary files a/django/conf/locale/ja/LC_MESSAGES/django.mo and b/django/conf/locale/ja/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ja/LC_MESSAGES/django.po b/django/conf/locale/ja/LC_MESSAGES/django.po index 46700505ba..ab761254ae 100644 --- a/django/conf/locale/ja/LC_MESSAGES/django.po +++ b/django/conf/locale/ja/LC_MESSAGES/django.po @@ -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 , 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 \n" "Language-Team: Japanese \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 %(username)s." -msgstr "%(username)sさんの新しいパスワードを入力してください。" +msgstr "" +"%(username)sさんの新しいパスワードを入力してください。" #: 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 change " "password form." msgstr "" -"'[algo]$[salt]$[hexdigest]'形式か、" -"パスワード変更フォームを使ってください。" +"'[algo]$[salt]$[hexdigest]'形式か、パスワード変更フォー" +"ムを使ってください。" #: 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 "月曜日" diff --git a/django/conf/locale/ja/LC_MESSAGES/djangojs.mo b/django/conf/locale/ja/LC_MESSAGES/djangojs.mo index bddecacb10..45a4ff9f67 100644 Binary files a/django/conf/locale/ja/LC_MESSAGES/djangojs.mo and b/django/conf/locale/ja/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/ja/LC_MESSAGES/djangojs.po b/django/conf/locale/ja/LC_MESSAGES/djangojs.po index 0ec1cadcf5..d35b88aa73 100644 --- a/django/conf/locale/ja/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/ja/LC_MESSAGES/djangojs.po @@ -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 , YEAR. -# -#, fuzzy +# makoto tsuyuki , 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 \n" "Language-Team: Japanese \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 diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo index 7f506f972f..6e3af1681c 100644 Binary files a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo and b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/django/conf/locale/pt_BR/LC_MESSAGES/django.po index bc955f29c4..540d1b51bb 100644 --- a/django/conf/locale/pt_BR/LC_MESSAGES/django.po +++ b/django/conf/locale/pt_BR/LC_MESSAGES/django.po @@ -1,21 +1,1022 @@ # Português do Brasil translation of django. # Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# João Marcus Christ , 2006. -# Carlos Eduardo de Paula , 2006. # msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-05-16 10:11+0200\n" -"PO-Revision-Date: 2006-11-01 17:45-0300\n" -"Last-Translator: Carlos Eduardo de Paula \n" +"POT-Creation-Date: 2007-03-28 12:02-0300\n" +"PO-Revision-Date: 2007-04-02 17:20+0200\n" +"Last-Translator: Daniel Alves Barbosa de Oliveira Vaz \n" "Language-Team: Português do Brasil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: oldforms/__init__.py:357 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/models.py:177 +#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450 +#: newforms/fields.py:461 +msgid "This field is required." +msgstr "Este campo é requerido." + +#: oldforms/__init__.py:392 +#, fuzzy, python-format +msgid "Ensure your text is less than %s character." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Certifique-se de que seu texto tenha menos que %s caractere." +msgstr[1] "Certifique-se de que seu texto tenha menos que %s caracteres." + +#: oldforms/__init__.py:397 +msgid "Line breaks are not allowed here." +msgstr "Não são permitidas quebras de linha aqui." + +#: 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 "Selecione uma escolha válida; '%(data)s' não está em %(choices)s." + +#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "Desconhecido" + +#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "Sim" + +#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "Não" + +#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nenhum arquivo enviado. Verifique o tipo de codificação do formulário." + +#: oldforms/__init__.py:674 +msgid "The submitted file is empty." +msgstr "O arquivo enviado está vazio." + +#: oldforms/__init__.py:730 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Informe um número inteiro entre -32.768 e 32.767" + +#: oldforms/__init__.py:740 +msgid "Enter a positive number." +msgstr "Informe um número positivo" + +#: oldforms/__init__.py:750 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Informe um número inteiro entre 0 e 32.767." + +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "%(object)s com este %(type)s já existe para o %(field)s dado." + +#: db/models/manipulators.py:308 contrib/admin/views/main.py:335 +#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339 +msgid "and" +msgstr "e" + +#: db/models/fields/__init__.py:42 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "%(optname)s com este %(fieldname)s já existe." + +#: db/models/fields/__init__.py:367 +#, fuzzy +msgid "This value must be an integer." +msgstr "Este valor deve ser um inteiro." + +#: db/models/fields/__init__.py:402 +#, fuzzy +msgid "This value must be either True or False." +msgstr "Este valor deve ser Verdadeiro ou Falso." + +#: db/models/fields/__init__.py:423 +#, fuzzy +msgid "This field cannot be null." +msgstr "Este campo não pode ser nulo." + +#: db/models/fields/__init__.py:457 core/validators.py:148 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Informe uma data válida no formato AAAA-MM-DD." + +#: db/models/fields/__init__.py:526 core/validators.py:157 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "Informe uma data/hora válida no formato AAAA-MM-DD HH:MM." + +#: db/models/fields/__init__.py:630 +msgid "Enter a valid filename." +msgstr "Informe um nome de arquivo válido." + +#: db/models/fields/__init__.py:751 +#, fuzzy +msgid "This value must be either None, True or False." +msgstr "Este valor deve ser Verdadeiro ou Falso." + +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "Por favor informe um %s válido." + +#: db/models/fields/related.py:642 +#, fuzzy +msgid "Separate multiple IDs with commas." +msgstr "Separe IDs múltiplos com vírgulas." + +#: db/models/fields/related.py:644 +#, fuzzy +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +" Mantenha pressionado \"Control\", ou \"Command\" no Mac para selecionar " +"mais de uma opção." + +#: db/models/fields/related.py:691 +#, fuzzy, 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." +msgstr[0] "" +"Por favor, entre IDs válidos para %(self)s. O valor %(value)r é inválido." +msgstr[1] "" +"Por favor, entre IDs válidos para %(self)s. Os valores %(value)r são " +"inválidos." + +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "Arábico" + +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "Bengalês" + +#: conf/global_settings.py:41 +#, fuzzy +msgid "Catalan" +msgstr "Catalão" + +#: conf/global_settings.py:42 +msgid "Czech" +msgstr "Tcheco" + +#: conf/global_settings.py:43 +msgid "Welsh" +msgstr "" + +#: conf/global_settings.py:44 +#, fuzzy +msgid "Danish" +msgstr "Dinamarquês" + +#: conf/global_settings.py:45 +msgid "German" +msgstr "Alemão" + +#: conf/global_settings.py:46 +msgid "Greek" +msgstr "Grego" + +#: conf/global_settings.py:47 +msgid "English" +msgstr "Inglês" + +#: conf/global_settings.py:48 +msgid "Spanish" +msgstr "Espanhol" + +#: conf/global_settings.py:49 +msgid "Argentinean Spanish" +msgstr "Espanhol Argentino" + +#: conf/global_settings.py:50 +#, fuzzy +msgid "Finnish" +msgstr "Dinamarquês" + +#: conf/global_settings.py:51 +msgid "French" +msgstr "Francês" + +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "Galiciano" + +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "Húngaro" + +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "Hebraico" + +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "Islandês" + +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "Italiano" + +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "Japonês" + +#: conf/global_settings.py:58 +#, fuzzy +msgid "Kannada" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Latvian" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Macedonian" +msgstr "Macedônio" + +#: conf/global_settings.py:61 +msgid "Dutch" +msgstr "Alemão" + +#: conf/global_settings.py:62 +msgid "Norwegian" +msgstr "Norueguês" + +#: conf/global_settings.py:63 +#, fuzzy +msgid "Polish" +msgstr "Polônia" + +#: conf/global_settings.py:64 +msgid "Portugese" +msgstr "Português" + +#: conf/global_settings.py:65 +msgid "Brazilian" +msgstr "Brasileiro" + +#: conf/global_settings.py:66 +msgid "Romanian" +msgstr "Romeno" + +#: conf/global_settings.py:67 +msgid "Russian" +msgstr "Russo" + +#: conf/global_settings.py:68 +msgid "Slovak" +msgstr "Eslovaco" + +#: conf/global_settings.py:69 +#, fuzzy +msgid "Slovenian" +msgstr "Esloveno" + +#: conf/global_settings.py:70 +msgid "Serbian" +msgstr "Sérvio" + +#: conf/global_settings.py:71 +msgid "Swedish" +msgstr "Sueco" + +#: conf/global_settings.py:72 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:73 +msgid "Telugu" +msgstr "" + +#: conf/global_settings.py:74 +msgid "Turkish" +msgstr "Turco" + +#: conf/global_settings.py:75 +#, fuzzy +msgid "Ukrainian" +msgstr "Ucraniano" + +#: conf/global_settings.py:76 +msgid "Simplified Chinese" +msgstr "Chinês Simplificado" + +#: conf/global_settings.py:77 +msgid "Traditional Chinese" +msgstr "Chinês Tradicional" + +#: core/validators.py:64 +msgid "This value must contain only letters, numbers and underscores." +msgstr "Este valor deve conter apenas letras, números e sublinhados (_)." + +#: core/validators.py:68 +#, fuzzy +msgid "" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "Este valor deve conter apenas letras, números, sublinhados (_), " +"pontos e barras (/)." + +#: core/validators.py:72 +#, fuzzy +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "Este valor deve conter apenas letras, números, sublinhados (_) e " +"hífens (-)." + +#: core/validators.py:76 +msgid "Uppercase letters are not allowed here." +msgstr "Letras em maiúsculo não são permitidas aqui." + +#: core/validators.py:80 +msgid "Lowercase letters are not allowed here." +msgstr "Letras em minúsculo não são permitidas aqui." + +#: core/validators.py:87 +msgid "Enter only digits separated by commas." +msgstr "Informe apenas dígitos separados por vírgulas." + +#: core/validators.py:99 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Informe endereços de email válidos separados por vírgulas." + +#: core/validators.py:103 +msgid "Please enter a valid IP address." +msgstr "Informe um endereço IP válido." + +#: core/validators.py:107 +msgid "Empty values are not allowed here." +msgstr "Valores em branco não são permitidos." + +#: core/validators.py:111 +msgid "Non-numeric characters aren't allowed here." +msgstr "Caracteres não numéricos não são permitidos." + +#: core/validators.py:115 +msgid "This value can't be comprised solely of digits." +msgstr "Este valor não pode conter apenas dígitos." + +#: core/validators.py:120 newforms/fields.py:126 +msgid "Enter a whole number." +msgstr "Informe um número completo." + +#: core/validators.py:124 +msgid "Only alphabetical characters are allowed here." +msgstr "Apenas caracteres do alfabeto são permitidos aqui." + +#: core/validators.py:139 +msgid "Year must be 1900 or later." +msgstr "O ano deve ser superior a 1900" + +#: core/validators.py:143 +#, fuzzy, python-format +msgid "Invalid date: %s" +msgstr "Data inválida: %s" + +#: core/validators.py:153 +msgid "Enter a valid time in HH:MM format." +msgstr "Informe uma hora válida no formato HH:MM." + +#: core/validators.py:162 newforms/fields.py:269 +msgid "Enter a valid e-mail address." +msgstr "Informe um endereço de email válido." + +#: core/validators.py:178 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envie uma imagem válida. O arquivo enviado não é uma imagem ou está " +"corrompido." + +#: core/validators.py:185 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "A URL %s não aponta para uma imagem válida." + +#: core/validators.py:189 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" +"Números de telefone devem estar no formato XXX-XXX-XXXX.\"%s\" é inválido." + +#: core/validators.py:197 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "A URL %s não aponta para um vídeo QuickTime válido." + +#: core/validators.py:201 +msgid "A valid URL is required." +msgstr "Uma URL válida é exigida." + +#: core/validators.py:215 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"HTML válido é exigido. Os erros específicos são:\n" +"%s" + +#: core/validators.py:222 +#, python-format +msgid "Badly formed XML: %s" +msgstr "XML mal formado: %s" + +#: core/validators.py:239 +#, python-format +msgid "Invalid URL: %s" +msgstr "URL inválida: %s" + +#: core/validators.py:244 core/validators.py:246 +#, python-format +msgid "The URL %s is a broken link." +msgstr "A URL %s é um link quebrado." + +#: core/validators.py:252 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Informe uma abreviação válida de estado dos E.U.A." + +#: core/validators.py:266 +#, fuzzy, 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] "Olha sua boca! A palavra %s não é permitida aqui." +msgstr[1] "Olha sua boca! As palavras %s não são permitidas aqui." + +#: core/validators.py:273 +#, python-format +msgid "This field must match the '%s' field." +msgstr "Este campo deve casar com o campo '%s'." + +#: core/validators.py:292 +msgid "Please enter something for at least one field." +msgstr "Informe algo em pelo menos um campo." + +#: core/validators.py:301 core/validators.py:312 +msgid "Please enter both fields or leave them both empty." +msgstr "Informe ambos os campos ou deixe ambos vazios." + +#: core/validators.py:320 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "Este campo deve ser informado se o campo %(field)s for %(value)s." + +#: core/validators.py:333 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "Este campo deve ser dado se o campo %(field)s não for %(value)s." + +#: core/validators.py:352 +msgid "Duplicate values are not allowed." +msgstr "Valores duplicados não são permitidos." + +#: core/validators.py:367 +#, fuzzy, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "Este valor deve estar entre %(lower)s e %(upper)s." + +#: core/validators.py:369 +#, fuzzy, python-format +msgid "This value must be at least %s." +msgstr "Este valor deve ser no mínimo %s." + +#: core/validators.py:371 +#, fuzzy, python-format +msgid "This value must be no more than %s." +msgstr "Este valor não deve ser maior que %s." + +#: core/validators.py:407 +#, python-format +msgid "This value must be a power of %s." +msgstr "Este valor deve ser uma potência de %s." + +#: core/validators.py:418 +msgid "Please enter a valid decimal number." +msgstr "Informe um número decimal válido." + +#: core/validators.py:422 +#, fuzzy, 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." +msgstr[0] "Por favor entre com um número decimal com no máximo %s dígito." +msgstr[1] "Por favor entre com um número decimal com no máximo %s dígitos." + +#: core/validators.py:425 +#, fuzzy, python-format +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 informe um número decimal com a parte inteira de no máximo %s " +"digito." +msgstr[1] "" +"Por favor informe um número decimal com a parte inteira de no máximo %s " +"digitos." + +#: core/validators.py:428 +#, fuzzy, 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." +msgstr[0] "Por favor informe um número decimal com no máximo %s casa decimal." +msgstr[1] "Por favor informe um número decimal com no máximo %s casas " +"decimais." + +#: core/validators.py:438 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Verifique se o arquivo enviado tem pelo menos %s bytes." + +#: core/validators.py:439 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "Verifique se o arquivo enviado tem no máximo %s bytes." + +#: core/validators.py:456 +msgid "The format for this field is wrong." +msgstr "O formato deste campo está errado." + +#: core/validators.py:471 +msgid "This field is invalid." +msgstr "Este campo é inválido." + +#: core/validators.py:507 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "Não foi possível receber dados de %s." + +#: core/validators.py:510 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" +"A URL %(url)s retornou um cabeçalho '%(contenttype)s' de Content-Type " +"inválido." + +#: core/validators.py:543 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" +"Por favor, feche a tag %(tag)s na linha %(line)s. (A linha começa com \"%" +"(start)s\".)" + +#: core/validators.py:547 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Algum texto começando na linha %(line)s não é permitido no contexto. (Linha " +"começa com \"%(start)s\".)" + +#: core/validators.py:552 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"%(attr)s\" na linha %(line)s não é um atributo válido. (Linha começa com " +"\"%(start)s\".)" + +#: core/validators.py:557 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"<%(tag)s>\" na linha %(line)s é uma tag inválida. (Linha começa com \"%" +"(start)s\".)" + +#: core/validators.py:561 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Uma tag na linha %(line)s não apresenta um ou mais atributos exigidos." +"(Linha começa com \"%(start)s\".)" + +#: core/validators.py:566 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"O atributo \"%(attr)s\" na linha %(line)s tem um valor inválido. (Linha " +"começa com \"%(start)s\".)" + +#: views/generic/create_update.py:43 +#, fuzzy, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "O(A) %(verbose_name)s foi criado com sucesso." + +#: views/generic/create_update.py:117 +#, fuzzy, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "O(A) %(verbose_name)s foi modificado com sucesso." + +#: views/generic/create_update.py:184 +#, fuzzy, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "O(A) %(verbose_name)s foi excluído." + +#: newforms/models.py:164 newforms/fields.py:360 +#, fuzzy +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Selecione uma escolha válida. Tal escolha não é uma das escolhas " +"disponíveis." + +#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454 +#, fuzzy +msgid "Enter a list of values." +msgstr "Informe uma lista ou tupla de valores." + +#: newforms/models.py:187 newforms/fields.py:387 +#, fuzzy, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Selecione uma escolha válida. %s não é uma das escolhas disponíveis." + +#: newforms/fields.py:101 newforms/fields.py:254 +#, fuzzy, python-format +msgid "Ensure this value has at most %d characters." +msgstr "Certifique-se de que seu texto tenha menos que %d caracteres." + +#: newforms/fields.py:103 newforms/fields.py:256 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "Certifique-se de que seu texto tenha no mínimo %d caracteres." + +#: newforms/fields.py:128 +#, fuzzy, python-format +msgid "Ensure this value is less than or equal to %s." +msgstr "Certifique-se que este valor seja menor ou igual a %s." + +#: newforms/fields.py:130 +#, python-format +msgid "Ensure this value is greater than or equal to %s." +msgstr "Certifique-se que este valor seja maior ou igual a %s." + +#: newforms/fields.py:163 +#, fuzzy +msgid "Enter a valid date." +msgstr "Informe uma data válida." + +#: newforms/fields.py:190 +#, fuzzy +msgid "Enter a valid time." +msgstr "Informe uma hora válida." + +#: newforms/fields.py:226 +#, fuzzy +msgid "Enter a valid date/time." +msgstr "Informe uma data/hora válida." + +#: newforms/fields.py:240 +#, fuzzy +msgid "Enter a valid value." +msgstr "Informe um valor válido." + +#: newforms/fields.py:287 newforms/fields.py:309 +#, fuzzy +msgid "Enter a valid URL." +msgstr "Informe uma URL válida." + +#: newforms/fields.py:311 +#, fuzzy +msgid "This URL appears to be a broken link." +msgstr "A URL %s parece ser um link quebrado." + +#: contrib/contenttypes/models.py:36 +#, fuzzy +msgid "python model class name" +msgstr "nome da classe model no python" + +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "tipo de conteúdo" + +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "tipos de conteúdo" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "th" +msgstr "º" + +#: contrib/humanize/templatetags/humanize.py:17 +#, fuzzy +msgid "st" +msgstr "º" + +#: contrib/humanize/templatetags/humanize.py:17 +#, fuzzy +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] "milhão" +msgstr[1] "milhões" + +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f bilhão" +msgstr[1] "%(value).1f bilhões" + +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilhão" +msgstr[1] "%(value).1f trilhões" + +#: contrib/humanize/templatetags/humanize.py:68 +#, fuzzy +msgid "one" +msgstr "um" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "dois" + +#: contrib/humanize/templatetags/humanize.py:68 +#, fuzzy +msgid "three" +msgstr "três" + +#: contrib/humanize/templatetags/humanize.py:68 +#, fuzzy +msgid "four" +msgstr "quatro" + +#: contrib/humanize/templatetags/humanize.py:68 +#, fuzzy +msgid "five" +msgstr "cinco" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "seis" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "sete" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "oito" + +#: contrib/humanize/templatetags/humanize.py:68 +#, fuzzy +msgid "nine" +msgstr "nove" + +#: contrib/auth/views.py:39 +#, fuzzy +msgid "Logged out" +msgstr "Sessão Encerrada" + +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "nome" + +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "apelido" + +#: contrib/auth/models.py:42 +#, fuzzy +msgid "permission" +msgstr "permissão" + +#: contrib/auth/models.py:43 contrib/auth/models.py:58 +#, fuzzy +msgid "permissions" +msgstr "permissões" + +#: contrib/auth/models.py:60 +#, fuzzy +msgid "group" +msgstr "grupo" + +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +#, fuzzy +msgid "groups" +msgstr "grupos" + +#: contrib/auth/models.py:90 +msgid "username" +msgstr "usuário" + +#: contrib/auth/models.py:90 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "Obrigatório. 30 caracteres ou menos. Apenas caracteres alfanuméricos" +"(letras, dígitos e sublinhados (_) )" + +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "primeiro nome" + +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "último nome" + +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "endereço de e-mail" + +#: contrib/auth/models.py:94 +msgid "password" +msgstr "senha" + +#: contrib/auth/models.py:94 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Use '[algo]$[salt]$[hexdigest]' ou Altere a senha" +"." +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "status da equipe" + +#: contrib/auth/models.py:95 +msgid "Designates whether the user can log into this admin site." +msgstr "Permite ao usuário o acesso a este site de administração." + +#: contrib/auth/models.py:96 +msgid "active" +msgstr "ativar" + +#: contrib/auth/models.py:96 +#, fuzzy +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "Permite ao usuário acessar este site de administração. " +"Ao invés de excluir contas de usuário, desmarque isso." + +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "status de superusuário" + +#: contrib/auth/models.py:97 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Informa que este usuário tem todas as permissões sem atribuí-las " +"explicitamente." + +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "último login" + +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "data de registro" + +#: contrib/auth/models.py:101 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Em adição às permissões atribuídas manualmente, este usuário também terá " +"todas as permissões dadas a cada grupo que participar." + +#: contrib/auth/models.py:102 +#, fuzzy +msgid "user permissions" +msgstr "permissões do usuário" + +#: contrib/auth/models.py:105 +#, fuzzy +msgid "user" +msgstr "usuário" + +#: contrib/auth/models.py:106 +#, fuzzy +msgid "users" +msgstr "usuários" + +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "Informações pessoais" + +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "Permissões" + +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "Datas importantes" + +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "Grupos" + +#: contrib/auth/models.py:258 +#, fuzzy +msgid "message" +msgstr "mensagem" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Os dois campos de senha não combinam." + +#: contrib/auth/forms.py:25 +#, fuzzy +msgid "A user with that username already exists." +msgstr "Um usuário com este username já existe." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Seu navegador Web não parece estar com os cookies habilitados. Cookies são " +"requeridos para acessar." + +#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Por favor entre usuário e senha corretos. Note que ambos os campos " +"diferenciam maiúsculas e minúsculas." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Esta conta está inativa." + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "Este endereço de e-mail não está associado com uma conta de usuário." +"Você tem certeza que está registrado?" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Os dois campos 'nova senha' não conferem." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "A senha antiga foi digitada incorretamente. Por favor, informe a " +"senha novamente." + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "redirecionar de" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Isso deve ser um caminho absoluto, excluindo o nome de domínio. Exemplo: '/" +"eventos/busca/'." + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "redirecionar para" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Isto pode ser um caminho absoluto (como acima) ou uma URL completa, " +"começando com 'http://'." + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "redirecionar" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "redirecionamentos" + #: contrib/comments/models.py:67 contrib/comments/models.py:166 msgid "object ID" msgstr "id do objeto" @@ -73,7 +1074,7 @@ msgstr "data/hora de envio" msgid "is public" msgstr "é público" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 msgid "IP address" msgstr "Endereço IP:" @@ -86,8 +1087,8 @@ msgid "" "Check this box if the comment is inappropriate. A \"This comment has been " "removed\" message will be displayed instead." msgstr "" -"Selecione esta opção se o comentário é inapropriado. Uma mensagem \"Este " -"comentário foi removido\" a mensagem será mostrada no lugar." +"Selecione esta opção se o comentário é inapropriado. A mensagem \"Este " +"comentário foi removido\" será mostrada no lugar." #: contrib/comments/models.py:91 #, fuzzy @@ -165,7 +1166,7 @@ msgid "" "\n" "%(text)s" msgstr "" -"O usuário %(user)s colocou flags neste documento:\n" +"O usuário %(user)s colocou flags neste comentário:\n" "\n" "%(text)s" @@ -219,13 +1220,13 @@ msgstr "ID de comentário inválido" msgid "No voting for yourself" msgstr "Você não pode votar em si mesmo" -#: contrib/comments/views/comments.py:28 +#: contrib/comments/views/comments.py:27 msgid "" "This rating is required because you've entered at least one other rating." msgstr "" "Esta avaliação é requerida porque você entrou com ao menos uma avaliação" -#: contrib/comments/views/comments.py:112 +#: contrib/comments/views/comments.py:111 #, fuzzy, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " @@ -246,7 +1247,7 @@ msgstr[1] "" "comentários:\n" "%(text)s" -#: contrib/comments/views/comments.py:117 +#: contrib/comments/views/comments.py:116 #, python-format msgid "" "This comment was posted by a sketchy user:\n" @@ -257,34 +1258,51 @@ msgstr "" "\n" "%(text)s" -#: contrib/comments/views/comments.py:189 +#: contrib/comments/views/comments.py:188 #: contrib/comments/views/comments.py:280 msgid "Only POSTs are allowed" msgstr "Somente POSTs são permitidos" -#: contrib/comments/views/comments.py:193 +#: contrib/comments/views/comments.py:192 #: contrib/comments/views/comments.py:284 msgid "One or more of the required fields wasn't submitted" msgstr "Um ou mais dos campos requeridos não foram enviados" -#: contrib/comments/views/comments.py:197 +#: contrib/comments/views/comments.py:196 #: contrib/comments/views/comments.py:286 msgid "Somebody tampered with the comment form (security violation)" -msgstr "Alguém modificou o form de comentários (violação de segurança)" +msgstr "Alguém modificou o formulário de comentários (violação de segurança)" -#: contrib/comments/views/comments.py:207 +#: contrib/comments/views/comments.py:206 #: contrib/comments/views/comments.py:292 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " "invalid" msgstr "" -"O form de comentários teve um parâmetro 'target' inválido -- o ID do objeto " -"é inválido" +"O formulário de comentários teve um parâmetro 'target' inválido -- o ID do " +"objeto é inválido" #: contrib/comments/views/comments.py:257 #: contrib/comments/views/comments.py:321 msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "O form de comentários não forneceu nem 'preview' nem 'post'" +msgstr "O formulário de comentários não forneceu nem 'preview' nem 'post'" + +#: contrib/comments/templates/comments/freeform.html:4 +#, fuzzy +msgid "Your name:" +msgstr "Seu nome:" + +#: contrib/comments/templates/comments/freeform.html:5 +#: contrib/comments/templates/comments/form.html:28 +#, fuzzy +msgid "Comment:" +msgstr "Comentário" + +#: contrib/comments/templates/comments/freeform.html:10 +#: contrib/comments/templates/comments/form.html:35 +#, fuzzy +msgid "Preview comment" +msgstr "Pré visualizar comentário" #: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:8 @@ -293,21 +1311,12 @@ msgid "Username:" msgstr "Usuário:" #: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Senha:" - -#: contrib/comments/templates/comments/form.html:6 -#, fuzzy -msgid "Forgotten your password?" -msgstr "Esqueceu sua senha?" - -#: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 -#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:4 @@ -323,6 +1332,16 @@ msgstr "Esqueceu sua senha?" msgid "Log out" msgstr "Encerrar sessão" +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Senha:" + +#: contrib/comments/templates/comments/form.html:8 +#, fuzzy +msgid "Forgotten your password?" +msgstr "Esqueceu sua senha?" + #: contrib/comments/templates/comments/form.html:12 #, fuzzy msgid "Ratings" @@ -342,22 +1361,91 @@ msgstr "Opcional" msgid "Post a photo" msgstr "Postar uma foto" -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -#, fuzzy -msgid "Comment:" -msgstr "Comentário" +#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315 +msgid "URL" +msgstr "URL" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -#, fuzzy -msgid "Preview comment" -msgstr "Pré visualizar comentário" +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "Exemplo: '/sobre/contato/'. Lembre-se das barras no começo e no final." -#: contrib/comments/templates/comments/freeform.html:4 +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "título" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "conteúdo" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "habilitar comentários" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "nome do modelo" + +#: contrib/flatpages/models.py:13 #, fuzzy -msgid "Your name:" -msgstr "Seu nome:" +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Exemplo: 'flatpages/contact_page.html'. Se não for informado, será utilizado " +"'flatpages/default.html'." + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "registro obrigatório" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Se estiver marcado, apenas usuários conectados poderão ver a página." + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "" + +#: contrib/sessions/models.py:68 +msgid "session key" +msgstr "chave da sessão" + +#: contrib/sessions/models.py:69 +msgid "session data" +msgstr "dados da sessão" + +#: contrib/sessions/models.py:70 +msgid "expire date" +msgstr "data de expiração" + +#: contrib/sessions/models.py:74 +msgid "session" +msgstr "sessão" + +#: contrib/sessions/models.py:75 +msgid "sessions" +msgstr "sessões" + +#: contrib/sites/models.py:10 +msgid "domain name" +msgstr "nome do domínio" + +#: contrib/sites/models.py:11 +msgid "display name" +msgstr "nome para exibição" + +#: contrib/sites/models.py:15 +msgid "site" +msgstr "site" + +#: contrib/sites/models.py:16 +msgid "sites" +msgstr "sites" #: contrib/admin/filterspecs.py:40 #, python-format @@ -369,7 +1457,7 @@ msgstr "" "
            \n" #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 msgid "All" msgstr "Todos" @@ -393,18 +1481,6 @@ msgstr "Este mês" msgid "This year" msgstr "Este ano" -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Sim" - -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "Não" - -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Desconhecido" - #: contrib/admin/models.py:16 msgid "action time" msgstr "hora da ação" @@ -433,25 +1509,16 @@ msgstr "entrada de log" msgid "log entries" msgstr "entradas de log" -#: contrib/admin/templatetags/admin_list.py:228 +#: contrib/admin/templatetags/admin_list.py:247 msgid "All dates" msgstr "Todas as datas" -#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 -#: contrib/auth/forms.py:41 -msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." -msgstr "" -"Por favor entre usuário e senha corretos. Note que ambos os " -"campos diferenciam maiúsculas e minúsculas." - -#: contrib/admin/views/decorators.py:23 +#: contrib/admin/views/decorators.py:24 #: contrib/admin/templates/admin/login.html:25 msgid "Log in" msgstr "Acessar" -#: contrib/admin/views/decorators.py:61 +#: contrib/admin/views/decorators.py:62 msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." @@ -459,7 +1526,7 @@ msgstr "" "Por favor acesse novamente, pois sua sessão expirou. Não se preocupe: Os " "dados enviados foram salvos." -#: contrib/admin/views/decorators.py:68 +#: 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." @@ -467,68 +1534,79 @@ msgstr "" "Parece que seu navegador não está configurado para aceitar cookies. Por " "favor habilite os cookies, recarregue esta página, e tente novamente." -#: contrib/admin/views/decorators.py:82 +#: contrib/admin/views/decorators.py:83 msgid "Usernames cannot contain the '@' character." msgstr "Nomes de usuário não podem conter o caractere '@'." -#: contrib/admin/views/decorators.py:84 +#: contrib/admin/views/decorators.py:85 #, python-format msgid "Your e-mail address is not your username. Try '%s' instead." msgstr "Seu endereço de e-mail não é seu nome de usuário. Tente usar '%s'" -#: contrib/admin/views/main.py:226 -msgid "Site administration" -msgstr "Administração do Site" - -#: contrib/admin/views/main.py:260 +#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." msgstr "O(A) %(name)s \"%(obj)s\" foi adicionado com sucesso." -#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 +#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 +#: contrib/admin/views/main.py:347 msgid "You may edit it again below." msgstr "Você pode editá-lo(a) de novo abaixo." -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#: contrib/admin/views/auth.py:30 +#, fuzzy +msgid "Add user" +msgstr "Adicionar usuário" + +#: contrib/admin/views/auth.py:57 +#, fuzzy +msgid "Password changed successfully." +msgstr "Senha alterada com sucesso" + +#: contrib/admin/views/auth.py:64 +#, fuzzy, python-format +msgid "Change password: %s" +msgstr "Alterar senha: %s" + +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Administração do Site" + +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #, python-format msgid "You may add another %s below." msgstr "Você pode adicionar outro(a) %s abaixo." -#: contrib/admin/views/main.py:290 +#: contrib/admin/views/main.py:289 #, python-format msgid "Add %s" msgstr "Adicionar %s" -#: contrib/admin/views/main.py:336 +#: contrib/admin/views/main.py:335 #, python-format msgid "Added %s." msgstr "Adicionado %s." -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "e" - -#: contrib/admin/views/main.py:338 +#: contrib/admin/views/main.py:337 #, python-format msgid "Changed %s." msgstr "Modificado %s." -#: contrib/admin/views/main.py:340 +#: contrib/admin/views/main.py:339 #, python-format msgid "Deleted %s." -msgstr "Apagado %s." +msgstr "Excluído %s." -#: contrib/admin/views/main.py:343 +#: contrib/admin/views/main.py:342 msgid "No fields changed." msgstr "Nenhum campo modificado." -#: contrib/admin/views/main.py:346 +#: contrib/admin/views/main.py:345 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." msgstr "O(A) %(name)s \"%(obj)s\" foi modificado com sucesso." -#: contrib/admin/views/main.py:354 +#: contrib/admin/views/main.py:353 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." @@ -634,10 +1712,6 @@ msgstr "Texto" msgid "Time" msgstr "Hora" -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" - #: contrib/admin/views/doc.py:301 msgid "U.S. state (two uppercase letters)" msgstr "Estado dos EUA (duas letras maiúsculas)" @@ -659,9 +1733,12 @@ msgstr "Documentação" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 -#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:15 +#: contrib/admin/templates/admin/auth/user/change_password.html:46 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:4 @@ -678,11 +1755,13 @@ msgid "Change password" msgstr "Alterar senha" #: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/base.html:28 -#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/invalid_setup.html:4 #: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/auth/user/change_password.html:12 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 @@ -693,7 +1772,7 @@ msgid "Home" msgstr "Início" #: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 +#: contrib/admin/templates/admin/change_form.html:21 msgid "History" msgstr "Histórico" @@ -721,13 +1800,15 @@ msgstr "" "Este objeto não tem um histórico de alterações. Ele provavelmente não foi " "adicionado por este site de administração." -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Site de administração do Django" +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Adicionar %(name)s" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administração do Django" +#: contrib/admin/templates/admin/filter.html:2 +#, fuzzy, python-format +msgid " By %(filter_title)s " +msgstr "Por %(title)s " #: contrib/admin/templates/admin/500.html:4 msgid "Server error" @@ -746,8 +1827,50 @@ 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 "" -"Houve um erro. Este foi reportado aos administradores do site através d e-" -"mail e deve ser corrigido em breve. Obrigado pela compreensão." +"Houve um erro. Este foi reportado aos administradores do site através do " +"e-mail e deve ser corrigido em breve. Obrigado pela compreensão." + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "Alguma coisa errada com a instalação do banco de dados. Certifique-se " +"que as tabelas necessárias foram criadas e que o banco de dados pode ser " +"acessado pelo usuário." + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Ir" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "1 resultado" +msgstr[1] "%(counter)s resultados" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Mostrar tudo" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Site de administração do Django" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administração do Django" + +#: contrib/admin/templates/admin/filters.html:4 +#, fuzzy +msgid "Filter" +msgstr "Filtro" #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 @@ -763,6 +1886,11 @@ msgstr "Desculpe, mas a página requisitada não pode ser encontrada." msgid "Models available in the %(name)s application." msgstr "Modelos disponíveis na aplicação %(name)s" +#: contrib/admin/templates/admin/index.html:18 +#, fuzzy, python-format +msgid "%(name)s" +msgstr "%(name)s" + #: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/change_form.html:15 msgid "Add" @@ -788,16 +1916,27 @@ msgstr "Minhas Ações" msgid "None available" msgstr "Nenhuma disponível" -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "Adicionar %(name)s" +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Ver no site" -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Você esqueceu sua senha?" +#: contrib/admin/templates/admin/change_form.html:32 +#: contrib/admin/templates/admin/auth/user/change_password.html:24 +#, fuzzy +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Por favor, corrija o erro abaixo." +msgstr[1] "Por favor, corrija os erros abaixo." -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Ordenação" + +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Ordem:" + +#: contrib/admin/templates/admin/base.html:25 msgid "Welcome," msgstr "Bem vindo," @@ -807,57 +1946,29 @@ msgid "Delete" msgstr "Apagar" #: contrib/admin/templates/admin/delete_confirmation.html:14 -#, python-format +#, fuzzy, python-format msgid "" -"Deleting the %(object_name)s '%(object)s' would result in deleting related " -"objects, but your account doesn't have permission to delete the following " -"types of objects:" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" msgstr "" -"A remoção de '%(object)s' %(object_name)s pode resultar na remoção de " -"objetos relacionados, mas sua conta não tem a permissão para remoção dos " +"A remoção de '%(object_name)s' %(escaped_object)s pode resultar na remoção " +"de objetos relacionados, mas sua conta não tem a permissão para remoção dos " "seguintes tipos de objetos:" #: contrib/admin/templates/admin/delete_confirmation.html:21 -#, python-format +#, fuzzy, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " -"the following related items will be deleted:" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" msgstr "" -"Você tem certeza que quer remover o \"%(object)s\" %(object_name)s? Todos os " -"seguintes itens relacionados serão removidos:" +"Você tem certeza que quer remover o %(object_name)s \"%(escaped_object)s\"? " +"Todos os seguintes itens relacionados serão removidos:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" msgstr "Sim, tenho certeza" -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(title)s " -msgstr "Por %(title)s " - -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Ir" - -#: contrib/admin/templates/admin/change_form.html:21 -msgid "View on site" -msgstr "Ver no site" - -#: contrib/admin/templates/admin/change_form.html:30 -#, fuzzy -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "Por favor, corrija o erro abaixo." -msgstr[1] "Por favor, corrija os erros abaixo." - -#: contrib/admin/templates/admin/change_form.html:48 -msgid "Ordering" -msgstr "Ordenação" - -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "Ordem:" - #: contrib/admin/templates/admin/submit_line.html:4 msgid "Save as new" msgstr "Salvar como novo" @@ -874,6 +1985,40 @@ msgstr "Salvar e continuar editando" msgid "Save" msgstr "Salvar" +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Informe uma nova senha para o usuário %(username)s." + +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#, fuzzy +msgid "Password" +msgstr "Senha:" + +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#, fuzzy +msgid "Password (again)" +msgstr "Senha (novamente)" + +#: contrib/admin/templates/admin/auth/user/change_password.html:40 +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +msgid "Enter the same password as above, for verification." +msgstr "Informe a mesma senha digitada acima, para verificação." + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "Primeiro, informe um nome de usuário e senha. Então, você será capaz " +"de editar mais opções do usuário." + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +#, fuzzy +msgid "Username" +msgstr "Usuário:" + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -940,7 +2085,7 @@ msgid "" "password twice so we can verify you typed it in correctly." msgstr "" "Por favor, informe sua senha antiga, por segurança, e então informe sua nova " -"senha duas vezes para que possamos verificar que se ela está correta." +"senha duas vezes para que possamos verificar se você digitou corretamente." #: contrib/admin/templates/registration/password_change_form.html:17 msgid "Old password:" @@ -987,7 +2132,7 @@ msgstr "Obrigado por usar nosso site!" #: contrib/admin/templates/registration/password_reset_email.html:15 #, python-format msgid "The %(site_name)s team" -msgstr "Time do %(site_name)s" +msgstr "Equipe do %(site_name)s" #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Bookmarklets" @@ -1045,9 +2190,7 @@ msgstr "Editar este objeto (janela atual)" #: contrib/admin/templates/admin_doc/bookmarklets.html:26 msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" -"Vai para a página de administração que representam um objeto " -"único." +msgstr "Vai para a página de administração que representam um objeto único." #: contrib/admin/templates/admin_doc/bookmarklets.html:28 msgid "Edit this object (new window)" @@ -1057,286 +2200,213 @@ msgstr "Editar este objeto (nova janela)" msgid "As above, but opens the admin page in a new window." msgstr "Como acima, mas abre a página de administração em uma nova janela." -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Data:" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Hora:" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Atualmente:" - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "Modificar:" - -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "redirecionar de" - -#: contrib/redirects/models.py:8 -msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" -"Deve conter um caminho absoluto, excluindo o nome de domínio. Exemplo: '/" -"eventos/busca/'." - -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "redirecionar para" - -#: contrib/redirects/models.py:10 -msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." -msgstr "" -"Deve conter um caminho absoluto (como acima) ou uma URL completa, começando " -"com 'http://'." - -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "redirecionar" - -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "redirecionamentos" - -#: contrib/flatpages/models.py:8 -msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "Exemplo: '/sobre/contato/'. Lembre-se das barras no começo e no final." - -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "título" - -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "conteúdo" - -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "habilitar comentários" - -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "nome do modelo" - -#: contrib/flatpages/models.py:13 -msgid "" -"Example: 'flatpages/contact_page'. If this isn't provided, the system will " -"use 'flatpages/default'." -msgstr "" -"Exemplo: 'flatfiles/contact_page'. Se não for informado, será utilizado " -"'flatfiles/default'." - -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "registro obrigatório" - -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "Se estiver marcado, apenas usuários conectados poderão ver a página." - -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "página plana" - -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "páginas planas" - -#: contrib/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "nome" - -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "nome código" - -#: contrib/auth/models.py:17 -#, fuzzy -msgid "permission" -msgstr "permissão" - -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -#, fuzzy -msgid "permissions" -msgstr "permissões" - -#: contrib/auth/models.py:29 -#, fuzzy -msgid "group" -msgstr "grupo" - -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -#, fuzzy -msgid "groups" -msgstr "grupos" - -#: contrib/auth/models.py:55 -msgid "username" -msgstr "usuário" - -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "primeiro nome" - -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "último nome" - -#: contrib/auth/models.py:58 -msgid "e-mail address" -msgstr "endereço de e-mail" - -#: contrib/auth/models.py:59 -msgid "password" -msgstr "senha" - -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Use '[algo]$[salt]$[hexdigest]'" - -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "status da equipe" - -#: contrib/auth/models.py:60 -msgid "Designates whether the user can log into this admin site." -msgstr "Informa se o usuário pode acessar este site de administração." - -#: contrib/auth/models.py:61 -msgid "active" -msgstr "ativar" - -#: contrib/auth/models.py:62 -msgid "superuser status" -msgstr "status de superusuário" - -#: contrib/auth/models.py:63 -msgid "last login" -msgstr "último login" - -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "data de registro" - -#: contrib/auth/models.py:66 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." -msgstr "" -"Em adição às permissões atribuídas manualmente, este usuário também terá " -"todas as permissões dadas a cada grupo que participar." - -#: contrib/auth/models.py:67 -#, fuzzy -msgid "user permissions" -msgstr "permissões do usuário" - -#: contrib/auth/models.py:70 -#, fuzzy -msgid "user" -msgstr "usuário" - -#: contrib/auth/models.py:71 -#, fuzzy -msgid "users" -msgstr "usuários" - -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "Informações pessoais" - -#: contrib/auth/models.py:77 -msgid "Permissions" -msgstr "Permissões" - -#: contrib/auth/models.py:78 -msgid "Important dates" -msgstr "Datas importantes" - -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "Grupos" - -#: contrib/auth/models.py:219 -#, fuzzy -msgid "message" -msgstr "mensagem" - -#: contrib/auth/forms.py:30 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -msgstr "" -"Seu navegador Web não parece estar com os cookies habilitados. Cookies são " -"requeridos para acessar." - -#: contrib/contenttypes/models.py:25 -#, fuzzy -msgid "python model class name" -msgstr "nome do módulo python" - -#: contrib/contenttypes/models.py:28 -msgid "content type" -msgstr "tipo de conteúdo" - -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "tipos de conteúdo" - -#: contrib/sessions/models.py:35 -msgid "session key" -msgstr "chave da sessão" - -#: contrib/sessions/models.py:36 -msgid "session data" -msgstr "dados da sessão" - -#: contrib/sessions/models.py:37 -msgid "expire date" -msgstr "data de expiração" - -#: contrib/sessions/models.py:41 -msgid "session" -msgstr "sessão" - -#: contrib/sessions/models.py:42 -msgid "sessions" -msgstr "sessões" - -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "nome do domínio" - -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "nome para exibição" - -#: contrib/sites/models.py:15 -msgid "site" -msgstr "site" - -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "sites" - -#: utils/translation.py:360 -msgid "DATE_FORMAT" +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." msgstr "" -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" +#: contrib/localflavor/usa/forms.py:17 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." msgstr "" -#: utils/translation.py:362 -msgid "TIME_FORMAT" +#: contrib/localflavor/fr/forms.py:17 +#, fuzzy +msgid "Enter a zip code in the format XXXXX." +msgstr "" + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "" + +#: 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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 "" #: utils/dates.py:6 @@ -1534,483 +2604,60 @@ msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minutos" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "Bengalês" - -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "Tcheco" - -#: conf/global_settings.py:39 -msgid "Welsh" +#: utils/dateformat.py:40 +msgid "p.m." msgstr "" -#: conf/global_settings.py:40 -#, fuzzy -msgid "Danish" -msgstr "Dinamarquês" - -#: conf/global_settings.py:41 -msgid "German" -msgstr "Alemão" - -#: conf/global_settings.py:42 -msgid "Greek" -msgstr "Grego" - -#: conf/global_settings.py:43 -msgid "English" -msgstr "Inglês" - -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "Espanhol" - -#: conf/global_settings.py:45 -msgid "French" -msgstr "Francês" - -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "Galiciano" - -#: conf/global_settings.py:47 -msgid "Hungarian" -msgstr "Húngaro" - -#: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "Hebraico" - -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "Islandês" - -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "Italiano" - -#: conf/global_settings.py:51 -msgid "Japanese" -msgstr "Japonês" - -#: conf/global_settings.py:52 -msgid "Dutch" -msgstr "Alemão" - -#: conf/global_settings.py:53 -msgid "Norwegian" -msgstr "Norueguês" - -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "Brasileiro" - -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "Romeno" - -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "Russo" - -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "Eslovaco" - -#: conf/global_settings.py:58 -#, fuzzy -msgid "Slovenian" -msgstr "Esloveno" - -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "Sérvio" - -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "Sueco" - -#: conf/global_settings.py:61 -#, fuzzy -msgid "Ukrainian" -msgstr "Ucraniano" - -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "Chinês Simplificado" - -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "Chinês Tradicional" - -#: core/validators.py:60 -msgid "This value must contain only letters, numbers and underscores." -msgstr "Deve conter apenas letras, números e sublinhados (_)." - -#: core/validators.py:64 -#, fuzzy -msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." -msgstr "Deve conter apenas letras, números, sublinhados (_) e barras (/)." - -#: core/validators.py:72 -msgid "Uppercase letters are not allowed here." -msgstr "Letras em maiúsculo não são permitidas aqui." - -#: core/validators.py:76 -msgid "Lowercase letters are not allowed here." -msgstr "Letras em minúsculo não são permitidas aqui." - -#: core/validators.py:83 -msgid "Enter only digits separated by commas." -msgstr "Informe apenas dígitos separados por vírgulas." - -#: core/validators.py:95 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Informe endereços de email válidos separados por vírgulas." - -#: core/validators.py:99 -msgid "Please enter a valid IP address." -msgstr "Informe um endereço IP válido." - -#: core/validators.py:103 -msgid "Empty values are not allowed here." -msgstr "Valores em branco não são permitidos." - -#: core/validators.py:107 -msgid "Non-numeric characters aren't allowed here." -msgstr "Caracteres não numéricos não são permitidos." - -#: core/validators.py:111 -msgid "This value can't be comprised solely of digits." -msgstr "Este valor não pode conter apenas dígitos." - -#: core/validators.py:116 -msgid "Enter a whole number." -msgstr "Informe um número completo." - -#: core/validators.py:120 -msgid "Only alphabetical characters are allowed here." -msgstr "Apenas caracteres do alfabeto são permitidos aqui." - -#: core/validators.py:124 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Informe uma data válida no formato AAAA-MM-DD." - -#: core/validators.py:128 -msgid "Enter a valid time in HH:MM format." -msgstr "Informe uma hora válida no formato HH:MM." - -#: core/validators.py:132 db/models/fields/__init__.py:468 -msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "Informe uma data/hora válida no formato AAAA-MM-DD HH:MM." - -#: core/validators.py:136 -msgid "Enter a valid e-mail address." -msgstr "Informe um endereço de email válido." - -#: core/validators.py:148 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." +#: utils/dateformat.py:41 +msgid "a.m." msgstr "" -"Envie uma imagem válida. O arquivo enviado não é uma imagem ou está " -"corrompido." -#: core/validators.py:155 -#, python-format -msgid "The URL %s does not point to a valid image." -msgstr "A URL %s não aponta para um imagem válida." - -#: core/validators.py:159 -#, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +#: utils/dateformat.py:46 +msgid "PM" msgstr "" -"Números de telefone deves estar no formato XXX-XXX-XXXX.\"%s\" é inválido." -#: core/validators.py:167 -#, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "A URL %s não aponta para um vídeo QuickTime válido." - -#: core/validators.py:171 -msgid "A valid URL is required." -msgstr "Uma URL válida é exigida." - -#: core/validators.py:185 -#, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" +#: utils/dateformat.py:47 +msgid "AM" msgstr "" -"HTML válido é exigido. Estes são os erros específicos:\n" -"%s" -#: core/validators.py:192 -#, python-format -msgid "Badly formed XML: %s" -msgstr "XML mal formado: %s" +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "meia noite" -#: core/validators.py:202 -#, python-format -msgid "Invalid URL: %s" -msgstr "URL inválida: %s" +#: utils/dateformat.py:97 +msgid "noon" +msgstr "meio dia" -#: core/validators.py:206 core/validators.py:208 -#, python-format -msgid "The URL %s is a broken link." -msgstr "A URL %s é um link quebrado." - -#: core/validators.py:214 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Informe uma abreviação válida de nome de um estado dos EUA." - -#: core/validators.py:229 -#, fuzzy, 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] "Lave sua boca! A palavra %s não é permitida aqui." -msgstr[1] "Lave sua boca! As palavras %s não são permitidas aqui." - -#: core/validators.py:236 -#, python-format -msgid "This field must match the '%s' field." -msgstr "Este campo deve ser igual ao campo '%s'." - -#: core/validators.py:255 -msgid "Please enter something for at least one field." -msgstr "Informe algo em pelo menos um campo." - -#: core/validators.py:264 core/validators.py:275 -msgid "Please enter both fields or leave them both empty." -msgstr "Informe ambos os campos ou deixe ambos vazios." - -#: core/validators.py:282 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "Este campo deve ser informado se o campo %(field)s for %(value)s." - -#: core/validators.py:294 -#, python-format -msgid "This field must be given if %(field)s is not %(value)s" -msgstr "Este campo deve ser dado se o campo %(field)s não for %(value)s." - -#: core/validators.py:313 -msgid "Duplicate values are not allowed." -msgstr "Valores duplicados não são permitidos." - -#: core/validators.py:336 -#, python-format -msgid "This value must be a power of %s." -msgstr "Este valor deve ser uma potência de %s." - -#: core/validators.py:347 -msgid "Please enter a valid decimal number." -msgstr "Informe um número decimal válido." - -#: core/validators.py:349 -#, fuzzy, 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." -msgstr[0] "Por favor entre com um número decimal com no máximo %s digito." -msgstr[1] "Por favor entre com um número decimal com no máximo %s digitos." - -#: core/validators.py:352 -#, fuzzy, 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." -msgstr[0] "Informe um número decimal com no máximo %s casa decimal." -msgstr[1] "Informe um número decimal com no máximo %s casas decimais." - -#: core/validators.py:362 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Verifique se o arquivo enviado tem pelo menos %s bytes." - -#: core/validators.py:363 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "Verifique se o arquivo enviado tem no máximo %s bytes." - -#: core/validators.py:376 -msgid "The format for this field is wrong." -msgstr "O formato deste campo está errado." - -#: core/validators.py:391 -msgid "This field is invalid." -msgstr "Este campo é inválido." - -#: core/validators.py:426 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "Não foi possível receber dados de %s." - -#: core/validators.py:429 -#, python-format -msgid "" -"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" msgstr "" -"A URL %(url)s retornou um cabeçalho '%(contenttype)s' de Content-Type " -"inválido." -#: core/validators.py:462 -#, python-format -msgid "" -"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " -"\"%(start)s\".)" +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" msgstr "" -"Por favor, feche a tag %(tag)s na linha %(line)s. (A linha começa com \"%" -"(start)s\".)" -#: core/validators.py:466 -#, python-format -msgid "" -"Some text starting on line %(line)s is not allowed in that context. (Line " -"starts with \"%(start)s\".)" +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" msgstr "" -"Algum texto começando na linha %(line)s não é permitido no contexto. (Linha " -"começa com \"%(start)s\".)" -#: core/validators.py:471 -#, python-format -msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" msgstr "" -"\"%(attr)s\" na linha %(line)s não é um atributo válido. (Linha começa com " -"\"%(start)s\".)" -#: core/validators.py:476 -#, python-format -msgid "" -"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" -"(start)s\".)" +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" msgstr "" -"\"<%(tag)s>\" na linha %(line)s é uma tag inválida. (Linha começa com \"%" -"(start)s\".)" -#: core/validators.py:480 -#, python-format -msgid "" -"A tag on line %(line)s is missing one or more required attributes. (Line " -"starts with \"%(start)s\".)" -msgstr "" -"Uma tag na linha %(line)s está não apresenta um ou mais atributos exigidos." -"(Linha começa com \"%(start)s\".)" - -#: core/validators.py:485 -#, python-format -msgid "" -"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " -"starts with \"%(start)s\".)" -msgstr "" -"O atributo \"%(attr)s\" na linha %(line)s tem um valor inválido. (Linha " -"começa com \"%(start)s\".)" - -#: db/models/manipulators.py:302 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "%(object)s com este %(type)s já existe para o %(field)s dado." - -#: db/models/fields/__init__.py:40 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "%(optname)s com este %(fieldname)s já existe." - -#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 -#: forms/__init__.py:346 -msgid "This field is required." -msgstr "Este campo é requerido." - -#: db/models/fields/__init__.py:337 -#, fuzzy -msgid "This value must be an integer." -msgstr "Este valor deve ser um inteiro." - -#: db/models/fields/__init__.py:369 -#, fuzzy -msgid "This value must be either True or False." -msgstr "Este valor deve ser Verdadeiro ou Falso." - -#: db/models/fields/__init__.py:385 -#, fuzzy -msgid "This field cannot be null." -msgstr "Este campo não pode ser nulo." - -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "Informe um nome de arquivo válido." - -#: db/models/fields/related.py:43 -#, python-format -msgid "Please enter a valid %s." -msgstr "Por favor informe um %s válido." - -#: db/models/fields/related.py:579 -#, fuzzy -msgid "Separate multiple IDs with commas." -msgstr "Separe IDs múltiplos com vírgulas." - -#: db/models/fields/related.py:581 -#, fuzzy -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" -" Mantenha pressionado \"Control\", ou \"Command\" no Mac para selecionar " -"mais de uma opção." - -#: db/models/fields/related.py:625 -#, fuzzy, 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." -msgstr[0] "" -"Por favor, entre IDs válidos para %(self)s. O valor %(value)r é inválido." -msgstr[1] "" -"Por favor, entre IDs válidos para %(self)s. Os valores %(value)r são inválidos." - -#: forms/__init__.py:380 -#, fuzzy, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "Certifique-se de que seu texto tenha menos que %s caractere." -msgstr[1] "Certifique-se de que seu texto tenha menos que %s caracteres." - -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "Não são permitidas quebras de linha aqui." - -#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 -#, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "Selecione uma escolha válida; '%(data)s' não está em %(choices)s." - -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "O arquivo enviado está vazio." - -#: forms/__init__.py:699 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Informe um número inteiro entre -32.768 e 32.767" - -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "Informe um número positivo" - -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Informe um número inteiro entre 0 e 32.767." - -#: template/defaultfilters.py:379 +#: template/defaultfilters.py:491 msgid "yes,no,maybe" msgstr "sim,não,talvez" +#~ msgid "Have you forgotten your password?" +#~ msgstr "Você esqueceu sua senha?" + +#~ msgid "Use '[algo]$[salt]$[hexdigest]'" +#~ msgstr "Use '[algo]$[salt]$[hexdigest]'" + #~ msgid "Comment" #~ msgstr "Comentário" diff --git a/django/conf/locale/te/LC_MESSAGES/django.mo b/django/conf/locale/te/LC_MESSAGES/django.mo index 29360bb660..318ce76779 100644 Binary files a/django/conf/locale/te/LC_MESSAGES/django.mo and b/django/conf/locale/te/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/te/LC_MESSAGES/django.po b/django/conf/locale/te/LC_MESSAGES/django.po index 0057bf97de..b2e450c0a7 100644 --- a/django/conf/locale/te/LC_MESSAGES/django.po +++ b/django/conf/locale/te/LC_MESSAGES/django.po @@ -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)లు కన్న తక్కువ సమర్పించాడు " "వ్యాఖ్యానము:\n" "\n" "%(text)s" msgstr[1] "" -"ఈ వ్యాఖ్యానము చేసిన యూఙర్ %(count)లు కన్న తక్కువ సమర్పించాడు" +"ఈ వ్యాఖ్యానము చేసిన యూజర్ %(count)లు కన్న తక్కువ సమర్పించాడు" "వ్యాఖ్యానములు:\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 @@ -353,15 +353,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 +413,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 +430,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 +454,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 +464,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 +493,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 @@ -523,7 +523,7 @@ msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %( #: contrib/admin/views/main.py:511 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "%(name)లు \"%(obj)s\"ఙయప్రదంగా తీసివేయబడ్డడి" +msgstr "%(name)లు \"%(obj)s\"జయప్రదంగా తీసివేయబడ్డడి" #: contrib/admin/views/main.py:514 msgid "Are you sure?" @@ -601,7 +601,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 +682,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 +742,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 +760,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,16 +782,16 @@ msgstr "సర్వర్ తప్పు (500)" 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 @@ -801,12 +801,12 @@ msgstr "మొడల్ లు %(name)లో దొరికే అప్ప్ #: contrib/admin/templates/admin/index.html:18 #, python-format msgid "%(name)s" -msgstr "" +msgstr "%(name)లు" #: 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 +831,7 @@ msgstr "ఏమి దొరకలేదు" #: contrib/admin/templates/admin/change_list.html:11 #, python-format msgid "Add %(name)s" -msgstr "%(name)లు ఙత చేయు" +msgstr "%(name)లు జత చేయు" #: contrib/admin/templates/admin/login.html:22 msgid "Have you forgotten your password?" @@ -943,7 +943,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 +967,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 +1005,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 +1051,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 +1103,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 +1197,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 +1237,7 @@ msgstr "గుంపులు" #: contrib/auth/models.py:90 msgid "username" -msgstr "యూఙర్ పేరు" +msgstr "యూజర్ పేరు" #: contrib/auth/models.py:90 msgid "" @@ -1309,15 +1309,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 +1427,7 @@ msgstr "ఆదివారము" #: utils/dates.py:14 msgid "January" -msgstr "ఙాన్వరి " +msgstr "జాన్వరి " #: utils/dates.py:14 msgid "February" @@ -1447,11 +1447,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 +1475,7 @@ msgstr "డిసెంబర్" #: utils/dates.py:19 msgid "jan" -msgstr "ఙాన్" +msgstr "జాన్" #: utils/dates.py:19 msgid "feb" @@ -1495,11 +1495,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 +1523,7 @@ msgstr "డిస్" #: utils/dates.py:27 msgid "Jan." -msgstr "ఙాన్" +msgstr "జాన్" #: utils/dates.py:27 msgid "Feb." @@ -1570,8 +1570,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 +1615,7 @@ msgstr "బెంగాలి" #: conf/global_settings.py:41 msgid "Czech" -msgstr "క్ఙెఖ్" +msgstr "క్జెఖ్" #: conf/global_settings.py:42 msgid "Welsh" @@ -1627,7 +1627,7 @@ msgstr "డానిశ్" #: conf/global_settings.py:44 msgid "German" -msgstr "ఙెర్మన్" +msgstr "జెర్మన్" #: conf/global_settings.py:45 msgid "Greek" @@ -1643,7 +1643,7 @@ msgstr "స్పానిష్" #: conf/global_settings.py:48 msgid "Argentinean Spanish" -msgstr "అర్ఙంటీనా స్పానిష్" +msgstr "అర్జంటీనా స్పానిష్" #: conf/global_settings.py:49 msgid "Finnish" @@ -1675,7 +1675,7 @@ msgstr "ఇటాలియవ్" #: conf/global_settings.py:56 msgid "Japanese" -msgstr "ఙపనీస్" +msgstr "జపనీస్" #: conf/global_settings.py:57 msgid "Dutch" @@ -1683,11 +1683,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" @@ -1865,7 +1865,7 @@ msgstr "" #: core/validators.py:242 msgid "Enter a valid U.S. state abbreviation." -msgstr "దయచేసి సరైన అగ్ర రాఙ్య సంక్షేపము చేసిన రాష్ట్రము పేరు ఇవ్వండి" +msgstr "దయచేసి సరైన అగ్ర రాజ్య సంక్షేపము చేసిన రాష్ట్రము పేరు ఇవ్వండి" #: core/validators.py:256 #, python-format @@ -2004,12 +2004,12 @@ msgstr "" #: views/generic/create_update.py:43 #, python-format msgid "The %(verbose_name)s was created successfully." -msgstr "%(verbose_name)లు ఙయప్రదంగా తయారయింది" +msgstr "%(verbose_name)లు జయప్రదంగా తయారయింది" #: views/generic/create_update.py:117 #, python-format msgid "The %(verbose_name)s was updated successfully." -msgstr "%(verbose_name)లు ఙయప్రదంగా @@" +msgstr "%(verbose_name)లు జయప్రదంగా @@" #: views/generic/create_update.py:184 #, python-format diff --git a/django/conf/urls/defaults.py b/django/conf/urls/defaults.py index 17fe603d96..49bc176ef3 100644 --- a/django/conf/urls/defaults.py +++ b/django/conf/urls/defaults.py @@ -1,19 +1,25 @@ from django.core.urlresolvers import RegexURLPattern, RegexURLResolver -__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)) + for t in args: + if isinstance(t, (list, tuple)): + pattern_list.append(url(prefix=prefix, *t)) else: - pattern_list.append(RegexURLPattern(regex, prefix and (prefix + '.' + view_or_include) or view_or_include, *default_kwargs)) + 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: + return RegexURLPattern(regex, prefix and (prefix + '.' + view) or view, kwargs, name) + diff --git a/django/contrib/comments/models.py b/django/contrib/comments/models.py index 4517f0d265..e1ff011210 100644 --- a/django/contrib/comments/models.py +++ b/django/contrib/comments/models.py @@ -210,7 +210,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() diff --git a/django/contrib/flatpages/models.py b/django/contrib/flatpages/models.py index bc2a392121..8d0b2c0d90 100644 --- a/django/contrib/flatpages/models.py +++ b/django/contrib/flatpages/models.py @@ -4,7 +4,7 @@ from django.contrib.sites.models import Site from django.utils.translation import gettext_lazy as _ class FlatPage(models.Model): - url = models.CharField(_('URL'), maxlength=100, validator_list=[validators.isAlphaNumericURL], + url = models.CharField(_('URL'), maxlength=100, validator_list=[validators.isAlphaNumericURL], db_index=True, help_text=_("Example: '/about/contact/'. Make sure to have leading and trailing slashes.")) title = models.CharField(_('title'), maxlength=200) content = models.TextField(_('content')) diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py index a399e7eef1..a16cbcc9bb 100644 --- a/django/contrib/humanize/templatetags/humanize.py +++ b/django/contrib/humanize/templatetags/humanize.py @@ -43,7 +43,7 @@ def intword(value): if value < 1000000: return value if value < 1000000000: - new_value = value / 1000000.0 + new_value = value / 1000000.0 return ngettext('%(value).1f million', '%(value).1f million', new_value) % {'value': new_value} if value < 1000000000000: new_value = value / 1000000000.0 diff --git a/django/contrib/localflavor/br/__init__.py b/django/contrib/localflavor/br/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/br/br_states.py b/django/contrib/localflavor/br/br_states.py new file mode 100644 index 0000000000..c6ce0a1bb7 --- /dev/null +++ b/django/contrib/localflavor/br/br_states.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +""" +A brazilian mapping of state misspellings/abbreviations to normalized +abbreviations, and an alphabetical list of states for use as `choices +in a formfield. + +This exists in this standalone file so that it's only imported into +memory when explicitly needed. +""" + +STATE_CHOICES = ( + ('AC', 'Acre'), + ('AL', 'Alagoas'), + ('AP', u'Amapá'), + ('AM', 'Amazonas'), + ('BA', 'Bahia'), + ('CE', u'Ceará'), + ('DF', 'Distrito Federal'), + ('ES', u'Espírito Santo'), + ('GO', u'Goiás'), + ('MA', u'Maranhão'), + ('MT', 'Mato Grosso'), + ('MS', 'Mato Grosso do Sul'), + ('MG', 'Minas Gerais'), + ('PA', u'Pará'), + ('PB', u'Paraíba'), + ('PR', u'Paraná'), + ('PE', 'Pernambuco'), + ('PI', u'Piauí'), + ('RJ', 'Rio de Janeiro'), + ('RN', 'Rio Grande do Norte'), + ('RS', 'Rio Grande do Sul'), + ('RO', u'Rondônia'), + ('RR', 'Roraima'), + ('SC', 'Santa Catarina'), + ('SP', u'São Paulo'), + ('SE', 'Sergipe'), + ('TO', 'Tocantins'), +) diff --git a/django/contrib/localflavor/br/forms.py b/django/contrib/localflavor/br/forms.py new file mode 100644 index 0000000000..29ad4df53d --- /dev/null +++ b/django/contrib/localflavor/br/forms.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +""" +BR-specific Form helpers +""" + +from django.newforms import ValidationError +from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES +from django.utils.encoding import smart_unicode +from django.utils.translation import gettext +import re + +phone_digits_re = re.compile(r'^(\d{2})[-\.]?(\d{4})[-\.]?(\d{4})$') + +class BRZipCodeField(RegexField): + def __init__(self, *args, **kwargs): + super(BRZipCodeField, self).__init__(r'^\d{5}-\d{3}$', + max_length=None, min_length=None, + error_message=gettext(u'Enter a zip code in the format XXXXX-XXX.'), + *args, **kwargs) + +class BRPhoneNumberField(Field): + def clean(self, value): + super(BRPhoneNumberField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + value = re.sub('(\(|\)|\s+)', '', smart_unicode(value)) + m = phone_digits_re.search(value) + if m: + return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) + raise ValidationError(gettext(u'Phone numbers must be in XX-XXXX-XXXX format.')) + +class BRStateSelect(Select): + """ + A Select widget that uses a list of brazilian states/territories + as its choices. + """ + def __init__(self, attrs=None): + from br_states import STATE_CHOICES # relative import + super(BRStateSelect, self).__init__(attrs, choices=STATE_CHOICES) diff --git a/django/contrib/localflavor/de/__init__.py b/django/contrib/localflavor/de/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/de/de_states.py b/django/contrib/localflavor/de/de_states.py new file mode 100644 index 0000000000..c00fd2e293 --- /dev/null +++ b/django/contrib/localflavor/de/de_states.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -* +from django.utils.translation import gettext_lazy as _ + +STATE_CHOICES = ( + ('BW', _('Baden-Wuerttemberg')), + ('BY', _('Bavaria')), + ('BE', _('Berlin')), + ('BB', _('Brandenburg')), + ('HB', _('Bremen')), + ('HH', _('Hamburg')), + ('HE', _('Hessen')), + ('MV', _('Mecklenburg-Western Pomerania')), + ('NI', _('Lower Saxony')), + ('NW', _('North Rhine-Westphalia')), + ('RP', _('Rhineland-Palatinate')), + ('SL', _('Saarland')), + ('SN', _('Saxony')), + ('ST', _('Saxony-Anhalt')), + ('SH', _('Schleswig-Holstein')), + ('TH', _('Thuringia')), +) diff --git a/django/contrib/localflavor/de/forms.py b/django/contrib/localflavor/de/forms.py new file mode 100644 index 0000000000..8e140c125f --- /dev/null +++ b/django/contrib/localflavor/de/forms.py @@ -0,0 +1,79 @@ +""" +DE-specific Form helpers +""" + +from django.newforms import ValidationError +from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES +from django.utils.translation import gettext +import re + +id_re = re.compile(r"^(?P\d{10})(?P\w{1,3})[-\ ]?(?P\d{7})[-\ ]?(?P\d{7})[-\ ]?(?P\d{1})$") + +class DEZipCodeField(RegexField): + def __init__(self, *args, **kwargs): + super(DEZipCodeField, self).__init__(r'^\d{5}$', + max_length=None, min_length=None, + error_message=gettext(u'Enter a zip code in the format XXXXX.'), + *args, **kwargs) + +class DEStateSelect(Select): + """ + A Select widget that uses a list of DE states as its choices. + """ + def __init__(self, attrs=None): + from de_states import STATE_CHOICES # relative import + super(DEStateSelect, self).__init__(attrs, choices=STATE_CHOICES) + +class DEIdentityCardNumberField(Field): + """ + A German identity card number. + + Checks the following rules to determine whether the number is valid: + + * Conforms to the XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format. + * No group consists entirely of zeroes. + * Included checksums match calculated checksums + + Algorithm is documented at http://de.wikipedia.org/wiki/Personalausweis + """ + def has_valid_checksum(self, number): + given_number, given_checksum = number[:-1], number[-1] + calculated_checksum = 0 + fragment = "" + parameter = 7 + + for i in range(len(given_number)): + fragment = str(int(given_number[i]) * parameter) + if fragment.isalnum(): + calculated_checksum += int(fragment[-1]) + if parameter == 1: + parameter = 7 + elif parameter == 3: + parameter = 1 + elif parameter ==7: + parameter = 3 + + return str(calculated_checksum)[-1] == given_checksum + + def clean(self, value): + super(DEIdentityCardNumberField, self).clean(value) + error_msg = gettext(u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.') + if value in EMPTY_VALUES: + return u'' + match = re.match(id_re, value) + if not match: + raise ValidationError(error_msg) + + gd = match.groupdict() + residence, origin = gd['residence'], gd['origin'] + birthday, validity, checksum = gd['birthday'], gd['validity'], gd['checksum'] + + if residence == '0000000000' or birthday == '0000000' or validity == '0000000': + raise ValidationError(error_msg) + + all_digits = "%s%s%s%s" % (residence, birthday, validity, checksum) + if not self.has_valid_checksum(residence) or not self.has_valid_checksum(birthday) or \ + not self.has_valid_checksum(validity) or not self.has_valid_checksum(all_digits): + raise ValidationError(error_msg) + + return u'%s%s-%s-%s-%s' % (residence, origin, birthday, validity, checksum) diff --git a/django/contrib/localflavor/fi/__init__.py b/django/contrib/localflavor/fi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/fi/fi_municipalities.py b/django/contrib/localflavor/fi/fi_municipalities.py new file mode 100644 index 0000000000..965a52d327 --- /dev/null +++ b/django/contrib/localflavor/fi/fi_municipalities.py @@ -0,0 +1,427 @@ +# -*- coding: utf-8 -*- +""" +An alphabetical list of Finnish municipalities for use as `choices` in a +formfield. + +This exists in this standalone file so that it's only imported into memory +when explicitly needed. +""" + +MUNICIPALITY_CHOICES = ( + ('akaa', u"Akaa"), + ('alaharma', u"Alahärmä"), + ('alajarvi', u"Alajärvi"), + ('alastaro', u"Alastaro"), + ('alavieska', u"Alavieska"), + ('alavus', u"Alavus"), + ('anjalankoski', u"Anjalankoski"), + ('artjarvi', u"Artjärvi"), + ('asikkala', u"Asikkala"), + ('askainen', u"Askainen"), + ('askola', u"Askola"), + ('aura', u"Aura"), + ('brando', u"Brändö"), + ('dragsfjard', u"Dragsfjärd"), + ('eckero', u"Eckerö"), + ('elimaki', u"Elimäki"), + ('eno', u"Eno"), + ('enonkoski', u"Enonkoski"), + ('enontekio', u"Enontekiö"), + ('espoo', u"Espoo"), + ('eura', u"Eura"), + ('eurajoki', u"Eurajoki"), + ('evijarvi', u"Evijärvi"), + ('finstrom', u"Finström"), + ('forssa', u"Forssa"), + ('foglo', u"Föglö"), + ('geta', u"Geta"), + ('haapajarvi', u"Haapajärvi"), + ('haapavesi', u"Haapavesi"), + ('hailuoto', u"Hailuoto"), + ('halikko', u"Halikko"), + ('halsua', u"Halsua"), + ('hamina', u"Hamina"), + ('hammarland', u"Hammarland"), + ('hankasalmi', u"Hankasalmi"), + ('hanko', u"Hanko"), + ('harjavalta', u"Harjavalta"), + ('hartola', u"Hartola"), + ('hattula', u"Hattula"), + ('hauho', u"Hauho"), + ('haukipudas', u"Haukipudas"), + ('hausjarvi', u"Hausjärvi"), + ('heinola', u"Heinola"), + ('heinavesi', u"Heinävesi"), + ('helsinki', u"Helsinki"), + ('himanka', u"Himanka"), + ('hirvensalmi', u"Hirvensalmi"), + ('hollola', u"Hollola"), + ('honkajoki', u"Honkajoki"), + ('houtskari', u"Houtskari"), + ('huittinen', u"Huittinen"), + ('humppila', u"Humppila"), + ('hyrynsalmi', u"Hyrynsalmi"), + ('hyvinkaa', u"Hyvinkää"), + ('hameenkoski', u"Hämeenkoski"), + ('hameenkyro', u"Hämeenkyrö"), + ('hameenlinna', u"Hämeenlinna"), + ('ii', u"Ii"), + ('iisalmi', u"Iisalmi"), + ('iitti', u"Iitti"), + ('ikaalinen', u"Ikaalinen"), + ('ilmajoki', u"Ilmajoki"), + ('ilomantsi', u"Ilomantsi"), + ('imatra', u"Imatra"), + ('inari', u"Inari"), + ('inio', u"Iniö"), + ('inkoo', u"Inkoo"), + ('isojoki', u"Isojoki"), + ('isokyro', u"Isokyrö"), + ('jaala', u"Jaala"), + ('jalasjarvi', u"Jalasjärvi"), + ('janakkala', u"Janakkala"), + ('joensuu', u"Joensuu"), + ('jokioinen', u"Jokioinen"), + ('jomala', u"Jomala"), + ('joroinen', u"Joroinen"), + ('joutsa', u"Joutsa"), + ('joutseno', u"Joutseno"), + ('juankoski', u"Juankoski"), + ('jurva', u"Jurva"), + ('juuka', u"Juuka"), + ('juupajoki', u"Juupajoki"), + ('juva', u"Juva"), + ('jyvaskyla', u"Jyväskylä"), + ('jyvaskylan_mlk', u"Jyväskylän maalaiskunta"), + ('jamijarvi', u"Jämijärvi"), + ('jamsa', u"Jämsä"), + ('jamsankoski', u"Jämsänkoski"), + ('jarvenpaa', u"Järvenpää"), + ('kaarina', u"Kaarina"), + ('kaavi', u"Kaavi"), + ('kajaani', u"Kajaani"), + ('kalajoki', u"Kalajoki"), + ('kalvola', u"Kalvola"), + ('kangasala', u"Kangasala"), + ('kangasniemi', u"Kangasniemi"), + ('kankaanpaa', u"Kankaanpää"), + ('kannonkoski', u"Kannonkoski"), + ('kannus', u"Kannus"), + ('karijoki', u"Karijoki"), + ('karjaa', u"Karjaa"), + ('karjalohja', u"Karjalohja"), + ('karkkila', u"Karkkila"), + ('karstula', u"Karstula"), + ('karttula', u"Karttula"), + ('karvia', u"Karvia"), + ('kaskinen', u"Kaskinen"), + ('kauhajoki', u"Kauhajoki"), + ('kauhava', u"Kauhava"), + ('kauniainen', u"Kauniainen"), + ('kaustinen', u"Kaustinen"), + ('keitele', u"Keitele"), + ('kemi', u"Kemi"), + ('kemijarvi', u"Kemijärvi"), + ('keminmaa', u"Keminmaa"), + ('kemio', u"Kemiö"), + ('kempele', u"Kempele"), + ('kerava', u"Kerava"), + ('kerimaki', u"Kerimäki"), + ('kestila', u"Kestilä"), + ('kesalahti', u"Kesälahti"), + ('keuruu', u"Keuruu"), + ('kihnio', u"Kihniö"), + ('kiikala', u"Kiikala"), + ('kiikoinen', u"Kiikoinen"), + ('kiiminki', u"Kiiminki"), + ('kinnula', u"Kinnula"), + ('kirkkonummi', u"Kirkkonummi"), + ('kisko', u"Kisko"), + ('kitee', u"Kitee"), + ('kittila', u"Kittilä"), + ('kiukainen', u"Kiukainen"), + ('kiuruvesi', u"Kiuruvesi"), + ('kivijarvi', u"Kivijärvi"), + ('kokemaki', u"Kokemäki"), + ('kokkola', u"Kokkola"), + ('kolari', u"Kolari"), + ('konnevesi', u"Konnevesi"), + ('kontiolahti', u"Kontiolahti"), + ('korpilahti', u"Korpilahti"), + ('korppoo', u"Korppoo"), + ('korsnas', u"Korsnäs"), + ('kortesjarvi', u"Kortesjärvi"), + ('koskitl', u"KoskiTl"), + ('kotka', u"Kotka"), + ('kouvola', u"Kouvola"), + ('kristiinankaupunki', u"Kristiinankaupunki"), + ('kruunupyy', u"Kruunupyy"), + ('kuhmalahti', u"Kuhmalahti"), + ('kuhmo', u"Kuhmo"), + ('kuhmoinen', u"Kuhmoinen"), + ('kumlinge', u"Kumlinge"), + ('kuopio', u"Kuopio"), + ('kuortane', u"Kuortane"), + ('kurikka', u"Kurikka"), + ('kuru', u"Kuru"), + ('kustavi', u"Kustavi"), + ('kuusamo', u"Kuusamo"), + ('kuusankoski', u"Kuusankoski"), + ('kuusjoki', u"Kuusjoki"), + ('kylmakoski', u"Kylmäkoski"), + ('kyyjarvi', u"Kyyjärvi"), + ('kalvia', u"Kälviä"), + ('karkola', u"Kärkölä"), + ('karsamaki', u"Kärsämäki"), + ('kokar', u"Kökar"), + ('koylio', u"Köyliö"), + ('lahti', u"Lahti"), + ('laihia', u"Laihia"), + ('laitila', u"Laitila"), + ('lammi', u"Lammi"), + ('lapinjarvi', u"Lapinjärvi"), + ('lapinlahti', u"Lapinlahti"), + ('lappajarvi', u"Lappajärvi"), + ('lappeenranta', u"Lappeenranta"), + ('lappi', u"Lappi"), + ('lapua', u"Lapua"), + ('laukaa', u"Laukaa"), + ('lavia', u"Lavia"), + ('lehtimaki', u"Lehtimäki"), + ('leivonmaki', u"Leivonmäki"), + ('lemi', u"Lemi"), + ('lemland', u"Lemland"), + ('lempaala', u"Lempäälä"), + ('lemu', u"Lemu"), + ('leppavirta', u"Leppävirta"), + ('lestijarvi', u"Lestijärvi"), + ('lieksa', u"Lieksa"), + ('lieto', u"Lieto"), + ('liljendal', u"Liljendal"), + ('liminka', u"Liminka"), + ('liperi', u"Liperi"), + ('lohja', u"Lohja"), + ('lohtaja', u"Lohtaja"), + ('loimaa', u"Loimaa"), + ('loppi', u"Loppi"), + ('loviisa', u"Loviisa"), + ('luhanka', u"Luhanka"), + ('lumijoki', u"Lumijoki"), + ('lumparland', u"Lumparland"), + ('luoto', u"Luoto"), + ('luumaki', u"Luumäki"), + ('luvia', u"Luvia"), + ('maalahti', u"Maalahti"), + ('maaninka', u"Maaninka"), + ('maarianhamina', u"Maarianhamina"), + ('marttila', u"Marttila"), + ('masku', u"Masku"), + ('mellila', u"Mellilä"), + ('merijarvi', u"Merijärvi"), + ('merikarvia', u"Merikarvia"), + ('merimasku', u"Merimasku"), + ('miehikkala', u"Miehikkälä"), + ('mikkeli', u"Mikkeli"), + ('mouhijarvi', u"Mouhijärvi"), + ('muhos', u"Muhos"), + ('multia', u"Multia"), + ('muonio', u"Muonio"), + ('mustasaari', u"Mustasaari"), + ('muurame', u"Muurame"), + ('muurla', u"Muurla"), + ('mynamaki', u"Mynämäki"), + ('myrskyla', u"Myrskylä"), + ('mantsala', u"Mäntsälä"), + ('mantta', u"Mänttä"), + ('mantyharju', u"Mäntyharju"), + ('naantali', u"Naantali"), + ('nakkila', u"Nakkila"), + ('nastola', u"Nastola"), + ('nauvo', u"Nauvo"), + ('nilsia', u"Nilsiä"), + ('nivala', u"Nivala"), + ('nokia', u"Nokia"), + ('noormarkku', u"Noormarkku"), + ('nousiainen', u"Nousiainen"), + ('nummi-pusula', u"Nummi-Pusula"), + ('nurmes', u"Nurmes"), + ('nurmijarvi', u"Nurmijärvi"), + ('nurmo', u"Nurmo"), + ('narpio', u"Närpiö"), + ('oravainen', u"Oravainen"), + ('orimattila', u"Orimattila"), + ('oripaa', u"Oripää"), + ('orivesi', u"Orivesi"), + ('oulainen', u"Oulainen"), + ('oulu', u"Oulu"), + ('oulunsalo', u"Oulunsalo"), + ('outokumpu', u"Outokumpu"), + ('padasjoki', u"Padasjoki"), + ('paimio', u"Paimio"), + ('paltamo', u"Paltamo"), + ('parainen', u"Parainen"), + ('parikkala', u"Parikkala"), + ('parkano', u"Parkano"), + ('pedersore', u"Pedersöre"), + ('pelkosenniemi', u"Pelkosenniemi"), + ('pello', u"Pello"), + ('perho', u"Perho"), + ('pernaja', u"Pernaja"), + ('pernio', u"Perniö"), + ('pertteli', u"Pertteli"), + ('pertunmaa', u"Pertunmaa"), + ('petajavesi', u"Petäjävesi"), + ('pieksamaki', u"Pieksämäki"), + ('pielavesi', u"Pielavesi"), + ('pietarsaari', u"Pietarsaari"), + ('pihtipudas', u"Pihtipudas"), + ('piikkio', u"Piikkiö"), + ('piippola', u"Piippola"), + ('pirkkala', u"Pirkkala"), + ('pohja', u"Pohja"), + ('polvijarvi', u"Polvijärvi"), + ('pomarkku', u"Pomarkku"), + ('pori', u"Pori"), + ('pornainen', u"Pornainen"), + ('porvoo', u"Porvoo"), + ('posio', u"Posio"), + ('pudasjarvi', u"Pudasjärvi"), + ('pukkila', u"Pukkila"), + ('pulkkila', u"Pulkkila"), + ('punkaharju', u"Punkaharju"), + ('punkalaidun', u"Punkalaidun"), + ('puolanka', u"Puolanka"), + ('puumala', u"Puumala"), + ('pyhtaa', u"Pyhtää"), + ('pyhajoki', u"Pyhäjoki"), + ('pyhajarvi', u"Pyhäjärvi"), + ('pyhanta', u"Pyhäntä"), + ('pyharanta', u"Pyhäranta"), + ('pyhaselka', u"Pyhäselkä"), + ('pylkonmaki', u"Pylkönmäki"), + ('palkane', u"Pälkäne"), + ('poytya', u"Pöytyä"), + ('raahe', u"Raahe"), + ('raisio', u"Raisio"), + ('rantasalmi', u"Rantasalmi"), + ('rantsila', u"Rantsila"), + ('ranua', u"Ranua"), + ('rauma', u"Rauma"), + ('rautalampi', u"Rautalampi"), + ('rautavaara', u"Rautavaara"), + ('rautjarvi', u"Rautjärvi"), + ('reisjarvi', u"Reisjärvi"), + ('renko', u"Renko"), + ('riihimaki', u"Riihimäki"), + ('ristiina', u"Ristiina"), + ('ristijarvi', u"Ristijärvi"), + ('rovaniemi', u"Rovaniemi"), + ('ruokolahti', u"Ruokolahti"), + ('ruotsinpyhtaa', u"Ruotsinpyhtää"), + ('ruovesi', u"Ruovesi"), + ('rusko', u"Rusko"), + ('rymattyla', u"Rymättylä"), + ('raakkyla', u"Rääkkylä"), + ('saarijarvi', u"Saarijärvi"), + ('salla', u"Salla"), + ('salo', u"Salo"), + ('saltvik', u"Saltvik"), + ('sammatti', u"Sammatti"), + ('sauvo', u"Sauvo"), + ('savitaipale', u"Savitaipale"), + ('savonlinna', u"Savonlinna"), + ('savonranta', u"Savonranta"), + ('savukoski', u"Savukoski"), + ('seinajoki', u"Seinäjoki"), + ('sievi', u"Sievi"), + ('siikainen', u"Siikainen"), + ('siikajoki', u"Siikajoki"), + ('siilinjarvi', u"Siilinjärvi"), + ('simo', u"Simo"), + ('sipoo', u"Sipoo"), + ('siuntio', u"Siuntio"), + ('sodankyla', u"Sodankylä"), + ('soini', u"Soini"), + ('somero', u"Somero"), + ('sonkajarvi', u"Sonkajärvi"), + ('sotkamo', u"Sotkamo"), + ('sottunga', u"Sottunga"), + ('sulkava', u"Sulkava"), + ('sund', u"Sund"), + ('suomenniemi', u"Suomenniemi"), + ('suomusjarvi', u"Suomusjärvi"), + ('suomussalmi', u"Suomussalmi"), + ('suonenjoki', u"Suonenjoki"), + ('sysma', u"Sysmä"), + ('sakyla', u"Säkylä"), + ('sarkisalo', u"Särkisalo"), + ('taipalsaari', u"Taipalsaari"), + ('taivalkoski', u"Taivalkoski"), + ('taivassalo', u"Taivassalo"), + ('tammela', u"Tammela"), + ('tammisaari', u"Tammisaari"), + ('tampere', u"Tampere"), + ('tarvasjoki', u"Tarvasjoki"), + ('tervo', u"Tervo"), + ('tervola', u"Tervola"), + ('teuva', u"Teuva"), + ('tohmajarvi', u"Tohmajärvi"), + ('toholampi', u"Toholampi"), + ('toivakka', u"Toivakka"), + ('tornio', u"Tornio"), + ('turku', u"Turku"), + ('tuulos', u"Tuulos"), + ('tuusniemi', u"Tuusniemi"), + ('tuusula', u"Tuusula"), + ('tyrnava', u"Tyrnävä"), + ('toysa', u"Töysä"), + ('ullava', u"Ullava"), + ('ulvila', u"Ulvila"), + ('urjala', u"Urjala"), + ('utajarvi', u"Utajärvi"), + ('utsjoki', u"Utsjoki"), + ('uurainen', u"Uurainen"), + ('uusikaarlepyy', u"Uusikaarlepyy"), + ('uusikaupunki', u"Uusikaupunki"), + ('vaala', u"Vaala"), + ('vaasa', u"Vaasa"), + ('vahto', u"Vahto"), + ('valkeakoski', u"Valkeakoski"), + ('valkeala', u"Valkeala"), + ('valtimo', u"Valtimo"), + ('vammala', u"Vammala"), + ('vampula', u"Vampula"), + ('vantaa', u"Vantaa"), + ('varkaus', u"Varkaus"), + ('varpaisjarvi', u"Varpaisjärvi"), + ('vehmaa', u"Vehmaa"), + ('velkua', u"Velkua"), + ('vesanto', u"Vesanto"), + ('vesilahti', u"Vesilahti"), + ('veteli', u"Veteli"), + ('vierema', u"Vieremä"), + ('vihanti', u"Vihanti"), + ('vihti', u"Vihti"), + ('viitasaari', u"Viitasaari"), + ('vilppula', u"Vilppula"), + ('vimpeli', u"Vimpeli"), + ('virolahti', u"Virolahti"), + ('virrat', u"Virrat"), + ('vardo', u"Vårdö"), + ('vahakyro', u"Vähäkyrö"), + ('vastanfjard', u"Västanfjärd"), + ('voyri-maksamaa', u"Vöyri-Maksamaa"), + ('yliharma', u"Ylihärmä"), + ('yli-ii', u"Yli-Ii"), + ('ylikiiminki', u"Ylikiiminki"), + ('ylistaro', u"Ylistaro"), + ('ylitornio', u"Ylitornio"), + ('ylivieska', u"Ylivieska"), + ('ylamaa', u"Ylämaa"), + ('ylane', u"Yläne"), + ('ylojarvi', u"Ylöjärvi"), + ('ypaja', u"Ypäjä"), + ('aetsa', u"Äetsä"), + ('ahtari', u"Ähtäri"), + ('aanekoski', u"Äänekoski") +) \ No newline at end of file diff --git a/django/contrib/localflavor/fi/forms.py b/django/contrib/localflavor/fi/forms.py new file mode 100644 index 0000000000..a2b2eed5c2 --- /dev/null +++ b/django/contrib/localflavor/fi/forms.py @@ -0,0 +1,47 @@ +""" +FI-specific Form helpers +""" + +import re +from django.newforms import ValidationError +from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES +from django.utils.translation import gettext + +class FIZipCodeField(RegexField): + def __init__(self, *args, **kwargs): + super(FIZipCodeField, self).__init__(r'^\d{5}$', + max_length=None, min_length=None, + error_message=gettext(u'Enter a zip code in the format XXXXX.'), + *args, **kwargs) + +class FIMunicipalitySelect(Select): + """ + A Select widget that uses a list of Finnish municipalities as its choices. + """ + def __init__(self, attrs=None): + from fi_municipalities import MUNICIPALITY_CHOICES # relative import + super(FIMunicipalitySelect, self).__init__(attrs, choices=MUNICIPALITY_CHOICES) + +class FISocialSecurityNumber(Field): + def clean(self, value): + super(FISocialSecurityNumber, self).clean(value) + if value in EMPTY_VALUES: + return u'' + + checkmarks = "0123456789ABCDEFHJKLMNPRSTUVWXY" + result = re.match(r"""^ + (?P([0-2]\d|3[01]) + (0\d|1[012]) + (\d{2})) + [A+-] + (?P(\d{3})) + (?P[%s])$""" % checkmarks, value, re.VERBOSE | re.IGNORECASE) + if not result: + raise ValidationError(gettext(u'Enter a valid Finnish social security number.')) + checksum = int(result.groupdict()['date'] + result.groupdict()['serial']) + + if checkmarks[checksum % len(checkmarks)] == result.groupdict()['chechsum'].upper(): + return u'%s' % value.upper() + + raise ValidationError(gettext(u'Enter a valid Finnish social security number.')) + diff --git a/django/contrib/localflavor/fr/forms.py b/django/contrib/localflavor/fr/forms.py index ee87c5cda2..550596b880 100644 --- a/django/contrib/localflavor/fr/forms.py +++ b/django/contrib/localflavor/fr/forms.py @@ -4,7 +4,7 @@ FR-specific Form helpers from django.newforms import ValidationError from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES -from django.newforms.util import smart_unicode +from django.utils.encoding import smart_unicode from django.utils.translation import gettext import re diff --git a/django/contrib/localflavor/it/__init__.py b/django/contrib/localflavor/it/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/it/forms.py b/django/contrib/localflavor/it/forms.py new file mode 100644 index 0000000000..8e9d8bc11d --- /dev/null +++ b/django/contrib/localflavor/it/forms.py @@ -0,0 +1,31 @@ +""" +IT-specific Form helpers +""" + +from django.newforms import ValidationError +from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES +from django.utils.translation import gettext +import re + +class ITZipCodeField(RegexField): + def __init__(self, *args, **kwargs): + super(ITZipCodeField, self).__init__(r'^\d{5}$', + max_length=None, min_length=None, + error_message=gettext(u'Enter a zip code in the format XXXXX.'), + *args, **kwargs) + +class ITRegionSelect(Select): + """ + A Select widget that uses a list of IT regions as its choices. + """ + def __init__(self, attrs=None): + from it_region import REGION_CHOICES # relative import + super(ITRegionSelect, self).__init__(attrs, choices=REGION_CHOICES) + +class ITProvinceSelect(Select): + """ + A Select widget that uses a list of IT regions as its choices. + """ + def __init__(self, attrs=None): + from it_province import PROVINCE_CHOICES # relative import + super(ITProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES) diff --git a/django/contrib/localflavor/it/it_province.py b/django/contrib/localflavor/it/it_province.py new file mode 100644 index 0000000000..1867191b31 --- /dev/null +++ b/django/contrib/localflavor/it/it_province.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -* + +PROVINCE_CHOICES = ( + ('AG', 'Agrigento'), + ('AL', 'Alessandria'), + ('AN', 'Ancona'), + ('AO', 'Aosta'), + ('AR', 'Arezzo'), + ('AP', 'Ascoli Piceno'), + ('AT', 'Asti'), + ('AV', 'Avellino'), + ('BA', 'Bari'), +# ('BT', 'Barletta-Andria-Trani'), # active starting from 2009 + ('BL', 'Belluno'), + ('BN', 'Benevento'), + ('BG', 'Bergamo'), + ('BI', 'Biella'), + ('BO', 'Bologna'), + ('BZ', 'Bolzano/Bozen'), + ('BS', 'Brescia'), + ('BR', 'Brindisi'), + ('CA', 'Cagliari'), + ('CL', 'Caltanissetta'), + ('CB', 'Campobasso'), + ('CI', 'Carbonia-Iglesias'), + ('CE', 'Caserta'), + ('CT', 'Catania'), + ('CZ', 'Catanzaro'), + ('CH', 'Chieti'), + ('CO', 'Como'), + ('CS', 'Cosenza'), + ('CR', 'Cremona'), + ('KR', 'Crotone'), + ('CN', 'Cuneo'), + ('EN', 'Enna'), +# ('FM', 'Fermo'), # active starting from 2009 + ('FE', 'Ferrara'), + ('FI', 'Firenze'), + ('FG', 'Foggia'), + ('FC', 'Forlì-Cesena'), + ('FR', 'Frosinone'), + ('GE', 'Genova'), + ('GO', 'Gorizia'), + ('GR', 'Grosseto'), + ('IM', 'Imperia'), + ('IS', 'Isernia'), + ('SP', 'La Spezia'), + ('AQ', u'L’Acquila'), + ('LT', 'Latina'), + ('LE', 'Lecce'), + ('LC', 'Lecco'), + ('LI', 'Livorno'), + ('LO', 'Lodi'), + ('LU', 'Lucca'), + ('MC', 'Macerata'), + ('MN', 'Mantova'), + ('MS', 'Massa-Carrara'), + ('MT', 'Matera'), + ('VS', 'Medio Campidano'), + ('ME', 'Messina'), + ('MI', 'Milano'), + ('MO', 'Modena'), +# ('MB', 'Monza e Brianza'), # active starting from 2009 + ('NA', 'Napoli'), + ('NO', 'Novara'), + ('NU', 'Nuoro'), + ('OG', 'Ogliastra'), + ('OT', 'Olbia-Tempio'), + ('OR', 'Oristano'), + ('PD', 'Padova'), + ('PA', 'Palermo'), + ('PR', 'Parma'), + ('PV', 'Pavia'), + ('PG', 'Perugia'), + ('PU', 'Pesaro e Urbino'), + ('PE', 'Pescara'), + ('PC', 'Piacenza'), + ('PI', 'Pisa'), + ('PT', 'Pistoia'), + ('PN', 'Pordenone'), + ('PZ', 'Potenza'), + ('PO', 'Prato'), + ('RG', 'Ragusa'), + ('RA', 'Ravenna'), + ('RC', 'Reggio Calabria'), + ('RE', 'Reggio Emilia'), + ('RI', 'Rieti'), + ('RN', 'Rimini') + ('RM', 'Roma'), + ('RO', 'Rovigo'), + ('SA', 'Salerno'), + ('SS', 'Sassari'), + ('SV', 'Savona'), + ('SI', 'Siena'), + ('SR', 'Siracusa'), + ('SO', 'Sondrio'), + ('TA', 'Taranto'), + ('TE', 'Teramo'), + ('TR', 'Terni'), + ('TO', 'Torino'), + ('TP', 'Trapani'), + ('TN', 'Trento'), + ('TV', 'Treviso'), + ('TS', 'Trieste'), + ('UD', 'Udine'), + ('VA', 'Varese'), + ('VE', 'Venezia'), + ('VB', 'Verbano Cusio Ossola'), + ('VC', 'Vercelli'), + ('VR', 'Verona'), + ('VV', 'Vibo Valentia'), + ('VI', 'Vicenza'), + ('VT', 'Viterbo'), +) diff --git a/django/contrib/localflavor/it/it_region.py b/django/contrib/localflavor/it/it_region.py new file mode 100644 index 0000000000..0700b46ea8 --- /dev/null +++ b/django/contrib/localflavor/it/it_region.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -* + +REGION_CHOICES = ( + ('ABR', 'Abruzzo'), + ('BAS', 'Basilicata'), + ('CAL', 'Calabria'), + ('CAM', 'Campania'), + ('EMR', 'Emilia-Romagna'), + ('FVG', 'Friuli-Venezia Giulia'), + ('LAZ', 'Lazio'), + ('LIG', 'Liguria'), + ('LOM', 'Lombardia'), + ('MAR', 'Marche'), + ('MOL', 'Molise'), + ('PMN', 'Piemonte'), + ('PUG', 'Puglia'), + ('SAR', 'Sardegna'), + ('SIC', 'Sicilia'), + ('TOS', 'Toscana'), + ('TAA', 'Trentino-Alto Adige'), + ('UMB', 'Umbria'), + ('VAO', u'Valle d’Aosta'), + ('VEN', 'Veneto'), +) diff --git a/django/contrib/localflavor/no/__init__.py b/django/contrib/localflavor/no/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/no/forms.py b/django/contrib/localflavor/no/forms.py new file mode 100644 index 0000000000..22099005b9 --- /dev/null +++ b/django/contrib/localflavor/no/forms.py @@ -0,0 +1,77 @@ +# -*- coding: iso-8859-1 -*- +""" +Norwegian-specific Form helpers +""" + +import re, datetime +from django.newforms import ValidationError +from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES +from django.utils.translation import gettext + +class NOZipCodeField(RegexField): + def __init__(self, *args, **kwargs): + super(NOZipCodeField, self).__init__(r'^\d{4}$', + max_length=None, min_length=None, + error_message=gettext(u'Enter a zip code in the format XXXX.'), + *args, **kwargs) + +class NOMunicipalitySelect(Select): + """ + A Select widget that uses a list of Norwegian municipalities (fylker) + as its choices. + """ + def __init__(self, attrs=None): + from no_municipalities import MUNICIPALITY_CHOICES + super(NOMunicipalitySelect, self).__init__(attrs, choices=MUNICIPALITY_CHOICES) + +class NOSocialSecurityNumber(Field): + """ + Algorithm is documented at http://no.wikipedia.org/wiki/Personnummer + """ + def clean(self, value): + super(NOSocialSecurityNumber, self).clean(value) + if value in EMPTY_VALUES: + return u'' + + msg = gettext(u'Enter a valid Norwegian social security number.') + if not re.match(r'^\d{11}$', value): + raise ValidationError(msg) + + day = int(value[:2]) + month = int(value[2:4]) + year2 = int(value[4:6]) + + inum = int(value[6:9]) + self.birthday = None + try: + if 000 <= inum < 500: + self.birthday = datetime.date(1900+year2, month, day) + if 500 <= inum < 750 and year2 > 54: + self.birthday = datetime.date(1800+year2, month, day) + if 500 <= inum < 1000 and year2 < 40: + self.birthday = datetime.date(2000+year2, month, day) + if 900 <= inum < 1000 and year2 > 39: + self.birthday = datetime.date(1900+year2, month, day) + except ValueError: + raise ValidationError(msg) + + sexnum = int(value[8]) + if sexnum % 2 == 0: + self.gender = 'F' + else: + self.gender = 'M' + + digits = map(int, list(value)) + weight_1 = [3, 7, 6, 1, 8, 9, 4, 5, 2, 1, 0] + weight_2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2, 1] + + def multiply_reduce(aval, bval): + return sum((a * b) for (a, b) in zip(aval, bval)) + + if multiply_reduce(digits, weight_1) % 11 != 0: + raise ValidationError(msg) + if multiply_reduce(digits, weight_2) % 11 != 0: + raise ValidationError(msg) + + return value + diff --git a/django/contrib/localflavor/no/no_municipalities.py b/django/contrib/localflavor/no/no_municipalities.py new file mode 100644 index 0000000000..d66fef514c --- /dev/null +++ b/django/contrib/localflavor/no/no_municipalities.py @@ -0,0 +1,32 @@ +# -*- coding: iso-8859-1 -*- +""" +An alphabetical list of Norwegian municipalities (fylker) fro use as `choices` +in a formfield. + +This exists in this standalone file so that it's on ly imported into memory +when explicitly needed. +""" + +MUNICIPALITY_CHOICES = ( + ('akershus', u'Akershus'), + ('austagder', u'Aust-Agder'), + ('buskerud', u'Buskerud'), + ('finnmark', u'Finnmark'), + ('hedmark', u'Hedmark'), + ('hordaland', u'Hordaland'), + ('janmayen', u'Jan Mayen'), + ('moreogromsdal', u'Mre og Romsdal'), + ('nordtrondelag', u'Nord-Trndelag'), + ('nordland', u'Nordland'), + ('oppland', u'Oppland'), + ('oslo', u'Oslo'), + ('rogaland', u'Rogaland'), + ('sognogfjordane', u'Sogn og Fjordane'), + ('svalbard', u'Svalbard'), + ('sortrondelag', u'Sr-Trndelag'), + ('telemark', u'Telemark'), + ('troms', u'Troms'), + ('vestagder', u'Vest-Agder'), + ('vestfold', u'Vestfold'), + ('ostfold', u'stfold') +) diff --git a/django/contrib/localflavor/usa/forms.py b/django/contrib/localflavor/usa/forms.py index 9461f4fe80..feda68291b 100644 --- a/django/contrib/localflavor/usa/forms.py +++ b/django/contrib/localflavor/usa/forms.py @@ -4,11 +4,12 @@ USA-specific Form helpers from django.newforms import ValidationError from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES -from django.newforms.util import smart_unicode +from django.utils.encoding import smart_unicode from django.utils.translation import gettext import re phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$') +ssn_re = re.compile(r"^(?P\d{3})[-\ ]?(?P\d{2})[-\ ]?(?P\d{4})$") class USZipCodeField(RegexField): def __init__(self, *args, **kwargs): @@ -28,6 +29,45 @@ class USPhoneNumberField(Field): return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) raise ValidationError(u'Phone numbers must be in XXX-XXX-XXXX format.') +class USSocialSecurityNumberField(Field): + """ + A United States Social Security number. + + Checks the following rules to determine whether the number is valid: + + * Conforms to the XXX-XX-XXXX format. + * No group consists entirely of zeroes. + * The leading group is not "666" (block "666" will never be allocated). + * The number is not in the promotional block 987-65-4320 through 987-65-4329, + which are permanently invalid. + * The number is not one known to be invalid due to otherwise widespread + promotional use or distribution (e.g., the Woolworth's number or the 1962 + promotional number). + """ + def clean(self, value): + super(USSocialSecurityNumberField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + msg = gettext(u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.') + match = re.match(ssn_re, value) + if not match: + raise ValidationError(msg) + area, group, serial = match.groupdict()['area'], match.groupdict()['group'], match.groupdict()['serial'] + + # First pass: no blocks of all zeroes. + if area == '000' or \ + group == '00' or \ + serial == '0000': + raise ValidationError(msg) + + # Second pass: promotional and otherwise permanently invalid numbers. + if area == '666' or \ + (area == '987' and group == '65' and 4320 <= int(serial) <= 4329) or \ + value == '078-05-1120' or \ + value == '219-09-9999': + raise ValidationError(msg) + return u'%s-%s-%s' % (area, group, serial) + class USStateField(Field): """ A form field that validates its input is a U.S. state name or abbreviation. diff --git a/django/contrib/webdesign/__init__.py b/django/contrib/webdesign/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/webdesign/lorem_ipsum.py b/django/contrib/webdesign/lorem_ipsum.py new file mode 100644 index 0000000000..b5a3d3b5db --- /dev/null +++ b/django/contrib/webdesign/lorem_ipsum.py @@ -0,0 +1,66 @@ +""" +Utility functions for generating "lorem ipsum" Latin text. +""" + +import random + +COMMON_P = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' +WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet', 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi', 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi', 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos', 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum', 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus', 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus', 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum', 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem', 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus', 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente', 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet', 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta', 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima', 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim', 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores', 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias', 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea', 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt', 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate', 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius', 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos', 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore', 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo', 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi', 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam', 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique', 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere', 'maxime', 'corrupti') +COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua') + +def sentence(): + """ + Returns a randomly generated sentence of lorem ipsum text. + + The first word is capitalized, and the sentence ends in either a period or + question mark. Commas are added at random. + """ + # Determine the number of comma-separated sections and number of words in + # each section for this sentence. + sections = [' '.join(random.sample(WORDS, random.randint(3, 12))) for i in range(random.randint(1, 5))] + s = ', '.join(sections) + # Convert to sentence case and add end punctuation. + return '%s%s%s' % (s[0].upper(), s[1:], random.choice('?.')) + +def paragraph(): + """ + Returns a randomly generated paragraph of lorem ipsum text. + + The paragraph consists of between 1 and 4 sentences, inclusive. + """ + return ' '.join([sentence() for i in range(random.randint(1, 4))]) + +def paragraphs(count, common=True): + """ + Returns a list of paragraphs as returned by paragraph(). + + If `common` is True, then the first paragraph will be the standard + 'lorem ipsum' paragraph. Otherwise, the first paragraph will be random + Latin text. Either way, subsequent paragraphs will be random Latin text. + """ + paras = [] + for i in range(count): + if common and i == 0: + paras.append(COMMON_P) + else: + paras.append(paragraph()) + return paras + +def words(count, common=True): + """ + Returns a string of `count` lorem ipsum words separated by a single space. + + If `common` is True, then the first 19 words will be the standard + 'lorem ipsum' words. Otherwise, all words will be selected randomly. + """ + if common: + word_list = list(COMMON_WORDS) + else: + word_list = [] + c = len(word_list) + if count > c: + count = min(count - c, len(WORDS)) + word_list += random.sample(WORDS, count - c) + else: + word_list = word_list[:count] + return ' '.join(word_list) diff --git a/django/contrib/webdesign/templatetags/__init__.py b/django/contrib/webdesign/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/webdesign/templatetags/webdesign.py b/django/contrib/webdesign/templatetags/webdesign.py new file mode 100644 index 0000000000..e5117093f8 --- /dev/null +++ b/django/contrib/webdesign/templatetags/webdesign.py @@ -0,0 +1,67 @@ +from django.contrib.webdesign.lorem_ipsum import words, paragraphs +from django import template + +register = template.Library() + +class LoremNode(template.Node): + def __init__(self, count, method, common): + self.count, self.method, self.common = count, method, common + + def render(self, context): + try: + count = int(self.count.resolve(context)) + except (ValueError, TypeError): + count = 1 + if self.method == 'w': + return words(count, common=self.common) + else: + paras = paragraphs(count, common=self.common) + if self.method == 'p': + paras = ['

            %s

            ' % p for p in paras] + return '\n\n'.join(paras) + +#@register.tag +def lorem(parser, token): + """ + Creates random Latin text useful for providing test data in templates. + + Usage format:: + + {% lorem [count] [method] [random] %} + + ``count`` is a number (or variable) containing the number of paragraphs or + words to generate (default is 1). + + ``method`` is either ``w`` for words, ``p`` for HTML paragraphs, ``b`` for + plain-text paragraph blocks (default is ``b``). + + ``random`` is the word ``random``, which if given, does not use the common + paragraph (starting "Lorem ipsum dolor sit amet, consectetuer..."). + + Examples: + * ``{% lorem %}`` will output the common "lorem ipsum" paragraph + * ``{% lorem 3 p %}`` will output the common "lorem ipsum" paragraph + and two random paragraphs each wrapped in HTML ``

            `` tags + * ``{% lorem 2 w random %}`` will output two random latin words + """ + bits = list(token.split_contents()) + tagname = bits[0] + # Random bit + common = bits[-1] != 'random' + if not common: + bits.pop() + # Method bit + if bits[-1] in ('w', 'p', 'b'): + method = bits.pop() + else: + method = 'b' + # Count bit + if len(bits) > 1: + count = bits.pop() + else: + count = '1' + count = parser.compile_filter(count) + if len(bits) != 1: + raise TemplateSyntaxError("Incorrect format for %r tag" % tagname) + return LoremNode(count, method, common) +lorem = register.tag(lorem) diff --git a/django/core/cache/backends/memcached.py b/django/core/cache/backends/memcached.py index 180f95da73..1ab019221a 100644 --- a/django/core/cache/backends/memcached.py +++ b/django/core/cache/backends/memcached.py @@ -3,9 +3,12 @@ from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError try: - import memcache + import cmemcache as memcache except ImportError: - raise InvalidCacheBackendError, "Memcached cache backend requires the 'memcache' library" + try: + import memcache + except: + raise InvalidCacheBackendError("Memcached cache backend requires either the 'memcache' or 'cmemcache' library") class CacheClass(BaseCache): def __init__(self, server, params): diff --git a/django/core/management.py b/django/core/management.py index cd8e01f03f..cff95ff61d 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -186,7 +186,7 @@ def _get_sql_model_create(model, known_models=set()): if f.rel.to in known_models: field_output.append(style.SQL_KEYWORD('REFERENCES') + ' ' + \ style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)) + ' (' + \ - style.SQL_FIELD(backend.quote_name(f.rel.to._meta.get_field(f.rel.field_name).column)) + ')' + + style.SQL_FIELD(backend.quote_name(f.rel.to._meta.get_field(f.rel.field_name).column)) + ')' + backend.get_deferrable_sql() ) else: @@ -232,7 +232,7 @@ def _get_sql_for_pending_references(model, pending_references): r_name = '%s_refs_%s_%x' % (r_col, col, abs(hash((r_table, table)))) final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' % \ (backend.quote_name(r_table), r_name, - backend.quote_name(r_col), backend.quote_name(table), backend.quote_name(col), + backend.quote_name(r_col), backend.quote_name(table), backend.quote_name(col), backend.get_deferrable_sql())) del pending_references[model] return final_output @@ -410,30 +410,10 @@ get_sql_initial_data.help_doc = "RENAMED: see 'sqlcustom'" get_sql_initial_data.args = '' def get_sql_sequence_reset(app): - "Returns a list of the SQL statements to reset PostgreSQL sequences for the given app." + "Returns a list of the SQL statements to reset sequences for the given app." from django.db import backend, models - output = [] - for model in models.get_models(app): - for f in model._meta.fields: - if isinstance(f, models.AutoField): - output.append("%s setval('%s', (%s max(%s) %s %s));" % \ - (style.SQL_KEYWORD('SELECT'), - style.SQL_FIELD('%s_%s_seq' % (model._meta.db_table, f.column)), - style.SQL_KEYWORD('SELECT'), - style.SQL_FIELD(backend.quote_name(f.column)), - style.SQL_KEYWORD('FROM'), - style.SQL_TABLE(backend.quote_name(model._meta.db_table)))) - break # Only one AutoField is allowed per model, so don't bother continuing. - for f in model._meta.many_to_many: - output.append("%s setval('%s', (%s max(%s) %s %s));" % \ - (style.SQL_KEYWORD('SELECT'), - style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()), - style.SQL_KEYWORD('SELECT'), - style.SQL_FIELD(backend.quote_name('id')), - style.SQL_KEYWORD('FROM'), - style.SQL_TABLE(f.m2m_db_table()))) - return output -get_sql_sequence_reset.help_doc = "Prints the SQL statements for resetting PostgreSQL sequences for the given app name(s)." + return backend.get_sql_sequence_reset(style, models.get_models(app)) +get_sql_sequence_reset.help_doc = "Prints the SQL statements for resetting sequences for the given app name(s)." get_sql_sequence_reset.args = APP_ARGS def get_sql_indexes(app): @@ -456,7 +436,7 @@ def get_sql_indexes_for_model(model): unique = f.unique and 'UNIQUE ' or '' output.append( style.SQL_KEYWORD('CREATE %sINDEX' % unique) + ' ' + \ - style.SQL_TABLE('%s_%s' % (model._meta.db_table, f.column)) + ' ' + \ + style.SQL_TABLE(backend.quote_name('%s_%s' % (model._meta.db_table, f.column))) + ' ' + \ style.SQL_KEYWORD('ON') + ' ' + \ style.SQL_TABLE(backend.quote_name(model._meta.db_table)) + ' ' + \ "(%s);" % style.SQL_FIELD(backend.quote_name(f.column)) @@ -554,7 +534,7 @@ def syncdb(verbosity=1, interactive=True): # to do at this point. _emit_post_sync_signal(created_models, verbosity, interactive) - # Install custom SQL for the app (but only if this + # Install custom SQL for the app (but only if this # is a model we've just created) for app in models.get_apps(): for model in models.get_models(app): @@ -696,7 +676,7 @@ def flush(verbosity=1, interactive=True): from django.conf import settings from django.db import connection, transaction, models from django.dispatch import dispatcher - + disable_termcolors() # First, try validating the models. @@ -709,7 +689,7 @@ def flush(verbosity=1, interactive=True): __import__(app_name + '.management', {}, {}, ['']) except ImportError: pass - + sql_list = get_sql_flush() if interactive: @@ -743,10 +723,10 @@ The full error: """ % settings.DATABASE_NAME + style.ERROR_OUTPUT(str(e)) + '\n' # applications to respond as if the database had been # sync'd from scratch. _emit_post_sync_signal(models.get_models(), verbosity, interactive) - + # Reinstall the initial_data fixture load_data(['initial_data'], verbosity=verbosity) - + else: print "Flush cancelled." flush.help_doc = "Executes ``sqlflush`` on the current database." @@ -1328,7 +1308,7 @@ def test(app_labels, verbosity=1): failures = test_runner(app_list, verbosity) if failures: sys.exit(failures) - + test.help_doc = 'Runs the test suite for the specified applications, or the entire site if no apps are specified' test.args = '[--verbosity] ' + APP_ARGS @@ -1336,40 +1316,49 @@ def load_data(fixture_labels, verbosity=1): "Installs the provided fixture file(s) as data in the database." from django.db.models import get_apps from django.core import serializers - from django.db import connection, transaction + from django.db import connection, transaction, backend from django.conf import settings import sys - + # Keep a count of the installed objects and fixtures count = [0,0] + models = set() humanize = lambda dirname: dirname and "'%s'" % dirname or 'absolute path' # Get a cursor (even though we don't need one yet). This has - # the side effect of initializing the test database (if + # the side effect of initializing the test database (if # it isn't already initialized). cursor = connection.cursor() - - # Start transaction management. All fixtures are installed in a + + # Start transaction management. All fixtures are installed in a # single transaction to ensure that all references are resolved. transaction.commit_unless_managed() transaction.enter_transaction_management() transaction.managed(True) - + app_fixtures = [os.path.join(os.path.dirname(app.__file__),'fixtures') for app in get_apps()] for fixture_label in fixture_labels: + parts = fixture_label.split('.') + if len(parts) == 1: + fixture_name = fixture_label + formats = serializers.get_serializer_formats() + else: + fixture_name, format = '.'.join(parts[:-1]), parts[-1] + if format in serializers.get_serializer_formats(): + formats = [format] + else: + formats = [] + if verbosity > 0: - print "Loading '%s' fixtures..." % fixture_label + if formats: + print "Loading '%s' fixtures..." % fixture_name + else: + print "Skipping fixture '%s': %s is not a known serialization format" % (fixture_name, format) + for fixture_dir in app_fixtures + list(settings.FIXTURE_DIRS) + ['']: if verbosity > 1: print "Checking %s for fixtures..." % humanize(fixture_dir) - parts = fixture_label.split('.') - if len(parts) == 1: - fixture_name = fixture_label - formats = serializers.get_serializer_formats() - else: - fixture_name, format = '.'.join(parts[:-1]), parts[-1] - formats = [format] label_found = False for format in formats: @@ -1382,7 +1371,7 @@ def load_data(fixture_labels, verbosity=1): fixture = open(full_path, 'r') if label_found: fixture.close() - print style.ERROR("Multiple fixtures named '%s' in %s. Aborting." % + print style.ERROR("Multiple fixtures named '%s' in %s. Aborting." % (fixture_name, humanize(fixture_dir))) transaction.rollback() transaction.leave_transaction_management() @@ -1396,12 +1385,13 @@ def load_data(fixture_labels, verbosity=1): objects = serializers.deserialize(format, fixture) for obj in objects: count[0] += 1 + models.add(obj.object.__class__) obj.save() label_found = True except Exception, e: fixture.close() sys.stderr.write( - style.ERROR("Problem installing fixture '%s': %s\n" % + style.ERROR("Problem installing fixture '%s': %s\n" % (full_path, str(e)))) transaction.rollback() transaction.leave_transaction_management() @@ -1417,29 +1407,35 @@ def load_data(fixture_labels, verbosity=1): else: if verbosity > 0: print "Installed %d object(s) from %d fixture(s)" % tuple(count) + sequence_sql = backend.get_sql_sequence_reset(style, models) + if sequence_sql: + if verbosity > 1: + print "Resetting sequences" + for line in sequence_sql: + cursor.execute(line) transaction.commit() transaction.leave_transaction_management() - + load_data.help_doc = 'Installs the named fixture(s) in the database' load_data.args = "[--verbosity] fixture, fixture, ..." - + def dump_data(app_labels, format='json', indent=None): "Output the current contents of the database as a fixture of the given format" from django.db.models import get_app, get_apps, get_models from django.core import serializers - + if len(app_labels) == 0: app_list = get_apps() else: app_list = [get_app(app_label) for app_label in app_labels] - + # Check that the serialization format exists; this is a shortcut to # avoid collating all the objects and _then_ failing. try: serializers.get_serializer(format) except KeyError: - sys.stderr.write(style.ERROR("Unknown serialization format: %s\n" % format)) - + sys.stderr.write(style.ERROR("Unknown serialization format: %s\n" % format)) + objects = [] for app in app_list: for model in get_models(app): @@ -1534,7 +1530,7 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): parser.add_option('--noreload', action='store_false', dest='use_reloader', default=True, help='Tells Django to NOT use the auto-reloader when running the development server.') parser.add_option('--format', default='json', dest='format', - help='Specifies the output serialization format for fixtures') + help='Specifies the output serialization format for fixtures') parser.add_option('--indent', default=None, dest='indent', type='int', help='Specifies the indent level to use when pretty-printing output') parser.add_option('--verbosity', action='store', dest='verbosity', default='1', diff --git a/django/core/servers/fastcgi.py b/django/core/servers/fastcgi.py index 649dd6942d..619758a0b1 100644 --- a/django/core/servers/fastcgi.py +++ b/django/core/servers/fastcgi.py @@ -1,5 +1,5 @@ """ -FastCGI server that implements the WSGI protocol. +FastCGI (or SCGI, or AJP1.3 ...) server that implements the WSGI protocol. Uses the flup python package: http://www.saddi.com/software/flup/ @@ -18,15 +18,16 @@ __version__ = "0.1" __all__ = ["runfastcgi"] FASTCGI_HELP = r"""runfcgi: - Run this project as a fastcgi application. To do this, the - flup package from http://www.saddi.com/software/flup/ is - required. + Run this project as a fastcgi (or some other protocol supported + by flup) application. To do this, the flup package from + http://www.saddi.com/software/flup/ is required. Usage: django-admin.py runfcgi --settings=yourproject.settings [fcgi settings] manage.py runfcgi [fcgi settings] Optional Fcgi settings: (setting=value) + protocol=PROTOCOL fcgi, scgi, ajp, ... (default fcgi) host=HOSTNAME hostname to listen on.. port=PORTNUM port to listen on. socket=FILE UNIX socket to listen on. @@ -45,8 +46,8 @@ Examples: (for webservers which spawn your processes for you) $ manage.py runfcgi method=threaded - Run a fastcgi server on a TCP host/port - $ manage.py runfcgi method=prefork host=127.0.0.1 port=8025 + Run a scgi server on a TCP host/port + $ manage.py runfcgi protocol=scgi method=prefork host=127.0.0.1 port=8025 Run a fastcgi server on a UNIX domain socket (posix platforms only) $ manage.py runfcgi method=prefork socket=/tmp/fcgi.sock @@ -58,6 +59,7 @@ Examples: """ FASTCGI_OPTIONS = { + 'protocol': 'fcgi', 'host': None, 'port': None, 'socket': None, @@ -100,16 +102,17 @@ def runfastcgi(argset=[], **kwargs): print >> sys.stderr, " installed flup, then make sure you have it in your PYTHONPATH." return False + flup_module = 'server.' + options['protocol'] + if options['method'] in ('prefork', 'fork'): - from flup.server.fcgi_fork import WSGIServer wsgi_opts = { 'maxSpare': int(options["maxspare"]), 'minSpare': int(options["minspare"]), 'maxChildren': int(options["maxchildren"]), 'maxRequests': int(options["maxrequests"]), } + flup_module += '_fork' elif options['method'] in ('thread', 'threaded'): - from flup.server.fcgi import WSGIServer wsgi_opts = { 'maxSpare': int(options["maxspare"]), 'minSpare': int(options["minspare"]), @@ -120,6 +123,12 @@ def runfastcgi(argset=[], **kwargs): wsgi_opts['debug'] = False # Turn off flup tracebacks + try: + WSGIServer = getattr(__import__('flup.' + flup_module, '', '', flup_module), 'WSGIServer') + except: + print "Can't import flup." + flup_module + return False + # Prep up and go from django.core.handlers.wsgi import WSGIHandler diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index 3f1004c4fb..c4cbccabcf 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -88,7 +88,7 @@ class MatchChecker(object): return str(value) # TODO: Unicode? class RegexURLPattern(object): - def __init__(self, regex, callback, default_args=None): + def __init__(self, regex, callback, default_args=None, name=None): # regex is a string representing a regular expression. # callback is either a string like 'foo.views.news.stories.story_detail' # which represents the path to a module and a view function name, or a @@ -100,6 +100,7 @@ class RegexURLPattern(object): self._callback = None self._callback_str = callback self.default_args = default_args or {} + self.name = name def resolve(self, path): match = self.regex.search(path) @@ -205,14 +206,15 @@ class RegexURLResolver(object): try: lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name) except (ImportError, AttributeError): - raise NoReverseMatch + if func_name != '': + raise NoReverseMatch for pattern in self.urlconf_module.urlpatterns: if isinstance(pattern, RegexURLResolver): try: return pattern.reverse_helper(lookup_view, *args, **kwargs) except NoReverseMatch: continue - elif pattern.callback == lookup_view: + elif pattern.callback == lookup_view or pattern.name == lookup_view: try: return pattern.reverse_helper(*args, **kwargs) except NoReverseMatch: diff --git a/django/db/backends/ado_mssql/base.py b/django/db/backends/ado_mssql/base.py index 8dcb98ce61..1a2f3de140 100644 --- a/django/db/backends/ado_mssql/base.py +++ b/django/db/backends/ado_mssql/base.py @@ -138,7 +138,7 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "DEFAULT" -def get_sql_flush(sql_styler, full_table_list): +def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables themselves) and put the database in an empty 'initial' state @@ -147,9 +147,14 @@ def get_sql_flush(sql_styler, full_table_list): # TODO - SQL not actually tested against ADO MSSQL yet! # TODO - autoincrement indices reset required? See other get_sql_flush() implementations sql_list = ['%s %s;' % \ - (sql_styler.SQL_KEYWORD('TRUNCATE'), - sql_styler.SQL_FIELD(quote_name(table)) - ) for table in full_table_list] + (style.SQL_KEYWORD('TRUNCATE'), + style.SQL_FIELD(quote_name(table)) + ) for table in tables] + +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + # No sequence reset required + return [] OPERATOR_MAPPING = { 'exact': '= %s', diff --git a/django/db/backends/dummy/base.py b/django/db/backends/dummy/base.py index e36a99e982..eb3c3867c2 100644 --- a/django/db/backends/dummy/base.py +++ b/django/db/backends/dummy/base.py @@ -40,5 +40,6 @@ get_deferrable_sql = complain get_fulltext_search_sql = complain get_drop_foreignkey_sql = complain get_sql_flush = complain +get_sql_sequence_reset = complain OPERATOR_MAPPING = {} diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index 94718595cb..3c2431a982 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -215,6 +215,11 @@ def get_sql_flush(style, tables, sequences): else: return [] +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + # No sequence reset required + return [] + OPERATOR_MAPPING = { 'exact': '= %s', 'iexact': 'LIKE %s', diff --git a/django/db/backends/mysql_old/base.py b/django/db/backends/mysql_old/base.py index 4bd87518e8..ded0b6cbcb 100644 --- a/django/db/backends/mysql_old/base.py +++ b/django/db/backends/mysql_old/base.py @@ -217,6 +217,11 @@ def get_sql_flush(style, tables, sequences): else: return [] +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + # No sequence reset required + return [] + OPERATOR_MAPPING = { 'exact': '= %s', 'iexact': 'LIKE %s', diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index d52ae33c2e..0f32407638 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -134,6 +134,10 @@ def get_sql_flush(style, tables, sequences): style.SQL_FIELD(quote_name(table)) ) for table in tables] +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + # No sequence reset required + return [] OPERATOR_MAPPING = { 'exact': '= %s', diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index 54be422ae2..0dab19ba0d 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -213,6 +213,30 @@ def get_sql_flush(style, tables, sequences): else: return [] +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + from django.db import models + output = [] + for model in model_list: + for f in model._meta.fields: + if isinstance(f, models.AutoField): + output.append("%s setval('%s', (%s max(%s) %s %s));" % \ + (style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD('%s_%s_seq' % (model._meta.db_table, f.column)), + style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD(quote_name(f.column)), + style.SQL_KEYWORD('FROM'), + style.SQL_TABLE(quote_name(model._meta.db_table)))) + break # Only one AutoField is allowed per model, so don't bother continuing. + for f in model._meta.many_to_many: + output.append("%s setval('%s', (%s max(%s) %s %s));" % \ + (style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()), + style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD(quote_name('id')), + style.SQL_KEYWORD('FROM'), + style.SQL_TABLE(f.m2m_db_table()))) + return output # Register these custom typecasts, because Django expects dates/times to be # in Python's native (standard-library) datetime/time format, whereas psycopg diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py index e4724e46fb..58e232df68 100644 --- a/django/db/backends/postgresql_psycopg2/base.py +++ b/django/db/backends/postgresql_psycopg2/base.py @@ -169,6 +169,31 @@ def get_sql_flush(style, tables, sequences): return sql else: return [] + +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + from django.db import models + output = [] + for model in model_list: + for f in model._meta.fields: + if isinstance(f, models.AutoField): + output.append("%s setval('%s', (%s max(%s) %s %s));" % \ + (style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD('%s_%s_seq' % (model._meta.db_table, f.column)), + style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD(quote_name(f.column)), + style.SQL_KEYWORD('FROM'), + style.SQL_TABLE(quote_name(model._meta.db_table)))) + break # Only one AutoField is allowed per model, so don't bother continuing. + for f in model._meta.many_to_many: + output.append("%s setval('%s', (%s max(%s) %s %s));" % \ + (style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()), + style.SQL_KEYWORD('SELECT'), + style.SQL_FIELD(quote_name('id')), + style.SQL_KEYWORD('FROM'), + style.SQL_TABLE(f.m2m_db_table()))) + return output OPERATOR_MAPPING = { 'exact': '= %s', diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 4b8a1c64a8..ec0f715491 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -170,6 +170,11 @@ def get_sql_flush(style, tables, sequences): # get_sql_flush() implementations). Just return SQL at this point return sql +def get_sql_sequence_reset(style, model_list): + "Returns a list of the SQL statements to reset sequences for the given models." + # No sequence reset required + return [] + def _sqlite_date_trunc(lookup_type, dt): try: dt = util.typecast_timestamp(dt) diff --git a/django/db/models/base.py b/django/db/models/base.py index f904ff5768..a5c559b6d7 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -22,7 +22,12 @@ class ModelBase(type): "Metaclass for all models" def __new__(cls, name, bases, attrs): # If this isn't a subclass of Model, don't do anything special. - if name == 'Model' or not filter(lambda b: issubclass(b, Model), bases): + try: + if not filter(lambda b: issubclass(b, Model), bases): + return super(ModelBase, cls).__new__(cls, name, bases, attrs) + except NameError: + # 'Model' isn't defined yet, meaning we're looking at Django's own + # Model class, defined below. return super(ModelBase, cls).__new__(cls, name, bases, attrs) # Create the class. diff --git a/django/http/__init__.py b/django/http/__init__.py index 0ae90c4921..ed2c128a16 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -155,6 +155,9 @@ def parse_cookie(cookie): class HttpResponse(object): "A basic HTTP response, with content and dictionary-accessed headers" + + status_code = 200 + def __init__(self, content='', mimetype=None): from django.conf import settings self._charset = settings.DEFAULT_CHARSET @@ -168,7 +171,6 @@ class HttpResponse(object): self._is_string = True self.headers = {'Content-Type': mimetype} self.cookies = SimpleCookie() - self.status_code = 200 def __str__(self): "Full HTTP message, including headers" @@ -254,47 +256,49 @@ class HttpResponse(object): return sum([len(chunk) for chunk in self._container]) class HttpResponseRedirect(HttpResponse): + status_code = 302 + def __init__(self, redirect_to): HttpResponse.__init__(self) self['Location'] = quote(redirect_to, safe=RESERVED_CHARS) - self.status_code = 302 class HttpResponsePermanentRedirect(HttpResponse): + status_code = 301 + def __init__(self, redirect_to): HttpResponse.__init__(self) self['Location'] = quote(redirect_to, safe=RESERVED_CHARS) - self.status_code = 301 class HttpResponseNotModified(HttpResponse): - def __init__(self): - HttpResponse.__init__(self) - self.status_code = 304 + status_code = 304 + +class HttpResponseBadRequest(HttpResponse): + status_code = 400 class HttpResponseNotFound(HttpResponse): - def __init__(self, *args, **kwargs): - HttpResponse.__init__(self, *args, **kwargs) - self.status_code = 404 + status_code = 404 class HttpResponseForbidden(HttpResponse): - def __init__(self, *args, **kwargs): - HttpResponse.__init__(self, *args, **kwargs) - self.status_code = 403 + status_code = 403 class HttpResponseNotAllowed(HttpResponse): + status_code = 405 + def __init__(self, permitted_methods): HttpResponse.__init__(self) self['Allow'] = ', '.join(permitted_methods) - self.status_code = 405 class HttpResponseGone(HttpResponse): + status_code = 410 + def __init__(self, *args, **kwargs): HttpResponse.__init__(self, *args, **kwargs) - self.status_code = 410 class HttpResponseServerError(HttpResponse): + status_code = 500 + def __init__(self, *args, **kwargs): HttpResponse.__init__(self, *args, **kwargs) - self.status_code = 500 def get_host(request): "Gets the HTTP host from the environment or request headers." diff --git a/django/newforms/fields.py b/django/newforms/fields.py index 8e3da03470..c3b74e93f7 100644 --- a/django/newforms/fields.py +++ b/django/newforms/fields.py @@ -3,7 +3,8 @@ Field classes """ from django.utils.translation import gettext -from util import ErrorList, ValidationError, smart_unicode +from django.utils.encoding import smart_unicode +from util import ErrorList, ValidationError from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple import datetime import re @@ -38,15 +39,16 @@ class Field(object): def __init__(self, required=True, widget=None, label=None, initial=None, help_text=None): # required -- Boolean that specifies whether the field is required. # True by default. - # widget -- A Widget class, or instance of a Widget class, that should be - # used for this Field when displaying it. Each Field has a default - # Widget that it'll use if you don't specify this. In most cases, - # the default widget is TextInput. - # label -- A verbose name for this field, for use in displaying this field in - # a form. By default, Django will use a "pretty" version of the form - # field name, if the Field is part of a Form. - # initial -- A value to use in this Field's initial display. This value is - # *not* used as a fallback if data isn't given. + # widget -- A Widget class, or instance of a Widget class, that should + # be used for this Field when displaying it. Each Field has a + # default Widget that it'll use if you don't specify this. In + # most cases, the default widget is TextInput. + # label -- A verbose name for this field, for use in displaying this + # field in a form. By default, Django will use a "pretty" + # version of the form field name, if the Field is part of a + # Form. + # initial -- A value to use in this Field's initial display. This value + # is *not* used as a fallback if data isn't given. # help_text -- An optional string to use as "help text" for this Field. if label is not None: label = smart_unicode(label) diff --git a/django/newforms/forms.py b/django/newforms/forms.py index 9c4b2702f6..2d7a65d7fe 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -4,9 +4,10 @@ Form classes from django.utils.datastructures import SortedDict, MultiValueDict from django.utils.html import escape +from django.utils.encoding import StrAndUnicode from fields import Field from widgets import TextInput, Textarea, HiddenInput, MultipleHiddenInput -from util import flatatt, StrAndUnicode, ErrorDict, ErrorList, ValidationError +from util import flatatt, ErrorDict, ErrorList, ValidationError import copy __all__ = ('BaseForm', 'Form') @@ -245,9 +246,9 @@ class BoundField(StrAndUnicode): value = self.as_widget(self.field.widget) if not isinstance(value, basestring): # Some Widget render() methods -- notably RadioSelect -- return a - # "special" object rather than a string. Call the __str__() on that + # "special" object rather than a string. Call __unicode__() on that # object to get its rendered value. - value = value.__str__() + value = unicode(value) return value def _errors(self): diff --git a/django/newforms/models.py b/django/newforms/models.py index 616c7141e7..a60002b705 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -36,13 +36,14 @@ def save_instance(form, instance, commit=True): raise ValueError("The %s could not be changed because the data didn't validate." % opts.object_name) clean_data = form.clean_data for f in opts.fields: - if not f.editable or isinstance(f, models.AutoField): + if not f.editable or isinstance(f, models.AutoField) or not f.name in clean_data: continue setattr(instance, f.name, clean_data[f.name]) if commit: instance.save() for f in opts.many_to_many: - setattr(instance, f.attname, clean_data[f.name]) + if f.name in clean_data: + setattr(instance, f.attname, clean_data[f.name]) # GOTCHA: If many-to-many data is given and commit=False, the many-to-many # data will be lost. This happens because a many-to-many options cannot be # set on an object until after it's saved. Maybe we should raise an diff --git a/django/newforms/util.py b/django/newforms/util.py index 51a8efdde2..5fc0223f5b 100644 --- a/django/newforms/util.py +++ b/django/newforms/util.py @@ -1,30 +1,12 @@ from django.conf import settings from django.utils.html import escape +from django.utils.functional import Promise, lazy +from django.utils.encoding import smart_unicode # Converts a dictionary to a single string with key="value", XML-style with # a leading space. Assumes keys do not need to be XML-escaped. flatatt = lambda attrs: u''.join([u' %s="%s"' % (k, escape(v)) for k, v in attrs.items()]) -def smart_unicode(s): - if not isinstance(s, basestring): - if hasattr(s, '__unicode__'): - s = unicode(s) - else: - s = unicode(str(s), settings.DEFAULT_CHARSET) - elif not isinstance(s, unicode): - s = unicode(s, settings.DEFAULT_CHARSET) - return s - -class StrAndUnicode(object): - """ - A class whose __str__ returns its __unicode__ as a bytestring - according to settings.DEFAULT_CHARSET. - - Useful as a mix-in. - """ - def __str__(self): - return self.__unicode__().encode(settings.DEFAULT_CHARSET) - class ErrorDict(dict): """ A collection of errors that knows how to display itself in various formats. diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py index 18bba31897..8d292673a5 100644 --- a/django/newforms/widgets.py +++ b/django/newforms/widgets.py @@ -9,10 +9,11 @@ __all__ = ( 'MultiWidget', 'SplitDateTimeWidget', ) -from util import flatatt, StrAndUnicode, smart_unicode +from util import flatatt from django.utils.datastructures import MultiValueDict from django.utils.html import escape from django.utils.translation import gettext +from django.utils.encoding import StrAndUnicode, smart_unicode from itertools import chain try: @@ -24,7 +25,10 @@ class Widget(object): is_hidden = False # Determines whether this corresponds to an . def __init__(self, attrs=None): - self.attrs = attrs or {} + if attrs is not None: + self.attrs = attrs.copy() + else: + self.attrs = {} def render(self, name, value, attrs=None): """ diff --git a/django/oldforms/__init__.py b/django/oldforms/__init__.py index 56101984f5..873bd0204a 100644 --- a/django/oldforms/__init__.py +++ b/django/oldforms/__init__.py @@ -923,7 +923,8 @@ class FilePathField(SelectField): for root, dirs, files in os.walk(path): for f in files: if match is None or match_re.search(f): - choices.append((os.path.join(root, f), f)) + f = os.path.join(root, f) + choices.append((f, f.replace(path, "", 1))) else: try: for f in os.listdir(path): diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index ed11f2c1ae..448ad8a50b 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -140,7 +140,7 @@ class IfChangedNode(Node): else: compare_to = self.nodelist.render(context) except VariableDoesNotExist: - compare_to = None + compare_to = None if compare_to != self._last_seen: firstloop = (self._last_seen == None) @@ -320,7 +320,7 @@ class URLNode(Node): self.view_name = view_name self.args = args self.kwargs = kwargs - + def render(self, context): from django.core.urlresolvers import reverse, NoReverseMatch args = [arg.resolve(context) for arg in self.args] @@ -354,6 +354,23 @@ class WidthRatioNode(Node): return '' return str(int(round(ratio))) +class WithNode(Node): + def __init__(self, var, name, nodelist): + self.var = var + self.name = name + self.nodelist = nodelist + + def __repr__(self): + return "" + + def render(self, context): + val = self.var.resolve(context) + context.push() + context[self.name] = val + output = self.nodelist.render(context) + context.pop() + return output + #@register.tag def comment(parser, token): """ @@ -835,7 +852,7 @@ regroup = register.tag(regroup) def spaceless(parser, token): """ - Normalize whitespace between HTML tags to a single space. This includes tab + Removes whitespace between HTML tags. This includes tab characters and newlines. Example usage:: @@ -848,7 +865,7 @@ def spaceless(parser, token): This example would return this HTML:: -

            Foo

            +

            Foo

            Only space between *tags* is normalized -- not space between tags and text. In this example, the space around ``Hello`` won't be stripped:: @@ -899,12 +916,12 @@ templatetag = register.tag(templatetag) def url(parser, token): """ - Returns an absolute URL matching given view with its parameters. - + Returns an absolute URL matching given view with its parameters. + This is a way to define links that aren't tied to a particular URL configuration:: - + {% url path.to.some_view arg1,arg2,name1=value1 %} - + The first argument is a path to a view. It can be an absolute python path or just ``app_name.view_name`` without the project name if the view is located inside the project. Other arguments are comma-separated values @@ -913,18 +930,18 @@ def url(parser, token): For example if you have a view ``app_name.client`` taking client's id and the corresponding line in a URLconf looks like this:: - + ('^client/(\d+)/$', 'app_name.client') - + and this app's URLconf is included into the project's URLconf under some path:: - + ('^clients/', include('project_name.app_name.urls')) - + then in a template you can create a link for a certain client like this:: - + {% url app_name.client client.id %} - + The URL will look like ``/clients/client/123/``. """ bits = token.contents.split(' ', 2) @@ -967,3 +984,25 @@ def widthratio(parser, token): return WidthRatioNode(parser.compile_filter(this_value_expr), parser.compile_filter(max_value_expr), max_width) widthratio = register.tag(widthratio) + +#@register.tag +def do_with(parser, token): + """ + Add a value to the context (inside of this block) for caching and easy + access. + + For example:: + + {% with person.some_sql_method as total %} + {{ total }} object{{ total|pluralize }} + {% endwith %} + """ + bits = list(token.split_contents()) + if len(bits) != 4 or bits[2] != "as": + raise TemplateSyntaxError, "%r expected format is 'value as name'" % tagname + var = parser.compile_filter(bits[1]) + name = bits[3] + nodelist = parser.parse(('endwith',)) + parser.delete_first_token() + return WithNode(var, name, nodelist) +do_with = register.tag('with', do_with) diff --git a/django/test/simple.py b/django/test/simple.py index 200f150594..fed6237929 100644 --- a/django/test/simple.py +++ b/django/test/simple.py @@ -84,5 +84,5 @@ def run_tests(module_list, verbosity=1, extra_tests=[]): teardown_test_environment() - return len(result.failures) + return len(result.failures) + len(result.errors) \ No newline at end of file diff --git a/django/utils/encoding.py b/django/utils/encoding.py new file mode 100644 index 0000000000..4774fb0d26 --- /dev/null +++ b/django/utils/encoding.py @@ -0,0 +1,32 @@ +from django.conf import settings +from django.utils.functional import Promise + +def smart_unicode(s): + if isinstance(s, Promise): + # The input is the result of a gettext_lazy() call, or similar. It will + # already be encoded in DEFAULT_CHARSET on evaluation and we don't want + # to evaluate it until render time. + # FIXME: This isn't totally consistent, because it eventually returns a + # bytestring rather than a unicode object. It works wherever we use + # smart_unicode() at the moment. Fixing this requires work in the + # i18n internals. + return s + if not isinstance(s, basestring,): + if hasattr(s, '__unicode__'): + s = unicode(s) + else: + s = unicode(str(s), settings.DEFAULT_CHARSET) + elif not isinstance(s, unicode): + s = unicode(s, settings.DEFAULT_CHARSET) + return s + +class StrAndUnicode(object): + """ + A class whose __str__ returns its __unicode__ as a bytestring + according to settings.DEFAULT_CHARSET. + + Useful as a mix-in. + """ + def __str__(self): + return self.__unicode__().encode(settings.DEFAULT_CHARSET) + diff --git a/django/utils/html.py b/django/utils/html.py index a0d1e82dcf..607362817b 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -1,6 +1,7 @@ "HTML utilities suitable for global use." import re, string +from django.utils.encoding import smart_unicode # Configuration for urlize() function LEADING_PUNCTUATION = ['(', '<', '<'] @@ -39,8 +40,8 @@ def strip_tags(value): return re.sub(r'<[^>]*?>', '', value) def strip_spaces_between_tags(value): - "Returns the given HTML with spaces between tags normalized to a single space" - return re.sub(r'>\s+<', '> <', value) + "Returns the given HTML with spaces between tags removed" + return re.sub(r'>\s+<', '><', value) def strip_entities(value): "Returns the given HTML with all entities (&something;) stripped" diff --git a/django/utils/text.py b/django/utils/text.py index faf8705fa9..c73ab908f3 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -191,14 +191,15 @@ def smart_split(text): Supports both single and double quotes, and supports escaping quotes with backslashes. In the output, strings will keep their initial and trailing quote marks. + >>> list(smart_split('This is "a person\'s" test.')) ['This', 'is', '"a person\'s"', 'test.'] """ for bit in smart_split_re.finditer(text): bit = bit.group(0) - if bit[0] == '"': + if bit[0] == '"' and bit[-1] == '"': yield '"' + bit[1:-1].replace('\\"', '"').replace('\\\\', '\\') + '"' - elif bit[0] == "'": + elif bit[0] == "'" and bit[-1] == "'": yield "'" + bit[1:-1].replace("\\'", "'").replace("\\\\", "\\") + "'" else: yield bit diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index 276e59f4bd..dbb97af76c 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -1,8 +1,97 @@ -from django.conf import settings +""" +Internationalization support. +""" +from django.utils.functional import lazy -if settings.USE_I18N: - from trans_real import * -else: - from trans_null import * +__all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext', + 'ngettext_lazy', 'string_concat', 'activate', 'deactivate', + 'get_language', 'get_language_bidi', 'get_date_formats', + 'get_partial_date_formats', 'check_for_language', 'to_locale', + 'get_language_from_request', 'install', 'templatize'] + +# Here be dragons, so a short explanation of the logic won't hurt: +# We are trying to solve two problems: (1) access settings, in particular +# settings.USE_I18N, as late as possible, so that modules can be imported +# without having to first configure Django, and (2) if some other code creates +# a reference to one of these functions, don't break that reference when we +# replace the functions with their real counterparts (once we do access the +# settings). + +def delayed_loader(*args, **kwargs): + """ + Replace each real_* function with the corresponding function from either + trans_real or trans_null (e.g. real_gettext is replaced with + trans_real.gettext or trans_null.gettext). This function is run once, the + first time any i18n method is called. It replaces all the i18n methods at + once at that time. + """ + import traceback + from django.conf import settings + if settings.USE_I18N: + import trans_real as trans + else: + import trans_null as trans + caller = traceback.extract_stack(limit=2)[0][2] + g = globals() + for name in __all__: + if hasattr(trans, name): + g['real_%s' % name] = getattr(trans, name) + + # Make the originally requested function call on the way out the door. + return g[caller](*args, **kwargs) + +g = globals() +for name in __all__: + g['real_%s' % name] = delayed_loader +del g, delayed_loader + +def gettext_noop(message): + return real_gettext_noop(message) + +def gettext(message): + return real_gettext(message) + + +def ngettext(singular, plural, number): + return real_ngettext(singular, plural, number) + +def string_concat(*strings): + return real_string_concat(*strings) + +ngettext_lazy = lazy(ngettext, str, unicode) +gettext_lazy = lazy(gettext, str, unicode) +string_concat = lazy(string_concat, str, unicode) + +def activate(language): + return real_activate(language) + +def deactivate(): + return real_deactivate() + +def get_language(): + return real_get_language() + +def get_language_bidi(): + return real_get_language_bidi() + +def get_date_formats(): + return real_get_date_formats() + +def get_partial_date_formats(): + return real_get_partial_date_formats() + +def check_for_language(lang_code): + return real_check_for_language(lang_code) + +def to_locale(language): + return real_to_locale(language) + +def get_language_from_request(request): + return real_get_language_from_request(request) + +def install(): + return real_install() + +def templatize(src): + return real_templatize(src) -del settings diff --git a/django/utils/translation/trans_null.py b/django/utils/translation/trans_null.py index 75ad573357..10b07529e3 100644 --- a/django/utils/translation/trans_null.py +++ b/django/utils/translation/trans_null.py @@ -9,7 +9,6 @@ def ngettext(singular, plural, number): return plural ngettext_lazy = ngettext -gettext = gettext_noop = gettext_lazy = _ = lambda x: x string_concat = lambda *strings: ''.join([str(el) for el in strings]) activate = lambda x: None deactivate = install = lambda: None @@ -19,6 +18,20 @@ get_date_formats = lambda: (settings.DATE_FORMAT, settings.DATETIME_FORMAT, sett get_partial_date_formats = lambda: (settings.YEAR_MONTH_FORMAT, settings.MONTH_DAY_FORMAT) check_for_language = lambda x: True +TECHNICAL_ID_MAP = { + "DATE_WITH_TIME_FULL": settings.DATETIME_FORMAT, + "DATE_FORMAT": settings.DATE_FORMAT, + "DATETIME_FORMAT": settings.DATETIME_FORMAT, + "TIME_FORMAT": settings.TIME_FORMAT, + "YEAR_MONTH_FORMAT": settings.YEAR_MONTH_FORMAT, + "MONTH_DAY_FORMAT": settings.MONTH_DAY_FORMAT, +} + +def gettext(message): + return TECHNICAL_ID_MAP.get(message, message) + +gettext_noop = gettext_lazy = _ = gettext + def to_locale(language): p = language.find('-') if p >= 0: diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 94df23a8e9..0c8dcd540f 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -3,7 +3,6 @@ import os, re, sys import gettext as gettext_module from cStringIO import StringIO -from django.utils.functional import lazy try: import threading @@ -277,9 +276,6 @@ def ngettext(singular, plural, number): _default = translation(settings.LANGUAGE_CODE) return _default.ngettext(singular, plural, number) -gettext_lazy = lazy(gettext, str) -ngettext_lazy = lazy(ngettext, str) - def check_for_language(lang_code): """ Checks whether there is a global language file for the given language code. @@ -493,4 +489,3 @@ def string_concat(*strings): """ return ''.join([str(el) for el in strings]) -string_concat = lazy(string_concat, str) diff --git a/docs/add_ons.txt b/docs/add_ons.txt index 9809cf46f8..b92ae0bd17 100644 --- a/docs/add_ons.txt +++ b/docs/add_ons.txt @@ -9,6 +9,13 @@ problems. This code lives in ``django/contrib`` in the Django distribution. Here's a rundown of the packages in ``contrib``: +.. admonition:: Note + + For most of these add-ons -- specifically, the add-ons that include either + models or template tags -- you'll need to add the package name (e.g., + ``'django.contrib.admin'``) to your ``INSTALLED_APPS`` setting and re-run + ``manage.py syncdb``. + .. _"batteries included" philosophy: http://docs.python.org/tut/node12.html#batteries-included admin @@ -147,13 +154,20 @@ contains a ``USZipCodeField`` that you can use to validate U.S. zip codes. markup ====== -A collection of template filters that implement these common markup languages: +A collection of template filters that implement common markup languages: - * `Textile`_ - * `Markdown`_ - * `ReST (ReStructured Text)`_ + * ``textile`` -- implements `Textile`_ + * ``markdown`` -- implements `Markdown`_ + * ``restructuredtext`` -- implements `ReST (ReStructured Text)`_ -For documentation, read the source code in django/contrib/markup/templatetags/markup.py. +In each case, the filter expects formatted markup as a string and returns a +string representing the marked-up text. For example, the ``textile`` filter +converts text that is marked-up in Textile format to HTML. + +To activate these filters, add ``'django.contrib.markup'`` to your +``INSTALLED_APPS`` setting. Once you've done that, use ``{% load markup %}`` in +a template, and you'll have access to these filters. For more documentation, +read the source code in django/contrib/markup/templatetags/markup.py. .. _Textile: http://en.wikipedia.org/wiki/Textile_%28markup_language%29 .. _Markdown: http://en.wikipedia.org/wiki/Markdown diff --git a/docs/cache.txt b/docs/cache.txt index 054d99819d..e245e100e7 100644 --- a/docs/cache.txt +++ b/docs/cache.txt @@ -66,10 +66,19 @@ deleting arbitrary data in the cache. All data is stored directly in memory, so there's no overhead of database or filesystem usage. After installing Memcached itself, you'll need to install the Memcached Python -bindings. They're in a single Python module, memcache.py, available at -ftp://ftp.tummy.com/pub/python-memcached/ . If that URL is no longer valid, -just go to the Memcached Web site (http://www.danga.com/memcached/) and get the -Python bindings from the "Client APIs" section. +bindings. Two versions of this are available. Choose and install *one* of the +following modules: + + * The fastest available option is a module called ``cmemcache``, available + at http://gijsbert.org/cmemcache/ . (This module is only compatible with + the Django development version. Django 0.96 is only compatible with the + second option, below.) + + * If you can't install ``cmemcache``, you can install ``python-memcached``, + available at ftp://ftp.tummy.com/pub/python-memcached/ . If that URL is + no longer valid, just go to the Memcached Web site + (http://www.danga.com/memcached/) and get the Python bindings from the + "Client APIs" section. To use Memcached with Django, set ``CACHE_BACKEND`` to ``memcached://ip:port/``, where ``ip`` is the IP address of the Memcached diff --git a/docs/django-admin.txt b/docs/django-admin.txt index b6028dc2a0..388eaf98ac 100644 --- a/docs/django-admin.txt +++ b/docs/django-admin.txt @@ -366,7 +366,7 @@ Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given appnames. sqlsequencereset [appname appname ...] ---------------------------------------------- -Prints the SQL statements for resetting PostgreSQL sequences for the given +Prints the SQL statements for resetting sequences for the given appnames. See http://simon.incutio.com/archive/2004/04/21/postgres for more information. diff --git a/docs/faq.txt b/docs/faq.txt index 33e8ef01b4..202b73c6be 100644 --- a/docs/faq.txt +++ b/docs/faq.txt @@ -328,8 +328,9 @@ Do I have to use mod_python? Although we recommend mod_python for production use, you don't have to use it, thanks to the fact that Django uses an arrangement called WSGI_. Django can -talk to any WSGI-enabled server. The most common non-mod_python deployment -setup is FastCGI. See `How to use Django with FastCGI`_ for full information. +talk to any WSGI-enabled server. Other non-mod_python deployment setups are +FastCGI, SCGI or AJP. See `How to use Django with FastCGI, SCGI or AJP`_ for +full information. Also, see the `server arrangements wiki page`_ for other deployment strategies. @@ -337,7 +338,7 @@ If you just want to play around and develop things on your local computer, use the development Web server that comes with Django. Things should Just Work. .. _WSGI: http://www.python.org/peps/pep-0333.html -.. _How to use Django with FastCGI: ../fastcgi/ +.. _How to use Django with FastCGI, SCGI or AJP: ../fastcgi/ .. _server arrangements wiki page: http://code.djangoproject.com/wiki/ServerArrangements How do I install mod_python on Windows? @@ -381,9 +382,9 @@ Why do I get an error about importing DJANGO_SETTINGS_MODULE? Make sure that: * The environment variable DJANGO_SETTINGS_MODULE is set to a fully-qualified - Python module (i.e. "mysite.settings.main"). + Python module (i.e. "mysite.settings"). - * Said module is on ``sys.path`` (``import mysite.settings.main`` should work). + * Said module is on ``sys.path`` (``import mysite.settings`` should work). * The module doesn't contain syntax errors (of course). diff --git a/docs/fastcgi.txt b/docs/fastcgi.txt index 5ecaac8666..119688096f 100644 --- a/docs/fastcgi.txt +++ b/docs/fastcgi.txt @@ -1,11 +1,17 @@ -============================== -How to use Django with FastCGI -============================== +=========================================== +How to use Django with FastCGI, SCGI or AJP +=========================================== Although the `current preferred setup`_ for running Django is Apache_ with -`mod_python`_, many people use shared hosting, on which FastCGI is the only -viable option. In some setups, FastCGI also allows better security -- and, -possibly, better performance -- than mod_python. +`mod_python`_, many people use shared hosting, on which protocols such as +FastCGI, SCGI or AJP are the only viable options. In some setups, these protocols +also allow better security -- and, possibly, better performance -- than mod_python. + +.. admonition:: Note + + This document primarily focuses on FastCGI. Other protocols, such as SCGI + and AJP, are also supported, through the ``flup`` Python package. See the + "Protocols" section below for specifics about SCGI and AJP. Essentially, FastCGI is an efficient way of letting an external application serve pages to a Web server. The Web server delegates the incoming Web requests @@ -74,10 +80,26 @@ your ``manage.py`` is), and then run ``manage.py`` with the ``runfcgi`` option:: If you specify ``help`` as the only option after ``runfcgi``, it'll display a list of all the available options. -You'll need to specify either a ``socket`` or both ``host`` and ``port``. Then, -when you set up your Web server, you'll just need to point it at the host/port +You'll need to specify either a ``socket``, ``protocol`` or both ``host`` and ``port``. +Then, when you set up your Web server, you'll just need to point it at the host/port or socket you specified when starting the FastCGI server. +Protocols +--------- + +Django supports all the protocols that flup_ does, namely fastcgi_, `SCGI`_ and +`AJP1.3`_ (the Apache JServ Protocol, version 1.3). Select your preferred +protocol by using the ``protocol=`` option with +``./manage.py runfcgi`` -- where ```` may be one of: ``fcgi`` +(the default), ``scgi`` or ``ajp``. For example:: + + ./manage.py runfcgi --protocol=scgi + +.. _flup: http://www.saddi.com/software/flup/ +.. _fastcgi: http://www.fastcgi.com/ +.. _SCGI: http://python.ca/scgi/protocol.txt +.. _AJP1.3: http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html + Examples -------- diff --git a/docs/forms.txt b/docs/forms.txt index f76f6d27ef..ce1010235f 100644 --- a/docs/forms.txt +++ b/docs/forms.txt @@ -517,10 +517,10 @@ to put punctuation at the end of your validation messages. When are validators called? --------------------------- -After a form has been submitted, Django first checks to see that all the -required fields are present and non-empty. For each field that passes that -test *and if the form submission contained data* for that field, all the -validators for that field are called in turn. The emphasized portion in the +After a form has been submitted, Django validates each field in turn. First, +if the field is required, Django checks that it is present and non-empty. Then, +if that test passes *and the form submission contained data* for that field, all +the validators for that field are called in turn. The emphasized portion in the last sentence is important: if a form field is not submitted (because it contains no data -- which is normal HTML behavior), the validators are not run against the field. diff --git a/docs/generic_views.txt b/docs/generic_views.txt index 7659a428c5..0496a58691 100644 --- a/docs/generic_views.txt +++ b/docs/generic_views.txt @@ -222,7 +222,7 @@ In addition to ``extra_context``, the template's context will be: by ``date_field``. For example, if ``num_latest`` is ``10``, then ``latest`` will be a list of the latest 10 objects in ``queryset``. -.. _RequestContext docs: ../templates_python/#subclassing-context-djangocontext +.. _RequestContext docs: ../templates_python/#subclassing-context-requestcontext ``django.views.generic.date_based.archive_year`` ------------------------------------------------ diff --git a/docs/model-api.txt b/docs/model-api.txt index 155ef63271..a03ed09eb2 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -1307,13 +1307,13 @@ A few special cases to note about ``list_display``: * Usually, elements of ``list_display`` that aren't actual database fields can't be used in sorting (because Django does all the sorting at the database level). - + However, if an element of ``list_display`` represents a certain database field, you can indicate this fact by setting the ``admin_order_field`` attribute of the item. - + For example:: - + class Person(models.Model): first_name = models.CharField(maxlength=50) color_code = models.CharField(maxlength=6) @@ -1325,7 +1325,7 @@ A few special cases to note about ``list_display``: return '%s' % (self.color_code, self.first_name) colored_first_name.allow_tags = True colored_first_name.admin_order_field = 'first_name' - + The above will tell Django to order by the ``first_name`` field when trying to sort by ``colored_first_name`` in the admin. @@ -1758,16 +1758,38 @@ slightly violates the DRY principle: the URL for this object is defined both in the URLConf file and in the model. You can further decouple your models from the URLconf using the ``permalink`` -decorator. This decorator is passed the view function and any parameters you -would use for accessing this instance directly. Django then works out the -correct full URL path using the URLconf. For example:: +decorator. This decorator is passed the view function, a list of positional +parameters and (optionally) a dictionary of named parameters. Django then +works out the correct full URL path using the URLconf, substituting the +parameters you have given into the URL. For example, if your URLconf +contained a line such as:: + + (r'^/people/(\d+)/$', 'people.views.details'), + +...your model could have a ``get_absolute_url`` method that looked like this:: from django.db.models import permalink def get_absolute_url(self): - return ('people.views.details', str(self.id)) + return ('people.views.details', [str(self.id)]) get_absolute_url = permalink(get_absolute_url) +Similarly, if you had a URLconf entry that looked like:: + + (r'/archive/(?P\d{4})/(?P\d{1,2})/(?P\d{1,2})/$', archive_view) + +...you could reference this using ``permalink()`` as follows:: + + def get_absolute_url(self): + return ('archive_view', (), { + 'year': self.created.year, + 'month': self.created.month, + 'day': self.created.day}) + get_absolute_url = permalink(get_absolute_url) + +Notice that we specify an empty sequence for the second argument in this case, +because we only want to pass keyword arguments, not named arguments. + In this way, you're tying the model's absolute URL to the view that is used to display it, without repeating the URL information anywhere. You can still use the ``get_absolute_url`` method in templates, as before. diff --git a/docs/modpython.txt b/docs/modpython.txt index 2c999753c7..31ec1efe49 100644 --- a/docs/modpython.txt +++ b/docs/modpython.txt @@ -13,14 +13,15 @@ other server arrangements. Django requires Apache 2.x and mod_python 3.x, and you should use Apache's `prefork MPM`_, as opposed to the `worker MPM`_. -You may also be interested in `How to use Django with FastCGI`_. +You may also be interested in `How to use Django with FastCGI, SCGI or AJP`_ +(which also covers SCGI and AJP). .. _Apache: http://httpd.apache.org/ .. _mod_python: http://www.modpython.org/ .. _mod_perl: http://perl.apache.org/ .. _prefork MPM: http://httpd.apache.org/docs/2.2/mod/prefork.html .. _worker MPM: http://httpd.apache.org/docs/2.2/mod/worker.html -.. _How to use Django with FastCGI: ../fastcgi/ +.. _How to use Django with FastCGI, SCGI or AJP: ../fastcgi/ Basic configuration =================== @@ -37,7 +38,8 @@ Then edit your ``httpd.conf`` file and add the following:: PythonDebug On -...and replace ``mysite.settings`` with the Python path to your settings file. +...and replace ``mysite.settings`` with the Python import path to your Django +project's settings file. This tells Apache: "Use mod_python for any URL at or under '/mysite/', using the Django mod_python handler." It passes the value of ``DJANGO_SETTINGS_MODULE`` @@ -53,6 +55,19 @@ on it, you'll need to tell mod_python:: PythonPath "['/path/to/project'] + sys.path" +.. caution:: + + Is you are using Windows, remember that the path will contain backslashes. + This string is passed through Python's string parser twice, so you need to + escape each backslash **twice**:: + + PythonPath "['c:\\\\path\\\\to\\\\project'] + sys.path" + + or use raw strings:: + + PythonPath "[r'c:\\path\\to\\project'] + sys.path" + + You can also add directives such as ``PythonAutoReload Off`` for performance. See the `mod_python documentation`_ for a full list of options. diff --git a/docs/release_notes_0.96.txt b/docs/release_notes_0.96.txt index ca5f5e045c..f62780c6b2 100644 --- a/docs/release_notes_0.96.txt +++ b/docs/release_notes_0.96.txt @@ -62,7 +62,7 @@ Database constraint names changed The format of the constraint names Django generates for foreign key references have changed slightly. These names are generally only used when it is not possible to put the reference directly on the affected -column, so they is not always visible. +column, so they are not always visible. The effect of this change is that running ``manage.py reset`` and similar commands against an existing database may generate SQL with @@ -261,4 +261,4 @@ all their hard work: that went into 0.96 -- but everyone who's contributed to Django is listed in AUTHORS_. -.. _AUTHORS: http://code.djangoproject.com/browser/django/trunk/AUTHORS \ No newline at end of file +.. _AUTHORS: http://code.djangoproject.com/browser/django/trunk/AUTHORS diff --git a/docs/request_response.txt b/docs/request_response.txt index 2b79903d13..40f06c859f 100644 --- a/docs/request_response.txt +++ b/docs/request_response.txt @@ -416,6 +416,10 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in The constructor doesn't take any arguments. Use this to designate that a page hasn't been modified since the user's last request. +``HttpResponseBadRequest`` + **New in Django development version.** + Acts just like ``HttpResponse`` but uses a 400 status code. + ``HttpResponseNotFound`` Acts just like ``HttpResponse`` but uses a 404 status code. diff --git a/docs/sessions.txt b/docs/sessions.txt index 660718b4e2..55fbc2c3da 100644 --- a/docs/sessions.txt +++ b/docs/sessions.txt @@ -158,7 +158,7 @@ is defined in ``django/contrib/sessions/models.py``. Because it's a normal model, you can access sessions using the normal Django database API:: >>> from django.contrib.sessions.models import Session - >>> s = Session.objects.get_object(pk='2b1189a188b44ad18c35e113ac6ceead') + >>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead') >>> s.expire_date datetime.datetime(2005, 8, 20, 13, 35, 12) diff --git a/docs/templates.txt b/docs/templates.txt index db748ae432..d93ee49ac1 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -737,6 +737,7 @@ The following snippet of template code would accomplish this dubious task::
          • {{ item }}
          • {% endfor %}
          + {% endfor %}
        @@ -756,7 +757,7 @@ i.e.:: spaceless ~~~~~~~~~ -Normalizes whitespace between HTML tags to a single space. This includes tab +Removes whitespace between HTML tags. This includes tab characters and newlines. Example usage:: @@ -769,9 +770,9 @@ Example usage:: This example would return this HTML:: -

        Foo

        +

        Foo

        -Only space between *tags* is normalized -- not space between tags and text. In +Only space between *tags* is removed -- not space between tags and text. In this example, the space around ``Hello`` won't be stripped:: {% spaceless %} @@ -872,6 +873,23 @@ Above, if ``this_value`` is 175 and ``max_value`` is 200, the the image in the above example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5 which is rounded up to 88). +with +~~~~ + +**New in Django development version** + +Caches a complex variable under a simpler name. This is useful when accessing +an "expensive" method (e.g., one that hits the database) multiple times. + +For example:: + + {% with business.employees.count as total %} + {{ total }} employee{{ total|pluralize }} + {% endwith %} + +The populated variable (in the example above, ``total``) is only available +between the ``{% with %}`` and ``{% endwith %}`` tags. + Built-in filter reference ------------------------- @@ -970,7 +988,7 @@ place -- but only if there's a decimal part to be displayed. For example: * ``36.15`` gets converted to ``36.2`` * ``36`` gets converted to ``36`` -If used with a numeric integer argument, ``floatformat`` rounds a number to that +If used with a numeric integer argument, ``floatformat`` rounds a number to that many decimal places. For example: * ``36.1234`` with floatformat:3 gets converted to ``36.123`` @@ -983,7 +1001,7 @@ For example: * ``36.1234`` with floatformat:-3 gets converted to ``36.123`` * ``36`` with floatformat:-4 gets converted to ``36`` -Using ``floatformat`` with no argument is equivalent to using ``floatformat`` with +Using ``floatformat`` with no argument is equivalent to using ``floatformat`` with an argument of ``-1``. get_digit diff --git a/docs/testing.txt b/docs/testing.txt index 31cea791d3..5b27ae6484 100644 --- a/docs/testing.txt +++ b/docs/testing.txt @@ -276,7 +276,7 @@ for testing purposes: ``status_code`` The HTTP status of the response. See RFC2616_ for a full list of HTTP status codes. - ``content`` The body of the response. The is the final page + ``content`` The body of the response. This is the final page content as rendered by the view, or any error message (such as the URL for a 302 redirect). @@ -468,7 +468,8 @@ failed:: FAILED (failures=1) -The return code for the script will indicate the number of tests that failed. +The return code for the script is the total number of failed and erroneous +tests. If all the tests pass, the return code is 0. Regardless of whether the tests pass or fail, the test database is destroyed when all the tests have been executed. diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt index 56c5fa769e..0e857d09ca 100644 --- a/docs/tutorial01.txt +++ b/docs/tutorial01.txt @@ -133,8 +133,8 @@ Now, edit ``settings.py``. It's a normal Python module with module-level variables representing Django settings. Change these settings to match your database's connection parameters: - * ``DATABASE_ENGINE`` -- Either 'postgresql', 'mysql' or 'sqlite3'. - More coming soon. + * ``DATABASE_ENGINE`` -- Either 'postgresql_psycopg2', 'mysql' or 'sqlite3'. + Other backends are `also available`_. * ``DATABASE_NAME`` -- The name of your database, or the full (absolute) path to the database file if you're using SQLite. * ``DATABASE_USER`` -- Your database username (not used for SQLite). @@ -143,6 +143,8 @@ database's connection parameters: empty string if your database server is on the same physical machine (not used for SQLite). +.. _also available: ../settings/ + .. admonition:: Note If you're using PostgreSQL or MySQL, make sure you've created a database by @@ -319,7 +321,8 @@ Now Django knows ``mysite`` includes the ``polls`` app. Let's run another comman python manage.py sql polls -You should see the following (the CREATE TABLE SQL statements for the polls app):: +You should see something similar to the following (the CREATE TABLE SQL statements +for the polls app):: BEGIN; CREATE TABLE "polls_poll" ( @@ -337,6 +340,8 @@ You should see the following (the CREATE TABLE SQL statements for the polls app) Note the following: + * The exact output will vary depending on the database you are using. + * Table names are automatically generated by combining the name of the app (``polls``) and the lowercase name of the model -- ``poll`` and ``choice``. (You can override this behavior.) @@ -365,8 +370,9 @@ If you're interested, also run the following commands: * ``python manage.py validate polls`` -- Checks for any errors in the construction of your models. - * ``python manage.py sqlinitialdata polls`` -- Outputs any initial data - required for Django's admin framework and your models. + * ``python manage.py sqlcustom polls`` -- Outputs any custom SQL statements + (such as table modifications or constraints) that are defined for the + application. * ``python manage.py sqlclear polls`` -- Outputs the necessary ``DROP TABLE`` statements for this app, according to which tables already exist diff --git a/docs/url_dispatch.txt b/docs/url_dispatch.txt index 85c87de680..e6e1cb6cbf 100644 --- a/docs/url_dispatch.txt +++ b/docs/url_dispatch.txt @@ -185,10 +185,25 @@ The first argument to ``patterns()`` is a string ``prefix``. See The remaining arguments should be tuples in this format:: - (regular expression, Python callback function [, optional dictionary]) + (regular expression, Python callback function [, optional dictionary [, optional name]]) -...where ``optional dictionary`` is optional. (See -_`Passing extra options to view functions` below.) +...where ``optional dictionary`` and ``optional name`` are optional. (See +`Passing extra options to view functions`_ below.) + +url +--- +**New in development version** + +The ``url()`` function can be used instead of a tuple as an argument to +``patterns()``. This is convenient if you wish to specify a name without the +optional extra arguments dictionary. For example:: + + urlpatterns = patterns('', + url(r'/index/$', index_view, name="main-view"), + ... + ) + +See `Naming URL patterns`_ for why the ``name`` parameter is useful. handler404 ---------- @@ -479,3 +494,44 @@ The style you use is up to you. Note that if you use this technique -- passing objects rather than strings -- the view prefix (as explained in "The view prefix" above) will have no effect. + +Naming URL patterns +=================== + +**New in development version** + +It is fairly common to use the same view function in multiple URL patterns in +your URLConf. This leads to problems when you come to do reverse URL matching, +because the ``permalink()`` decorator and ``{% url %}`` template tag use the +name of the view function to find a match. + +To solve this problem, you can give a name to each of your URL patterns in +order to distinguish them from other patterns using the same views and +parameters. You can then use this name wherever you would otherwise use the +name of the view function. For example, if you URLConf contains:: + + urlpatterns = patterns('', + url(r'/archive/(\d{4})/$', archive, name="full-archive"), + url(r'/archive-summary/(\d{4})/$', archive, {'summary': True}, "arch-summary"), + ) + +...you could refer to either the summary archive view in a template as:: + + {% url arch-summary 1945 %} + +Even though both URL patterns refer to the ``archive`` view here, using the +``name`` parameter to ``url()`` allows you to tell them apart in templates. + +The string used for the URL name can contain any characters you like. You are +not restricted to valid Python names. + +.. note:: + + Make sure that when you name your URLs, you use names that are unlikely to + clash with any other application's choice of names. If you call your URL + pattern *comment* and another application does the same thing, there is no + guarantee which URL will be inserted into your template when you use this + name. Putting a prefix on your URL names, perhaps derived from + the application name, will decrease the chances of collision. Something + like *myapp-comment* is recommended over simply *comment*. + diff --git a/docs/webdesign.txt b/docs/webdesign.txt new file mode 100644 index 0000000000..8e6eae89dd --- /dev/null +++ b/docs/webdesign.txt @@ -0,0 +1,53 @@ +======================== +django.contrib.webdesign +======================== + +The ``django.contrib.webdesign`` package, part of the `"django.contrib" add-ons`_, +provides various Django helpers that are particularly useful to Web *designers* +(as opposed to developers). + +At present, the package contains only a single template tag. If you have ideas +for Web-designer-friendly functionality in Django, please `suggest them`_. + +.. _"django.contrib" add-ons: ../add_ons/ +.. _suggest them: ../contributing/ + +Template tags +============= + +To use these template tags, add ``'django.contrib.webdesign'`` to your +``INSTALLED_APPS`` setting. Once you've done that, use +``{% load webdesign %}`` in a template to give your template access to the tags. + + +lorem +===== + +Displays random "lorem ipsum" Latin text. This is useful for providing sample +data in templates. + +Usage:: + + {% lorem [count] [method] [random] %} + +The ``{% lorem %}`` tag can be used with zero, one, two or three arguments. +The arguments are: + + =========== ============================================================= + Argument Description + =========== ============================================================= + ``count`` A number (or variable) containing the number of paragraphs or + words to generate (default is 1). + ``method`` Either ``w`` for words, ``p`` for HTML paragraphs or ``b`` + for plain-text paragraph blocks (default is ``b``). + ``random`` The word ``random``, which if given, does not use the common + paragraph ("Lorem ipsum dolor sit amet...") when generating + text. + =========== ============================================================= + +Examples: + + * ``{% lorem %}`` will output the common "lorem ipsum" paragraph. + * ``{% lorem 3 p %}`` will output the common "lorem ipsum" paragraph + and two random paragraphs each wrapped in HTML ``

        `` tags. + * ``{% lorem 2 w random %}`` will output two random Latin words. diff --git a/scripts/rpm-install.sh b/scripts/rpm-install.sh index 07a087c447..d3d95bcdb1 100644 --- a/scripts/rpm-install.sh +++ b/scripts/rpm-install.sh @@ -1,12 +1,14 @@ #! /bin/sh # -# this file is *inserted* into the install section of the generated -# spec file +# This file becomes the install section of the generated spec file. # -# this is, what dist.py normally does +# This is what dist.py normally does. python setup.py install --root=${RPM_BUILD_ROOT} --record="INSTALLED_FILES" +# Sort the filelist so that directories appear before files. This avoids +# duplicate filename problems on some systems. +touch DIRS for i in `cat INSTALLED_FILES`; do if [ -f ${RPM_BUILD_ROOT}/$i ]; then echo $i >>FILES @@ -16,4 +18,6 @@ for i in `cat INSTALLED_FILES`; do fi done -cat DIRS FILES >INSTALLED_FILES +# Make sure we match foo.pyo and foo.pyc along with foo.py (but only once each) +sed -e "/\.py[co]$/d" -e "s/\.py$/.py*/" DIRS FILES >INSTALLED_FILES + diff --git a/setup.cfg b/setup.cfg index ce9779aa00..99bc60c9a3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,4 +1,4 @@ [bdist_rpm] -doc_files = docs/*.txt +doc_files = docs examples extras AUTHORS INSTALL LICENSE README install-script = scripts/rpm-install.sh diff --git a/setup.py b/setup.py index 6fd6fab816..61e0fd55e9 100644 --- a/setup.py +++ b/setup.py @@ -3,6 +3,20 @@ from distutils.command.install import INSTALL_SCHEMES import os import sys +def fullsplit(path, result=None): + """ + Split a pathname into components (the opposite of os.path.join) in a + platform-neutral way. + """ + if result is None: + result = [] + head, tail = os.path.split(path) + if head == '': + return [tail] + result + if head == path: + return result + return fullsplit(head, [tail] + result) + # Tell distutils to put the data_files in platform-specific installation # locations. See here for an explanation: # http://groups.google.com/group/comp.lang.python/browse_thread/thread/35ec7b2fed36eaec/2105ee4d9e8042cb @@ -13,27 +27,28 @@ for scheme in INSTALL_SCHEMES.values(): # an easy way to do this. packages, data_files = [], [] root_dir = os.path.dirname(__file__) -len_root_dir = len(root_dir) django_dir = os.path.join(root_dir, 'django') +pieces = fullsplit(root_dir) +if pieces[-1] == '': + len_root_dir = len(pieces) - 1 +else: + len_root_dir = len(pieces) for dirpath, dirnames, filenames in os.walk(django_dir): # Ignore dirnames that start with '.' for i, dirname in enumerate(dirnames): if dirname.startswith('.'): del dirnames[i] if '__init__.py' in filenames: - package = dirpath[len_root_dir:].lstrip('/').replace('/', '.') - packages.append(package) - else: + packages.append('.'.join(fullsplit(dirpath)[len_root_dir:])) + elif filenames: data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]]) -# Small hack for working with bdist_wininst. -# See http://mail.python.org/pipermail/distutils-sig/2004-August/004134.html -if len(sys.argv) > 1 and sys.argv[1] == 'bdist_wininst': - for file_info in data_files: - file_info[0] = '/PURELIB/%s' % file_info[0] - # Dynamically calculate the version based on django.VERSION. -version = "%d.%d-%s" % (__import__('django').VERSION) +version_tuple = __import__('django').VERSION +if version_tuple[2] is not None: + version = "%d.%d_%s" % version_tuple +else: + version = "%d.%d" % version_tuple[:2] setup( name = "Django", diff --git a/tests/modeltests/invalid_models/models.py b/tests/modeltests/invalid_models/models.py index 2299cd85e6..af54ec3d35 100644 --- a/tests/modeltests/invalid_models/models.py +++ b/tests/modeltests/invalid_models/models.py @@ -97,6 +97,16 @@ class SelfClashM2M(models.Model): m2m_3 = models.ManyToManyField('self', symmetrical=False) m2m_4 = models.ManyToManyField('self', symmetrical=False) +class Model(models.Model): + "But it's valid to call a model Model." + year = models.PositiveIntegerField() #1960 + make = models.CharField(maxlength=10) #Aston Martin + name = models.CharField(maxlength=10) #DB 4 GT + +class Car(models.Model): + colour = models.CharField(maxlength=5) + model = models.ForeignKey(Model) + model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute. invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places" attribute. invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute. diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index db3f7fab2a..4a2e9432b0 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + r""" >>> floatformat(7.7) '7.7' @@ -87,19 +89,19 @@ u'\xeb' >>> truncatewords('A sentence with a few words in it', 'not a number') 'A sentence with a few words in it' ->>> truncatewords_html('

        one two - three
        four
        five

        ', 0) +>>> truncatewords_html('

        one two - three
        four
        five

        ', 0) '' - ->>> truncatewords_html('

        one two - three
        four
        five

        ', 2) + +>>> truncatewords_html('

        one two - three
        four
        five

        ', 2) '

        one two ...

        ' - ->>> truncatewords_html('

        one two - three
        four
        five

        ', 4) + +>>> truncatewords_html('

        one two - three
        four
        five

        ', 4) '

        one two - three
        four ...

        ' ->>> truncatewords_html('

        one two - three
        four
        five

        ', 5) +>>> truncatewords_html('

        one two - three
        four
        five

        ', 5) '

        one two - three
        four
        five

        ' ->>> truncatewords_html('

        one two - three
        four
        five

        ', 100) +>>> truncatewords_html('

        one two - three
        four
        five

        ', 100) '

        one two - three
        four
        five

        ' >>> upper('Mixed case input') @@ -166,6 +168,9 @@ u'\xcb' >>> escape(' here') '<some html & special characters > here' +>>> escape(u' here ĐÅ€£') +u'<some html & special characters > here \xc4\x90\xc3\x85\xe2\x82\xac\xc2\xa3' + >>> linebreaks('line 1') '

        line 1

        ' diff --git a/tests/regressiontests/fixtures_regress/__init__.py b/tests/regressiontests/fixtures_regress/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/regressiontests/fixtures_regress/fixtures/sequence.json b/tests/regressiontests/fixtures_regress/fixtures/sequence.json new file mode 100644 index 0000000000..ecaf637b9f --- /dev/null +++ b/tests/regressiontests/fixtures_regress/fixtures/sequence.json @@ -0,0 +1,10 @@ +[ + { + "pk": "1", + "model": "fixtures_regress.animal", + "fields": { + "name": "Lion", + "latin_name": "Panthera leo" + } + } +] \ No newline at end of file diff --git a/tests/regressiontests/fixtures_regress/models.py b/tests/regressiontests/fixtures_regress/models.py new file mode 100644 index 0000000000..f9d4d35045 --- /dev/null +++ b/tests/regressiontests/fixtures_regress/models.py @@ -0,0 +1,22 @@ +from django.db import models + +class Animal(models.Model): + name = models.CharField(maxlength=150) + latin_name = models.CharField(maxlength=150) + + def __str__(self): + return self.common_name + +__test__ = {'API_TESTS':""" +>>> from django.core import management + +# Load a fixture that uses PK=1 +>>> management.load_data(['sequence'], verbosity=0) + +# Create a new animal. Without a sequence reset, this new object +# will take a PK of 1 (on Postgres), and the save will fail. +# This is a regression test for ticket #3790. +>>> animal = Animal(name='Platypus', latin_name='Ornithorhynchus anatinus') +>>> animal.save() + +"""} \ No newline at end of file diff --git a/tests/regressiontests/forms/localflavor.py b/tests/regressiontests/forms/localflavor.py new file mode 100644 index 0000000000..fecb57d81b --- /dev/null +++ b/tests/regressiontests/forms/localflavor.py @@ -0,0 +1,885 @@ +# -*- coding: utf-8 -*- +# Tests for the different contrib/localflavor/ form fields. + +localflavor_tests = r""" +# USZipCodeField ############################################################## + +USZipCodeField validates that the data is either a five-digit U.S. zip code or +a zip+4. +>>> from django.contrib.localflavor.usa.forms import USZipCodeField +>>> f = USZipCodeField() +>>> f.clean('60606') +u'60606' +>>> f.clean(60606) +u'60606' +>>> f.clean('04000') +u'04000' +>>> f.clean('4000') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] +>>> f.clean('60606-1234') +u'60606-1234' +>>> f.clean('6060-1234') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] +>>> f.clean('60606-') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = USZipCodeField(required=False) +>>> f.clean('60606') +u'60606' +>>> f.clean(60606) +u'60606' +>>> f.clean('04000') +u'04000' +>>> f.clean('4000') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] +>>> f.clean('60606-1234') +u'60606-1234' +>>> f.clean('6060-1234') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] +>>> f.clean('60606-') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# USPhoneNumberField ########################################################## + +USPhoneNumberField validates that the data is a valid U.S. phone number, +including the area code. It's normalized to XXX-XXX-XXXX format. +>>> from django.contrib.localflavor.usa.forms import USPhoneNumberField +>>> f = USPhoneNumberField() +>>> f.clean('312-555-1212') +u'312-555-1212' +>>> f.clean('3125551212') +u'312-555-1212' +>>> f.clean('312 555-1212') +u'312-555-1212' +>>> f.clean('(312) 555-1212') +u'312-555-1212' +>>> f.clean('312 555 1212') +u'312-555-1212' +>>> f.clean('312.555.1212') +u'312-555-1212' +>>> f.clean('312.555-1212') +u'312-555-1212' +>>> f.clean(' (312) 555.1212 ') +u'312-555-1212' +>>> f.clean('555-1212') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] +>>> f.clean('312-55-1212') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = USPhoneNumberField(required=False) +>>> f.clean('312-555-1212') +u'312-555-1212' +>>> f.clean('3125551212') +u'312-555-1212' +>>> f.clean('312 555-1212') +u'312-555-1212' +>>> f.clean('(312) 555-1212') +u'312-555-1212' +>>> f.clean('312 555 1212') +u'312-555-1212' +>>> f.clean('312.555.1212') +u'312-555-1212' +>>> f.clean('312.555-1212') +u'312-555-1212' +>>> f.clean(' (312) 555.1212 ') +u'312-555-1212' +>>> f.clean('555-1212') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] +>>> f.clean('312-55-1212') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# USStateField ################################################################ + +USStateField validates that the data is either an abbreviation or name of a +U.S. state. +>>> from django.contrib.localflavor.usa.forms import USStateField +>>> f = USStateField() +>>> f.clean('il') +u'IL' +>>> f.clean('IL') +u'IL' +>>> f.clean('illinois') +u'IL' +>>> f.clean(' illinois ') +u'IL' +>>> f.clean(60606) +Traceback (most recent call last): +... +ValidationError: [u'Enter a U.S. state or territory.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = USStateField(required=False) +>>> f.clean('il') +u'IL' +>>> f.clean('IL') +u'IL' +>>> f.clean('illinois') +u'IL' +>>> f.clean(' illinois ') +u'IL' +>>> f.clean(60606) +Traceback (most recent call last): +... +ValidationError: [u'Enter a U.S. state or territory.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# USStateSelect ############################################################### + +USStateSelect is a Select widget that uses a list of U.S. states/territories +as its choices. +>>> from django.contrib.localflavor.usa.forms import USStateSelect +>>> w = USStateSelect() +>>> print w.render('state', 'IL') + + +# USSocialSecurityNumberField ################################################# +>>> from django.contrib.localflavor.usa.forms import USSocialSecurityNumberField +>>> f = USSocialSecurityNumberField() +>>> f.clean('987-65-4330') +u'987-65-4330' +>>> f.clean('987654330') +u'987-65-4330' +>>> f.clean('078-05-1120') +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.'] + +# UKPostcodeField ############################################################# + +UKPostcodeField validates that the data is a valid UK postcode. +>>> from django.contrib.localflavor.uk.forms import UKPostcodeField +>>> f = UKPostcodeField() +>>> f.clean('BT32 4PX') +u'BT32 4PX' +>>> f.clean('GIR 0AA') +u'GIR 0AA' +>>> f.clean('BT324PX') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] +>>> f.clean('1NV 4L1D') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = UKPostcodeField(required=False) +>>> f.clean('BT32 4PX') +u'BT32 4PX' +>>> f.clean('GIR 0AA') +u'GIR 0AA' +>>> f.clean('1NV 4L1D') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] +>>> f.clean('BT324PX') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# FRZipCodeField ############################################################# + +FRZipCodeField validates that the data is a valid FR zipcode. +>>> from django.contrib.localflavor.fr.forms import FRZipCodeField +>>> f = FRZipCodeField() +>>> f.clean('75001') +u'75001' +>>> f.clean('93200') +u'93200' +>>> f.clean('2A200') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean('980001') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = FRZipCodeField(required=False) +>>> f.clean('75001') +u'75001' +>>> f.clean('93200') +u'93200' +>>> f.clean('2A200') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean('980001') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + + +# FRPhoneNumberField ########################################################## + +FRPhoneNumberField validates that the data is a valid french phone number. +It's normalized to 0X XX XX XX XX format. Dots are valid too. +>>> from django.contrib.localflavor.fr.forms import FRPhoneNumberField +>>> f = FRPhoneNumberField() +>>> f.clean('01 55 44 58 64') +u'01 55 44 58 64' +>>> f.clean('0155445864') +u'01 55 44 58 64' +>>> f.clean('01 5544 5864') +u'01 55 44 58 64' +>>> f.clean('01 55.44.58.64') +u'01 55 44 58 64' +>>> f.clean('01.55.44.58.64') +u'01 55 44 58 64' +>>> f.clean('01,55,44,58,64') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] +>>> f.clean('555 015 544') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = FRPhoneNumberField(required=False) +>>> f.clean('01 55 44 58 64') +u'01 55 44 58 64' +>>> f.clean('0155445864') +u'01 55 44 58 64' +>>> f.clean('01 5544 5864') +u'01 55 44 58 64' +>>> f.clean('01 55.44.58.64') +u'01 55 44 58 64' +>>> f.clean('01.55.44.58.64') +u'01 55 44 58 64' +>>> f.clean('01,55,44,58,64') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] +>>> f.clean('555 015 544') +Traceback (most recent call last): +... +ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# FRDepartmentSelect ############################################################### + +FRDepartmentSelect is a Select widget that uses a list of french departments +including DOM TOM +>>> from django.contrib.localflavor.fr.forms import FRDepartmentSelect +>>> w = FRDepartmentSelect() +>>> print w.render('dep', 'Paris') + + +# JPPostalCodeField ############################################################### + +A form field that validates its input is a Japanese postcode. + +Accepts 7 digits(with/out hyphen). +>>> from django.contrib.localflavor.jp.forms import JPPostalCodeField +>>> f = JPPostalCodeField() +>>> f.clean('251-0032') +u'2510032' +>>> f.clean('2510032') +u'2510032' +>>> f.clean('2510-032') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] +>>> f.clean('251a0032') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] +>>> f.clean('a51-0032') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] +>>> f.clean('25100321') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = JPPostalCodeField(required=False) +>>> f.clean('251-0032') +u'2510032' +>>> f.clean('2510032') +u'2510032' +>>> f.clean('2510-032') +Traceback (most recent call last): +... +ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] +>>> f.clean('') +u'' +>>> f.clean(None) +u'' + +# JPPrefectureSelect ############################################################### + +A Select widget that uses a list of Japanese prefectures as its choices. +>>> from django.contrib.localflavor.jp.forms import JPPrefectureSelect +>>> w = JPPrefectureSelect() +>>> print w.render('prefecture', 'kanagawa') + + +# ITZipCodeField ############################################################# + +>>> from django.contrib.localflavor.it.forms import ITZipCodeField +>>> f = ITZipCodeField() +>>> f.clean('00100') +u'00100' +>>> f.clean(' 00100') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] + +# ITRegionSelect ############################################################# + +>>> from django.contrib.localflavor.it.forms import ITRegionSelect +>>> w = ITRegionSelect() +>>> w.render('regions', 'PMN') +u'' + +# FIZipCodeField ############################################################# + +FIZipCodeField validates that the data is a valid FI zipcode. +>>> from django.contrib.localflavor.fi.forms import FIZipCodeField +>>> f = FIZipCodeField() +>>> f.clean('20540') +u'20540' +>>> f.clean('20101') +u'20101' +>>> f.clean('20s40') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean('205401') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = FIZipCodeField(required=False) +>>> f.clean('20540') +u'20540' +>>> f.clean('20101') +u'20101' +>>> f.clean('20s40') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean('205401') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# FIMunicipalitySelect ############################################################### + +A Select widget that uses a list of Finnish municipalities as its choices. +>>> from django.contrib.localflavor.fi.forms import FIMunicipalitySelect +>>> w = FIMunicipalitySelect() +>>> unicode(w.render('municipalities', 'turku')) +u'' + +# FISocialSecurityNumber +############################################################## + +>>> from django.contrib.localflavor.fi.forms import FISocialSecurityNumber +>>> f = FISocialSecurityNumber() +>>> f.clean('010101-0101') +u'010101-0101' +>>> f.clean('010101+0101') +u'010101+0101' +>>> f.clean('010101A0101') +u'010101A0101' +>>> f.clean('101010-0102') +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid Finnish social security number.'] +>>> f.clean('10a010-0101') +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid Finnish social security number.'] +>>> f.clean('101010-0\xe401') +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid Finnish social security number.'] +>>> f.clean('101010b0101') +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid Finnish social security number.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f = FISocialSecurityNumber(required=False) +>>> f.clean('010101-0101') +u'010101-0101' +>>> f.clean(None) +u'' +>>> f.clean('') +u'' + +# BRZipCodeField ############################################################ +>>> from django.contrib.localflavor.br.forms import BRZipCodeField +>>> f = BRZipCodeField() +>>> f.clean('12345-123') +u'12345-123' +>>> f.clean('12345_123') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('1234-123') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('abcde-abc') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('12345-') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('-123') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = BRZipCodeField(required=False) +>>> f.clean(None) +u'' +>>> f.clean('') +u'' +>>> f.clean('-123') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('12345-') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('abcde-abc') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('1234-123') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('12345_123') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] +>>> f.clean('12345-123') +u'12345-123' + +# BRPhoneNumberField ######################################################### + +>>> from django.contrib.localflavor.br.forms import BRPhoneNumberField +>>> f = BRPhoneNumberField() +>>> f.clean('41-3562-3464') +u'41-3562-3464' +>>> f.clean('4135623464') +u'41-3562-3464' +>>> f.clean('41 3562-3464') +u'41-3562-3464' +>>> f.clean('41 3562 3464') +u'41-3562-3464' +>>> f.clean('(41) 3562 3464') +u'41-3562-3464' +>>> f.clean('41.3562.3464') +u'41-3562-3464' +>>> f.clean('41.3562-3464') +u'41-3562-3464' +>>> f.clean(' (41) 3562.3464') +u'41-3562-3464' +>>> f.clean(None) +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] +>>> f.clean('') +Traceback (most recent call last): +... +ValidationError: [u'This field is required.'] + +>>> f = BRPhoneNumberField(required=False) +>>> f.clean('') +u'' +>>> f.clean(None) +u'' +>>> f.clean(' (41) 3562.3464') +u'41-3562-3464' +>>> f.clean('41.3562-3464') +u'41-3562-3464' +>>> f.clean('(41) 3562 3464') +u'41-3562-3464' +>>> f.clean('4135623464') +u'41-3562-3464' +>>> f.clean('41 3562-3464') +u'41-3562-3464' + +# BRStateSelect ############################################################## + +>>> from django.contrib.localflavor.br.forms import BRStateSelect +>>> w = BRStateSelect() +>>> w.render('states', 'PR') +u'' + +# DEZipCodeField ############################################################## + +>>> from django.contrib.localflavor.de.forms import DEZipCodeField +>>> f = DEZipCodeField() +>>> f.clean('99423') +u'99423' +>>> f.clean(' 99423') +Traceback (most recent call last): +... +ValidationError: [u'Enter a zip code in the format XXXXX.'] + +# DEStateSelect ############################################################# + +>>> from django.contrib.localflavor.de.forms import DEStateSelect +>>> w = DEStateSelect() +>>> w.render('states', 'TH') +u'' + +# DEIdentityCardNumberField ################################################# + +>>> from django.contrib.localflavor.de.forms import DEIdentityCardNumberField +>>> f = DEIdentityCardNumberField() +>>> f.clean('7549313035D-6004103-0903042-0') +u'7549313035D-6004103-0903042-0' +>>> f.clean('9786324830D 6104243 0910271 2') +u'9786324830D-6104243-0910271-2' +>>> f.clean('0434657485D-6407276-0508137-9') +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.'] +""" diff --git a/tests/regressiontests/forms/regressions.py b/tests/regressiontests/forms/regressions.py new file mode 100644 index 0000000000..5daabc03af --- /dev/null +++ b/tests/regressiontests/forms/regressions.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Tests to prevent against recurrences of earlier bugs. + +regression_tests = r""" +It should be possible to re-use attribute dictionaries (#3810) +>>> from django.newforms import * +>>> extra_attrs = {'class': 'special'} +>>> class TestForm(Form): +... f1 = CharField(max_length=10, widget=TextInput(attrs=extra_attrs)) +... f2 = CharField(widget=TextInput(attrs=extra_attrs)) +>>> TestForm(auto_id=False).as_p() +u'

        F1:

        \n

        F2:

        ' + +####################### +# Tests for form i18n # +####################### +There were some problems with form translations in #3600 + +>>> from django.utils.translation import gettext_lazy, activate, deactivate +>>> class SomeForm(Form): +... username = CharField(max_length=10, label=gettext_lazy('Username')) +>>> f = SomeForm() +>>> print f.as_p() +

        +>>> activate('de') +>>> print f.as_p() +

        +>>> deactivate() + +Unicode decoding problems... +>>> GENDERS = (('0', u'En tied\xe4'), ('1', u'Mies'), ('2', u'Nainen')) +>>> class SomeForm(Form): +... somechoice = ChoiceField(choices=GENDERS, widget=RadioSelect()) +>>> f = SomeForm() +>>> f.as_p() +u'

          \n
        • \n
        • \n
        • \n

        ' +""" diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index 2e51a45050..839b8fc5d9 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- -r""" +from localflavor import localflavor_tests +from regressions import regression_tests + +form_tests = r""" >>> from django.newforms import * >>> import datetime >>> import re @@ -1452,7 +1455,7 @@ u'' >>> f.clean('http://www.google.com') # This will fail if there's no Internet connection u'http://www.google.com' -EmailField also access min_length and max_length parameters, for convenience. +URLField also access min_length and max_length parameters, for convenience. >>> f = URLField(min_length=15, max_length=20) >>> f.clean('http://f.com') Traceback (most recent call last): @@ -3420,623 +3423,12 @@ True -# USZipCodeField ############################################################## - -USZipCodeField validates that the data is either a five-digit U.S. zip code or -a zip+4. ->>> from django.contrib.localflavor.usa.forms import USZipCodeField ->>> f = USZipCodeField() ->>> f.clean('60606') -u'60606' ->>> f.clean(60606) -u'60606' ->>> f.clean('04000') -u'04000' ->>> f.clean('4000') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] ->>> f.clean('60606-1234') -u'60606-1234' ->>> f.clean('6060-1234') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] ->>> f.clean('60606-') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = USZipCodeField(required=False) ->>> f.clean('60606') -u'60606' ->>> f.clean(60606) -u'60606' ->>> f.clean('04000') -u'04000' ->>> f.clean('4000') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] ->>> f.clean('60606-1234') -u'60606-1234' ->>> f.clean('6060-1234') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] ->>> f.clean('60606-') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] ->>> f.clean(None) -u'' ->>> f.clean('') -u'' - -# USPhoneNumberField ########################################################## - -USPhoneNumberField validates that the data is a valid U.S. phone number, -including the area code. It's normalized to XXX-XXX-XXXX format. ->>> from django.contrib.localflavor.usa.forms import USPhoneNumberField ->>> f = USPhoneNumberField() ->>> f.clean('312-555-1212') -u'312-555-1212' ->>> f.clean('3125551212') -u'312-555-1212' ->>> f.clean('312 555-1212') -u'312-555-1212' ->>> f.clean('(312) 555-1212') -u'312-555-1212' ->>> f.clean('312 555 1212') -u'312-555-1212' ->>> f.clean('312.555.1212') -u'312-555-1212' ->>> f.clean('312.555-1212') -u'312-555-1212' ->>> f.clean(' (312) 555.1212 ') -u'312-555-1212' ->>> f.clean('555-1212') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] ->>> f.clean('312-55-1212') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = USPhoneNumberField(required=False) ->>> f.clean('312-555-1212') -u'312-555-1212' ->>> f.clean('3125551212') -u'312-555-1212' ->>> f.clean('312 555-1212') -u'312-555-1212' ->>> f.clean('(312) 555-1212') -u'312-555-1212' ->>> f.clean('312 555 1212') -u'312-555-1212' ->>> f.clean('312.555.1212') -u'312-555-1212' ->>> f.clean('312.555-1212') -u'312-555-1212' ->>> f.clean(' (312) 555.1212 ') -u'312-555-1212' ->>> f.clean('555-1212') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] ->>> f.clean('312-55-1212') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] ->>> f.clean(None) -u'' ->>> f.clean('') -u'' - -# USStateField ################################################################ - -USStateField validates that the data is either an abbreviation or name of a -U.S. state. ->>> from django.contrib.localflavor.usa.forms import USStateField ->>> f = USStateField() ->>> f.clean('il') -u'IL' ->>> f.clean('IL') -u'IL' ->>> f.clean('illinois') -u'IL' ->>> f.clean(' illinois ') -u'IL' ->>> f.clean(60606) -Traceback (most recent call last): -... -ValidationError: [u'Enter a U.S. state or territory.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = USStateField(required=False) ->>> f.clean('il') -u'IL' ->>> f.clean('IL') -u'IL' ->>> f.clean('illinois') -u'IL' ->>> f.clean(' illinois ') -u'IL' ->>> f.clean(60606) -Traceback (most recent call last): -... -ValidationError: [u'Enter a U.S. state or territory.'] ->>> f.clean(None) -u'' ->>> f.clean('') -u'' - -# USStateSelect ############################################################### - -USStateSelect is a Select widget that uses a list of U.S. states/territories -as its choices. ->>> from django.contrib.localflavor.usa.forms import USStateSelect ->>> w = USStateSelect() ->>> print w.render('state', 'IL') - - -# UKPostcodeField ############################################################# - -UKPostcodeField validates that the data is a valid UK postcode. ->>> from django.contrib.localflavor.uk.forms import UKPostcodeField ->>> f = UKPostcodeField() ->>> f.clean('BT32 4PX') -u'BT32 4PX' ->>> f.clean('GIR 0AA') -u'GIR 0AA' ->>> f.clean('BT324PX') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] ->>> f.clean('1NV 4L1D') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = UKPostcodeField(required=False) ->>> f.clean('BT32 4PX') -u'BT32 4PX' ->>> f.clean('GIR 0AA') -u'GIR 0AA' ->>> f.clean('1NV 4L1D') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] ->>> f.clean('BT324PX') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] ->>> f.clean(None) -u'' ->>> f.clean('') -u'' - -# FRZipCodeField ############################################################# - -FRZipCodeField validates that the data is a valid FR zipcode. ->>> from django.contrib.localflavor.fr.forms import FRZipCodeField ->>> f = FRZipCodeField() ->>> f.clean('75001') -u'75001' ->>> f.clean('93200') -u'93200' ->>> f.clean('2A200') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX.'] ->>> f.clean('980001') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = FRZipCodeField(required=False) ->>> f.clean('75001') -u'75001' ->>> f.clean('93200') -u'93200' ->>> f.clean('2A200') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX.'] ->>> f.clean('980001') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX.'] ->>> f.clean(None) -u'' ->>> f.clean('') -u'' - - -# FRPhoneNumberField ########################################################## - -FRPhoneNumberField validates that the data is a valid french phone number. -It's normalized to 0X XX XX XX XX format. Dots are valid too. ->>> from django.contrib.localflavor.fr.forms import FRPhoneNumberField ->>> f = FRPhoneNumberField() ->>> f.clean('01 55 44 58 64') -u'01 55 44 58 64' ->>> f.clean('0155445864') -u'01 55 44 58 64' ->>> f.clean('01 5544 5864') -u'01 55 44 58 64' ->>> f.clean('01 55.44.58.64') -u'01 55 44 58 64' ->>> f.clean('01.55.44.58.64') -u'01 55 44 58 64' ->>> f.clean('01,55,44,58,64') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] ->>> f.clean('555 015 544') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = FRPhoneNumberField(required=False) ->>> f.clean('01 55 44 58 64') -u'01 55 44 58 64' ->>> f.clean('0155445864') -u'01 55 44 58 64' ->>> f.clean('01 5544 5864') -u'01 55 44 58 64' ->>> f.clean('01 55.44.58.64') -u'01 55 44 58 64' ->>> f.clean('01.55.44.58.64') -u'01 55 44 58 64' ->>> f.clean('01,55,44,58,64') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] ->>> f.clean('555 015 544') -Traceback (most recent call last): -... -ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] ->>> f.clean(None) -u'' ->>> f.clean('') -u'' - -# FRDepartmentSelect ############################################################### - -FRDepartmentSelect is a Select widget that uses a list of french departments -including DOM TOM ->>> from django.contrib.localflavor.fr.forms import FRDepartmentSelect ->>> w = FRDepartmentSelect() ->>> print w.render('dep', 'Paris') - - -# JPPostalCodeField ############################################################### - -A form field that validates its input is a Japanese postcode. - -Accepts 7 digits(with/out hyphen). ->>> from django.contrib.localflavor.jp.forms import JPPostalCodeField ->>> f = JPPostalCodeField() ->>> f.clean('251-0032') -u'2510032' ->>> f.clean('2510032') -u'2510032' ->>> f.clean('2510-032') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] ->>> f.clean('251a0032') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] ->>> f.clean('a51-0032') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] ->>> f.clean('25100321') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = JPPostalCodeField(required=False) ->>> f.clean('251-0032') -u'2510032' ->>> f.clean('2510032') -u'2510032' ->>> f.clean('2510-032') -Traceback (most recent call last): -... -ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] ->>> f.clean('') -u'' ->>> f.clean(None) -u'' - -# JPPrefectureSelect ############################################################### - -A Select widget that uses a list of Japanese prefectures as its choices. ->>> from django.contrib.localflavor.jp.forms import JPPrefectureSelect ->>> w = JPPrefectureSelect() ->>> print w.render('prefecture', 'kanagawa') - - - ################################# # Tests of underlying functions # ################################# # smart_unicode tests ->>> from django.newforms.util import smart_unicode +>>> from django.utils.encoding import smart_unicode >>> class Test: ... def __str__(self): ... return 'ŠĐĆŽćžšđ' @@ -4055,6 +3447,12 @@ u'1' u'foo' """ +__test__ = { + 'form_tests': form_tests, + 'localflavor': localflavor_tests, + 'regressions': regression_tests, +} + if __name__ == "__main__": import doctest doctest.testmod() diff --git a/tests/regressiontests/humanize/tests.py b/tests/regressiontests/humanize/tests.py index e342d7ded8..eca65f7575 100644 --- a/tests/regressiontests/humanize/tests.py +++ b/tests/regressiontests/humanize/tests.py @@ -27,8 +27,10 @@ should've produced %s""" % (method, rendered, result_list[index])) self.humanize_tester(test_list, result_list, 'ordinal') def test_intcomma(self): - test_list = ('100','1000','10123','10311','1000000') - result_list = ('100', '1,000', '10,123', '10,311', '1,000,000') + test_list = (100, 1000, 10123, 10311, 1000000, 1234567.25, + '100', '1000', '10123', '10311', '1000000', '1234567.1234567') + result_list = ('100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.25', + '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567') self.humanize_tester(test_list, result_list, 'intcomma') diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 375fd36196..b544207be8 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -149,7 +149,7 @@ class Templates(unittest.TestCase): # Dictionary lookup wins out when there is a string and int version of the key. 'list-index07': ("{{ var.1 }}", {"var": {'1': "hello", 1: "world"}}, "hello"), - + # Basic filter usage 'basic-syntax21': ("{{ var|upper }}", {"var": "Django is the greatest!"}, "DJANGO IS THE GREATEST!"), @@ -522,8 +522,8 @@ class Templates(unittest.TestCase): ### I18N ################################################################## # {% spaceless %} tag - 'spaceless01': ("{% spaceless %} text {% endspaceless %}", {}, " text "), - 'spaceless02': ("{% spaceless %} \n text \n {% endspaceless %}", {}, " text "), + 'spaceless01': ("{% spaceless %} text {% endspaceless %}", {}, " text "), + 'spaceless02': ("{% spaceless %} \n text \n {% endspaceless %}", {}, " text "), 'spaceless03': ("{% spaceless %}text{% endspaceless %}", {}, "text"), # simple translation of a string delimited by ' @@ -650,6 +650,10 @@ class Templates(unittest.TestCase): 'widthratio09': ('{% widthratio a b %}', {'a':50,'b':100}, template.TemplateSyntaxError), 'widthratio10': ('{% widthratio a b 100.0 %}', {'a':50,'b':100}, template.TemplateSyntaxError), + ### WITH TAG ######################################################## + 'with01': ('{% with dict.key as key %}{{ key }}{% endwith %}', {'dict': {'key':50}}, '50'), + 'with02': ('{{ key }}{% with dict.key as key %}{{ key }}-{{ dict.key }}-{{ key }}{% endwith %}{{ key }}', {'dict': {'key':50}}, ('50-50-50', 'INVALID50-50-50INVALID')), + ### NOW TAG ######################################################## # Simple case 'now01' : ('{% now "j n Y"%}', {}, str(datetime.now().day) + ' ' + str(datetime.now().month) + ' ' + str(datetime.now().year)), @@ -688,11 +692,12 @@ class Templates(unittest.TestCase): 'url01' : ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'), 'url02' : ('{% url regressiontests.templates.views.client_action client.id,action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'), 'url03' : ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'), + 'url04' : ('{% url named-client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'), # Failures - 'url04' : ('{% url %}', {}, template.TemplateSyntaxError), - 'url05' : ('{% url no_such_view %}', {}, ''), - 'url06' : ('{% url regressiontests.templates.views.client no_such_param="value" %}', {}, ''), + 'url-fail01' : ('{% url %}', {}, template.TemplateSyntaxError), + 'url-fail02' : ('{% url no_such_view %}', {}, ''), + 'url-fail03' : ('{% url regressiontests.templates.views.client no_such_param="value" %}', {}, ''), } # Register our custom template loader. diff --git a/tests/regressiontests/templates/urls.py b/tests/regressiontests/templates/urls.py index dc5b36b08b..eaa9fd5d9f 100644 --- a/tests/regressiontests/templates/urls.py +++ b/tests/regressiontests/templates/urls.py @@ -7,4 +7,5 @@ urlpatterns = patterns('', (r'^$', views.index), (r'^client/(\d+)/$', views.client), (r'^client/(\d+)/(?P[^/]+)/$', views.client_action), + url(r'^named-client/(\d+)/$', views.client, name="named-client"), ) diff --git a/tests/regressiontests/text/__init__.py b/tests/regressiontests/text/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/regressiontests/text/models.py b/tests/regressiontests/text/models.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/regressiontests/text/tests.py b/tests/regressiontests/text/tests.py new file mode 100644 index 0000000000..f758ecaf90 --- /dev/null +++ b/tests/regressiontests/text/tests.py @@ -0,0 +1,17 @@ +""" +# Tests for stuff in django.utils.text. + +>>> from django.utils.text import * + +### smart_split ########################################################### +>>> list(smart_split(r'''This is "a person" test.''')) +['This', 'is', '"a person"', 'test.'] +>>> print list(smart_split(r'''This is "a person's" test.'''))[2] +"a person's" +>>> print list(smart_split(r'''This is "a person\\"s" test.'''))[2] +"a person"s" +>>> list(smart_split('''"a 'one''')) +['"a', "'one"] +>>> print list(smart_split(r'''all friends' tests'''))[1] +friends' +"""