mirror of
https://github.com/django/django.git
synced 2025-07-04 09:49:12 +00:00
[full-history]
* Trunk merge from [3635] git-svn-id: http://code.djangoproject.com/svn/django/branches/full-history@3641 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
cd54edf084
commit
19ed25e2e6
1
AUTHORS
1
AUTHORS
@ -68,6 +68,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
deric@monowerks.com
|
||||
dne@mayonnaise.net
|
||||
Jeremy Dunck <http://dunck.us/>
|
||||
Andy Dustman <farcepest@gmail.com>
|
||||
Clint Ecker
|
||||
gandalf@owca.info
|
||||
Baishampayan Ghose
|
||||
|
@ -11,7 +11,7 @@ def compile_messages():
|
||||
elif os.path.isdir('locale'):
|
||||
basedir = os.path.abspath('locale')
|
||||
else:
|
||||
print "this script should be run from the django svn tree or your project or app tree"
|
||||
print "This script should be run from the Django SVN tree or your project or app tree."
|
||||
sys.exit(1)
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(basedir):
|
||||
@ -19,7 +19,14 @@ def compile_messages():
|
||||
if f.endswith('.po'):
|
||||
sys.stderr.write('processing file %s in %s\n' % (f, dirpath))
|
||||
pf = os.path.splitext(os.path.join(dirpath, f))[0]
|
||||
cmd = 'msgfmt -o "%s.mo" "%s.po"' % (pf, pf)
|
||||
# Store the names of the .mo and .po files in an environment
|
||||
# variable, rather than doing a string replacement into the
|
||||
# command, so that we can take advantage of shell quoting, to
|
||||
# quote any malicious characters/escaping.
|
||||
# See http://cyberelk.net/tim/articles/cmdline/ar01s02.html
|
||||
os.environ['djangocompilemo'] = pf + '.mo'
|
||||
os.environ['djangocompilepo'] = pf + '.po'
|
||||
cmd = 'msgfmt -o "$djangocompilemo" "$djangocompilepo"'
|
||||
os.system(cmd)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
Binary file not shown.
@ -5,17 +5,21 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: django\n"
|
||||
"Project-Id-Version: django 0.95\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-05-16 10:11+0200\n"
|
||||
"PO-Revision-Date: 2005-11-26 00:00\n"
|
||||
"Last-Translator: Dmitry Sorokin <ds@dial.com.ru>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"PO-Revision-Date: 2006-08-14 18:08+0300\n"
|
||||
"Last-Translator: Grigory Fateyev <greg@dial.com.ru>\n"
|
||||
"Language-Team: Dialcom Services <greg@dial.com.ru>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Russian\n"
|
||||
"X-Poedit-Country: RUSSIAN FEDERATION\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
||||
#: contrib/comments/models.py:67 contrib/comments/models.py:166
|
||||
#: contrib/comments/models.py:67
|
||||
#: contrib/comments/models.py:166
|
||||
msgid "object ID"
|
||||
msgstr "ID объекта"
|
||||
|
||||
@ -23,7 +27,8 @@ msgstr "ID объекта"
|
||||
msgid "headline"
|
||||
msgstr "заголовок"
|
||||
|
||||
#: contrib/comments/models.py:69 contrib/comments/models.py:90
|
||||
#: contrib/comments/models.py:69
|
||||
#: contrib/comments/models.py:90
|
||||
#: contrib/comments/models.py:167
|
||||
msgid "comment"
|
||||
msgstr "комментарий"
|
||||
@ -64,15 +69,18 @@ msgstr "рейтинг #8"
|
||||
msgid "is valid rating"
|
||||
msgstr "доступный рейтинг"
|
||||
|
||||
#: contrib/comments/models.py:83 contrib/comments/models.py:169
|
||||
#: contrib/comments/models.py:83
|
||||
#: contrib/comments/models.py:169
|
||||
msgid "date/time submitted"
|
||||
msgstr "дата/время добавления"
|
||||
|
||||
#: contrib/comments/models.py:84 contrib/comments/models.py:170
|
||||
#: contrib/comments/models.py:84
|
||||
#: contrib/comments/models.py:170
|
||||
msgid "is public"
|
||||
msgstr "публичный"
|
||||
|
||||
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
|
||||
#: contrib/comments/models.py:85
|
||||
#: contrib/admin/views/doc.py:289
|
||||
msgid "IP address"
|
||||
msgstr "IP адрес"
|
||||
|
||||
@ -81,19 +89,15 @@ msgid "is removed"
|
||||
msgstr "удален"
|
||||
|
||||
#: 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 ""
|
||||
"Отметте, если комментарий нежелателен. Сообщение \"Этот комментарий был "
|
||||
"удалён\" будет показано взамен."
|
||||
msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
|
||||
msgstr "Отметте, если комментарий нежелателен. Сообщение \"Этот комментарий был удалён\" будет показано взамен."
|
||||
|
||||
#: contrib/comments/models.py:91
|
||||
#, fuzzy
|
||||
msgid "comments"
|
||||
msgstr "комментарий"
|
||||
msgstr "комментарии"
|
||||
|
||||
#: contrib/comments/models.py:131 contrib/comments/models.py:207
|
||||
#: contrib/comments/models.py:131
|
||||
#: contrib/comments/models.py:207
|
||||
msgid "Content object"
|
||||
msgstr "Объект наполнения"
|
||||
|
||||
@ -141,7 +145,6 @@ msgid "score date"
|
||||
msgstr "счёт времени"
|
||||
|
||||
#: contrib/comments/models.py:237
|
||||
#, fuzzy
|
||||
msgid "karma score"
|
||||
msgstr "Карма счёт"
|
||||
|
||||
@ -152,7 +155,7 @@ msgstr "Карма счета"
|
||||
#: contrib/comments/models.py:242
|
||||
#, python-format
|
||||
msgid "%(score)d rating by %(user)s"
|
||||
msgstr ""
|
||||
msgstr "%(score)d рейтинг %(user)s"
|
||||
|
||||
#: contrib/comments/models.py:258
|
||||
#, python-format
|
||||
@ -197,7 +200,7 @@ msgstr "Удаления модератором"
|
||||
#: contrib/comments/models.py:285
|
||||
#, python-format
|
||||
msgid "Moderator deletion by %r"
|
||||
msgstr ""
|
||||
msgstr "Удаления модератора %r"
|
||||
|
||||
#: contrib/comments/views/karma.py:19
|
||||
msgid "Anonymous users cannot vote"
|
||||
@ -212,20 +215,17 @@ msgid "No voting for yourself"
|
||||
msgstr "Нельзя голосовать за себя"
|
||||
|
||||
#: contrib/comments/views/comments.py:28
|
||||
msgid ""
|
||||
"This rating is required because you've entered at least one other rating."
|
||||
msgstr ""
|
||||
msgid "This rating is required because you've entered at least one other rating."
|
||||
msgstr "Этот рейтинг необходим, так как вы входили хоть однажды в другие рейтинги."
|
||||
|
||||
#: contrib/comments/views/comments.py:112
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This comment was posted by a user who has posted fewer than %(count)s "
|
||||
"comment:\n"
|
||||
"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"
|
||||
"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
|
||||
"\n"
|
||||
"%(text)s"
|
||||
msgstr[0] ""
|
||||
@ -259,11 +259,8 @@ msgstr "Кто-то вмешивается в форму комментария
|
||||
|
||||
#: contrib/comments/views/comments.py:207
|
||||
#: contrib/comments/views/comments.py:292
|
||||
msgid ""
|
||||
"The comment form had an invalid 'target' parameter -- the object ID was "
|
||||
"invalid"
|
||||
msgstr ""
|
||||
"Форма комментария имеет неверный 'target' параметр -- ID объекта неверно"
|
||||
msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
|
||||
msgstr "Форма комментария имеет неверный 'target' параметр -- ID объекта неверно"
|
||||
|
||||
#: contrib/comments/views/comments.py:257
|
||||
#: contrib/comments/views/comments.py:321
|
||||
@ -344,8 +341,11 @@ msgid ""
|
||||
"<h3>By %s:</h3>\n"
|
||||
"<ul>\n"
|
||||
msgstr ""
|
||||
"<h3>К %s:</h3>\n"
|
||||
"<ul>\n"
|
||||
|
||||
#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
|
||||
#: contrib/admin/filterspecs.py:70
|
||||
#: contrib/admin/filterspecs.py:88
|
||||
#: contrib/admin/filterspecs.py:143
|
||||
msgid "All"
|
||||
msgstr "Все"
|
||||
@ -414,14 +414,11 @@ msgstr "журнальные записи"
|
||||
msgid "All dates"
|
||||
msgstr "Все даты"
|
||||
|
||||
#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
|
||||
#: 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 ""
|
||||
"Пожалуйста, вводите верные данные именя пользователя и пароль. Помните, оба "
|
||||
"поля чувствительны к регистру."
|
||||
msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
|
||||
msgstr "Пожалуйста, вводите верные данные именя пользователя и пароль. Помните, оба поля чувствительны к регистру."
|
||||
|
||||
#: contrib/admin/views/decorators.py:23
|
||||
#: contrib/admin/templates/admin/login.html:25
|
||||
@ -429,20 +426,12 @@ msgid "Log in"
|
||||
msgstr "Вход"
|
||||
|
||||
#: contrib/admin/views/decorators.py:61
|
||||
msgid ""
|
||||
"Please log in again, because your session has expired. Don't worry: Your "
|
||||
"submission has been saved."
|
||||
msgstr ""
|
||||
"Пожалуйста войдите снова, посколькук ваша сессия устарела. Не беспокойтесь:"
|
||||
"введенные вами данные сохранены."
|
||||
msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
|
||||
msgstr "Пожалуйста войдите снова, посколькук ваша сессия устарела. Не беспокойтесь:введенные вами данные сохранены."
|
||||
|
||||
#: contrib/admin/views/decorators.py:68
|
||||
msgid ""
|
||||
"Looks like your browser isn't configured to accept cookies. Please enable "
|
||||
"cookies, reload this page, and try again."
|
||||
msgstr ""
|
||||
"Похоже, что ваш броузер не настроен на прием cookies. Пожалуйства включите "
|
||||
"cookie, перезагрузите страницу и попытайтесь снова. "
|
||||
msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
|
||||
msgstr "Похоже, что ваш броузер не настроен на прием cookies. Пожалуйства включите cookie, перезагрузите страницу и попытайтесь снова. "
|
||||
|
||||
#: contrib/admin/views/decorators.py:82
|
||||
msgid "Usernames cannot contain the '@' character."
|
||||
@ -451,7 +440,7 @@ msgstr "Имя пользователя не может включать сим
|
||||
#: contrib/admin/views/decorators.py:84
|
||||
#, python-format
|
||||
msgid "Your e-mail address is not your username. Try '%s' instead."
|
||||
msgstr ""
|
||||
msgstr "Ваш e-mail адрес не ваше имя. Попробуйте '%s' в замен."
|
||||
|
||||
#: contrib/admin/views/main.py:226
|
||||
msgid "Site administration"
|
||||
@ -462,11 +451,13 @@ msgstr "Администрирование сайта"
|
||||
msgid "The %(name)s \"%(obj)s\" was added successfully."
|
||||
msgstr "%(name)s \"%(obj)s\" были успешно добавлены."
|
||||
|
||||
#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
|
||||
#: contrib/admin/views/main.py:264
|
||||
#: contrib/admin/views/main.py:348
|
||||
msgid "You may edit it again below."
|
||||
msgstr "Вы снова можете редактировать их внизу"
|
||||
|
||||
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
|
||||
#: contrib/admin/views/main.py:272
|
||||
#: contrib/admin/views/main.py:357
|
||||
#, python-format
|
||||
msgid "You may add another %s below."
|
||||
msgstr "Вы можете добавить %s внизу."
|
||||
@ -481,7 +472,8 @@ msgstr "Добавить %s"
|
||||
msgid "Added %s."
|
||||
msgstr "Добавлено %s"
|
||||
|
||||
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
|
||||
#: contrib/admin/views/main.py:336
|
||||
#: contrib/admin/views/main.py:338
|
||||
#: contrib/admin/views/main.py:340
|
||||
msgid "and"
|
||||
msgstr "и"
|
||||
@ -498,18 +490,17 @@ msgstr "Удалено %s."
|
||||
|
||||
#: contrib/admin/views/main.py:343
|
||||
msgid "No fields changed."
|
||||
msgstr ""
|
||||
msgstr "Ни одно поле не изменено."
|
||||
|
||||
#: contrib/admin/views/main.py:346
|
||||
#, python-format
|
||||
msgid "The %(name)s \"%(obj)s\" was changed successfully."
|
||||
msgstr ""
|
||||
msgstr "%(name)s \"%(obj)s\" было успешно изменено"
|
||||
|
||||
#: contrib/admin/views/main.py:354
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
|
||||
msgstr ""
|
||||
msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
|
||||
msgstr "%(name)s \"%(obj)s\" было успешно изменено. Вы можете редактировать его снова."
|
||||
|
||||
#: contrib/admin/views/main.py:392
|
||||
#, python-format
|
||||
@ -550,9 +541,12 @@ msgstr "Выберите %s"
|
||||
msgid "Select %s to change"
|
||||
msgstr "Выберите %s для изменения"
|
||||
|
||||
#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
|
||||
#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
|
||||
#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
|
||||
#: contrib/admin/views/doc.py:277
|
||||
#: contrib/admin/views/doc.py:286
|
||||
#: contrib/admin/views/doc.py:288
|
||||
#: contrib/admin/views/doc.py:294
|
||||
#: contrib/admin/views/doc.py:295
|
||||
#: contrib/admin/views/doc.py:297
|
||||
msgid "Integer"
|
||||
msgstr "Целое"
|
||||
|
||||
@ -560,7 +554,8 @@ msgstr "Целое"
|
||||
msgid "Boolean (Either True or False)"
|
||||
msgstr "Логическое (True или False)"
|
||||
|
||||
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
|
||||
#: contrib/admin/views/doc.py:279
|
||||
#: contrib/admin/views/doc.py:296
|
||||
#, python-format
|
||||
msgid "String (up to %(maxlength)s)"
|
||||
msgstr "Строка (до %(maxlength)s символов)"
|
||||
@ -581,7 +576,8 @@ msgstr "Дата (с указанием времени)"
|
||||
msgid "E-mail address"
|
||||
msgstr "E-mail адрес"
|
||||
|
||||
#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
|
||||
#: contrib/admin/views/doc.py:284
|
||||
#: contrib/admin/views/doc.py:287
|
||||
msgid "File path"
|
||||
msgstr "Путь к файлу"
|
||||
|
||||
@ -595,7 +591,7 @@ msgstr "Логическое (True, False или None)"
|
||||
|
||||
#: contrib/admin/views/doc.py:292
|
||||
msgid "Relation to parent model"
|
||||
msgstr ""
|
||||
msgstr "Зависимость на родительскую модель."
|
||||
|
||||
#: contrib/admin/views/doc.py:293
|
||||
msgid "Phone number"
|
||||
@ -609,7 +605,8 @@ msgstr "Текст"
|
||||
msgid "Time"
|
||||
msgstr "Время"
|
||||
|
||||
#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
|
||||
#: contrib/admin/views/doc.py:300
|
||||
#: contrib/flatpages/models.py:7
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
@ -689,12 +686,8 @@ msgid "DATE_WITH_TIME_FULL"
|
||||
msgstr "j. N Y, H:i"
|
||||
|
||||
#: 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 ""
|
||||
"Данный обьект не имеет истории изменения. Возможно он не был добавлен через "
|
||||
"данный административный сайт."
|
||||
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"
|
||||
@ -717,12 +710,8 @@ msgid "Server Error <em>(500)</em>"
|
||||
msgstr "Ошибка сервера <em>(500)</em>"
|
||||
|
||||
#: 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 ""
|
||||
"Произошла ошибка. Отчет об ошибке отправлен администраторам сайта по e-mailи "
|
||||
"она должна быть вскоре исправлена. Благодарим вас на терпение и помощь."
|
||||
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 "Произошла ошибка. Отчет об ошибке отправлен администраторам сайта по e-mailи она должна быть вскоре исправлена. Благодарим вас на терпение и помощь."
|
||||
|
||||
#: contrib/admin/templates/admin/404.html:4
|
||||
#: contrib/admin/templates/admin/404.html:8
|
||||
@ -736,7 +725,7 @@ msgstr "К сожалению, запрашиваемая вами страни
|
||||
#: contrib/admin/templates/admin/index.html:17
|
||||
#, python-format
|
||||
msgid "Models available in the %(name)s application."
|
||||
msgstr "Модели доступны в %(name) приложении."
|
||||
msgstr "Модели доступны в %(name)s приложении."
|
||||
|
||||
#: contrib/admin/templates/admin/index.html:28
|
||||
#: contrib/admin/templates/admin/change_form.html:15
|
||||
@ -783,23 +772,13 @@ msgstr "Удалить"
|
||||
|
||||
#: contrib/admin/templates/admin/delete_confirmation.html:14
|
||||
#, 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:"
|
||||
msgstr ""
|
||||
"Удаление объекта %(object_name)s '%(object)s' приведет к удалению зависимых "
|
||||
"элементов, но предоставленных вам прав недостаточно для удаления следующих "
|
||||
"типов объектов:"
|
||||
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:"
|
||||
msgstr "Удаление объекта %(object_name)s '%(object)s' приведет к удалению зависимых элементов, но предоставленных вам прав недостаточно для удаления следующих типов объектов:"
|
||||
|
||||
#: contrib/admin/templates/admin/delete_confirmation.html:21
|
||||
#, 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:"
|
||||
msgstr ""
|
||||
"Вы уверены, что хотите удалить %(object_name)s \"%(object)s\"? Все "
|
||||
"следующие объекты также будут удалены:"
|
||||
msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
|
||||
msgstr "Вы уверены, что хотите удалить %(object_name)s \"%(object)s\"? Все следующие объекты также будут удалены:"
|
||||
|
||||
#: contrib/admin/templates/admin/delete_confirmation.html:26
|
||||
msgid "Yes, I'm sure"
|
||||
@ -808,7 +787,7 @@ msgstr "Да, я уверен"
|
||||
#: contrib/admin/templates/admin/filter.html:2
|
||||
#, python-format
|
||||
msgid " By %(title)s "
|
||||
msgstr ""
|
||||
msgstr "К%(title)s "
|
||||
|
||||
#: contrib/admin/templates/admin/search_form.html:8
|
||||
msgid "Go"
|
||||
@ -872,12 +851,8 @@ 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 ""
|
||||
"Забыли пароль? Введите ваш e-mail адрес ниже и мы очистим ваш старый пароль, "
|
||||
"и вышлем вам по e-mail новый."
|
||||
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 "Забыли пароль? Введите ваш e-mail адрес ниже и мы очистим ваш старый пароль, и вышлем вам по e-mail новый."
|
||||
|
||||
#: contrib/admin/templates/registration/password_reset_form.html:16
|
||||
msgid "E-mail address:"
|
||||
@ -901,20 +876,12 @@ 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 ""
|
||||
"Мы отправили новый пароль по указанному вами адресу электронной почты. Вы "
|
||||
"должны его вскоре получить."
|
||||
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 ""
|
||||
"В целях безопасности, пожалуйста, введите ваш старый пароль, затем - новый "
|
||||
"пароль дважды, с тем, чтобы мы могли убедиться в правильности написания."
|
||||
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:"
|
||||
@ -987,24 +954,16 @@ 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 ""
|
||||
"Перенаправит вас с любой страницы к просмотру документа, который генерирует "
|
||||
"эту страницу."
|
||||
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 "Показать ID обьекта"
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:23
|
||||
msgid ""
|
||||
"Shows the content-type and unique ID for pages that represent a single "
|
||||
"object."
|
||||
msgstr ""
|
||||
"Показывает тип наполнения и уникальный ID для страниц, которые означают "
|
||||
"одинокий объект."
|
||||
msgid "Shows the content-type and unique ID for pages that represent a single object."
|
||||
msgstr "Показывает тип наполнения и уникальный ID для страниц, которые означают одинокий объект."
|
||||
|
||||
#: contrib/admin/templates/admin_doc/bookmarklets.html:25
|
||||
msgid "Edit this object (current window)"
|
||||
@ -1043,24 +1002,16 @@ msgid "redirect from"
|
||||
msgstr "перенаправить из"
|
||||
|
||||
#: contrib/redirects/models.py:8
|
||||
msgid ""
|
||||
"This should be an absolute path, excluding the domain name. Example: '/"
|
||||
"events/search/'."
|
||||
msgstr ""
|
||||
"Это должен быть абсолютный путь, исключая доменное имя. Пример: '/events/"
|
||||
"search/'."
|
||||
msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
|
||||
msgstr "Это должен быть абсолютный путь, исключая доменное имя. Пример: '/events/search/'."
|
||||
|
||||
#: 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 ""
|
||||
"Это должен быть, либо абсолютный путь (как выше) или полный URL начинающийся "
|
||||
"с 'http://'."
|
||||
msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
|
||||
msgstr "Это должен быть, либо абсолютный путь (как выше) или полный URL начинающийся с 'http://'."
|
||||
|
||||
#: contrib/redirects/models.py:12
|
||||
msgid "redirect"
|
||||
@ -1071,10 +1022,8 @@ msgid "redirects"
|
||||
msgstr "перенаправления"
|
||||
|
||||
#: contrib/flatpages/models.py:8
|
||||
msgid ""
|
||||
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
|
||||
msgstr ""
|
||||
"Пример: '/about/contact/'. Будьте уверенны, что вставили завепршающий слэш."
|
||||
msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
|
||||
msgstr "Пример: '/about/contact/'. Будьте уверенны, что вставили завепршающий слэш."
|
||||
|
||||
#: contrib/flatpages/models.py:9
|
||||
msgid "title"
|
||||
@ -1093,10 +1042,8 @@ msgid "template name"
|
||||
msgstr "имя шаблона"
|
||||
|
||||
#: contrib/flatpages/models.py:13
|
||||
msgid ""
|
||||
"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
|
||||
"use 'flatpages/default'."
|
||||
msgstr ""
|
||||
msgid "Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."
|
||||
msgstr "Пример: 'flatpages/contact_page'. Если этот файл не присутствует, система будет использовать 'flatpages/default'."
|
||||
|
||||
#: contrib/flatpages/models.py:14
|
||||
msgid "registration required"
|
||||
@ -1114,7 +1061,8 @@ msgstr "простая страница"
|
||||
msgid "flat pages"
|
||||
msgstr "простые страницы"
|
||||
|
||||
#: contrib/auth/models.py:13 contrib/auth/models.py:26
|
||||
#: contrib/auth/models.py:13
|
||||
#: contrib/auth/models.py:26
|
||||
msgid "name"
|
||||
msgstr "имя"
|
||||
|
||||
@ -1126,7 +1074,8 @@ msgstr "код"
|
||||
msgid "permission"
|
||||
msgstr "Права"
|
||||
|
||||
#: contrib/auth/models.py:18 contrib/auth/models.py:27
|
||||
#: contrib/auth/models.py:18
|
||||
#: contrib/auth/models.py:27
|
||||
msgid "permissions"
|
||||
msgstr "Права"
|
||||
|
||||
@ -1134,7 +1083,8 @@ msgstr "Права"
|
||||
msgid "group"
|
||||
msgstr "Группа"
|
||||
|
||||
#: contrib/auth/models.py:30 contrib/auth/models.py:65
|
||||
#: contrib/auth/models.py:30
|
||||
#: contrib/auth/models.py:65
|
||||
msgid "groups"
|
||||
msgstr "Группы"
|
||||
|
||||
@ -1160,7 +1110,7 @@ msgstr "пароль"
|
||||
|
||||
#: contrib/auth/models.py:59
|
||||
msgid "Use '[algo]$[salt]$[hexdigest]'"
|
||||
msgstr ""
|
||||
msgstr "Используйте '[algo]$[salt]$[hexdigest]'"
|
||||
|
||||
#: contrib/auth/models.py:60
|
||||
msgid "staff status"
|
||||
@ -1187,12 +1137,8 @@ msgid "date joined"
|
||||
msgstr "дата регистрации"
|
||||
|
||||
#: 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 ""
|
||||
"К добавлению к перавам выбрнанным вуручную, этот пользователь может получить "
|
||||
"все права группы, к которой он принадлежит."
|
||||
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:67
|
||||
msgid "user permissions"
|
||||
@ -1227,10 +1173,8 @@ msgid "message"
|
||||
msgstr "Сообщение"
|
||||
|
||||
#: contrib/auth/forms.py:30
|
||||
msgid ""
|
||||
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
|
||||
"required for logging in."
|
||||
msgstr ""
|
||||
msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
|
||||
msgstr "У вашего браузера не включены cookies. Cookies необходимы для входа."
|
||||
|
||||
#: contrib/contenttypes/models.py:25
|
||||
msgid "python model class name"
|
||||
@ -1328,23 +1272,28 @@ msgstr "Январь"
|
||||
msgid "February"
|
||||
msgstr "Февраль"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "March"
|
||||
msgstr "Март"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "April"
|
||||
msgstr "Апрель"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "May"
|
||||
msgstr "Май"
|
||||
|
||||
#: utils/dates.py:14 utils/dates.py:27
|
||||
#: utils/dates.py:14
|
||||
#: utils/dates.py:27
|
||||
msgid "June"
|
||||
msgstr "Июнь"
|
||||
|
||||
#: utils/dates.py:15 utils/dates.py:27
|
||||
#: utils/dates.py:15
|
||||
#: utils/dates.py:27
|
||||
msgid "July"
|
||||
msgstr "Июль"
|
||||
|
||||
@ -1593,11 +1542,8 @@ msgid "This value must contain only letters, numbers and underscores."
|
||||
msgstr "Значение может содержать только буквы, цифры и подчеркивания."
|
||||
|
||||
#: core/validators.py:64
|
||||
msgid ""
|
||||
"This value must contain only letters, numbers, underscores, dashes or "
|
||||
"slashes."
|
||||
msgstr "Значение может содержать только буквы, цифры, подчеркивания, дифисы или "
|
||||
"тере."
|
||||
msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
|
||||
msgstr "Значение может содержать только буквы, цифры, подчеркивания, дифисы или тере."
|
||||
|
||||
#: core/validators.py:72
|
||||
msgid "Uppercase letters are not allowed here."
|
||||
@ -1647,7 +1593,8 @@ msgstr "Вводите реальную дату в формате YYYY-MM-DD."
|
||||
msgid "Enter a valid time in HH:MM format."
|
||||
msgstr "Вводите реальное время в формате HH:MM."
|
||||
|
||||
#: core/validators.py:132 db/models/fields/__init__.py:468
|
||||
#: core/validators.py:132
|
||||
#: db/models/fields/__init__.py:468
|
||||
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
|
||||
msgstr "Вводите реальные дата/время в формате YYYY-MM-DD HH:MM."
|
||||
|
||||
@ -1656,12 +1603,8 @@ msgid "Enter a valid e-mail address."
|
||||
msgstr "Укажите реальный e-mail адрес."
|
||||
|
||||
#: core/validators.py:148
|
||||
msgid ""
|
||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||
"corrupted image."
|
||||
msgstr ""
|
||||
"Загрузите реальное изображение. Файл, который вы загружали, не был "
|
||||
"изображением или был поврежден."
|
||||
msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
|
||||
msgstr "Загрузите реальное изображение. Файл, который вы загружали, не был изображением или был поврежден."
|
||||
|
||||
#: core/validators.py:155
|
||||
#, python-format
|
||||
@ -1701,7 +1644,8 @@ msgstr "Неверный формат XML: %s"
|
||||
msgid "Invalid URL: %s"
|
||||
msgstr "Неверный URL: %s"
|
||||
|
||||
#: core/validators.py:206 core/validators.py:208
|
||||
#: core/validators.py:206
|
||||
#: core/validators.py:208
|
||||
#, python-format
|
||||
msgid "The URL %s is a broken link."
|
||||
msgstr "URL %s сломанная ссылка."
|
||||
@ -1726,7 +1670,8 @@ msgstr "Это поле должно совпадать с полем '%s'."
|
||||
msgid "Please enter something for at least one field."
|
||||
msgstr "Пожалуйста, заполните хотя бы одно поле."
|
||||
|
||||
#: core/validators.py:264 core/validators.py:275
|
||||
#: core/validators.py:264
|
||||
#: core/validators.py:275
|
||||
msgid "Please enter both fields or leave them both empty."
|
||||
msgstr "Пожалуйста, заполните оба поля либо оставьте их пустыми."
|
||||
|
||||
@ -1756,26 +1701,16 @@ msgstr "Пожалуйста, вводите корректное десятич
|
||||
#: core/validators.py:349
|
||||
#, python-format
|
||||
msgid "Please enter a valid decimal number with at most %s total digit."
|
||||
msgid_plural ""
|
||||
"Please enter a valid decimal number with at most %s total digits."
|
||||
msgstr[0] ""
|
||||
"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
|
||||
"знаков %s."
|
||||
msgstr[1] ""
|
||||
"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
|
||||
"знаков %s."
|
||||
msgid_plural "Please enter a valid decimal number with at most %s total digits."
|
||||
msgstr[0] "Пожалуйста, вводите корректное десятичное число с максимальным количеством знаков %s."
|
||||
msgstr[1] "Пожалуйста, вводите корректное десятичное число с максимальным количеством знаков %s."
|
||||
|
||||
#: core/validators.py:352
|
||||
#, python-format
|
||||
msgid "Please enter a valid decimal number with at most %s decimal place."
|
||||
msgid_plural ""
|
||||
"Please enter a valid decimal number with at most %s decimal places."
|
||||
msgstr[0] ""
|
||||
"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
|
||||
"знаков после запятой %s."
|
||||
msgstr[1] ""
|
||||
"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
|
||||
"знаков после запятой %s."
|
||||
msgid_plural "Please enter a valid decimal number with at most %s decimal places."
|
||||
msgstr[0] "Пожалуйста, вводите корректное десятичное число с максимальным количеством знаков после запятой %s."
|
||||
msgstr[1] "Пожалуйста, вводите корректное десятичное число с максимальным количеством знаков после запятой %s."
|
||||
|
||||
#: core/validators.py:362
|
||||
#, python-format
|
||||
@ -1802,50 +1737,37 @@ msgstr "Невозможно получить что-либо с %s."
|
||||
|
||||
#: core/validators.py:429
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
|
||||
msgstr "URL %(url) вернул неверный заголовок Content-Type '%(contenttype)'."
|
||||
msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
|
||||
msgstr "URL %(url)s вернул неверный заголовок Content-Type '%(contenttype)s'."
|
||||
|
||||
#: core/validators.py:462
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
|
||||
"\"%(start)s\".)"
|
||||
msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
|
||||
#: 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\".)"
|
||||
msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
|
||||
#: core/validators.py:471
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
|
||||
"(start)s\".)"
|
||||
msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
|
||||
#: core/validators.py:476
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
|
||||
"(start)s\".)"
|
||||
msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
|
||||
#: 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\".)"
|
||||
msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
|
||||
#: core/validators.py:485
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
|
||||
"starts with \"%(start)s\".)"
|
||||
msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
|
||||
msgstr ""
|
||||
|
||||
#: db/models/manipulators.py:302
|
||||
@ -1858,8 +1780,10 @@ msgstr ""
|
||||
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:542 db/models/fields/__init__.py:553
|
||||
#: 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 "Обязательное поле."
|
||||
@ -1869,14 +1793,12 @@ msgid "This value must be an integer."
|
||||
msgstr ""
|
||||
|
||||
#: db/models/fields/__init__.py:369
|
||||
#, fuzzy
|
||||
msgid "This value must be either True or False."
|
||||
msgstr "Логическое (True или False)"
|
||||
msgstr "Значение должно либо True либо False."
|
||||
|
||||
#: db/models/fields/__init__.py:385
|
||||
#, fuzzy
|
||||
msgid "This field cannot be null."
|
||||
msgstr "Это поле неверно."
|
||||
msgstr "Это поле не может быть нулевым."
|
||||
|
||||
#: db/models/fields/__init__.py:562
|
||||
msgid "Enter a valid filename."
|
||||
@ -1888,23 +1810,17 @@ msgid "Please enter a valid %s."
|
||||
msgstr ""
|
||||
|
||||
#: db/models/fields/related.py:579
|
||||
#, fuzzy
|
||||
msgid "Separate multiple IDs with commas."
|
||||
msgstr "Несколько значений ID разделяйте запятыми."
|
||||
|
||||
#: db/models/fields/related.py:581
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
" Удерживайте \"Control\", или \"Command\" на Макинтош, для выбора больше чем "
|
||||
"одного."
|
||||
msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr " Удерживайте \"Control\", или \"Command\" на Макинтош, для выбора больше чем одного."
|
||||
|
||||
#: db/models/fields/related.py:625
|
||||
#, python-format
|
||||
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
|
||||
msgid_plural ""
|
||||
"Please enter valid %(self)s IDs. The values %(value)r are invalid."
|
||||
msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
@ -1919,7 +1835,9 @@ msgstr[1] ""
|
||||
msgid "Line breaks are not allowed here."
|
||||
msgstr "Переносы строк не допускаются здесь."
|
||||
|
||||
#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
|
||||
#: 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 ""
|
||||
@ -1944,30 +1862,3 @@ msgstr "Введите целое число в диапазоне от 0 до 3
|
||||
msgid "yes,no,maybe"
|
||||
msgstr "да,нет,может быть"
|
||||
|
||||
#~ msgid "Comment"
|
||||
#~ msgstr "Комментарий"
|
||||
|
||||
#~ msgid "Comments"
|
||||
#~ msgstr "Комментарии"
|
||||
|
||||
#~ msgid "label"
|
||||
#~ msgstr "метка"
|
||||
|
||||
#~ msgid "package"
|
||||
#~ msgstr "пакет"
|
||||
|
||||
#~ msgid "packages"
|
||||
#~ msgstr "пакеты"
|
||||
|
||||
#~ msgid "String (up to 50)"
|
||||
#~ msgstr "Строка (до 50 символов)"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Example: 'flatfiles/contact_page'. If this isn't provided, the system "
|
||||
#~ "will use 'flatfiles/default'."
|
||||
#~ msgstr ""
|
||||
#~ "Пример: 'flatfiles/contact_page'. Если не предусмотрена, система будет "
|
||||
#~ "использовать 'flatfiles/default'."
|
||||
|
||||
#~ msgid "Server error <em>(500)</em>"
|
||||
#~ msgstr "Ошибка сервера <em>(500)</em>"
|
||||
|
@ -27,6 +27,10 @@ LANGUAGE_CODE = 'en-us'
|
||||
|
||||
SITE_ID = 1
|
||||
|
||||
# If you set this to False, Django will make some optimizations so as not
|
||||
# to load the internationalization machinery.
|
||||
USE_I18N = True
|
||||
|
||||
# Absolute path to the directory that holds media.
|
||||
# Example: "/home/media/media.lawrence.com/"
|
||||
MEDIA_ROOT = ''
|
||||
|
@ -6,6 +6,7 @@
|
||||
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
|
||||
{% block extrastyle %}{% endblock %}
|
||||
{% block extrahead %}{% endblock %}
|
||||
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
|
||||
</head>
|
||||
{% load i18n %}
|
||||
|
||||
|
@ -226,7 +226,7 @@ def model_detail(request, app_label, model_name):
|
||||
|
||||
return render_to_response('admin_doc/model_detail.html', {
|
||||
'name': '%s.%s' % (opts.app_label, opts.object_name),
|
||||
'summary': "Fields on %s objects" % opts.object_name,
|
||||
'summary': _("Fields on %s objects") % opts.object_name,
|
||||
'description': model.__doc__,
|
||||
'fields': fields,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
@ -263,7 +263,9 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po
|
||||
post_url_continue += "?_popup=1"
|
||||
return HttpResponseRedirect(post_url_continue % pk_value)
|
||||
if request.POST.has_key("_popup"):
|
||||
return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %r, "%s");</script>' % \
|
||||
if type(pk_value) is str: # Quote if string, so JavaScript doesn't think it's a variable.
|
||||
pk_value = '"%s"' % pk_value.replace('"', '\\"')
|
||||
return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %s, "%s");</script>' % \
|
||||
(pk_value, str(new_object).replace('"', '\\"')))
|
||||
elif request.POST.has_key("_addanother"):
|
||||
request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % opts.verbose_name))
|
||||
@ -711,9 +713,19 @@ class ChangeList(object):
|
||||
qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field)
|
||||
|
||||
# Apply keyword searches.
|
||||
def construct_search(field_name):
|
||||
if field_name.startswith('^'):
|
||||
return "%s__istartswith" % field_name[1:]
|
||||
elif field_name.startswith('='):
|
||||
return "%s__iexact" % field_name[1:]
|
||||
elif field_name.startswith('@'):
|
||||
return "%s__search" % field_name[1:]
|
||||
else:
|
||||
return "%s__icontains" % field_name
|
||||
|
||||
if self.lookup_opts.admin.search_fields and self.query:
|
||||
for bit in self.query.split():
|
||||
or_queries = [models.Q(**{'%s__icontains' % field_name: bit}) for field_name in self.lookup_opts.admin.search_fields]
|
||||
or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.lookup_opts.admin.search_fields]
|
||||
other_qs = QuerySet(self.model)
|
||||
other_qs = other_qs.filter(reduce(operator.or_, or_queries))
|
||||
qs = qs & other_qs
|
||||
|
2
django/core/cache/backends/memcached.py
vendored
2
django/core/cache/backends/memcached.py
vendored
@ -20,7 +20,7 @@ class CacheClass(BaseCache):
|
||||
return val
|
||||
|
||||
def set(self, key, value, timeout=0):
|
||||
self._cache.set(key, value, timeout)
|
||||
self._cache.set(key, value, timeout or self.default_timeout)
|
||||
|
||||
def delete(self, key):
|
||||
self._cache.delete(key)
|
||||
|
@ -68,7 +68,7 @@ def isAlphaNumericURL(field_data, all_data):
|
||||
|
||||
def isSlug(field_data, all_data):
|
||||
if not slug_re.search(field_data):
|
||||
raise ValidationError, "This value must contain only letters, numbers, underscores or hyphens."
|
||||
raise ValidationError, gettext("This value must contain only letters, numbers, underscores or hyphens.")
|
||||
|
||||
def isLowerCase(field_data, all_data):
|
||||
if field_data.lower() != field_data:
|
||||
|
@ -160,7 +160,7 @@ class Model(object):
|
||||
_prepare = classmethod(_prepare)
|
||||
|
||||
def save(self):
|
||||
dispatcher.send(signal=signals.pre_save, sender=self.__class__, instance=self, signal_name='pre_save')
|
||||
dispatcher.send(signal=signals.pre_save, sender=self.__class__, instance=self)
|
||||
|
||||
non_pks = [f for f in self._meta.fields if not f.primary_key]
|
||||
cursor = connection.cursor()
|
||||
|
@ -921,7 +921,7 @@ def delete_objects(seen_objs):
|
||||
|
||||
# Pre notify all instances to be deleted
|
||||
for pk_val, instance in seen_objs[cls]:
|
||||
dispatcher.send(signal=signals.pre_delete, sender=cls, instance=instance, signal_name='pre_delete')
|
||||
dispatcher.send(signal=signals.pre_delete, sender=cls, instance=instance)
|
||||
|
||||
pk_list = [pk for pk,instance in seen_objs[cls]]
|
||||
for related in cls._meta.get_all_related_many_to_many_objects():
|
||||
|
@ -41,6 +41,9 @@ class CacheMiddleware(object):
|
||||
|
||||
def process_request(self, request):
|
||||
"Checks whether the page is already cached and returns the cached version if available."
|
||||
if self.cache_anonymous_only:
|
||||
assert hasattr(request, 'user'), "The Django cache middleware with CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True requires authentication middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.auth.middleware.AuthenticationMiddleware' before the CacheMiddleware."
|
||||
|
||||
if not request.method in ('GET', 'HEAD') or request.GET:
|
||||
request._cache_update_cache = False
|
||||
return None # Don't bother checking the cache.
|
||||
|
@ -35,3 +35,27 @@ class ConditionalGetMiddleware(object):
|
||||
response.content = ''
|
||||
|
||||
return response
|
||||
|
||||
class SetRemoteAddrFromForwardedFor(object):
|
||||
"""
|
||||
Middleware that sets REMOTE_ADDR based on HTTP_X_FORWARDED_FOR, if the
|
||||
latter is set. This is useful if you're sitting behind a reverse proxy that
|
||||
causes each request's REMOTE_ADDR to be set to 127.0.0.1.
|
||||
|
||||
Note that this does NOT validate HTTP_X_FORWARDED_FOR. If you're not behind
|
||||
a reverse proxy that sets HTTP_X_FORWARDED_FOR automatically, do not use
|
||||
this middleware. Anybody can spoof the value of HTTP_X_FORWARDED_FOR, and
|
||||
because this sets REMOTE_ADDR based on HTTP_X_FORWARDED_FOR, that means
|
||||
anybody can "fake" their IP address. Only use this when you can absolutely
|
||||
trust the value of HTTP_X_FORWARDED_FOR.
|
||||
"""
|
||||
def process_request(self, request):
|
||||
try:
|
||||
real_ip = request.META['HTTP_X_FORWARDED_FOR']
|
||||
except KeyError:
|
||||
return None
|
||||
else:
|
||||
# HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
|
||||
# Take just the first one.
|
||||
real_ip = real_ip.split(",")[0]
|
||||
request.META['REMOTE_ADDR'] = real_ip
|
||||
|
@ -1,6 +1,7 @@
|
||||
from django.template import loader, RequestContext
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.xheaders import populate_xheaders
|
||||
from django.db.models.fields import DateTimeField
|
||||
from django.http import Http404, HttpResponse
|
||||
import datetime, time
|
||||
|
||||
@ -235,9 +236,10 @@ def archive_day(request, year, month, day, queryset, date_field,
|
||||
model = queryset.model
|
||||
now = datetime.datetime.now()
|
||||
|
||||
lookup_kwargs = {
|
||||
'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max)),
|
||||
}
|
||||
if isinstance(model._meta.get_field(date_field), DateTimeField):
|
||||
lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
|
||||
else:
|
||||
lookup_kwargs = {date_field: date}
|
||||
|
||||
# Only bother to check current date if the date isn't in the past and future objects aren't requested.
|
||||
if date >= now.date() and not allow_future:
|
||||
@ -304,9 +306,10 @@ def object_detail(request, year, month, day, queryset, date_field,
|
||||
model = queryset.model
|
||||
now = datetime.datetime.now()
|
||||
|
||||
lookup_kwargs = {
|
||||
'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max)),
|
||||
}
|
||||
if isinstance(model._meta.get_field(date_field), DateTimeField):
|
||||
lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
|
||||
else:
|
||||
lookup_kwargs = {date_field: date}
|
||||
|
||||
# Only bother to check current date if the date isn't in the past and future objects aren't requested.
|
||||
if date >= now.date() and not allow_future:
|
||||
|
@ -233,7 +233,10 @@ The cache middleware caches every page that doesn't have GET or POST
|
||||
parameters. Optionally, if the ``CACHE_MIDDLEWARE_ANONYMOUS_ONLY`` setting is
|
||||
``True``, only anonymous requests (i.e., not those made by a logged-in user)
|
||||
will be cached. This is a simple and effective way of disabling caching for any
|
||||
user-specific pages (include Django's admin interface).
|
||||
user-specific pages (include Django's admin interface). Note that if you use
|
||||
``CACHE_MIDDLEWARE_ANONYMOUS_ONLY``, you should make sure you've activated
|
||||
``AuthenticationMiddleware`` and that ``AuthenticationMiddleware`` appears
|
||||
before ``CacheMiddleware`` in your ``MIDDLEWARE_CLASSES``.
|
||||
|
||||
Additionally, ``CacheMiddleware`` automatically sets a few headers in each
|
||||
``HttpResponse``:
|
||||
|
10
docs/faq.txt
10
docs/faq.txt
@ -98,11 +98,10 @@ Lawrence, Kansas, USA.
|
||||
On IRC, Simon goes by ``SimonW``.
|
||||
|
||||
`Wilson Miner`_
|
||||
Wilson's design-fu makes us all look like rock stars. When not sneaking
|
||||
into apartment complex swimming pools, he's the Commercial Development
|
||||
Director for World Online, which means he makes the money that pays all our
|
||||
paychecks. He lives in Lawrence, Kansas.
|
||||
|
||||
Wilson's design-fu makes us all look like rock stars. By day, he's an
|
||||
interactive designer for `Apple`. Don't ask him what he's working on, or
|
||||
he'll have to kill you. He lives in San Francisco.
|
||||
|
||||
On IRC, Wilson goes by ``wilsonian``.
|
||||
|
||||
.. _`World Online`: http://code.djangoproject.com/wiki/WorldOnline
|
||||
@ -113,6 +112,7 @@ Lawrence, Kansas, USA.
|
||||
.. _`simon.incutio.com`: http://simon.incutio.com/
|
||||
.. _`Jacob Kaplan-Moss`: http://www.jacobian.org/
|
||||
.. _`Wilson Miner`: http://www.wilsonminer.com/
|
||||
.. _`Apple`: http://www.apple.com/
|
||||
|
||||
Which sites use Django?
|
||||
-----------------------
|
||||
|
@ -48,9 +48,10 @@ bit of i18n-related overhead in certain places of the framework. If you don't
|
||||
use internationalization, you should take the two seconds to set
|
||||
``USE_I18N = False`` in your settings file. If ``USE_I18N`` is set to
|
||||
``False``, then Django will make some optimizations so as not to load the
|
||||
internationalization machinery.
|
||||
internationalization machinery. See the `documentation for USE_I18N`_.
|
||||
|
||||
See the `documentation for USE_I18N`_.
|
||||
You'll probably also want to remove ``'django.core.context_processors.i18n'``
|
||||
from your ``TEMPLATE_CONTEXT_PROCESSORS`` setting.
|
||||
|
||||
.. _documentation for USE_I18N: http://www.djangoproject.com/documentation/settings/#use-i18n
|
||||
|
||||
|
@ -63,7 +63,7 @@ Adds a few conveniences for perfectionists:
|
||||
last component in the path contains a period. So ``foo.com/bar`` is
|
||||
redirected to ``foo.com/bar/``, but ``foo.com/bar/file.txt`` is passed
|
||||
through unchanged.
|
||||
|
||||
|
||||
If ``PREPEND_WWW`` is ``True``, URLs that lack a leading "www." will be
|
||||
redirected to the same URL with a leading "www."
|
||||
|
||||
@ -101,6 +101,22 @@ Handles conditional GET operations. If the response has a ``ETag`` or
|
||||
Also removes the content from any response to a HEAD request and sets the
|
||||
``Date`` and ``Content-Length`` response-headers.
|
||||
|
||||
django.middleware.http.SetRemoteAddrFromForwardedFor
|
||||
----------------------------------------------------
|
||||
|
||||
**New in Django development version**
|
||||
|
||||
Sets ``request['REMOTE_ADDR']`` based on ``request.['HTTP_X_FORWARDED_FOR']``,
|
||||
if the latter is set. This is useful if you're sitting behind a reverse proxy
|
||||
that causes each request's ``REMOTE_ADDR`` to be set to ``127.0.0.1``.
|
||||
|
||||
**Important note:** This does NOT validate ``HTTP_X_FORWARDED_FOR``. If you're
|
||||
not behind a reverse proxy that sets ``HTTP_X_FORWARDED_FOR`` automatically, do
|
||||
not use this middleware. Anybody can spoof the value of
|
||||
``HTTP_X_FORWARDED_FOR``, and because this sets ``REMOTE_ADDR`` based on
|
||||
``HTTP_X_FORWARDED_FOR``, that means anybody can "fake" their IP address. Only
|
||||
use this when you can absolutely trust the value of ``HTTP_X_FORWARDED_FOR``.
|
||||
|
||||
django.contrib.sessions.middleware.SessionMiddleware
|
||||
----------------------------------------------------
|
||||
|
||||
|
@ -217,7 +217,7 @@ steps:
|
||||
subdirectory of ``MEDIA_ROOT`` it should upload files.
|
||||
|
||||
3. All that will be stored in your database is a path to the file
|
||||
(relative to ``MEDIA_ROOT``). You'll must likely want to use the
|
||||
(relative to ``MEDIA_ROOT``). You'll most likely want to use the
|
||||
convenience ``get_<fieldname>_url`` function provided by Django. For
|
||||
example, if your ``ImageField`` is called ``mug_shot``, you can get
|
||||
the absolute URL to your image in a template with ``{{
|
||||
@ -230,6 +230,14 @@ For example, say your ``MEDIA_ROOT`` is set to ``'/home/media'``, and
|
||||
upload a file on Jan. 15, 2007, it will be saved in the directory
|
||||
``/home/media/photos/2007/01/15``.
|
||||
|
||||
Note that whenever you deal with uploaded files, you should pay close attention
|
||||
to where you're uploading them and what type of files they are, to avoid
|
||||
security holes. *Validate all uploaded files* so that you're sure the files are
|
||||
what you think they are. For example, if you blindly let somebody upload files,
|
||||
without validation, to a directory that's within your Web server's document
|
||||
root, then somebody could upload a CGI or PHP script and execute that script by
|
||||
visiting its URL on your site. Don't allow that.
|
||||
|
||||
.. _`strftime formatting`: http://docs.python.org/lib/module-time.html#l2h-1941
|
||||
|
||||
``FilePathField``
|
||||
@ -678,8 +686,9 @@ you can use the name of the model, rather than the model object itself::
|
||||
class Manufacturer(models.Model):
|
||||
# ...
|
||||
|
||||
Note, however, that support for strings around model names in ``ForeignKey`` is
|
||||
quite new, and it can be buggy in some cases.
|
||||
Note, however, that you can only use strings to refer to models in the same
|
||||
models.py file -- you cannot use a string to reference a model in a different
|
||||
application, or to reference a model that has been imported from elsewhere.
|
||||
|
||||
Behind the scenes, Django appends ``"_id"`` to the field name to create its
|
||||
database column name. In the above example, the database table for the ``Car``
|
||||
@ -801,7 +810,10 @@ here's how you'd represent that::
|
||||
|
||||
As with ``ForeignKey``, a relationship to self can be defined by using the
|
||||
string ``'self'`` instead of the model name, and you can refer to as-yet
|
||||
undefined models by using a string containing the model name.
|
||||
undefined models by using a string containing the model name. However, you
|
||||
can only use strings to refer to models in the same models.py file -- you
|
||||
cannot use a string to reference a model in a different application, or to
|
||||
reference a model that has been imported from elsewhere.
|
||||
|
||||
It's suggested, but not required, that the name of a ``ManyToManyField``
|
||||
(``toppings`` in the example above) be a plural describing the set of related
|
||||
@ -1374,6 +1386,41 @@ user searches for ``john lennon``, Django will do the equivalent of this SQL
|
||||
WHERE (first_name ILIKE '%john%' OR last_name ILIKE '%john%')
|
||||
AND (first_name ILIKE '%lennon%' OR last_name ILIKE '%lennon%')
|
||||
|
||||
**New in Django development version:** For faster and/or more restrictive
|
||||
searches, prefix the field name with an operator:
|
||||
|
||||
``^``
|
||||
Matches the beginning of the field. For example, if ``search_fields`` is
|
||||
set to ``['^first_name', '^last_name']`` and a user searches for
|
||||
``john lennon``, Django will do the equivalent of this SQL ``WHERE``
|
||||
clause::
|
||||
|
||||
WHERE (first_name ILIKE 'john%' OR last_name ILIKE 'john%')
|
||||
AND (first_name ILIKE 'lennon%' OR last_name ILIKE 'lennon%')
|
||||
|
||||
This query is more efficient than the normal ``'%john%'`` query, because
|
||||
the database only needs to check the beginning of a column's data, rather
|
||||
than seeking through the entire column's data. Plus, if the column has an
|
||||
index on it, some databases may be able to use the index for this query,
|
||||
even though it's a ``LIKE`` query.
|
||||
|
||||
``=``
|
||||
Matches exactly, case-insensitive. For example, if
|
||||
``search_fields`` is set to ``['=first_name', '=last_name']`` and
|
||||
a user searches for ``john lennon``, Django will do the equivalent
|
||||
of this SQL ``WHERE`` clause::
|
||||
|
||||
WHERE (first_name ILIKE 'john' OR last_name ILIKE 'john')
|
||||
AND (first_name ILIKE 'lennon' OR last_name ILIKE 'lennon')
|
||||
|
||||
Note that the query input is split by spaces, so, following this example,
|
||||
it's not currently not possible to search for all records in which
|
||||
``first_name`` is exactly ``'john winston'`` (containing a space).
|
||||
|
||||
``@``
|
||||
Performs a full-text match. This is like the default search method but uses
|
||||
an index. Currently this is only available for MySQL.
|
||||
|
||||
Managers
|
||||
========
|
||||
|
||||
|
@ -141,6 +141,7 @@ It's easiest to understand template inheritance by starting with an example::
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
This template, which we'll call ``base.html``, defines a simple HTML skeleton
|
||||
document that you might use for a simple two-column page. It's the job of
|
||||
@ -196,6 +197,7 @@ like::
|
||||
<p>This is my second entry.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Note that since the child template didn't define the ``sidebar`` block, the
|
||||
value from the parent template is used instead. Content within a ``{% block %}``
|
||||
@ -363,7 +365,7 @@ extends
|
||||
|
||||
Signal that this template extends a parent template.
|
||||
|
||||
This tag can be used in two ways:
|
||||
This tag can be used in two ways:
|
||||
|
||||
* ``{% extends "base.html" %}`` (with quotes) uses the literal value
|
||||
``"base.html"`` as the name of the parent template to extend.
|
||||
@ -961,13 +963,13 @@ any string.
|
||||
pluralize
|
||||
~~~~~~~~~
|
||||
|
||||
Returns a plural suffix if the value is not 1. By default, this suffix is ``'s'``.
|
||||
Returns a plural suffix if the value is not 1. By default, this suffix is ``'s'``.
|
||||
|
||||
Example::
|
||||
|
||||
You have {{ num_messages }} message{{ num_messages|pluralize }}.
|
||||
|
||||
For words that require a suffix other than ``'s'``, you can provide an alternate
|
||||
For words that require a suffix other than ``'s'``, you can provide an alternate
|
||||
suffix as a parameter to the filter.
|
||||
|
||||
Example::
|
||||
|
@ -259,9 +259,10 @@ an `HttpRequest object`_ as its first argument. For example::
|
||||
The second difference is that it automatically populates the context with a few
|
||||
variables, according to your `TEMPLATE_CONTEXT_PROCESSORS setting`_.
|
||||
|
||||
The ``TEMPLATE_CONTEXT_PROCESSORS`` setting is a tuple of callables that take a
|
||||
request object as their argument and return a dictionary of items to be merged
|
||||
into the context. By default, ``TEMPLATE_CONTEXT_PROCESSORS`` is set to::
|
||||
The ``TEMPLATE_CONTEXT_PROCESSORS`` setting is a tuple of callables -- called
|
||||
**context processors** -- that take a request object as their argument and
|
||||
return a dictionary of items to be merged into the context. By default,
|
||||
``TEMPLATE_CONTEXT_PROCESSORS`` is set to::
|
||||
|
||||
("django.core.context_processors.auth",
|
||||
"django.core.context_processors.debug",
|
||||
|
Loading…
x
Reference in New Issue
Block a user