├── tests ├── __init__.py ├── urls.py ├── manage.py └── settings.py ├── django_messages ├── signals.py ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ └── delete_deleted_messages.py ├── migrations │ ├── __init__.py │ ├── 0002_auto_20160607_0852.py │ ├── 0003_auto_20190617_1316.py │ └── 0001_initial.py ├── templatetags │ ├── __init__.py │ └── inbox.py ├── locale │ ├── ar │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ca │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── cs │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── da │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── de │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── el │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── eu │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── fa │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── fr │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── id │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── it │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ko │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── lt │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ro │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── es_AR │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pt_BR │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ └── zh_CN │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── __init__.py ├── templates │ ├── notification │ │ ├── messages_deleted │ │ │ ├── full.txt │ │ │ └── notice.html │ │ ├── messages_recovered │ │ │ ├── full.txt │ │ │ └── notice.html │ │ ├── messages_received │ │ │ ├── short.txt │ │ │ ├── notice.html │ │ │ └── full.txt │ │ ├── messages_reply_received │ │ │ ├── short.txt │ │ │ ├── notice.html │ │ │ └── full.txt │ │ ├── messages_sent │ │ │ ├── full.txt │ │ │ └── notice.html │ │ └── messages_replied │ │ │ ├── full.txt │ │ │ └── notice.html │ ├── base.html │ └── django_messages │ │ ├── compose.html │ │ ├── new_message.html │ │ ├── base.html │ │ ├── outbox.html │ │ ├── trash.html │ │ ├── inbox.html │ │ └── view.html ├── apps.py ├── context_processors.py ├── urls.py ├── management.py ├── forms.py ├── fields.py ├── utils.py ├── models.py ├── admin.py └── views.py ├── .gitignore ├── docs ├── django-messages.png ├── README.txt ├── install.txt ├── index.txt ├── usage.txt ├── customizing.txt └── conf.py ├── MANIFEST.in ├── AUTHORS ├── INSTALL ├── setup.py ├── LICENSE ├── tox.ini ├── UPGRADING └── README.rst /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django_messages/signals.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django_messages/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django_messages/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django_messages/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django_messages/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | MANIFEST 3 | dist 4 | .tox 5 | .DS_Store 6 | docs/build 7 | -------------------------------------------------------------------------------- /docs/django-messages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/docs/django-messages.png -------------------------------------------------------------------------------- /docs/README.txt: -------------------------------------------------------------------------------- 1 | run 2 | 3 | sphinx-build . build/ 4 | 5 | to build the documentation into the a directory named ./build/ 6 | -------------------------------------------------------------------------------- /django_messages/locale/ar/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/ar/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/ca/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/ca/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/cs/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/cs/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/da/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/da/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/el/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/el/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/eu/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/eu/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/fa/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/fa/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/id/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/id/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/ko/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/ko/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/lt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/lt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/nl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/nl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/ro/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/ro/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/es_AR/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/es_AR/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/pt_BR/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/pt_BR/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django_messages/locale/zh_CN/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arneb/django-messages/HEAD/django_messages/locale/zh_CN/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /tests/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url, include 2 | 3 | 4 | urlpatterns = [ 5 | url(r'^messages/', include('django_messages.urls')), 6 | ] 7 | -------------------------------------------------------------------------------- /django_messages/__init__.py: -------------------------------------------------------------------------------- 1 | VERSION = (0, 6, 0,) 2 | __version__ = '.'.join(map(str, VERSION)) 3 | default_app_config = 'django_messages.apps.DjangoMessagesConfig' 4 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_deleted/full.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans %}You have deleted the message '{{ message }}'.{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_recovered/full.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans %}You have recovered the message '{{ message }}'.{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_received/short.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.sender as message_sender %}{{ notice }} by {{ message_sender }}{% endblocktrans %} -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_reply_received/short.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.sender as message_sender %}{{ notice }} by {{ message_sender }}{% endblocktrans %} -------------------------------------------------------------------------------- /django_messages/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% block content %} 8 | 9 | {% endblock %} 10 | 11 | 12 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_sent/full.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.recipient as message_recipient %}You have sent the message '{{ message }}' to {{ message_recipient }}.{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /django_messages/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | from django.utils.translation import ugettext_lazy as _ 3 | 4 | class DjangoMessagesConfig(AppConfig): 5 | name = 'django_messages' 6 | verbose_name = _('Messages') 7 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_deleted/notice.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.get_absolute_url as message_url %}You have deleted the message {{ message }}.{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_recovered/notice.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.get_absolute_url as message_url %}You have recovered the message {{ message }}.{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include AUTHORS 2 | include LICENSE 3 | include INSTALL 4 | include UPGRADING 5 | include README.rst 6 | recursive-include django_messages/locale *.po *.mo 7 | recursive-include django_messages/templates *.html *.txt 8 | include docs/* 9 | exclude docs/conf.py 10 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_replied/full.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.parent_msg as message_parent_msg and message.recipient as message_recipient %}You have replied to '{{ message_parent_msg }}' from {{ message_recipient }}.{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_received/notice.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% blocktrans with message.get_absolute_url as message_url and message.sender as message_sender %}You have received the message {{ message }} from {{ message_sender }}.{% endblocktrans %} 3 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_sent/notice.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% blocktrans with message.get_absolute_url as message_url and message.recipient as message_recipient %}You have sent the message {{ message }} to {{ message_recipient }}.{% endblocktrans %} 3 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Arne Brodowski 2 | Jannis Leidel 3 | Frédéric Roland 4 | Juanjo-sfe 5 | maczewski 6 | paz.lupita 7 | Diego Martins 8 | overkrik 9 | krisje8 10 | Michael Lind Mortensen 11 | Markos Gogoulos 12 | Gene Wu 13 | dpaccoud 14 | speedy 15 | Sergio Morstabilini 16 | paluh 17 | Jeong YunWon 18 | Jay S. Liew -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_reply_received/notice.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% blocktrans with message.get_absolute_url as message_url and message.sender as message_sender and message.parent_msg as message_parent_msg %}{{ message_sender }} has sent you a reply to {{ message_parent_msg }}.{% endblocktrans %} 3 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_replied/notice.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% blocktrans with message.parent_msg.get_absolute_url as message_url and message.parent_msg as message_parent_msg and message.recipient as message_recipient %}You have replied to {{ message_parent_msg }} from {{ message_recipient }}.{% endblocktrans %} 3 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_received/full.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.sender as message_sender and message.body|safe as message_body and message.get_absolute_url as message_url %}{{ message_sender }} has sent you a message: 2 | 3 | {{ message }} 4 | 5 | {{ message_body }} 6 | 7 | http://{{ current_site }}{{ message_url }}{% endblocktrans %} 8 | -------------------------------------------------------------------------------- /django_messages/templates/django_messages/compose.html: -------------------------------------------------------------------------------- 1 | {% extends "django_messages/base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 |

{% trans "Compose Message"%}

6 |
7 | {% csrf_token %} 8 | 9 | {{ form.as_table }} 10 |
11 | 12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /django_messages/templates/notification/messages_reply_received/full.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with message.sender as message_sender and message.parent_msg as message_parent_msg and message.body|safe as message_body and message.get_absolute_url as message_url %}{{ message_sender }} replied to '{{ message_parent_msg }}': 2 | 3 | {{ message }} 4 | 5 | {{ message_body }} 6 | 7 | http://{{ current_site }}{{ message_url }}{% endblocktrans %} -------------------------------------------------------------------------------- /django_messages/context_processors.py: -------------------------------------------------------------------------------- 1 | from django_messages.models import inbox_count_for 2 | 3 | def _user_is_authenticated(user): 4 | # django < 2.0 5 | try: 6 | return user.is_authenticated() 7 | except TypeError: 8 | # django >= 2.0 9 | return user.is_authenticated 10 | 11 | def inbox(request): 12 | if _user_is_authenticated(request.user): 13 | return {'messages_inbox_count': inbox_count_for(request.user)} 14 | else: 15 | return {} 16 | -------------------------------------------------------------------------------- /django_messages/templates/django_messages/new_message.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | {% blocktrans with recipient=message.recipient sender=message.sender %}Hello {{ recipient }}, 4 | 5 | you received a private message from {{ sender }} with 6 | the following contents:{% endblocktrans %} 7 | 8 | {{ message.body|safe }} 9 | 10 | -- 11 | {% blocktrans %}Sent from {{ site_url }}{% endblocktrans %} 12 | {% trans "Inbox" %}: {{ site_url }}{% url 'messages_inbox' %} 13 | {% trans "Reply" %}: {{ site_url }}{% url 'messages_reply' message.pk %} -------------------------------------------------------------------------------- /tests/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | from django import VERSION 5 | 6 | sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir)) 7 | 8 | if __name__ == "__main__": 9 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 10 | 11 | if VERSION < (1, 6): 12 | test_runners_args = { 13 | 'TEST_RUNNER': 'discover_runner.DiscoverRunner', 14 | } 15 | from django.core.management import execute_from_command_line 16 | 17 | execute_from_command_line(sys.argv) 18 | -------------------------------------------------------------------------------- /django_messages/migrations/0002_auto_20160607_0852.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('django_messages', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='message', 16 | name='subject', 17 | field=models.CharField(max_length=140, verbose_name='Subject'), 18 | preserve_default=True, 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /django_messages/templates/django_messages/base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 | {% endblock %} 6 | {% block sidebar %} 7 | 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /django_messages/migrations/0003_auto_20190617_1316.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.2 on 2019-06-17 11:16 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('django_messages', '0002_auto_20160607_0852'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='message', 17 | name='sender', 18 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='sent_messages', to=settings.AUTH_USER_MODEL, verbose_name='Sender'), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /django_messages/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | from django.views.generic import RedirectView 3 | 4 | from django_messages.views import * 5 | 6 | urlpatterns = [ 7 | url(r'^$', RedirectView.as_view(permanent=True, url='inbox/'), name='messages_redirect'), 8 | url(r'^inbox/$', inbox, name='messages_inbox'), 9 | url(r'^outbox/$', outbox, name='messages_outbox'), 10 | url(r'^compose/$', compose, name='messages_compose'), 11 | url(r'^compose/(?P[\w.@+-]+)/$', compose, name='messages_compose_to'), 12 | url(r'^reply/(?P[\d]+)/$', reply, name='messages_reply'), 13 | url(r'^view/(?P[\d]+)/$', view, name='messages_detail'), 14 | url(r'^delete/(?P[\d]+)/$', delete, name='messages_delete'), 15 | url(r'^undelete/(?P[\d]+)/$', undelete, name='messages_undelete'), 16 | url(r'^trash/$', trash, name='messages_trash'), 17 | ] 18 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | To install it, run the following command inside this directory: 2 | 3 | python setup.py install 4 | 5 | If you have the Python ``easy_install`` utility available, you can 6 | also type the following to download and install in one step:: 7 | 8 | easy_install django-messages 9 | 10 | Or if you're using ``pip``:: 11 | 12 | pip install django-messages 13 | 14 | Or if you'd prefer you can simply place the included ``messages`` 15 | directory somewhere on your Python path, or symlink to it from 16 | somewhere on your Python path; this is useful if you're working from a 17 | Subversion checkout. 18 | 19 | Note that this application requires Python 2.4 or later, and Django 1.0 or 20 | later. You can obtain Python from http://www.python.org/ and Django 21 | from http://www.djangoproject.com/. 22 | 23 | Most of this install notice was bluntly stolen from James Bennett's registration 24 | package, http://www.bitbucket.org/ubernostrum/django-registration/ -------------------------------------------------------------------------------- /django_messages/templates/django_messages/outbox.html: -------------------------------------------------------------------------------- 1 | {% extends "django_messages/base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 |

{% trans "Sent Messages" %}

6 | {% if message_list %} 7 | 8 | 9 | 10 | 11 | 12 | {% for message in message_list %} 13 | 14 | 15 | 18 | 19 | 20 | 21 | {% endfor %} 22 | 23 |
{% trans "Recipient" %}{% trans "Subject" %}{% trans "Sent" %}{% trans "Action" %}
{{ message.recipient }} 16 | {{ message.subject }} 17 | {{ message.sent_at|date:_("DATETIME_FORMAT") }}{% trans "delete" %}
24 | {% else %} 25 |

{% trans "No messages." %}

26 | {% endif %} 27 | {% endblock %} -------------------------------------------------------------------------------- /django_messages/templates/django_messages/trash.html: -------------------------------------------------------------------------------- 1 | {% extends "django_messages/base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 |

{% trans "Deleted Messages" %}

6 | {% if message_list %} 7 | 8 | 9 | 10 | 11 | 12 | {% for message in message_list %} 13 | 14 | 15 | 18 | 19 | 20 | 21 | {% endfor %} 22 | 23 |
{% trans "Sender" %}{% trans "Subject" %}{% trans "Date" %}{% trans "Action" %}
{{ message.sender }} 16 | {{ message.subject }} 17 | {{ message.sent_at|date:_("DATETIME_FORMAT") }}{% trans "undelete" %}
24 | {% else %} 25 |

{% trans "No messages." %}

26 | {% endif %} 27 |
28 |

{% trans "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." %}

29 | {% endblock %} -------------------------------------------------------------------------------- /django_messages/templates/django_messages/inbox.html: -------------------------------------------------------------------------------- 1 | {% extends "django_messages/base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 |

{% trans "Inbox" %}

6 | {% if message_list %} 7 | 8 | 9 | 10 | 11 | 12 | {% for message in message_list %} 13 | 14 | 15 | 21 | 22 | 23 | 24 | {% endfor %} 25 | 26 |
{% trans "Sender" %}{% trans "Subject" %}{% trans "Received" %}{% trans "Action" %}
{{ message.sender }} 16 | {% if message.new %}{% endif %} 17 | {% if message.replied %}{% endif %} 18 | {{ message.subject }} 19 | {% if message.replied %}{% endif %} 20 | {% if message.new %}{% endif %}{{ message.sent_at|date:_("DATETIME_FORMAT") }}{% trans "delete" %}
27 | {% else %} 28 |

{% trans "No messages." %}

29 | {% endif %} 30 | {% endblock %} -------------------------------------------------------------------------------- /django_messages/management/commands/delete_deleted_messages.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | from django.core.management.base import BaseCommand, CommandError 3 | from django.utils import timezone 4 | from ...models import Message 5 | 6 | 7 | class Command(BaseCommand): 8 | args = '' 9 | help = ( 10 | 'Deletes messages that have been marked as deleted by both the sender ' 11 | 'and recipient. You must provide the minimum age in days.' 12 | ) 13 | 14 | def add_arguments(self, parser): 15 | parser.add_argument('age', type=int) 16 | 17 | def handle(self, *args, **options): 18 | if not options['age']: 19 | raise CommandError('You must provide the minimum age in days.') 20 | 21 | try: 22 | age_in_days = options['age'] 23 | except ValueError: 24 | raise CommandError('"%s" is not an integer.' % options['age']) 25 | 26 | the_date = timezone.now() - datetime.timedelta(days=age_in_days) 27 | 28 | Message.objects.filter( 29 | recipient_deleted_at__lte=the_date, 30 | sender_deleted_at__lte=the_date, 31 | ).delete() 32 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from distutils.core import setup 2 | 3 | setup( 4 | name='django-messages', 5 | version=__import__('django_messages').__version__, 6 | description='User-to-user messaging system for Django', 7 | long_description=open('README.rst').read(), 8 | author='Arne Brodowski', 9 | author_email='mail@arnebrodowski.de', 10 | url='https://github.com/arneb/django-messages', 11 | install_requires=[ 12 | 'Django' 13 | ], 14 | packages=( 15 | 'django_messages', 16 | 'django_messages.templatetags', 17 | 'django_messages.migrations', 18 | ), 19 | package_data={ 20 | 'django_messages': [ 21 | 'templates/django_messages/*', 22 | 'templates/notification/*/*', 23 | 'locale/*/LC_MESSAGES/*', 24 | ] 25 | }, 26 | classifiers=( 27 | 'Development Status :: 4 - Beta', 28 | 'Environment :: Web Environment', 29 | 'Intended Audience :: Developers', 30 | 'License :: OSI Approved :: BSD License', 31 | 'Operating System :: OS Independent', 32 | 'Programming Language :: Python', 33 | 'Topic :: Utilities', 34 | 'Framework :: Django', 35 | ), 36 | ) 37 | -------------------------------------------------------------------------------- /django_messages/templates/django_messages/view.html: -------------------------------------------------------------------------------- 1 | {% extends "django_messages/base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 |

{% trans "View Message" %}

6 |
7 |
{% trans "Subject" %}
8 |
{{ message.subject }}
9 |
{% trans "Sender" %}
10 |
{{ message.sender }}
11 |
{% trans "Date" %}
12 |
{{ message.sent_at|date:_("DATETIME_FORMAT")}}
13 |
{% trans "Recipient" %}
14 |
{{ message.recipient }}
15 |
16 | {{ message.body|linebreaksbr }}

17 | 18 | {% ifequal message.recipient.pk user.pk %} 19 | {% trans "Reply" %} 20 | {% endifequal %} 21 | {% trans "Delete" %} 22 | 23 | {% comment %}Example reply_form integration 24 | {% if reply_form %} 25 |

{% trans "Compose reply"%}

26 |
27 | {% csrf_token %} 28 | 29 | {{ reply_form.as_table }} 30 |
31 | 32 |
33 | {% endif %} 34 | {% endcomment %} 35 | {% endblock %} -------------------------------------------------------------------------------- /django_messages/management.py: -------------------------------------------------------------------------------- 1 | from django.db.models import signals 2 | from django.conf import settings 3 | from django.utils.translation import ugettext_noop as _ 4 | 5 | if "pinax.notifications" in settings.INSTALLED_APPS and getattr(settings, 'DJANGO_MESSAGES_NOTIFY', True): 6 | from pinax.notifications import models as notification 7 | 8 | def create_notice_types(app, created_models, verbosity, **kwargs): 9 | notification.create_notice_type("messages_received", _("Message Received"), _("you have received a message"), default=2) 10 | notification.create_notice_type("messages_sent", _("Message Sent"), _("you have sent a message"), default=1) 11 | notification.create_notice_type("messages_replied", _("Message Replied"), _("you have replied to a message"), default=1) 12 | notification.create_notice_type("messages_reply_received", _("Reply Received"), _("you have received a reply to a message"), default=2) 13 | notification.create_notice_type("messages_deleted", _("Message Deleted"), _("you have deleted a message"), default=1) 14 | notification.create_notice_type("messages_recovered", _("Message Recovered"), _("you have undeleted a message"), default=1) 15 | 16 | signals.post_syncdb.connect(create_notice_types, sender=notification) 17 | else: 18 | print("Skipping creation of NoticeTypes as notification app not found") 19 | -------------------------------------------------------------------------------- /django_messages/templatetags/inbox.py: -------------------------------------------------------------------------------- 1 | from django.template import Library, Node, TemplateSyntaxError 2 | 3 | class InboxOutput(Node): 4 | def __init__(self, varname=None): 5 | self.varname = varname 6 | 7 | def render(self, context): 8 | try: 9 | user = context['user'] 10 | count = user.received_messages.filter(read_at__isnull=True, recipient_deleted_at__isnull=True).count() 11 | except (KeyError, AttributeError): 12 | count = '' 13 | if self.varname is not None: 14 | context[self.varname] = count 15 | return "" 16 | else: 17 | return "%s" % (count) 18 | 19 | def do_print_inbox_count(parser, token): 20 | """ 21 | A templatetag to show the unread-count for a logged in user. 22 | Returns the number of unread messages in the user's inbox. 23 | Usage:: 24 | 25 | {% load inbox %} 26 | {% inbox_count %} 27 | 28 | {# or assign the value to a variable: #} 29 | 30 | {% inbox_count as my_var %} 31 | {{ my_var }} 32 | 33 | """ 34 | bits = token.contents.split() 35 | if len(bits) > 1: 36 | if len(bits) != 3: 37 | raise TemplateSyntaxError("inbox_count tag takes either no arguments or exactly two arguments") 38 | if bits[1] != 'as': 39 | raise TemplateSyntaxError("first argument to inbox_count tag must be 'as'") 40 | return InboxOutput(bits[2]) 41 | else: 42 | return InboxOutput() 43 | 44 | register = Library() 45 | register.tag('inbox_count', do_print_inbox_count) 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008-2010, Arne Brodowski 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are 6 | met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above 11 | copyright notice, this list of conditions and the following 12 | disclaimer in the documentation and/or other materials provided 13 | with the distribution. 14 | * Neither the name of the author nor the names of other 15 | contributors may be used to endorse or promote products derived 16 | from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /tests/settings.py: -------------------------------------------------------------------------------- 1 | import os.path 2 | 3 | INSTALLED_APPS = [ 4 | 'django.contrib.auth', 5 | 'django.contrib.contenttypes', 6 | 'django.contrib.sessions', 7 | 'django.contrib.sites', 8 | 'django_messages' 9 | ] 10 | 11 | # Django >= 2.0 12 | MIDDLEWARE = ( 13 | 'django.contrib.sessions.middleware.SessionMiddleware', 14 | 'django.middleware.common.CommonMiddleware', 15 | 'django.middleware.csrf.CsrfViewMiddleware', 16 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 17 | 'django.contrib.messages.middleware.MessageMiddleware', 18 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 19 | ) 20 | 21 | # Django < 2.0 22 | MIDDLEWARE_CLASSES = MIDDLEWARE 23 | 24 | 25 | SITE_ID = 1 26 | SECRET_KEY = '+zzix-&k$afk-k0d0s7v01w0&15z#ne$71qf28#e$$c*@g742z' 27 | 28 | ROOT_URLCONF = "urls" 29 | 30 | DEBUG = True 31 | 32 | STATIC_URL = '/static/' 33 | 34 | DATABASES = { 35 | 'default': { 36 | 'ENGINE': 'django.db.backends.sqlite3', 37 | 'NAME': os.path.join(os.path.dirname(__file__), 'database.db'), 38 | } 39 | } 40 | 41 | TEMPLATES = [ 42 | { 43 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 44 | 'DIRS': [], 45 | 'APP_DIRS': True, 46 | 'OPTIONS': { 47 | 'context_processors': [ 48 | 'django.template.context_processors.debug', 49 | 'django.template.context_processors.request', 50 | 'django.contrib.auth.context_processors.auth', 51 | 'django.contrib.messages.context_processors.messages', 52 | ], 53 | }, 54 | }, 55 | ] 56 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = 3 | py2.7-d1.7, py2.7-d1.8, py2.7-d1.9, py2.7-d1.10, py2.7-d1.11, 4 | py3.5-d1.8, py3.5-d1.9, py3.5-d1.10, py3.5-d1.11, py3.5-d2.0, 5 | py3.5-d2.1, py3.5-d2.2, py3.6-d1.11, py3.6-d2.0, py3.6-d2.1, 6 | py3.6-d2.2 7 | 8 | [testenv] 9 | commands = {envpython} tests/manage.py test django_messages --settings=settings 10 | 11 | 12 | # Python 2.7 13 | 14 | [testenv:py2.7-d1.7] 15 | basepython = python2.7 16 | deps = django>=1.7.1,<1.8 17 | 18 | [testenv:py2.7-d1.8] 19 | basepython = python2.7 20 | deps = django>=1.8,<1.9 21 | 22 | [testenv:py2.7-d1.9] 23 | basepython = python2.7 24 | deps = django>=1.9,<1.9.99 25 | 26 | [testenv:py2.7-d1.10] 27 | basepython = python2.7 28 | deps = django>=1.10,<1.10.99 29 | 30 | [testenv:py2.7-d1.11] 31 | basepython = python2.7 32 | deps = django>=1.11,<1.11.99 33 | 34 | # Python 3.5 35 | 36 | [testenv:py3.5-d1.8] 37 | basepython = python3.5 38 | deps = django>=1.8,<1.9 39 | 40 | [testenv:py3.5-d1.9] 41 | basepython = python3.5 42 | deps = django>=1.9,<1.9.99 43 | 44 | [testenv:py3.5-d1.10] 45 | basepython = python3.5 46 | deps = django>=1.10,<1.10.99 47 | 48 | [testenv:py3.5-d1.11] 49 | basepython = python3.5 50 | deps = django>=1.11,<1.11.99 51 | 52 | [testenv:py3.5-d2.0] 53 | basepython = python3.5 54 | deps = django>=2.0,<2.0.99 55 | 56 | [testenv:py3.5-d2.1] 57 | basepython = python3.5 58 | deps = django>=2.1,<2.1.99 59 | 60 | [testenv:py3.5-d2.2] 61 | basepython = python3.5 62 | deps = django>=2.2,<2.2.99 63 | 64 | # Python 3.6 65 | 66 | [testenv:py3.6-d1.11] 67 | basepython = python3.6 68 | deps = django>=1.11,<1.11.99 69 | 70 | [testenv:py3.6-d2.0] 71 | basepython = python3.6 72 | deps = django>=2.0,<2.0.99 73 | 74 | [testenv:py3.6-d2.1] 75 | basepython = python3.6 76 | deps = django>=2.1,<2.1.99 77 | 78 | [testenv:py3.6-d2.2] 79 | basepython = python3.6 80 | deps = django>=2.2,<2.2.99 -------------------------------------------------------------------------------- /UPGRADING: -------------------------------------------------------------------------------- 1 | ======================================== 2 | Upgrading django-messages 0.4.x to 0.5.x 3 | ======================================== 4 | 5 | To Upgrade from django-messages 0.4.x to django-messages 0.5.x the following 6 | changes might be neccessary in your project. 7 | 8 | 9 | Settings 10 | -------- 11 | 12 | To avoid name clashes with the new django.contrib.messages app (new in Django 1.2) 13 | the django-messages python module was renamed from ``messages`` to ``django_messages``. 14 | 15 | This makes a change of the INSTALLED_APPS setting neccessary: 16 | 17 | Old:: 18 | 19 | INSTALLED_APPS = ( 20 | ... 21 | 'messages', 22 | ... 23 | ) 24 | 25 | New:: 26 | 27 | INSTALLED_APPS = ( 28 | ... 29 | 'django_messages', 30 | ... 31 | ) 32 | 33 | If you are using the ``inbox`` context processor, the TEMPLATE_CONTEXT_PROCESSORS 34 | setting also needs to be changed: 35 | 36 | Old:: 37 | 38 | TEMPLATE_CONTEXT_PROCESSORS = ( 39 | ... 40 | 'messages.context_processors.inbox', 41 | ... 42 | ) 43 | 44 | New:: 45 | 46 | TEMPLATE_CONTEXT_PROCESSORS = ( 47 | ... 48 | 'django_messages.context_processors.inbox', 49 | ... 50 | ) 51 | 52 | 53 | Templates 54 | --------- 55 | 56 | To keep the convention that a reuseable app should keep its templates in a 57 | folder with the name of the app, all templates where moved from the folder 58 | ``messages`` to the folder ``django_messages``. That means if you provided 59 | your own templates for django-messages, you should also move the directory from 60 | ``messages`` to ``django_messages``. Example:: 61 | 62 | mv myproject/templates/messages myproject/templates/django_messages 63 | 64 | 65 | Database 66 | -------- 67 | 68 | Depending on the Database used this process may differ but you have to 69 | rename the existing table ``messages_message`` to ``django_messages_message``. 70 | 71 | -------------------------------------------------------------------------------- /django_messages/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | from django.conf import settings 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Message', 17 | fields=[ 18 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 19 | ('subject', models.CharField(max_length=120, verbose_name='Subject')), 20 | ('body', models.TextField(verbose_name='Body')), 21 | ('sent_at', models.DateTimeField(null=True, verbose_name='sent at', blank=True)), 22 | ('read_at', models.DateTimeField(null=True, verbose_name='read at', blank=True)), 23 | ('replied_at', models.DateTimeField(null=True, verbose_name='replied at', blank=True)), 24 | ('sender_deleted_at', models.DateTimeField(null=True, verbose_name='Sender deleted at', blank=True)), 25 | ('recipient_deleted_at', models.DateTimeField(null=True, verbose_name='Recipient deleted at', blank=True)), 26 | ('parent_msg', models.ForeignKey(related_name='next_messages', verbose_name='Parent message', blank=True, to='django_messages.Message', null=True, on_delete=models.SET_NULL)), 27 | ('recipient', models.ForeignKey(related_name='received_messages', verbose_name='Recipient', blank=True, to=settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL)), 28 | ('sender', models.ForeignKey(related_name='sent_messages', verbose_name='Sender', to=settings.AUTH_USER_MODEL, on_delete=models.SET_NULL)), 29 | ], 30 | options={ 31 | 'ordering': ['-sent_at'], 32 | 'verbose_name': 'Message', 33 | 'verbose_name_plural': 'Messages', 34 | }, 35 | bases=(models.Model,), 36 | ), 37 | ] 38 | -------------------------------------------------------------------------------- /django_messages/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.conf import settings 3 | from django.utils.translation import ugettext_lazy as _ 4 | from django.utils import timezone 5 | 6 | if "pinax.notifications" in settings.INSTALLED_APPS and getattr(settings, 'DJANGO_MESSAGES_NOTIFY', True): 7 | from pinax.notifications import models as notification 8 | else: 9 | notification = None 10 | 11 | from django_messages.models import Message 12 | from django_messages.fields import CommaSeparatedUserField 13 | 14 | class ComposeForm(forms.Form): 15 | """ 16 | A simple default form for private messages. 17 | """ 18 | recipient = CommaSeparatedUserField(label=_(u"Recipient")) 19 | subject = forms.CharField(label=_(u"Subject"), max_length=140) 20 | body = forms.CharField(label=_(u"Body"), 21 | widget=forms.Textarea(attrs={'rows': '12', 'cols':'55'})) 22 | 23 | 24 | def __init__(self, *args, **kwargs): 25 | recipient_filter = kwargs.pop('recipient_filter', None) 26 | super(ComposeForm, self).__init__(*args, **kwargs) 27 | if recipient_filter is not None: 28 | self.fields['recipient']._recipient_filter = recipient_filter 29 | 30 | 31 | def save(self, sender, parent_msg=None): 32 | recipients = self.cleaned_data['recipient'] 33 | subject = self.cleaned_data['subject'] 34 | body = self.cleaned_data['body'] 35 | message_list = [] 36 | for r in recipients: 37 | msg = Message( 38 | sender = sender, 39 | recipient = r, 40 | subject = subject, 41 | body = body, 42 | ) 43 | if parent_msg is not None: 44 | msg.parent_msg = parent_msg 45 | parent_msg.replied_at = timezone.now() 46 | parent_msg.save() 47 | msg.save() 48 | message_list.append(msg) 49 | if notification: 50 | if parent_msg is not None: 51 | notification.send([sender], "messages_replied", {'message': msg,}) 52 | notification.send([r], "messages_reply_received", {'message': msg,}) 53 | else: 54 | notification.send([sender], "messages_sent", {'message': msg,}) 55 | notification.send([r], "messages_received", {'message': msg,}) 56 | return message_list 57 | -------------------------------------------------------------------------------- /django_messages/fields.py: -------------------------------------------------------------------------------- 1 | """ 2 | Based on http://www.djangosnippets.org/snippets/595/ 3 | by sopelkin 4 | """ 5 | 6 | from django import forms 7 | from django.forms import widgets 8 | from django.utils.translation import ugettext_lazy as _ 9 | 10 | from django_messages.utils import get_user_model, get_username_field 11 | 12 | User = get_user_model() 13 | 14 | 15 | class CommaSeparatedUserInput(widgets.Input): 16 | input_type = 'text' 17 | 18 | def render(self, name, value, **kwargs): 19 | if value is None: 20 | value = '' 21 | elif isinstance(value, (list, tuple)): 22 | value = (', '.join([getattr(user, get_username_field()) for user in value])) 23 | return super(CommaSeparatedUserInput, self).render(name, value, **kwargs) 24 | 25 | 26 | 27 | class CommaSeparatedUserField(forms.Field): 28 | widget = CommaSeparatedUserInput 29 | 30 | def __init__(self, *args, **kwargs): 31 | recipient_filter = kwargs.pop('recipient_filter', None) 32 | self._recipient_filter = recipient_filter 33 | super(CommaSeparatedUserField, self).__init__(*args, **kwargs) 34 | 35 | def clean(self, value): 36 | super(CommaSeparatedUserField, self).clean(value) 37 | if not value: 38 | return '' 39 | if isinstance(value, (list, tuple)): 40 | return value 41 | 42 | names = set(value.split(',')) 43 | names_set = set([name.strip() for name in names if name.strip()]) 44 | users = list(User.objects.filter(**{'%s__in' % get_username_field(): names_set})) 45 | unknown_names = names_set ^ set([getattr(user, get_username_field()) for user in users]) 46 | 47 | recipient_filter = self._recipient_filter 48 | invalid_users = [] 49 | if recipient_filter is not None: 50 | for r in users: 51 | if recipient_filter(r) is False: 52 | users.remove(r) 53 | invalid_users.append(getattr(r, get_username_field())) 54 | 55 | if unknown_names or invalid_users: 56 | raise forms.ValidationError(_(u"The following usernames are incorrect: %(users)s") % {'users': ', '.join(list(unknown_names)+invalid_users)}) 57 | 58 | return users 59 | 60 | def prepare_value(self, value): 61 | if value is None: 62 | value = '' 63 | elif isinstance(value, (list, tuple)): 64 | value = (', '.join([getattr(user, get_username_field()) for user in value])) 65 | return value 66 | -------------------------------------------------------------------------------- /docs/install.txt: -------------------------------------------------------------------------------- 1 | .. _ref-messages-install: 2 | 3 | ========================== 4 | Installing django-messages 5 | ========================== 6 | 7 | Basically all you have to do is get the ``messages`` folder somewhere on the 8 | Python path. There are multiple ways to achive this. 9 | 10 | Quickstart 11 | ---------- 12 | 13 | If you already downloaded the package change into the ``django-messages`` 14 | directory and run:: 15 | 16 | python setup.py install 17 | 18 | Otherwise you will find more information in the remainder of this document. 19 | 20 | Django-messages is available via PyPi, so the following command will download 21 | and install django-messages on your system in one step:: 22 | 23 | easy_install django-messages 24 | 25 | If you prefer using pip, you may achieve the same result by running:: 26 | 27 | pip install django-messages 28 | 29 | 30 | Download 31 | --------- 32 | 33 | You will always find and download the latest packaged version at: 34 | http://code.google.com/p/django-messages/downloads/list 35 | 36 | If you prefer to use the current developement version to get earlier access to 37 | new features you can checkout the code from the GIT repository:: 38 | 39 | git clone https://github.com/arneb/django-messages.git 40 | 41 | 42 | Install 43 | ------- 44 | 45 | If you downloaded the tar-ball extract it with (change the version number if 46 | required):: 47 | 48 | tar -xcvf django-messages-0.4.tar.gz 49 | 50 | After extracting the tar-ball or checking out the code from the repository, 51 | change into the ``django-messages`` directory and install the code:: 52 | 53 | cd django-messages 54 | python setup.py install 55 | 56 | 57 | Manual Install 58 | -------------- 59 | 60 | Instead of using ``setup.py install`` it is also possible to copy or symlink 61 | the ``django_messages`` folder inside the toplevel ``django-messages`` folder 62 | to your Python path. This will be enough to make djano-messages available to 63 | your system. 64 | 65 | 66 | Dependencies 67 | ------------ 68 | 69 | Django-messages has no external dependencies except for django. However, if 70 | pinax-notifications and/or django-mailer are found, it will make use of them. 71 | 72 | Please note, that these apps have to be listed in ``INSTALLED_APPS`` to be 73 | used by django-messages. 74 | 75 | * If you use `pinax-notifications`_ django-messages will use it for sending 76 | notifications to users about new messages instead of using the built-in 77 | mechanism. 78 | 79 | * If `django-mailer`_ is used the built-in messages sending code will use it 80 | instead of the django built-in ``send_mail`` function. 81 | 82 | 83 | .. _`pinax-notifications`: https://github.com/pinax/pinax-notifications 84 | .. _`django-mailer`: http://code.google.com/p/django-mailer/ 85 | -------------------------------------------------------------------------------- /docs/index.txt: -------------------------------------------------------------------------------- 1 | ========================================== 2 | A user-to-user messaging system for Django 3 | ========================================== 4 | 5 | Django-messages enables your users to send private messages to each other. 6 | It provides a basic set of functionality that you would expect from such a system. 7 | Every user has an Inbox, an Outbox and a Trash. Messages can be composed and 8 | there is an easy, url-based approach to preloading the compose-form with the 9 | recipient-user, which makes it extremly easy to put "send xyz a message" links 10 | on a profile-page. 11 | 12 | Currently django-messages comes with over 20 translations, see them here: 13 | https://github.com/arneb/django-messages/tree/master/django_messages/locale 14 | 15 | 16 | Versions 17 | -------- 18 | 19 | +--------+-------------------------------------------------------------------+ 20 | | master | compatible with Django 1.11 - 2.2 | 21 | +--------+-------------------------------------------------------------------+ 22 | | 0.6.x | compatible with Django 1.7 - 1.11 and with Python 3 | 23 | +--------+-------------------------------------------------------------------+ 24 | | 0.5.x | compatible with Django 1.4, 1.5, 1.6 and 1.7; if you are | 25 | | | upgrading from 0.4.x to trunk please read the UPGRADING docs. | 26 | +--------+-------------------------------------------------------------------+ 27 | | 0.4.x | compatible with Django 1.1 (may work with Django 1.0/1.2), no | 28 | | | longer maintained | 29 | +--------+-------------------------------------------------------------------+ 30 | | 0.3 | compatible with Django 1.0, no longer maintained | 31 | +--------+-------------------------------------------------------------------+ 32 | 33 | 34 | Install 35 | ------- 36 | Download the tar archive, unpack and run python setup.py install or checkout 37 | the trunk and put the ``django_messages`` folder on your ``PYTHONPATH``. 38 | Released versions of django-messages are also available on pypi and can be 39 | installed with easy_install or pip. 40 | 41 | 42 | Usage 43 | ----- 44 | 45 | Add ``django_messages`` to your ``INSTALLED_APPS`` setting and add an 46 | ``include('django_messages.urls')`` at any point in your url-conf. 47 | 48 | The app includes some default templates, which are pretty simple. They 49 | extend a template called ``base.html`` and only emit stuff in the block 50 | ``content`` and block ``sidebar``. You may want to use your own templates, 51 | but the included ones are good enough for testing and getting started. 52 | 53 | 54 | Contents 55 | -------- 56 | 57 | .. toctree:: 58 | :maxdepth: 2 59 | 60 | install 61 | usage 62 | customizing 63 | -------------------------------------------------------------------------------- /docs/usage.txt: -------------------------------------------------------------------------------- 1 | .. _ref-messages-usage: 2 | 3 | ===================== 4 | Using django-messages 5 | ===================== 6 | 7 | To enable django-messages in your Django project make sure it is 8 | :ref:`installed `. You can check if django-messages was 9 | successfully installed by opening a python shell and running:: 10 | 11 | >>> import django_messages 12 | >>> 13 | 14 | If no error occured, you can assume that the app was installed correctly. 15 | 16 | 17 | Edit settings 18 | ------------- 19 | 20 | The next step is to add ``django_messages`` to the ``INSTALLED_APPS`` setting:: 21 | 22 | INSTALLED_APPS = ( 23 | ... 24 | 'django_messages', 25 | ... 26 | ) 27 | 28 | 29 | Add urls 30 | -------- 31 | 32 | To make django-messages available to your users you should include the 33 | bunlded url-conf in your root url-conf. One example would be to edit 34 | your main ``urls.py`` and add a line like this:: 35 | 36 | urlpatterns = patterns('' 37 | ... 38 | (r'^messages/', include('django_messages.urls')), 39 | ... 40 | ) 41 | 42 | 43 | Templates 44 | --------- 45 | 46 | Django-messages provides some simple default templates which will get you 47 | started quickly. The templates make the assumption that a base template with 48 | the name ``base.html`` exists which defines a block ``content`` and a block 49 | ``sidebar``. If this is not the case, or the template doesn't fit due to other 50 | concerns, it's very easy to provide your own templates. Please see the 51 | :ref:`customization docs ` fore more details. 52 | 53 | 54 | Templatetags and Context-Processors 55 | ----------------------------------- 56 | 57 | Django-messages provides a Templatetag and a Template Context Processor to 58 | make it easy to print the number of unread messages of a user in the templates. 59 | 60 | To use the Templatetag simply add this to your template:: 61 | 62 | {% load inbox %} 63 | 64 | Now you can either print the number of unread messages in the users inbox by 65 | using:: 66 | 67 | {% inbox_count %} 68 | 69 | Or you can assign the count to a variable to further process it in the template:: 70 | 71 | {% inbox_count as my_var %} 72 | {{ my_var }} 73 | 74 | If you want to show the inbox count on every page of your site you could also 75 | use the bundled Context Processor to add the value to every Template Context 76 | instead of loading the Templatetag. Simply add the Context Processor to the 77 | TEMPLATE_CONTEXT_PROCESSORS settings in your settings.py:: 78 | 79 | TEMPLATE_CONTEXT_PROCESSORS = ( 80 | ... 81 | 'django_messages.context_processors.inbox', 82 | ) 83 | 84 | And now every Template Context will contain a variable named 85 | ``messages_inbox_count``, if the user is logged in:: 86 | 87 | {{ messages_inbox_count }} 88 | 89 | 90 | Settings Options 91 | ---------------- 92 | 93 | If you do want to disable django-messages from sending either a 94 | 'pinax-notifications' notice or an email (fallback if 'pinax-notifications 95 | not installed' then set the following in your django settings:: 96 | 97 | DJANGO_MESSAGES_NOTIFY = False 98 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | ========================================== 2 | A user-to-user messaging system for Django 3 | ========================================== 4 | 5 | Django-messages enables your users to send private messages to each other. 6 | It provides a basic set of functionality that you would expect from such a system. 7 | Every user has an Inbox, an Outbox and a Trash. Messages can be composed and 8 | there is an easy, url-based approach to preloading the compose-form with the 9 | recipient-user, which makes it extremly easy to put "send xyz a message" links 10 | on a profile-page. 11 | 12 | Currently django-messages comes with over 20 translations, see them here: 13 | https://github.com/arneb/django-messages/tree/master/django_messages/locale 14 | 15 | 16 | Versions 17 | -------- 18 | 19 | +--------+-------------------------------------------------------------------+ 20 | | master | compatible with Django 1.11 - 2.2 | 21 | +--------+-------------------------------------------------------------------+ 22 | | 0.6.x | compatible with Django 1.7 - 1.11 and with Python 3 | 23 | +--------+-------------------------------------------------------------------+ 24 | | 0.5.x | compatible with Django 1.4, 1.5, 1.6 and 1.7; if you are | 25 | | | upgrading from 0.4.x to trunk please read the UPGRADING docs. | 26 | +--------+-------------------------------------------------------------------+ 27 | | 0.4.x | compatible with Django 1.1 (may work with Django 1.0/1.2), no | 28 | | | longer maintained | 29 | +--------+-------------------------------------------------------------------+ 30 | | 0.3 | compatible with Django 1.0, no longer maintained | 31 | +--------+-------------------------------------------------------------------+ 32 | 33 | 34 | Documentation 35 | ------------- 36 | 37 | The documentation is contained in the /docs/ directory and can be build with 38 | sphinx. A HTML version of the documentation is available at: 39 | http://django-messages.readthedocs.org 40 | 41 | 42 | Install 43 | ------- 44 | Download the tar archive, unpack and run python setup.py install or checkout 45 | the trunk and put the ``django_messages`` folder on your ``PYTHONPATH``. 46 | Released versions of django-messages are also available on pypi and can be 47 | installed with easy_install or pip. 48 | 49 | 50 | Usage 51 | ----- 52 | 53 | Add ``django_messages`` to your ``INSTALLED_APPS`` setting and add an 54 | ``include('django_messages.urls')`` at any point in your url-conf. 55 | 56 | The app includes some default templates, which are pretty simple. They 57 | extend a template called ``base.html`` and only emit stuff in the block 58 | ``content`` and block ``sidebar``. You may want to use your own templates, 59 | but the included ones are good enough for testing and getting started. 60 | 61 | 62 | Dependencies 63 | ------------ 64 | 65 | Django-messages has no external dependencies except for django. However, if 66 | pinax-notifications and/or django-mailer are found, it will make use of them. 67 | Note: as of r65 django-messages will only use pinax-notifications if 68 | 'pinax.notifications' is also added to the INSTALLED_APPS setting. This has been 69 | done to make situations possible where notification is on pythonpath but 70 | should not be used, or where notification is another python package, such as 71 | django-notification which has the same name. 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /django_messages/utils.py: -------------------------------------------------------------------------------- 1 | import re 2 | import django 3 | from django.utils.text import wrap 4 | from django.utils.translation import ugettext, ugettext_lazy as _ 5 | from django.template.loader import render_to_string 6 | from django.conf import settings 7 | 8 | # favour django-mailer but fall back to django.core.mail 9 | 10 | if "mailer" in settings.INSTALLED_APPS: 11 | from mailer import send_mail 12 | else: 13 | from django.core.mail import send_mail 14 | 15 | def format_quote(sender, body): 16 | """ 17 | Wraps text at 55 chars and prepends each 18 | line with `> `. 19 | Used for quoting messages in replies. 20 | """ 21 | lines = wrap(body, 55).split('\n') 22 | for i, line in enumerate(lines): 23 | lines[i] = "> %s" % line 24 | quote = '\n'.join(lines) 25 | return ugettext(u"%(sender)s wrote:\n%(body)s") % { 26 | 'sender': sender, 27 | 'body': quote 28 | } 29 | 30 | def format_subject(subject): 31 | """ 32 | Prepends 'Re:' to the subject. To avoid multiple 'Re:'s 33 | a counter is added. 34 | NOTE: Currently unused. First step to fix Issue #48. 35 | FIXME: Any hints how to make this i18n aware are very welcome. 36 | 37 | """ 38 | subject_prefix_re = r'^Re\[(\d*)\]:\ ' 39 | m = re.match(subject_prefix_re, subject, re.U) 40 | prefix = u"" 41 | if subject.startswith('Re: '): 42 | prefix = u"[2]" 43 | subject = subject[4:] 44 | elif m is not None: 45 | try: 46 | num = int(m.group(1)) 47 | prefix = u"[%d]" % (num+1) 48 | subject = subject[6+len(str(num)):] 49 | except: 50 | # if anything fails here, fall back to the old mechanism 51 | pass 52 | 53 | return ugettext(u"Re%(prefix)s: %(subject)s") % { 54 | 'subject': subject, 55 | 'prefix': prefix 56 | } 57 | 58 | def new_message_email(sender, instance, signal, 59 | subject_prefix=_(u'New Message: %(subject)s'), 60 | template_name="django_messages/new_message.html", 61 | default_protocol=None, 62 | *args, **kwargs): 63 | """ 64 | This function sends an email and is called via Django's signal framework. 65 | Optional arguments: 66 | ``template_name``: the template to use 67 | ``subject_prefix``: prefix for the email subject. 68 | ``default_protocol``: default protocol in site URL passed to template 69 | """ 70 | if default_protocol is None: 71 | default_protocol = getattr(settings, 'DEFAULT_HTTP_PROTOCOL', 'http') 72 | 73 | if 'created' in kwargs and kwargs['created']: 74 | try: 75 | from django.contrib.sites.models import Site 76 | current_domain = Site.objects.get_current().domain 77 | subject = subject_prefix % {'subject': instance.subject} 78 | message = render_to_string(template_name, { 79 | 'site_url': '%s://%s' % (default_protocol, current_domain), 80 | 'message': instance, 81 | }) 82 | if instance.recipient.email != "": 83 | send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, 84 | [instance.recipient.email,]) 85 | except Exception as e: 86 | #print e 87 | pass #fail silently 88 | 89 | 90 | def get_user_model(): 91 | if django.VERSION[:2] >= (1, 5): 92 | from django.contrib.auth import get_user_model 93 | return get_user_model() 94 | else: 95 | from django.contrib.auth.models import User 96 | return User 97 | 98 | 99 | def get_username_field(): 100 | if django.VERSION[:2] >= (1, 5): 101 | return get_user_model().USERNAME_FIELD 102 | else: 103 | return 'username' 104 | -------------------------------------------------------------------------------- /django_messages/models.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | try: 3 | from django.core.urlresolvers import reverse 4 | except ImportError: 5 | from django.urls import reverse 6 | from django.db import models 7 | from django.db.models import signals 8 | from django.utils import timezone 9 | from django.utils.encoding import python_2_unicode_compatible 10 | from django.utils.translation import ugettext_lazy as _ 11 | 12 | AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') 13 | 14 | 15 | class MessageManager(models.Manager): 16 | 17 | def inbox_for(self, user): 18 | """ 19 | Returns all messages that were received by the given user and are not 20 | marked as deleted. 21 | """ 22 | return self.filter( 23 | recipient=user, 24 | recipient_deleted_at__isnull=True, 25 | ) 26 | 27 | def outbox_for(self, user): 28 | """ 29 | Returns all messages that were sent by the given user and are not 30 | marked as deleted. 31 | """ 32 | return self.filter( 33 | sender=user, 34 | sender_deleted_at__isnull=True, 35 | ) 36 | 37 | def trash_for(self, user): 38 | """ 39 | Returns all messages that were either received or sent by the given 40 | user and are marked as deleted. 41 | """ 42 | return self.filter( 43 | recipient=user, 44 | recipient_deleted_at__isnull=False, 45 | ) | self.filter( 46 | sender=user, 47 | sender_deleted_at__isnull=False, 48 | ) 49 | 50 | 51 | @python_2_unicode_compatible 52 | class Message(models.Model): 53 | """ 54 | A private message from user to user 55 | """ 56 | subject = models.CharField(_("Subject"), max_length=140) 57 | body = models.TextField(_("Body")) 58 | sender = models.ForeignKey(AUTH_USER_MODEL, related_name='sent_messages', verbose_name=_("Sender"), on_delete=models.PROTECT) 59 | recipient = models.ForeignKey(AUTH_USER_MODEL, related_name='received_messages', null=True, blank=True, verbose_name=_("Recipient"), on_delete=models.SET_NULL) 60 | parent_msg = models.ForeignKey('self', related_name='next_messages', null=True, blank=True, verbose_name=_("Parent message"), on_delete=models.SET_NULL) 61 | sent_at = models.DateTimeField(_("sent at"), null=True, blank=True) 62 | read_at = models.DateTimeField(_("read at"), null=True, blank=True) 63 | replied_at = models.DateTimeField(_("replied at"), null=True, blank=True) 64 | sender_deleted_at = models.DateTimeField(_("Sender deleted at"), null=True, blank=True) 65 | recipient_deleted_at = models.DateTimeField(_("Recipient deleted at"), null=True, blank=True) 66 | 67 | objects = MessageManager() 68 | 69 | def new(self): 70 | """returns whether the recipient has read the message or not""" 71 | if self.read_at is not None: 72 | return False 73 | return True 74 | 75 | def replied(self): 76 | """returns whether the recipient has written a reply to this message""" 77 | if self.replied_at is not None: 78 | return True 79 | return False 80 | 81 | def __str__(self): 82 | return self.subject 83 | 84 | def get_absolute_url(self): 85 | return reverse('messages_detail', args=[self.id]) 86 | 87 | def save(self, **kwargs): 88 | if not self.id: 89 | self.sent_at = timezone.now() 90 | super(Message, self).save(**kwargs) 91 | 92 | class Meta: 93 | ordering = ['-sent_at'] 94 | verbose_name = _("Message") 95 | verbose_name_plural = _("Messages") 96 | 97 | 98 | def inbox_count_for(user): 99 | """ 100 | returns the number of unread messages for the given user but does not 101 | mark them seen 102 | """ 103 | return Message.objects.filter(recipient=user, read_at__isnull=True, recipient_deleted_at__isnull=True).count() 104 | 105 | # fallback for email notification if django-notification could not be found 106 | if "pinax.notifications" not in settings.INSTALLED_APPS and getattr(settings, 'DJANGO_MESSAGES_NOTIFY', True): 107 | from django_messages.utils import new_message_email 108 | signals.post_save.connect(new_message_email, sender=Message) 109 | -------------------------------------------------------------------------------- /django_messages/admin.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.conf import settings 3 | from django.utils.translation import gettext_lazy as _ 4 | from django.contrib import admin 5 | from django.contrib.auth.models import Group 6 | 7 | from django_messages.utils import get_user_model 8 | User = get_user_model() 9 | 10 | if "pinax.notifications" in settings.INSTALLED_APPS and getattr(settings, 'DJANGO_MESSAGES_NOTIFY', True): 11 | from pinax.notifications import models as notification 12 | else: 13 | notification = None 14 | 15 | from django_messages.models import Message 16 | 17 | class MessageAdminForm(forms.ModelForm): 18 | """ 19 | Custom AdminForm to enable messages to groups and all users. 20 | """ 21 | group = forms.ChoiceField(label=_('group'), required=False, 22 | help_text=_('Creates the message optionally for all users or a group of users.')) 23 | 24 | def __init__(self, *args, **kwargs): 25 | super(MessageAdminForm, self).__init__(*args, **kwargs) 26 | self.fields['group'].choices = self._get_group_choices() 27 | self.fields['recipient'].required = True 28 | 29 | def _get_group_choices(self): 30 | return [('', u'---------'), ('all', _('All users'))] + \ 31 | [(group.pk, group.name) for group in Group.objects.all()] 32 | 33 | class Meta: 34 | model = Message 35 | fields = ('sender', 'recipient', 'group', 'parent_msg', 'subject', 36 | 'body', 'sent_at', 'read_at', 'replied_at', 'sender_deleted_at', 37 | 'recipient_deleted_at') 38 | 39 | class MessageAdmin(admin.ModelAdmin): 40 | form = MessageAdminForm 41 | fieldsets = ( 42 | (None, { 43 | 'fields': ( 44 | 'sender', 45 | ('recipient', 'group'), 46 | ), 47 | }), 48 | (_('Message'), { 49 | 'fields': ( 50 | 'parent_msg', 51 | 'subject', 'body', 52 | ), 53 | 'classes': ('monospace' ), 54 | }), 55 | (_('Date/time'), { 56 | 'fields': ( 57 | 'sent_at', 'read_at', 'replied_at', 58 | 'sender_deleted_at', 'recipient_deleted_at', 59 | ), 60 | 'classes': ('collapse', 'wide'), 61 | }), 62 | ) 63 | list_display = ('subject', 'sender', 'recipient', 'sent_at', 'read_at') 64 | list_filter = ('sent_at', 'sender', 'recipient') 65 | search_fields = ('subject', 'body') 66 | raw_id_fields = ('sender', 'recipient', 'parent_msg') 67 | 68 | def save_model(self, request, obj, form, change): 69 | """ 70 | Saves the message for the recipient and looks in the form instance 71 | for other possible recipients. Prevents duplication by excludin the 72 | original recipient from the list of optional recipients. 73 | 74 | When changing an existing message and choosing optional recipients, 75 | the message is effectively resent to those users. 76 | """ 77 | obj.save() 78 | 79 | if notification: 80 | # Getting the appropriate notice labels for the sender and recipients. 81 | if obj.parent_msg is None: 82 | sender_label = 'messages_sent' 83 | recipients_label = 'messages_received' 84 | else: 85 | sender_label = 'messages_replied' 86 | recipients_label = 'messages_reply_received' 87 | 88 | # Notification for the sender. 89 | notification.send([obj.sender], sender_label, {'message': obj,}) 90 | 91 | if form.cleaned_data['group'] == 'all': 92 | # send to all users 93 | recipients = User.objects.exclude(pk=obj.recipient.pk) 94 | else: 95 | # send to a group of users 96 | recipients = [] 97 | group = form.cleaned_data['group'] 98 | if group: 99 | group = Group.objects.get(pk=group) 100 | recipients.extend( 101 | list(group.user_set.exclude(pk=obj.recipient.pk))) 102 | # create messages for all found recipients 103 | for user in recipients: 104 | obj.pk = None 105 | obj.recipient = user 106 | obj.save() 107 | 108 | if notification: 109 | # Notification for the recipient. 110 | notification.send([user], recipients_label, {'message' : obj,}) 111 | 112 | admin.site.register(Message, MessageAdmin) 113 | -------------------------------------------------------------------------------- /docs/customizing.txt: -------------------------------------------------------------------------------- 1 | .. _ref-messages-customization: 2 | 3 | =========================== 4 | Customizing django-messages 5 | =========================== 6 | 7 | There are multiple levels at which you can customize django-messages without 8 | altering the code directly. 9 | 10 | 11 | Templates 12 | --------- 13 | 14 | Django-messages comes with a set of built-in templates which you can use. 15 | If these templates don't fit your project you can override any or all of them 16 | by putting files with the same filenames in one the directories listes in 17 | ``TEMPLATES_DIRS`` in your ``settings.py``. 18 | 19 | Django-messages uses the following templates: 20 | 21 | * :file:`django_messages/base.html` - A base template from which all the 22 | following templates inherit. Maybe it's enough to customize this template 23 | for your project. 24 | * :file:`django_messages/compose.html` - This template is rendered, when a 25 | user composes a new messages. 26 | * :file:`django_messages/inbox.html` - This template lists the users inbox. 27 | * :file:`django_messages/new_messages.html` - This template is used to 28 | construct the notification mail sent to a user, whenever a new message is 29 | received. 30 | * :file:`django_messages/outbox.html` - This template lists the users outbox 31 | aka sent messages. 32 | * :file:`django_messages/trash.html` - This template lists the users trash. 33 | * :file:`django_messages/view.html` - This template renders a single message 34 | with all details. 35 | 36 | Additionally django-message provides a set of template for pinax-notifications. 37 | These template can be found in :file:`django_messages/templates/notification/` 38 | and can also be overwritten in one of your project's ``TEMPLATE_DIRS``. 39 | 40 | 41 | URL-conf 42 | -------- 43 | 44 | If you want to further customize how django-messages works it is possible to 45 | write your own url-conf instead of including ``django_messages.urls`` in your 46 | root url-conf. This not only allows changing the url structure but also allows 47 | modifying the kwargs passed to the views and therefore modifying some behaviour. 48 | 49 | Please note: If you provide your own url-conf, or urlpatterns directly embedded 50 | in your root url-conf, you shouldn't include ``django_messages.urls``. 51 | 52 | Three common customizations are described in more detail below. 53 | 54 | 55 | Modifying template names 56 | ~~~~~~~~~~~~~~~~~~~~~~~~ 57 | 58 | If overwriting templates in your project's ``TEMPLATE_DIRS`` does not provide 59 | enough freedom, you can change the names of the used templates by providing 60 | a `template_name` keyword argument to the views. Every view which renders a 61 | template accepts this keyword-argument. 62 | 63 | If you want to change the template the ``inbox`` view uses to ``my_inbox.html`` 64 | instead of the default ``django_messages/inbox.html`` you can use this line 65 | in your own url-conf:: 66 | 67 | url(r'^inbox/$', 68 | inbox, 69 | {'template_name': 'my_inbox.html',}, 70 | name='messages_inbox'), 71 | 72 | 73 | Modifying form classes 74 | ~~~~~~~~~~~~~~~~~~~~~~ 75 | 76 | If you want to use your own form for composing messages, for example to add 77 | new features, you can simply pass the form-class to the views via kwargs. 78 | Every view which renders a form accepts a `form_class` keyword argument to 79 | specify the form-class. 80 | 81 | If you want to use Your own ``MyComposeForm`` you can pass it to the view by 82 | using a line like the following in your own url-conf:: 83 | 84 | from somewhere import MyComposeForm 85 | ... 86 | url(r'^compose/$', 87 | compose, 88 | {'form_class': MyComposeForm,}, 89 | name='messages_compose'), 90 | 91 | 92 | Modifying success urls 93 | ~~~~~~~~~~~~~~~~~~~~~~ 94 | 95 | All views, which will redirect the user after a successfull action accept a 96 | `success_url` keyword argument to specify the destination url. The ``delete`` 97 | and ``undelete`` views will additionally check if a ``next`` parameter is 98 | provided in the querystring appended to the url. 99 | 100 | If you don't want to append the next target to the url, or want to change 101 | the redirecting behaviour of other views, you can pass a ``success_url`` 102 | parameter in your own url-conf, for example like this:: 103 | 104 | url(r'^delete/(?P[\d]+)/$', 105 | delete, 106 | {'success_url': '/profile/',}, 107 | name='messages_delete'), 108 | 109 | 110 | Adding recipient filter 111 | ~~~~~~~~~~~~~~~~~~~~~~~ 112 | 113 | To restrict allowed recipients a ``recipient_filter`` function can be added 114 | to the compose view. 115 | 116 | The following filter function makes sure messages can only be sent to active 117 | users:: 118 | 119 | lambda u: u.is_active 120 | 121 | To use this filter, integrate it into your url-conf:: 122 | 123 | url(r'^compose/$', 124 | compose, 125 | {'recipient_filter': lambda u: u.is_active}, 126 | name='messages_compose'), 127 | -------------------------------------------------------------------------------- /docs/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # django-messages documentation build configuration file, created by 4 | # sphinx-quickstart on Mon Jan 26 10:27:49 2009. 5 | # 6 | # This file is execfile()d with the current directory set to its containing dir. 7 | # 8 | # The contents of this file are pickled, so don't put values in the namespace 9 | # that aren't pickleable (module imports are okay, they're removed automatically). 10 | # 11 | # Note that not all possible configuration values are present in this 12 | # autogenerated file. 13 | # 14 | # All configuration values have a default; values that are commented out 15 | # serve to show the default. 16 | 17 | import sys, os 18 | 19 | # If your extensions are in another directory, add it here. If the directory 20 | # is relative to the documentation root, use os.path.abspath to make it 21 | # absolute, like shown here. 22 | #sys.path.append(os.path.abspath('.')) 23 | 24 | # General configuration 25 | # --------------------- 26 | 27 | # Add any Sphinx extension module names here, as strings. They can be extensions 28 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. 29 | extensions = [] 30 | 31 | # Add any paths that contain templates here, relative to this directory. 32 | templates_path = ['.templates'] 33 | 34 | # The suffix of source filenames. 35 | source_suffix = '.txt' 36 | 37 | # The encoding of source files. 38 | #source_encoding = 'utf-8' 39 | 40 | # The master toctree document. 41 | master_doc = 'index' 42 | 43 | # General information about the project. 44 | project = u'django-messages' 45 | copyright = u'2009-2014, Arne Brodowski' 46 | 47 | # The version info for the project you're documenting, acts as replacement for 48 | # |version| and |release|, also used in various other places throughout the 49 | # built documents. 50 | # 51 | # The short X.Y version. 52 | version = '0.6' 53 | # The full version, including alpha/beta/rc tags. 54 | release = '0.6.0' 55 | 56 | # The language for content autogenerated by Sphinx. Refer to documentation 57 | # for a list of supported languages. 58 | #language = None 59 | 60 | # There are two options for replacing |today|: either, you set today to some 61 | # non-false value, then it is used: 62 | #today = '' 63 | # Else, today_fmt is used as the format for a strftime call. 64 | #today_fmt = '%B %d, %Y' 65 | 66 | # List of documents that shouldn't be included in the build. 67 | unused_docs = ['README',] 68 | 69 | # List of directories, relative to source directory, that shouldn't be searched 70 | # for source files. 71 | exclude_trees = [] 72 | 73 | # The reST default role (used for this markup: `text`) to use for all documents. 74 | #default_role = None 75 | 76 | # If true, '()' will be appended to :func: etc. cross-reference text. 77 | #add_function_parentheses = True 78 | 79 | # If true, the current module name will be prepended to all description 80 | # unit titles (such as .. function::). 81 | #add_module_names = True 82 | 83 | # If true, sectionauthor and moduleauthor directives will be shown in the 84 | # output. They are ignored by default. 85 | #show_authors = False 86 | 87 | # The name of the Pygments (syntax highlighting) style to use. 88 | pygments_style = 'sphinx' 89 | 90 | 91 | # Options for HTML output 92 | # ----------------------- 93 | 94 | html_theme_path = ['.',] 95 | 96 | # The style sheet to use for HTML and HTML Help pages. A file of that name 97 | # must exist either in Sphinx' static/ path, or in one of the custom paths 98 | # given in html_static_path. 99 | # html_style = 'default.css' 100 | 101 | # The name for this set of Sphinx documents. If None, it defaults to 102 | # " v documentation". 103 | #html_title = None 104 | 105 | # A shorter title for the navigation bar. Default is the same as html_title. 106 | #html_short_title = None 107 | 108 | # The name of an image file (relative to this directory) to place at the top 109 | # of the sidebar. 110 | html_logo = './django-messages.png' 111 | 112 | # The name of an image file (within the static path) to use as favicon of the 113 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 114 | # pixels large. 115 | #html_favicon = None 116 | 117 | # Add any paths that contain custom static files (such as style sheets) here, 118 | # relative to this directory. They are copied after the builtin static files, 119 | # so a file named "default.css" will overwrite the builtin "default.css". 120 | html_static_path = ['.static'] 121 | 122 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, 123 | # using the given strftime format. 124 | #html_last_updated_fmt = '%b %d, %Y' 125 | 126 | # If true, SmartyPants will be used to convert quotes and dashes to 127 | # typographically correct entities. 128 | #html_use_smartypants = True 129 | 130 | # Custom sidebar templates, maps document names to template names. 131 | #html_sidebars = {} 132 | 133 | # Additional templates that should be rendered to pages, maps page names to 134 | # template names. 135 | #html_additional_pages = {} 136 | 137 | # If false, no module index is generated. 138 | html_use_modindex = False 139 | 140 | # If false, no index is generated. 141 | html_use_index = False 142 | 143 | # If true, the index is split into individual pages for each letter. 144 | #html_split_index = False 145 | 146 | # If true, the reST sources are included in the HTML build as _sources/. 147 | html_copy_source = False 148 | 149 | # If true, an OpenSearch description file will be output, and all pages will 150 | # contain a tag referring to it. The value of this option must be the 151 | # base URL from which the finished HTML is served. 152 | #html_use_opensearch = '' 153 | 154 | # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). 155 | #html_file_suffix = '' 156 | 157 | # Output file base name for HTML help builder. 158 | htmlhelp_basename = 'django-messagesdoc' 159 | 160 | 161 | # Options for LaTeX output 162 | # ------------------------ 163 | 164 | # The paper size ('letter' or 'a4'). 165 | #latex_paper_size = 'letter' 166 | 167 | # The font size ('10pt', '11pt' or '12pt'). 168 | #latex_font_size = '10pt' 169 | 170 | # Grouping the document tree into LaTeX files. List of tuples 171 | # (source start file, target name, title, author, document class [howto/manual]). 172 | latex_documents = [ 173 | ('index', 'django-messages.tex', ur'django-messages Documentation', 174 | ur'Arne Brodowski', 'manual'), 175 | ] 176 | 177 | # The name of an image file (relative to this directory) to place at the top of 178 | # the title page. 179 | #latex_logo = None 180 | 181 | # For "manual" documents, if this is true, then toplevel headings are parts, 182 | # not chapters. 183 | #latex_use_parts = False 184 | 185 | # Additional stuff for the LaTeX preamble. 186 | #latex_preamble = '' 187 | 188 | # Documents to append as an appendix to all manuals. 189 | #latex_appendices = [] 190 | 191 | # If false, no module index is generated. 192 | #latex_use_modindex = True 193 | -------------------------------------------------------------------------------- /django_messages/locale/zh_CN/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # django-messages in Simplify Chinese. 2 | # django-messages 简体中文. 3 | # Copyright (C) 2008 4 | # This file is distributed under the same license as the django-messages package. 5 | # Gene Wu , 2008. 6 | # 7 | #, fuzzy 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: PACKAGE VERSION\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2009-10-04 12:00-0000\n" 13 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 | "Last-Translator: GENE WU \n" 15 | "Language-Team: LANGUAGE \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: fields.py:39 21 | #, python-format 22 | msgid "The following usernames are incorrect: %(users)s" 23 | msgstr "以下用户名不正确: %(users)s" 24 | 25 | #: forms.py:23 models.py:53 templates\messages\outbox.html.py:7 26 | #: templates\messages\view.html.py:12 27 | msgid "Recipient" 28 | msgstr "收信人" 29 | 30 | #: forms.py:24 models.py:50 templates\messages\inbox.html.py:7 31 | #: templates\messages\outbox.html.py:7 templates\messages\trash.html.py:7 32 | #: templates\messages\view.html.py:6 33 | msgid "Subject" 34 | msgstr "主题" 35 | 36 | #: forms.py:25 models.py:51 37 | msgid "Body" 38 | msgstr "消息主体" 39 | 40 | #: management.py:10 41 | msgid "Message Received" 42 | msgstr "收到的消息" 43 | 44 | #: management.py:10 45 | msgid "you have received a message" 46 | msgstr "你受到了一条消息" 47 | 48 | #: management.py:11 49 | msgid "Message Sent" 50 | msgstr "消息已发出" 51 | 52 | #: management.py:11 53 | msgid "you have sent a message" 54 | msgstr "你已发出了一条消息" 55 | 56 | #: management.py:12 57 | msgid "Message Replied" 58 | msgstr "消息已回复" 59 | 60 | #: management.py:12 61 | msgid "you have replied to a message" 62 | msgstr "你已回复了一条消息" 63 | 64 | #: management.py:13 65 | msgid "Reply Received" 66 | msgstr "回复已收到" 67 | 68 | #: management.py:13 69 | msgid "you have received a reply to a message" 70 | msgstr "你已收到了消息的一条回复" 71 | 72 | #: management.py:14 73 | msgid "Message Deleted" 74 | msgstr "消息已删除" 75 | 76 | #: management.py:14 77 | msgid "you have deleted a message" 78 | msgstr "你已删除了一条消息" 79 | 80 | #: management.py:15 81 | msgid "Message Recovered" 82 | msgstr "消息已恢复" 83 | 84 | #: management.py:15 85 | msgid "you have undelete a message" 86 | msgstr "你已恢复了一条消息" 87 | 88 | #: models.py:52 templates\messages\inbox.html.py:7 89 | #: templates\messages\trash.html.py:7 templates\messages\view.html.py:8 90 | msgid "Sender" 91 | msgstr "发信人" 92 | 93 | #: models.py:54 94 | msgid "Parent message" 95 | msgstr "原消息" 96 | 97 | #: models.py:55 98 | msgid "sent at" 99 | msgstr "发送于" 100 | 101 | #: models.py:56 102 | msgid "read at" 103 | msgstr "阅读于" 104 | 105 | #: models.py:57 106 | msgid "replied at" 107 | msgstr "回复于" 108 | 109 | #: models.py:58 110 | msgid "Sender deleted at" 111 | msgstr "发信人删除于" 112 | 113 | #: models.py:59 114 | msgid "Recipient deleted at" 115 | msgstr "收件人删除于" 116 | 117 | #: models.py:89 118 | msgid "Message" 119 | msgstr "消息" 120 | 121 | #: models.py:90 122 | msgid "Messages" 123 | msgstr "消息" 124 | 125 | #: utils.py:29 126 | #, python-format 127 | msgid "New Message: %(subject)s" 128 | msgstr "新消息: %(subject)s" 129 | 130 | #: views.py:80 views.py:108 131 | msgid "Message successfully sent." 132 | msgstr "消息已成功发送。" 133 | 134 | #: views.py:114 135 | #, python-format 136 | msgid "" 137 | "%(sender)s wrote:\n" 138 | "%(body)s" 139 | msgstr "" 140 | "%(sender)s 写道:\n" 141 | "%(body)s" 142 | 143 | #: views.py:118 144 | #, python-format 145 | msgid "Re: %(subject)s" 146 | msgstr "回复: %(subject)s" 147 | 148 | #: views.py:154 149 | msgid "Message successfully deleted." 150 | msgstr "消息已成功删除。" 151 | 152 | #: views.py:181 153 | msgid "Message successfully recovered." 154 | msgstr "消息已成功恢复。" 155 | 156 | #: templates\messages\base.html.py:8 templates\messages\inbox.html.py:4 157 | #: templates\messages\new_message.html.py:10 158 | msgid "Inbox" 159 | msgstr "收件箱" 160 | 161 | #: templates\messages\base.html.py:9 templates\messages\outbox.html.py:4 162 | msgid "Sent Messages" 163 | msgstr "发送的消息" 164 | 165 | #: templates\messages\base.html.py:10 166 | msgid "New Message" 167 | msgstr "新消息" 168 | 169 | #: templates\messages\base.html.py:11 170 | msgid "Trash" 171 | msgstr "回收站" 172 | 173 | #: templates\messages\compose.html.py:4 174 | msgid "Compose Message" 175 | msgstr "撰写消息" 176 | 177 | #: templates\messages\compose.html.py:9 178 | msgid "Send" 179 | msgstr "发送" 180 | 181 | #: templates\messages\inbox.html.py:7 182 | msgid "Received" 183 | msgstr "受到于" 184 | 185 | #: templates\messages\inbox.html.py:7 templates\messages\outbox.html.py:7 186 | #: templates\messages\trash.html.py:7 187 | msgid "Action" 188 | msgstr "动作" 189 | 190 | #: templates\messages\inbox.html.py:19 191 | #: templates\messages\outbox.html.py:16 192 | #: templates\messages\trash.html.py:16 templates\messages\view.html.py:11 193 | msgid "DATETIME_FORMAT" 194 | msgstr "" 195 | 196 | #: templates\messages\inbox.html.py:20 197 | #: templates\messages\outbox.html.py:17 198 | msgid "delete" 199 | msgstr "删除" 200 | 201 | #: templates\messages\new_message.html.py:1 202 | #, python-format 203 | msgid "" 204 | "Hello %(recipient)s,\n" 205 | "\n" 206 | "you received a private message from %(sender)s with\n" 207 | "the following contents:" 208 | msgstr "" 209 | "%(recipient)s:\n" 210 | "\n" 211 | "你受到一条从%(sender)s发出的私人信息有\n" 212 | "以下内容:" 213 | 214 | #: templates\messages\new_message.html.py:9 215 | #, python-format 216 | msgid "Sent from %(site_url)s" 217 | msgstr "消息已从%(site_url)s发出" 218 | 219 | #: templates\messages\new_message.html.py:11 220 | #: templates\messages\view.html.py:18 221 | msgid "Reply" 222 | msgstr "回复" 223 | 224 | #: templates\messages\outbox.html.py:7 225 | msgid "Sent" 226 | msgstr "已发出" 227 | 228 | #: templates\messages\trash.html.py:4 229 | msgid "Deleted Messages" 230 | msgstr "删除的消息" 231 | 232 | #: templates\messages\trash.html.py:7 templates\messages\view.html.py:10 233 | msgid "Date" 234 | msgstr "日期" 235 | 236 | #: templates\messages\trash.html.py:17 237 | msgid "undelete" 238 | msgstr "恢复" 239 | 240 | #: templates\messages\trash.html.py:23 241 | msgid "" 242 | "Deleted Messages are removed from the trash at unregular intervals, don't " 243 | "rely on this feature for long-time storage." 244 | msgstr "" 245 | "删除的消息将定期删除,不要依赖此功能作为长期存储。" 246 | "" 247 | 248 | #: templates\messages\view.html.py:4 249 | msgid "View Message" 250 | msgstr "浏览消息" 251 | 252 | #: templates\messages\view.html.py:20 253 | msgid "Delete" 254 | msgstr "删除" 255 | 256 | #: templates\notification\messages_deleted\notice.html.py:1 257 | #, python-format 258 | msgid "" 259 | "You have deleted the message %(message)s." 260 | msgstr "你已删除了消息%(message)s." 261 | 262 | #: templates\notification\messages_received\notice.html.py:2 263 | #, python-format 264 | msgid "" 265 | "You have received the message %(message)s " 266 | "from %(message_sender)s." 267 | msgstr "" 268 | "你已收到%(message_sender)s的消息%(message)s。" 269 | "" 270 | 271 | #: templates\notification\messages_recovered\notice.html.py:1 272 | #, python-format 273 | msgid "" 274 | "You have recovered the message %(message)s." 275 | msgstr "你已恢复了消息%(message)s." 276 | 277 | #: templates\notification\messages_replied\notice.html.py:2 278 | #, python-format 279 | msgid "" 280 | "You have replied to %(message_parent_msg)s " 281 | "from %(message_recipient)s." 282 | msgstr "" 283 | "你已回复了%(message_recipient)s.发出的消息%(message_parent_msg)s" 284 | "" 285 | 286 | #: templates\notification\messages_reply_received\notice.html.py:2 287 | #, python-format 288 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 289 | msgstr "" 290 | "%(message_sender)s已回复你发出的消息:%(message_parent_msg)s." 291 | 292 | #: templates\notification\messages_sent\notice.html.py:2 293 | #, python-format 294 | msgid "" 295 | "You have sent the message %(message)s to %" 296 | "(message_recipient)s." 297 | msgstr "" 298 | "你已发送消息%(message)s到%" 299 | "(message_recipient)s." 300 | -------------------------------------------------------------------------------- /django_messages/locale/ko/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # django-messages translation for Korean. 2 | # Copyright (C) 2012 Jeong YunWon 3 | # This file is distributed under the same license as the django-messages package. 4 | # Jeong YunWon , 2012. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: messages\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 11 | "PO-Revision-Date: 2012-02-04 10:58+0900\n" 12 | "Last-Translator: Jeong YunWon \n" 13 | "Language-Team: Jeong YunWon \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Poedit-Language: Korean\n" 18 | 19 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 20 | #: templates/messages/view.html:12 21 | msgid "Recipient" 22 | msgstr "받는이" 23 | 24 | #: admin.py:38 models.py:88 25 | msgid "Message" 26 | msgstr "쪽지" 27 | 28 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 29 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 30 | #: templates/messages/view.html:6 31 | msgid "Subject" 32 | msgstr "제목" 33 | 34 | #: forms.py:22 models.py:50 35 | msgid "Body" 36 | msgstr "내용" 37 | 38 | #: management.py:9 39 | msgid "Message Received" 40 | msgstr "받은 시각" 41 | 42 | #: management.py:9 43 | msgid "you have received a message" 44 | msgstr "쪽지를 받았습니다" 45 | 46 | #: management.py:10 47 | msgid "Message Sent" 48 | msgstr "쪽지 보냄" 49 | 50 | #: management.py:10 51 | msgid "you have sent a message" 52 | msgstr "쪽지를 보냈습니다" 53 | 54 | #: management.py:11 55 | msgid "Message Replied" 56 | msgstr "쪽지 답장" 57 | 58 | #: management.py:11 59 | msgid "you have replied to a message" 60 | msgstr "쪽지에 답장하였습니다" 61 | 62 | #: management.py:12 63 | msgid "Reply Received" 64 | msgstr "답장 받음" 65 | 66 | #: management.py:12 67 | msgid "you have received a reply to a message" 68 | msgstr "쪽지에 답장을 받았습니다" 69 | 70 | #: management.py:13 71 | msgid "Message Deleted" 72 | msgstr "쪽지 지움" 73 | 74 | #: management.py:13 75 | msgid "you have deleted a message" 76 | msgstr "쪽지를 지웠습니다" 77 | 78 | #: management.py:14 79 | msgid "Message Recovered" 80 | msgstr "쪽지 되살림" 81 | 82 | #: management.py:14 83 | msgid "you have undeleted a message" 84 | msgstr "쪽지를 되살렸습니다" 85 | 86 | #: models.py:51 templates/messages/inbox.html:7 87 | #: templates/messages/trash.html:7 templates/messages/view.html:8 88 | msgid "Sender" 89 | msgstr "보낸이" 90 | 91 | #: models.py:53 92 | msgid "Parent message" 93 | msgstr "이전 쪽지" 94 | 95 | #: models.py:54 96 | msgid "sent at" 97 | msgstr "보낸 시각:" 98 | 99 | #: models.py:55 100 | msgid "read at" 101 | msgstr "읽은 시각:" 102 | 103 | #: models.py:56 104 | msgid "replied at" 105 | msgstr "답장 시각:" 106 | 107 | #: models.py:57 108 | msgid "Sender deleted at" 109 | msgstr "보낸이가 지운 시각:" 110 | 111 | #: models.py:58 112 | msgid "Recipient deleted at" 113 | msgstr "받는이가 지운 시각:" 114 | 115 | #: models.py:89 116 | msgid "Messages" 117 | msgstr "쪽지" 118 | 119 | #: views.py:78 views.py:112 120 | msgid "Message successfully sent." 121 | msgstr "쪽지를 보냈습니다." 122 | 123 | #: views.py:118 124 | #, python-format 125 | msgid "" 126 | "%(sender)s wrote:\n" 127 | "%(body)s" 128 | msgstr "" 129 | "%(sender)s 님의 글:\n" 130 | "%(body)s" 131 | 132 | #: views.py:122 133 | #, python-format 134 | msgid "Re: %(subject)s" 135 | msgstr "Re: %(subject)s" 136 | 137 | #: views.py:158 138 | msgid "Message successfully deleted." 139 | msgstr "쪽지를 지웠습니다." 140 | 141 | #: views.py:185 142 | msgid "Message successfully recovered." 143 | msgstr "쪽지를 되살렸습니다." 144 | 145 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 146 | #: templates/messages/new_message.html:10 147 | msgid "Inbox" 148 | msgstr "받은 편지함" 149 | 150 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 151 | msgid "Sent Messages" 152 | msgstr "보낸 편지함" 153 | 154 | #: templates/messages/base.html:10 155 | msgid "New Message" 156 | msgstr "새 쪽지" 157 | 158 | #: templates/messages/base.html:11 159 | msgid "Trash" 160 | msgstr "휴지통" 161 | 162 | #: templates/messages/compose.html:4 163 | msgid "Compose Message" 164 | msgstr "새 쪽지 쓰기" 165 | 166 | #: templates/messages/compose.html:9 167 | msgid "Send" 168 | msgstr "보내기" 169 | 170 | #: templates/messages/inbox.html:7 171 | msgid "Received" 172 | msgstr "받은 시각" 173 | 174 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 175 | #: templates/messages/trash.html:7 176 | msgid "Action" 177 | msgstr "할일" 178 | 179 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 180 | #: templates/messages/trash.html:16 templates/messages/view.html:11 181 | msgid "DATETIME_FORMAT" 182 | msgstr "Y-m-d G:i" 183 | 184 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 185 | msgid "delete" 186 | msgstr "지우기" 187 | 188 | #: templates/messages/new_message.html:9 189 | #, python-format 190 | msgid "Sent from %(site_url)s" 191 | msgstr "%(site_url)s 에서 보냄" 192 | 193 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 194 | msgid "Reply" 195 | msgstr "답장" 196 | 197 | #: templates/messages/outbox.html:7 198 | msgid "Sent" 199 | msgstr "보낸 시각" 200 | 201 | #: templates/messages/trash.html:4 202 | msgid "Deleted Messages" 203 | msgstr "지운 쪽지" 204 | 205 | #: templates/messages/trash.html:7 templates/messages/view.html:10 206 | msgid "Date" 207 | msgstr "날짜" 208 | 209 | #: templates/messages/trash.html:17 210 | msgid "undelete" 211 | msgstr "되살리기" 212 | 213 | #: templates/messages/trash.html:23 214 | msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." 215 | msgstr "지운 쪽지는 비정기적으로 휴지통에서 완전히 삭제됩니다. 오래 보관해야 하는 쪽지에 이 기능을 사용하지 마세요." 216 | 217 | #: templates/messages/view.html:4 218 | msgid "View Message" 219 | msgstr "쪽지 보기" 220 | 221 | #: templates/messages/view.html:20 222 | msgid "Delete" 223 | msgstr "지우기" 224 | 225 | #: templates/notification/messages_deleted/notice.html:1 226 | #, python-format 227 | msgid "You have deleted the message %(message)s." 228 | msgstr "%(message)s 지윘습니다." 229 | 230 | #: templates/notification/messages_recovered/notice.html:1 231 | #, python-format 232 | msgid "You have recovered the message %(message)s." 233 | msgstr "%(message)s 되살렸습니다." 234 | 235 | #: templates/notification/messages_received/notice.html:2 236 | #, python-format 237 | msgid "You have received the message %(message)s from %(message_sender)s." 238 | msgstr "%(message_sender)s 님에게 %(message)s 받았습니다." 239 | 240 | #: templates/notification/messages_reply_received/notice.html:2 241 | #, python-format 242 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 243 | msgstr "%(message_sender)s 님이 %(message_parent_msg)s 에 답장을 보냈습니다." 244 | 245 | #: templates/notification/messages_sent/notice.html:2 246 | #, python-format 247 | msgid "You have sent the message %(message)s to %(message_recipient)s." 248 | msgstr "%(message_recipient)s 님에게 %(message)s 보냈습니다." 249 | 250 | #: templates/notification/messages_replied/notice.html:2 251 | #, python-format 252 | msgid "You have replied to %(message_parent_msg)s from %(message_recipient)s." 253 | msgstr "%(message_recipient)s 님의 %(message_parent_msg)s 에 답장하였습니다." 254 | 255 | #: templates/messages/new_message.html:1 256 | #, python-format 257 | msgid "" 258 | "Hello %(recipient)s,\n" 259 | "\n" 260 | "you received a private message from %(sender)s with\n" 261 | "the following contents:" 262 | msgstr "" 263 | "%(recipient)s 님\n" 264 | "\n" 265 | "%(sender)s 님께 다음 내용으로 쪽지를 받았습니다:" 266 | 267 | #: admin.py:16 268 | msgid "Creates the message optionally for all users or a group of users." 269 | msgstr "Creates the message optionally for all users or a group of users." 270 | 271 | #: admin.py:15 272 | msgid "group" 273 | msgstr "그룹" 274 | 275 | #: admin.py:23 276 | msgid "All users" 277 | msgstr "모든 사용자" 278 | 279 | #: fields.py:53 280 | #, python-format 281 | msgid "The following usernames are incorrect: %(users)s" 282 | msgstr "올바르지 않은 사용자 이름을 입력하였습니다: %(users)s" 283 | 284 | #: admin.py:45 285 | msgid "Date/time" 286 | msgstr "날짜/시각" 287 | 288 | #: utils.py:27 289 | #, python-format 290 | msgid "New Message: %(subject)s" 291 | msgstr "새 쪽지: %(subject)s" 292 | 293 | -------------------------------------------------------------------------------- /django_messages/locale/pl/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 20 | #: templates/messages/view.html:12 21 | msgid "Recipient" 22 | msgstr "Odbiorca" 23 | 24 | #: admin.py:15 25 | msgid "group" 26 | msgstr "" 27 | 28 | #: admin.py:16 29 | msgid "Creates the message optionally for all users or a group of users." 30 | msgstr "" 31 | 32 | #: admin.py:23 33 | msgid "All users" 34 | msgstr "" 35 | 36 | #: admin.py:38 models.py:88 37 | msgid "Message" 38 | msgstr "Wiadomość" 39 | 40 | #: admin.py:45 41 | #, fuzzy 42 | msgid "Date/time" 43 | msgstr "Data" 44 | 45 | #: fields.py:53 46 | #, python-format 47 | msgid "The following usernames are incorrect: %(users)s" 48 | msgstr "Te nazwy użytkowników są niewłaściwe: %(users)s" 49 | 50 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 51 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 52 | #: templates/messages/view.html:6 53 | msgid "Subject" 54 | msgstr "Temat" 55 | 56 | #: forms.py:22 models.py:50 57 | msgid "Body" 58 | msgstr "Treść" 59 | 60 | #: management.py:9 61 | msgid "Message Received" 62 | msgstr "Wiadomość otrzymana" 63 | 64 | #: management.py:9 65 | msgid "you have received a message" 66 | msgstr "otrzymałeś wiadomość" 67 | 68 | #: management.py:10 69 | msgid "Message Sent" 70 | msgstr "Wiadomość wysłana" 71 | 72 | #: management.py:10 73 | msgid "you have sent a message" 74 | msgstr "wysłałeś wiadomość" 75 | 76 | #: management.py:11 77 | msgid "Message Replied" 78 | msgstr "Odpowiedź wysłana" 79 | 80 | #: management.py:11 81 | msgid "you have replied to a message" 82 | msgstr "odpowiedziałeś na wiadomość" 83 | 84 | #: management.py:12 85 | msgid "Reply Received" 86 | msgstr "Odpowiedź otrzymana" 87 | 88 | #: management.py:12 89 | msgid "you have received a reply to a message" 90 | msgstr "Dostałeś odpowiedź na wiadomość" 91 | 92 | #: management.py:13 93 | msgid "Message Deleted" 94 | msgstr "Wiadomość skasowana" 95 | 96 | #: management.py:13 97 | msgid "you have deleted a message" 98 | msgstr "skasowałeś wiadomość" 99 | 100 | #: management.py:14 101 | msgid "Message Recovered" 102 | msgstr "Wiadomość odzyskana" 103 | 104 | #: management.py:14 105 | msgid "you have undeleted a message" 106 | msgstr "Odzyskałeś skasowaną wiadomość" 107 | 108 | #: models.py:51 templates/messages/inbox.html:7 109 | #: templates/messages/trash.html:7 templates/messages/view.html:8 110 | msgid "Sender" 111 | msgstr "Nadawca" 112 | 113 | #: models.py:53 114 | msgid "Parent message" 115 | msgstr "Poprzednia wiadomość" 116 | 117 | #: models.py:54 118 | msgid "sent at" 119 | msgstr "wysłano" 120 | 121 | #: models.py:55 122 | msgid "read at" 123 | msgstr "przeczytano" 124 | 125 | #: models.py:56 126 | msgid "replied at" 127 | msgstr "odpowiedziano" 128 | 129 | #: models.py:57 130 | msgid "Sender deleted at" 131 | msgstr "Nadawcę skasowano" 132 | 133 | #: models.py:58 134 | msgid "Recipient deleted at" 135 | msgstr "Adresata skasowano" 136 | 137 | #: models.py:89 138 | msgid "Messages" 139 | msgstr "Wiadomości" 140 | 141 | #: utils.py:27 142 | #, python-format 143 | msgid "New Message: %(subject)s" 144 | msgstr "Nowa wiadomość: %(subject)s" 145 | 146 | #: views.py:78 views.py:112 147 | msgid "Message successfully sent." 148 | msgstr "Wiadomość wysłana" 149 | 150 | #: views.py:118 151 | #, python-format 152 | msgid "" 153 | "%(sender)s wrote:\n" 154 | "%(body)s" 155 | msgstr "" 156 | "%(sender)s napisał:\n" 157 | "%(body)s" 158 | 159 | #: views.py:122 160 | #, python-format 161 | msgid "Re: %(subject)s" 162 | msgstr "Odp: %(subject)s" 163 | 164 | #: views.py:158 165 | msgid "Message successfully deleted." 166 | msgstr "Wiadomość skasowana" 167 | 168 | #: views.py:185 169 | msgid "Message successfully recovered." 170 | msgstr "Wiadomość odzyskana" 171 | 172 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 173 | #: templates/messages/new_message.html:10 174 | msgid "Inbox" 175 | msgstr "Wiadomości otrzymane" 176 | 177 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 178 | msgid "Sent Messages" 179 | msgstr "Wiadomości wysłane" 180 | 181 | #: templates/messages/base.html:10 182 | msgid "New Message" 183 | msgstr "Nowa wiadomość" 184 | 185 | #: templates/messages/base.html:11 186 | msgid "Trash" 187 | msgstr "Kosz" 188 | 189 | #: templates/messages/compose.html:4 190 | msgid "Compose Message" 191 | msgstr "Stwórz wiadomość" 192 | 193 | #: templates/messages/compose.html:9 194 | msgid "Send" 195 | msgstr "Wyślij" 196 | 197 | #: templates/messages/inbox.html:7 198 | msgid "Received" 199 | msgstr "Otrzymane" 200 | 201 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 202 | #: templates/messages/trash.html:7 203 | msgid "Action" 204 | msgstr "akcja" 205 | 206 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 207 | #: templates/messages/trash.html:16 templates/messages/view.html:11 208 | msgid "DATETIME_FORMAT" 209 | msgstr "" 210 | 211 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 212 | msgid "delete" 213 | msgstr "usuń" 214 | 215 | #: templates/messages/new_message.html:1 216 | #, python-format 217 | msgid "" 218 | "Hello %(recipient)s,\n" 219 | "\n" 220 | "you received a private message from %(sender)s with\n" 221 | "the following contents:" 222 | msgstr "" 223 | "Witaj, %(recipient)s,\n" 224 | "\n" 225 | "otrzymałeś od użytkownika %(sender)s wiadomość\n" 226 | "o następującej treści:" 227 | 228 | #: templates/messages/new_message.html:9 229 | #, python-format 230 | msgid "Sent from %(site_url)s" 231 | msgstr "Wysłane z adresu %(site_url)s" 232 | 233 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 234 | msgid "Reply" 235 | msgstr "Odpowiedz" 236 | 237 | #: templates/messages/outbox.html:7 238 | msgid "Sent" 239 | msgstr "Wiadomości wysłane" 240 | 241 | #: templates/messages/trash.html:4 242 | msgid "Deleted Messages" 243 | msgstr "Wiadomości skasowane" 244 | 245 | #: templates/messages/trash.html:7 templates/messages/view.html:10 246 | msgid "Date" 247 | msgstr "Data" 248 | 249 | #: templates/messages/trash.html:17 250 | msgid "undelete" 251 | msgstr "odzyskaj" 252 | 253 | #: templates/messages/trash.html:23 254 | msgid "" 255 | "Deleted Messages are removed from the trash at unregular intervals, don't " 256 | "rely on this feature for long-time storage." 257 | msgstr "" 258 | "Wiadomości są usuwane z Kosza nieregularnie. Nie licz, że zastaniesz je " 259 | "tutaj po dłuższym czasie" 260 | 261 | #: templates/messages/view.html:4 262 | msgid "View Message" 263 | msgstr "Zobacz wiadomość" 264 | 265 | #: templates/messages/view.html:20 266 | msgid "Delete" 267 | msgstr "Usuń" 268 | 269 | #: templates/notification/messages_deleted/notice.html:1 270 | #, python-format 271 | msgid "" 272 | "You have deleted the message %(message)s." 273 | msgstr "" 274 | 275 | #: templates/notification/messages_received/notice.html:2 276 | #, python-format 277 | msgid "" 278 | "You have received the message %(message)s " 279 | "from %(message_sender)s." 280 | msgstr "" 281 | 282 | #: templates/notification/messages_recovered/notice.html:1 283 | #, python-format 284 | msgid "" 285 | "You have recovered the message %(message)s." 286 | msgstr "" 287 | 288 | #: templates/notification/messages_replied/notice.html:2 289 | #, python-format 290 | msgid "" 291 | "You have replied to %(message_parent_msg)s " 292 | "from %(message_recipient)s." 293 | msgstr "" 294 | 295 | #: templates/notification/messages_reply_received/notice.html:2 296 | #, python-format 297 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 298 | msgstr "" 299 | 300 | #: templates/notification/messages_sent/notice.html:2 301 | #, python-format 302 | msgid "" 303 | "You have sent the message %(message)s to %" 304 | "(message_recipient)s." 305 | msgstr "" 306 | -------------------------------------------------------------------------------- /django_messages/locale/es_AR/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # django-messages in Spanish Argentina. 2 | # django-messages en Español Argentina. 3 | # Copyright (C) 2008 4 | # This file is distributed under the same license as the django-messages package. 5 | # Cecilia Lorena Puccinelli , 2008. 6 | # Juan José Conti , 2008. 7 | # 8 | #, fuzzy 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: PACKAGE VERSION\n" 12 | "Report-Msgid-Bugs-To: \n" 13 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 14 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 15 | "Last-Translator: FULL NAME \n" 16 | "Language-Team: LANGUAGE \n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | 21 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 22 | #: templates/messages/view.html:12 23 | msgid "Recipient" 24 | msgstr "Destinatario" 25 | 26 | #: admin.py:15 27 | msgid "group" 28 | msgstr "" 29 | 30 | #: admin.py:16 31 | msgid "Creates the message optionally for all users or a group of users." 32 | msgstr "" 33 | 34 | #: admin.py:23 35 | msgid "All users" 36 | msgstr "" 37 | 38 | #: admin.py:38 models.py:88 39 | msgid "Message" 40 | msgstr "Mensaje" 41 | 42 | #: admin.py:45 43 | #, fuzzy 44 | msgid "Date/time" 45 | msgstr "Fecha" 46 | 47 | #: fields.py:53 48 | #, python-format 49 | msgid "The following usernames are incorrect: %(users)s" 50 | msgstr "" 51 | 52 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 53 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 54 | #: templates/messages/view.html:6 55 | msgid "Subject" 56 | msgstr "Asunto" 57 | 58 | #: forms.py:22 models.py:50 59 | msgid "Body" 60 | msgstr "Cuerpo" 61 | 62 | #: management.py:9 63 | msgid "Message Received" 64 | msgstr "Mensaje Recibido" 65 | 66 | #: management.py:9 67 | msgid "you have received a message" 68 | msgstr "ha recibido un mensaje" 69 | 70 | #: management.py:10 71 | msgid "Message Sent" 72 | msgstr "Mensaje Enviado" 73 | 74 | #: management.py:10 75 | msgid "you have sent a message" 76 | msgstr "ha enviado un mensaje" 77 | 78 | #: management.py:11 79 | msgid "Message Replied" 80 | msgstr "Mensaje Respondido" 81 | 82 | #: management.py:11 83 | msgid "you have replied to a message" 84 | msgstr "ha respondido un mensaje" 85 | 86 | #: management.py:12 87 | msgid "Reply Received" 88 | msgstr "Respuesta Recibida" 89 | 90 | #: management.py:12 91 | msgid "you have received a reply to a message" 92 | msgstr "ha recibido una respuesta a un mensaje" 93 | 94 | #: management.py:13 95 | msgid "Message Deleted" 96 | msgstr "Mensaje Eliminado" 97 | 98 | #: management.py:13 99 | msgid "you have deleted a message" 100 | msgstr "ha eliminado un mensaje" 101 | 102 | #: management.py:14 103 | msgid "Message Recovered" 104 | msgstr "Mensaje Recuperado" 105 | 106 | #: management.py:14 107 | msgid "you have undeleted a message" 108 | msgstr "ha recuperado un mensaje" 109 | 110 | #: models.py:51 templates/messages/inbox.html:7 111 | #: templates/messages/trash.html:7 templates/messages/view.html:8 112 | msgid "Sender" 113 | msgstr "Emisor" 114 | 115 | #: models.py:53 116 | msgid "Parent message" 117 | msgstr "Mensaje padre" 118 | 119 | #: models.py:54 120 | msgid "sent at" 121 | msgstr "enviado" 122 | 123 | #: models.py:55 124 | msgid "read at" 125 | msgstr "leído" 126 | 127 | #: models.py:56 128 | msgid "replied at" 129 | msgstr "respondido" 130 | 131 | #: models.py:57 132 | msgid "Sender deleted at" 133 | msgstr "Emisor borrado" 134 | 135 | #: models.py:58 136 | msgid "Recipient deleted at" 137 | msgstr "Destinatario borrado" 138 | 139 | #: models.py:89 140 | msgid "Messages" 141 | msgstr "Mensajes" 142 | 143 | #: utils.py:27 144 | #, fuzzy, python-format 145 | msgid "New Message: %(subject)s" 146 | msgstr "Re: %(subject)s" 147 | 148 | #: views.py:78 views.py:112 149 | msgid "Message successfully sent." 150 | msgstr "Se envió con éxito el mensaje." 151 | 152 | #: views.py:118 153 | #, python-format 154 | msgid "" 155 | "%(sender)s wrote:\n" 156 | "%(body)s" 157 | msgstr "" 158 | "%(sender)s escribió:\n" 159 | "%(body)s" 160 | 161 | #: views.py:122 162 | #, python-format 163 | msgid "Re: %(subject)s" 164 | msgstr "Re: %(subject)s" 165 | 166 | #: views.py:158 167 | msgid "Message successfully deleted." 168 | msgstr "Se eliminó con éxito el mensaje." 169 | 170 | #: views.py:185 171 | msgid "Message successfully recovered." 172 | msgstr "Se recuperó con éxito el mensaje." 173 | 174 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 175 | #: templates/messages/new_message.html:10 176 | msgid "Inbox" 177 | msgstr "Bandeja de entrada" 178 | 179 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 180 | msgid "Sent Messages" 181 | msgstr "Mensajes Enviados" 182 | 183 | #: templates/messages/base.html:10 184 | msgid "New Message" 185 | msgstr "Nuevo Mensaje" 186 | 187 | #: templates/messages/base.html:11 188 | msgid "Trash" 189 | msgstr "Papelera" 190 | 191 | #: templates/messages/compose.html:4 192 | msgid "Compose Message" 193 | msgstr "Redactar Mensaje" 194 | 195 | #: templates/messages/compose.html:9 196 | msgid "Send" 197 | msgstr "Enviar" 198 | 199 | #: templates/messages/inbox.html:7 200 | msgid "Received" 201 | msgstr "Recibido" 202 | 203 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 204 | #: templates/messages/trash.html:7 205 | msgid "Action" 206 | msgstr "Acción" 207 | 208 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 209 | #: templates/messages/trash.html:16 templates/messages/view.html:11 210 | msgid "DATETIME_FORMAT" 211 | msgstr "" 212 | 213 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 214 | msgid "delete" 215 | msgstr "eliminar" 216 | 217 | #: templates/messages/new_message.html:1 218 | #, python-format 219 | msgid "" 220 | "Hello %(recipient)s,\n" 221 | "\n" 222 | "you received a private message from %(sender)s with\n" 223 | "the following contents:" 224 | msgstr "" 225 | 226 | #: templates/messages/new_message.html:9 227 | #, python-format 228 | msgid "Sent from %(site_url)s" 229 | msgstr "Enviado desde %(site_url)s" 230 | 231 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 232 | msgid "Reply" 233 | msgstr "Responder" 234 | 235 | #: templates/messages/outbox.html:7 236 | msgid "Sent" 237 | msgstr "Enviado" 238 | 239 | #: templates/messages/trash.html:4 240 | msgid "Deleted Messages" 241 | msgstr "Mensajes Eliminados" 242 | 243 | #: templates/messages/trash.html:7 templates/messages/view.html:10 244 | msgid "Date" 245 | msgstr "Fecha" 246 | 247 | #: templates/messages/trash.html:17 248 | msgid "undelete" 249 | msgstr "recuperar" 250 | 251 | #: templates/messages/trash.html:23 252 | msgid "" 253 | "Deleted Messages are removed from the trash at unregular intervals, don't " 254 | "rely on this feature for long-time storage." 255 | msgstr "" 256 | "Los Mensajes Eliminados son borrados de la Papelera a intérvalos irregulares," 257 | "no se confíe en esta característica para almacenamiento a largo plazo." 258 | 259 | #: templates/messages/view.html:4 260 | msgid "View Message" 261 | msgstr "Ver Mensaje" 262 | 263 | #: templates/messages/view.html:20 264 | msgid "Delete" 265 | msgstr "Eliminar" 266 | 267 | #: templates/notification/messages_deleted/notice.html:1 268 | #, fuzzy, python-format 269 | msgid "" 270 | "You have deleted the message %(message)s." 271 | msgstr "ha eliminado el mensaje %(message)s." 272 | 273 | #: templates/notification/messages_received/notice.html:2 274 | #, fuzzy, python-format 275 | msgid "" 276 | "You have received the message %(message)s " 277 | "from %(message_sender)s." 278 | msgstr "ha recibido un mensaje de %(sender)s." 279 | 280 | #: templates/notification/messages_recovered/notice.html:1 281 | #, fuzzy, python-format 282 | msgid "" 283 | "You have recovered the message %(message)s." 284 | msgstr "ha recuperado el mensaje %(message)s." 285 | 286 | #: templates/notification/messages_replied/notice.html:2 287 | #, fuzzy, python-format 288 | msgid "" 289 | "You have replied to %(message_parent_msg)s " 290 | "from %(message_recipient)s." 291 | msgstr "ha respondido a %(message)s de %(recipient)s." 292 | 293 | #: templates/notification/messages_reply_received/notice.html:2 294 | #, fuzzy, python-format 295 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 296 | msgstr "%(sender)s le ha enviado una respuesta a %(message)s." 297 | 298 | #: templates/notification/messages_sent/notice.html:2 299 | #, python-format 300 | msgid "" 301 | "You have sent the message %(message)s to %" 302 | "(message_recipient)s." 303 | msgstr "" 304 | 305 | #~ msgid "There is no user with this username." 306 | #~ msgstr "No hay ningún usuario con ese nombre." 307 | 308 | #~ msgid "you have sent a message to %(recipient)s." 309 | #~ msgstr "ha enviado un mensaje a %(recipient)s." 310 | 311 | #~ msgid "New Message:" 312 | #~ msgstr "Mensaje Nuevo" 313 | -------------------------------------------------------------------------------- /django_messages/locale/el/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 11 | "PO-Revision-Date: 2009-09-08 15:50+0200\n" 12 | "Last-Translator: markos \n" 13 | "Language-Team: Markos Gogoulos \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | 18 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 19 | #: templates/messages/view.html:12 20 | msgid "Recipient" 21 | msgstr "Αποδέκτης" 22 | 23 | #: admin.py:15 24 | msgid "group" 25 | msgstr "ομάδα" 26 | 27 | #: admin.py:16 28 | msgid "Creates the message optionally for all users or a group of users." 29 | msgstr "Δημιουργεί το μήνυμα προαιρετικά για όλους τους χρήστες ή για ομάδα χρηστών." 30 | 31 | #: admin.py:23 32 | msgid "All users" 33 | msgstr "Όλοι οι χρήστες" 34 | 35 | #: admin.py:38 models.py:88 36 | msgid "Message" 37 | msgstr "Μήνυμα" 38 | 39 | #: admin.py:45 40 | msgid "Date/time" 41 | msgstr "Ημερομηνία/Ώρα" 42 | 43 | #: fields.py:53 44 | #, python-format 45 | msgid "The following usernames are incorrect: %(users)s" 46 | msgstr "Τα παρακάτω usernames δεν είναι σωστά: %(users)s" 47 | 48 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 49 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 50 | #: templates/messages/view.html:6 51 | msgid "Subject" 52 | msgstr "Θέμα" 53 | 54 | #: forms.py:22 models.py:50 55 | msgid "Body" 56 | msgstr "Κυρίως μέρος" 57 | 58 | #: management.py:9 59 | msgid "Message Received" 60 | msgstr "Το μήνυμα ελήφθη " 61 | 62 | #: management.py:9 63 | msgid "you have received a message" 64 | msgstr "έχετε λάβει ένα μήνυμα" 65 | 66 | #: management.py:10 67 | msgid "Message Sent" 68 | msgstr "Το μήνυμα εστάλει" 69 | 70 | #: management.py:10 71 | msgid "you have sent a message" 72 | msgstr "έχετε στείλει ένα μήνυμα" 73 | 74 | #: management.py:11 75 | msgid "Message Replied" 76 | msgstr "Το μήνυμα έχει απαντηθεί" 77 | 78 | #: management.py:11 79 | msgid "you have replied to a message" 80 | msgstr "έχετε απαντήσει σε ένα μήνυμα" 81 | 82 | #: management.py:12 83 | msgid "Reply Received" 84 | msgstr "Η απάντηση ελήφθη" 85 | 86 | #: management.py:12 87 | msgid "you have received a reply to a message" 88 | msgstr "έχετε λάβει μια απάντηση σε ένα μήνυμα" 89 | 90 | #: management.py:13 91 | msgid "Message Deleted" 92 | msgstr "Το μήνυμα έχει διαγραφεί" 93 | 94 | #: management.py:13 95 | msgid "you have deleted a message" 96 | msgstr "διαγράψατε ένα μήνυμα" 97 | 98 | #: management.py:14 99 | msgid "Message Recovered" 100 | msgstr "Το μήνυμα έχει ανακληθεί" 101 | 102 | #: management.py:14 103 | msgid "you have undeleted a message" 104 | msgstr "έχετε ανακτήσει ένα μήνυμα" 105 | 106 | #: models.py:51 templates/messages/inbox.html:7 107 | #: templates/messages/trash.html:7 templates/messages/view.html:8 108 | msgid "Sender" 109 | msgstr "Αποστολέας" 110 | 111 | #: models.py:53 112 | msgid "Parent message" 113 | msgstr "Μήνυμα Γονέας" 114 | 115 | #: models.py:54 116 | msgid "sent at" 117 | msgstr "εστάλει στις" 118 | 119 | #: models.py:55 120 | msgid "read at" 121 | msgstr "αναγνώστηκε στις" 122 | 123 | #: models.py:56 124 | msgid "replied at" 125 | msgstr "απαντήθηκε στις" 126 | 127 | #: models.py:57 128 | msgid "Sender deleted at" 129 | msgstr "Ο αποστολέας το διέγραψε στις" 130 | 131 | #: models.py:58 132 | msgid "Recipient deleted at" 133 | msgstr "Ο αποδέκτης το διέγραψε στις" 134 | 135 | #: models.py:89 136 | msgid "Messages" 137 | msgstr "Μηνύματα" 138 | 139 | #: utils.py:27 140 | #, python-format 141 | msgid "New Message: %(subject)s" 142 | msgstr "καινούργιο μήνυμα: %(subject)s" 143 | 144 | #: views.py:78 views.py:112 145 | msgid "Message successfully sent." 146 | msgstr "Το μήνυμα έχει αποσταλεί με επιτυχία." 147 | 148 | #: views.py:118 149 | #, python-format 150 | msgid "" 151 | "%(sender)s wrote:\n" 152 | "%(body)s" 153 | msgstr "" 154 | "%(sender)s έγραψε:\n" 155 | "%(body)s" 156 | 157 | #: views.py:122 158 | #, python-format 159 | msgid "Re: %(subject)s" 160 | msgstr "Re: %(subject)s" 161 | 162 | #: views.py:158 163 | msgid "Message successfully deleted." 164 | msgstr "Το μήνυμα διεγράφει." 165 | 166 | #: views.py:185 167 | msgid "Message successfully recovered." 168 | msgstr "Το μήνυμα έχει ανακληθεί επιτυχημένα" 169 | 170 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 171 | #: templates/messages/new_message.html:10 172 | msgid "Inbox" 173 | msgstr "Εισερχόμενα" 174 | 175 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 176 | msgid "Sent Messages" 177 | msgstr "Σταλμένα μηνύματα" 178 | 179 | #: templates/messages/base.html:10 180 | msgid "New Message" 181 | msgstr "Νέο μήνυμα" 182 | 183 | #: templates/messages/base.html:11 184 | msgid "Trash" 185 | msgstr "Άχρηστα" 186 | 187 | #: templates/messages/compose.html:4 188 | msgid "Compose Message" 189 | msgstr "Συντάξτε μήνυμα" 190 | 191 | #: templates/messages/compose.html:9 192 | msgid "Send" 193 | msgstr "Στείλτε" 194 | 195 | #: templates/messages/inbox.html:7 196 | msgid "Received" 197 | msgstr "Ελήφθη" 198 | 199 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 200 | #: templates/messages/trash.html:7 201 | msgid "Action" 202 | msgstr "Ενέργεια" 203 | 204 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 205 | #: templates/messages/trash.html:16 templates/messages/view.html:11 206 | msgid "DATETIME_FORMAT" 207 | msgstr "DATETIME_FORMAT" 208 | 209 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 210 | msgid "delete" 211 | msgstr "διαγράφω" 212 | 213 | #: templates/messages/new_message.html:1 214 | #, python-format 215 | msgid "" 216 | "Hello %(recipient)s,\n" 217 | "\n" 218 | "you received a private message from %(sender)s with\n" 219 | "the following contents:" 220 | msgstr "" 221 | "Γειά χαρά %(recipient)s,\n" 222 | "\n" 223 | "έχετε λάβει ένα προσωπικό μήνυμα από τον/την %(sender)s με\n" 224 | "το ακόλουθο περιεχόμενο:" 225 | 226 | #: templates/messages/new_message.html:9 227 | #, python-format 228 | msgid "Sent from %(site_url)s" 229 | msgstr "Εστάλει απο %(site_url)s" 230 | 231 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 232 | msgid "Reply" 233 | msgstr "Απαντήστε" 234 | 235 | #: templates/messages/outbox.html:7 236 | msgid "Sent" 237 | msgstr "Απεσταλμένα" 238 | 239 | #: templates/messages/trash.html:4 240 | msgid "Deleted Messages" 241 | msgstr "Διαγραμμένα μηνύματα" 242 | 243 | #: templates/messages/trash.html:7 templates/messages/view.html:10 244 | msgid "Date" 245 | msgstr "Ημερομηνία" 246 | 247 | #: templates/messages/trash.html:17 248 | msgid "undelete" 249 | msgstr "ξεδιαγράψτε" 250 | 251 | #: templates/messages/trash.html:23 252 | msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." 253 | msgstr "Τα διαγραμμένα μηνύματα απομακρύνονται απο τα Άχρηστα σε μη τακτά διαστήματα, μη βασίζεστε σε αυτά για μακροχρόνια αποθήκευση." 254 | 255 | #: templates/messages/view.html:4 256 | msgid "View Message" 257 | msgstr "Προβολή Μηνύματος" 258 | 259 | #: templates/messages/view.html:20 260 | msgid "Delete" 261 | msgstr "Διαγραφή" 262 | 263 | #: templates/notification/messages_deleted/notice.html:1 264 | #, python-format 265 | msgid "You have deleted the message %(message)s." 266 | msgstr "Έχετε διαγράψει το μήνυμα %(message)s." 267 | 268 | #: templates/notification/messages_received/notice.html:2 269 | #, python-format 270 | msgid "You have received the message %(message)s from %(message_sender)s." 271 | msgstr "Έχετε λάβει το μήνυμα %(message)s από τον/την %(message_sender)s." 272 | 273 | #: templates/notification/messages_recovered/notice.html:1 274 | #, python-format 275 | msgid "You have recovered the message %(message)s." 276 | msgstr "Έχετε ανακτήσει το μήνυμα %(message)s." 277 | 278 | #: templates/notification/messages_replied/notice.html:2 279 | #, python-format 280 | msgid "You have replied to %(message_parent_msg)s from %(message_recipient)s." 281 | msgstr "Έχετε απαντήσει στο %(message_parent_msg)sαπό τον/την %(message_recipient)s." 282 | 283 | #: templates/notification/messages_reply_received/notice.html:2 284 | #, python-format 285 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 286 | msgstr "Ο/η %(message_sender)s σας έστειλε μια απάντηση στο %(message_parent_msg)s." 287 | 288 | #: templates/notification/messages_sent/notice.html:2 289 | #, python-format 290 | msgid "You have sent the message %(message)s to %(message_recipient)s." 291 | msgstr "Έχετε στείλει το μήνυμα %(message)s στον/στην %(message_recipient)s." 292 | -------------------------------------------------------------------------------- /django_messages/locale/eu/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # django-messages in Basque. 2 | # django-messages Euskaraz. 3 | # Copyright (C) 2008 4 | # This file is distributed under the same license as the django-messages package. 5 | # Urtzi Odriozola Lizaso , 2017. 6 | # 7 | #, fuzzy 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: PACKAGE VERSION\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 13 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 | "Last-Translator: FULL NAME \n" 15 | "Language-Team: LANGUAGE \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 21 | #: templates/messages/view.html:12 22 | msgid "Recipient" 23 | msgstr "Hartzailea" 24 | 25 | #: admin.py:15 26 | msgid "group" 27 | msgstr "taldea" 28 | 29 | #: admin.py:16 30 | msgid "Creates the message optionally for all users or a group of users." 31 | msgstr "Erabiltzaile bat edo talde batentzat mezua sortzen du aukeran" 32 | 33 | #: admin.py:23 34 | msgid "All users" 35 | msgstr "Erabiltzaile guztiak" 36 | 37 | #: admin.py:38 models.py:88 38 | msgid "Message" 39 | msgstr "Mezua" 40 | 41 | #: admin.py:45 42 | #, fuzzy 43 | msgid "Date/time" 44 | msgstr "Data/ordua" 45 | 46 | #: fields.py:53 47 | #, python-format 48 | msgid "The following usernames are incorrect: %(users)s" 49 | msgstr "Erabiltzaile hauek okerrak dira: %(users)s" 50 | 51 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 52 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 53 | #: templates/messages/view.html:6 54 | msgid "Subject" 55 | msgstr "Gaia" 56 | 57 | #: forms.py:22 models.py:50 58 | msgid "Body" 59 | msgstr "Testua" 60 | 61 | #: management.py:9 62 | msgid "Message Received" 63 | msgstr "Mezua jasota" 64 | 65 | #: management.py:9 66 | msgid "you have received a message" 67 | msgstr "mezu bat jaso duzu" 68 | 69 | #: management.py:10 70 | msgid "Message Sent" 71 | msgstr "Mezua bidalita" 72 | 73 | #: management.py:10 74 | msgid "you have sent a message" 75 | msgstr "mezu bat bidali duzu" 76 | 77 | #: management.py:11 78 | msgid "Message Replied" 79 | msgstr "Mezua erantzunda" 80 | 81 | #: management.py:11 82 | msgid "you have replied to a message" 83 | msgstr "mezu bat erantzun duzu" 84 | 85 | #: management.py:12 86 | msgid "Reply Received" 87 | msgstr "Erantzuna jasota" 88 | 89 | #: management.py:12 90 | msgid "you have received a reply to a message" 91 | msgstr "mezu baten erantzuna jaso duzu" 92 | 93 | #: management.py:13 94 | msgid "Message Deleted" 95 | msgstr "Mezua ezabatuta" 96 | 97 | #: management.py:13 98 | msgid "you have deleted a message" 99 | msgstr "mezu bat ezabatu duzu" 100 | 101 | #: management.py:14 102 | msgid "Message Recovered" 103 | msgstr "Mezua berreskuratuta" 104 | 105 | #: management.py:14 106 | msgid "you have undeleted a message" 107 | msgstr "mezu bat berreskuratu duzu" 108 | 109 | #: models.py:51 templates/messages/inbox.html:7 110 | #: templates/messages/trash.html:7 templates/messages/view.html:8 111 | msgid "Sender" 112 | msgstr "Igorlea" 113 | 114 | #: models.py:53 115 | msgid "Parent message" 116 | msgstr "Mezu gurasoa" 117 | 118 | #: models.py:54 119 | msgid "sent at" 120 | msgstr "bidalita" 121 | 122 | #: models.py:55 123 | msgid "read at" 124 | msgstr "irakurrita" 125 | 126 | #: models.py:56 127 | msgid "replied at" 128 | msgstr "erantzunda" 129 | 130 | #: models.py:57 131 | msgid "Sender deleted at" 132 | msgstr "Igorlea ezabatuta" 133 | 134 | #: models.py:58 135 | msgid "Recipient deleted at" 136 | msgstr "Hartzailea ezabatuta" 137 | 138 | #: models.py:89 139 | msgid "Messages" 140 | msgstr "Mezuak" 141 | 142 | #: utils.py:27 143 | #, python-format 144 | msgid "New Message: %(subject)s" 145 | msgstr "Mezu berria: %(subject)s" 146 | 147 | #: views.py:78 views.py:112 148 | msgid "Message successfully sent." 149 | msgstr "Mezua arrakastaz bidali da." 150 | 151 | #: views.py:118 152 | #, python-format 153 | msgid "" 154 | "%(sender)s wrote:\n" 155 | "%(body)s" 156 | msgstr "" 157 | "%(sender)s idatzi du:\n" 158 | "%(body)s" 159 | 160 | #: views.py:122 161 | #, python-format 162 | msgid "Re: %(subject)s" 163 | msgstr "Re: %(subject)s" 164 | 165 | #: views.py:158 166 | msgid "Message successfully deleted." 167 | msgstr "Mezua arrakastaz ezabatu da." 168 | 169 | #: views.py:185 170 | msgid "Message successfully recovered." 171 | msgstr "Mezua arrakastaz berreskuratu da." 172 | 173 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 174 | #: templates/messages/new_message.html:10 175 | msgid "Inbox" 176 | msgstr "Sarrera-ontzia" 177 | 178 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 179 | msgid "Sent Messages" 180 | msgstr "Bidalitako mezuak" 181 | 182 | #: templates/messages/base.html:10 183 | msgid "New Message" 184 | msgstr "Mezu berria" 185 | 186 | #: templates/messages/base.html:11 187 | msgid "Trash" 188 | msgstr "Zaborrontzia" 189 | 190 | #: templates/messages/compose.html:4 191 | msgid "Compose Message" 192 | msgstr "Idatzi mezua" 193 | 194 | #: templates/messages/compose.html:9 195 | msgid "Send" 196 | msgstr "Bidali" 197 | 198 | #: templates/messages/inbox.html:7 199 | msgid "Received" 200 | msgstr "Jasota" 201 | 202 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 203 | #: templates/messages/trash.html:7 204 | msgid "Action" 205 | msgstr "Ekintza" 206 | 207 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 208 | #: templates/messages/trash.html:16 templates/messages/view.html:11 209 | msgid "DATETIME_FORMAT" 210 | msgstr "" 211 | 212 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 213 | msgid "delete" 214 | msgstr "ezabatu" 215 | 216 | #: templates/messages/new_message.html:1 217 | #, python-format 218 | msgid "" 219 | "Hello %(recipient)s,\n" 220 | "\n" 221 | "you received a private message from %(sender)s with\n" 222 | "the following contents:" 223 | msgstr "" 224 | "Kaixo %(recipient)s,\n" 225 | "\n" 226 | "%(sender)s-(r)en mezu bat jaso duzu\n" 227 | "ondorengo edukiarekin:" 228 | 229 | #: templates/messages/new_message.html:9 230 | #, python-format 231 | msgid "Sent from %(site_url)s" 232 | msgstr "%(site_url)s-(e)tik bidalita" 233 | 234 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 235 | msgid "Reply" 236 | msgstr "Erantzun" 237 | 238 | #: templates/messages/outbox.html:7 239 | msgid "Sent" 240 | msgstr "Bidalita" 241 | 242 | #: templates/messages/trash.html:4 243 | msgid "Deleted Messages" 244 | msgstr "Ezabatutako mezuak" 245 | 246 | #: templates/messages/trash.html:7 templates/messages/view.html:10 247 | msgid "Date" 248 | msgstr "Data" 249 | 250 | #: templates/messages/trash.html:17 251 | msgid "undelete" 252 | msgstr "berreskuratu" 253 | 254 | #: templates/messages/trash.html:23 255 | msgid "" 256 | "Deleted Messages are removed from the trash at unregular intervals, don't " 257 | "rely on this feature for long-time storage." 258 | msgstr "" 259 | "Ezabatutako mezuak periodo irregularretan ezabatzen dira zaborrontzitik," 260 | "ez zaitez fidatu luzerako gordeko direla pentsatuz." 261 | 262 | #: templates/messages/view.html:4 263 | msgid "View Message" 264 | msgstr "Ikusi mezua" 265 | 266 | #: templates/messages/view.html:20 267 | msgid "Delete" 268 | msgstr "Eliminar" 269 | 270 | #: templates/notification/messages_deleted/notice.html:1 271 | #, python-format 272 | msgid "" 273 | "You have deleted the message %(message)s." 274 | msgstr "%(message)s mezua ezabatu duzu." 275 | 276 | #: templates/notification/messages_received/notice.html:2 277 | #, python-format 278 | msgid "" 279 | "You have received the message %(message)s " 280 | "from %(message_sender)s." 281 | msgstr "" 282 | "%(message_sender)s erabiltzailearen " 283 | "%(message)s mezua ezabatu duzu." 284 | 285 | 286 | #: templates/notification/messages_recovered/notice.html:1 287 | #, python-format 288 | msgid "" 289 | "You have recovered the message %(message)s." 290 | msgstr "%(message)s mezua berreskuratu duzu." 291 | 292 | #: templates/notification/messages_replied/notice.html:2 293 | #, python-format 294 | msgid "" 295 | "You have replied to %(message_parent_msg)s " 296 | "from %(message_recipient)s." 297 | msgstr "" 298 | "%(message_recipient)s-(r)en " 299 | "%(message_parent_msg)s mezua erantzun duzu." 300 | 301 | 302 | #: templates/notification/messages_reply_received/notice.html:2 303 | #, python-format 304 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 305 | msgstr "" 306 | "%(message_sender)s-(e)k erantzun bat bidali dizu %(message_parent_msg)s mezura." 307 | 308 | #: templates/notification/messages_sent/notice.html:2 309 | #, python-format 310 | msgid "" 311 | "You have sent the message %(message)s to %" 312 | "(message_recipient)s." 313 | msgstr "" 314 | "%(message_recipient)s-(r)i " 315 | "%(message)s mezua bidali diozu." 316 | -------------------------------------------------------------------------------- /django_messages/locale/es/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # django-messages in Spanish. 2 | # django-messages en Español. 3 | # Copyright (C) 2008 4 | # This file is distributed under the same license as the django-messages package. 5 | # Maria Guadalupe Paz Urrea , 2008. 6 | # Alfonso Bernardo Harita Rascón , 2008. 7 | # 8 | #, fuzzy 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: PACKAGE VERSION\n" 12 | "Report-Msgid-Bugs-To: \n" 13 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 14 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 15 | "Last-Translator: FULL NAME \n" 16 | "Language-Team: LANGUAGE \n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | 21 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 22 | #: templates/messages/view.html:12 23 | msgid "Recipient" 24 | msgstr "Destinatario" 25 | 26 | #: admin.py:15 27 | msgid "group" 28 | msgstr "" 29 | 30 | #: admin.py:16 31 | msgid "Creates the message optionally for all users or a group of users." 32 | msgstr "" 33 | 34 | #: admin.py:23 35 | msgid "All users" 36 | msgstr "" 37 | 38 | #: admin.py:38 models.py:88 39 | msgid "Message" 40 | msgstr "Mensaje" 41 | 42 | #: admin.py:45 43 | #, fuzzy 44 | msgid "Date/time" 45 | msgstr "Fecha" 46 | 47 | #: fields.py:53 48 | #, python-format 49 | msgid "The following usernames are incorrect: %(users)s" 50 | msgstr "Los siguientes usuarios son incorrectos: %(users)s" 51 | 52 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 53 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 54 | #: templates/messages/view.html:6 55 | msgid "Subject" 56 | msgstr "Asunto" 57 | 58 | #: forms.py:22 models.py:50 59 | msgid "Body" 60 | msgstr "Cuerpo" 61 | 62 | #: management.py:9 63 | msgid "Message Received" 64 | msgstr "Mensaje Recibido" 65 | 66 | #: management.py:9 67 | msgid "you have received a message" 68 | msgstr "ha recibido un mensaje" 69 | 70 | #: management.py:10 71 | msgid "Message Sent" 72 | msgstr "Mensaje Enviado" 73 | 74 | #: management.py:10 75 | msgid "you have sent a message" 76 | msgstr "ha enviado un mensaje" 77 | 78 | #: management.py:11 79 | msgid "Message Replied" 80 | msgstr "Mensaje Respondido" 81 | 82 | #: management.py:11 83 | msgid "you have replied to a message" 84 | msgstr "ha respondido un mensaje" 85 | 86 | #: management.py:12 87 | msgid "Reply Received" 88 | msgstr "Respuesta Recibida" 89 | 90 | #: management.py:12 91 | msgid "you have received a reply to a message" 92 | msgstr "ha recibido una respuesta a un mensaje" 93 | 94 | #: management.py:13 95 | msgid "Message Deleted" 96 | msgstr "Mensaje Eliminado" 97 | 98 | #: management.py:13 99 | msgid "you have deleted a message" 100 | msgstr "ha eliminado un mensaje" 101 | 102 | #: management.py:14 103 | msgid "Message Recovered" 104 | msgstr "Mensaje Recuperado" 105 | 106 | #: management.py:14 107 | msgid "you have undeleted a message" 108 | msgstr "ha recuperado un mensaje" 109 | 110 | #: models.py:51 templates/messages/inbox.html:7 111 | #: templates/messages/trash.html:7 templates/messages/view.html:8 112 | msgid "Sender" 113 | msgstr "Emisor" 114 | 115 | #: models.py:53 116 | msgid "Parent message" 117 | msgstr "Mensaje padre" 118 | 119 | #: models.py:54 120 | msgid "sent at" 121 | msgstr "enviado" 122 | 123 | #: models.py:55 124 | msgid "read at" 125 | msgstr "leído" 126 | 127 | #: models.py:56 128 | msgid "replied at" 129 | msgstr "respondido" 130 | 131 | #: models.py:57 132 | msgid "Sender deleted at" 133 | msgstr "Emisor borrado" 134 | 135 | #: models.py:58 136 | msgid "Recipient deleted at" 137 | msgstr "Destinatario borrado" 138 | 139 | #: models.py:89 140 | msgid "Messages" 141 | msgstr "Mensajes" 142 | 143 | #: utils.py:27 144 | #, python-format 145 | msgid "New Message: %(subject)s" 146 | msgstr "Nuevo Mensaje: %(subject)s" 147 | 148 | #: views.py:78 views.py:112 149 | msgid "Message successfully sent." 150 | msgstr "Se envió con éxito el mensaje." 151 | 152 | #: views.py:118 153 | #, python-format 154 | msgid "" 155 | "%(sender)s wrote:\n" 156 | "%(body)s" 157 | msgstr "" 158 | "%(sender)s escribió:\n" 159 | "%(body)s" 160 | 161 | #: views.py:122 162 | #, python-format 163 | msgid "Re: %(subject)s" 164 | msgstr "Re: %(subject)s" 165 | 166 | #: views.py:158 167 | msgid "Message successfully deleted." 168 | msgstr "Se eliminó con éxito el mensaje." 169 | 170 | #: views.py:185 171 | msgid "Message successfully recovered." 172 | msgstr "Se recuperó con éxito el mensaje." 173 | 174 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 175 | #: templates/messages/new_message.html:10 176 | msgid "Inbox" 177 | msgstr "Bandeja de entrada" 178 | 179 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 180 | msgid "Sent Messages" 181 | msgstr "Mensajes Enviados" 182 | 183 | #: templates/messages/base.html:10 184 | msgid "New Message" 185 | msgstr "Nuevo Mensaje" 186 | 187 | #: templates/messages/base.html:11 188 | msgid "Trash" 189 | msgstr "Papelera" 190 | 191 | #: templates/messages/compose.html:4 192 | msgid "Compose Message" 193 | msgstr "Redactar Mensaje" 194 | 195 | #: templates/messages/compose.html:9 196 | msgid "Send" 197 | msgstr "Enviar" 198 | 199 | #: templates/messages/inbox.html:7 200 | msgid "Received" 201 | msgstr "Recibido" 202 | 203 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 204 | #: templates/messages/trash.html:7 205 | msgid "Action" 206 | msgstr "Acción" 207 | 208 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 209 | #: templates/messages/trash.html:16 templates/messages/view.html:11 210 | msgid "DATETIME_FORMAT" 211 | msgstr "" 212 | 213 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 214 | msgid "delete" 215 | msgstr "eliminar" 216 | 217 | #: templates/messages/new_message.html:1 218 | #, python-format 219 | msgid "" 220 | "Hello %(recipient)s,\n" 221 | "\n" 222 | "you received a private message from %(sender)s with\n" 223 | "the following contents:" 224 | msgstr "" 225 | "Hola %(recipient)s,\n" 226 | "\n" 227 | "ha recibido un mensaje de %(sender)s con\n" 228 | "el siguiente contenido:" 229 | 230 | #: templates/messages/new_message.html:9 231 | #, python-format 232 | msgid "Sent from %(site_url)s" 233 | msgstr "Enviado desde %(site_url)s" 234 | 235 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 236 | msgid "Reply" 237 | msgstr "Responder" 238 | 239 | #: templates/messages/outbox.html:7 240 | msgid "Sent" 241 | msgstr "Enviado" 242 | 243 | #: templates/messages/trash.html:4 244 | msgid "Deleted Messages" 245 | msgstr "Mensajes Eliminados" 246 | 247 | #: templates/messages/trash.html:7 templates/messages/view.html:10 248 | msgid "Date" 249 | msgstr "Fecha" 250 | 251 | #: templates/messages/trash.html:17 252 | msgid "undelete" 253 | msgstr "recuperar" 254 | 255 | #: templates/messages/trash.html:23 256 | msgid "" 257 | "Deleted Messages are removed from the trash at unregular intervals, don't " 258 | "rely on this feature for long-time storage." 259 | msgstr "" 260 | "Los Mensajes Eliminados son borrados de la Papelera a intérvalos irregulares," 261 | "no se confíe en esta característica para almacenamiento a largo plazo." 262 | 263 | #: templates/messages/view.html:4 264 | msgid "View Message" 265 | msgstr "Ver Mensaje" 266 | 267 | #: templates/messages/view.html:20 268 | msgid "Delete" 269 | msgstr "Eliminar" 270 | 271 | #: templates/notification/messages_deleted/notice.html:1 272 | #, python-format 273 | msgid "" 274 | "You have deleted the message %(message)s." 275 | msgstr "ha borrado el mensaje %(message)s." 276 | 277 | #: templates/notification/messages_received/notice.html:2 278 | #, python-format 279 | msgid "" 280 | "You have received the message %(message)s " 281 | "from %(message_sender)s." 282 | msgstr "" 283 | "ha recibido el mensaje %(message)s de %" 284 | "(message_sender)s." 285 | 286 | #: templates/notification/messages_recovered/notice.html:1 287 | #, python-format 288 | msgid "" 289 | "You have recovered the message %(message)s." 290 | msgstr "ha recuperado el mensaje %(message)s." 291 | 292 | #: templates/notification/messages_replied/notice.html:2 293 | #, python-format 294 | msgid "" 295 | "You have replied to %(message_parent_msg)s " 296 | "from %(message_recipient)s." 297 | msgstr "" 298 | "ha respondido a %(message_parent_msg)s de %" 299 | "(message_recipient)s." 300 | 301 | #: templates/notification/messages_reply_received/notice.html:2 302 | #, python-format 303 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 304 | msgstr "" 305 | "%(message_sender)s le ha enviado una respuesta a %(message_parent_msg)s." 306 | 307 | #: templates/notification/messages_sent/notice.html:2 308 | #, python-format 309 | msgid "" 310 | "You have sent the message %(message)s to %" 311 | "(message_recipient)s." 312 | msgstr "" 313 | "ha enviado el mensaje %(message)s a %" 314 | "(message_recipient)s." 315 | -------------------------------------------------------------------------------- /django_messages/locale/lt/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 12 | "PO-Revision-Date: 2015-03-24 10:53+0200\n" 13 | "Last-Translator: Saulius Zemaitaitis \n" 14 | "Language-Team: LANGUAGE \n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 20 | #: templates/messages/view.html:12 21 | msgid "Recipient" 22 | msgstr "Gavėjas" 23 | 24 | #: admin.py:15 25 | msgid "group" 26 | msgstr "Grupė" 27 | 28 | #: admin.py:16 29 | msgid "Creates the message optionally for all users or a group of users." 30 | msgstr "" 31 | "Sukuria žinutę visiems vartotojams arba grupei pasirinktinai " 32 | 33 | 34 | #: admin.py:23 35 | msgid "All users" 36 | msgstr "Visi vartotojai" 37 | 38 | #: admin.py:38 models.py:88 39 | msgid "Message" 40 | msgstr "Žinutė" 41 | 42 | #: admin.py:45 43 | msgid "Date/time" 44 | msgstr "Data/Laikas" 45 | 46 | #: fields.py:53 47 | #, python-format 48 | msgid "The following usernames are incorrect: %(users)s" 49 | msgstr "Šie vartotojų vardai yra neteisingi: %(users)s" 50 | 51 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 52 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 53 | #: templates/messages/view.html:6 54 | msgid "Subject" 55 | msgstr "Tema" 56 | 57 | #: forms.py:22 models.py:50 58 | msgid "Body" 59 | msgstr "Turinys" 60 | 61 | #: management.py:9 62 | msgid "Message Received" 63 | msgstr "Gauta žinutė" 64 | 65 | #: management.py:9 66 | msgid "you have received a message" 67 | msgstr "jūs gavote žinutę" 68 | 69 | #: management.py:10 70 | msgid "Message Sent" 71 | msgstr "Žinutė Išsiųsta" 72 | 73 | #: management.py:10 74 | msgid "you have sent a message" 75 | msgstr "jūs išsiuntėte žinutę" 76 | 77 | #: management.py:11 78 | msgid "Message Replied" 79 | msgstr "Žinutė atsakyta" 80 | 81 | #: management.py:11 82 | msgid "you have replied to a message" 83 | msgstr "jūs atsakėte į žinutę" 84 | 85 | #: management.py:12 86 | msgid "Reply Received" 87 | msgstr "Gautas atsakymas" 88 | 89 | #: management.py:12 90 | msgid "you have received a reply to a message" 91 | msgstr "jūs gavote atsakymą į žinutę" 92 | 93 | #: management.py:13 94 | msgid "Message Deleted" 95 | msgstr "Žinutė ištrinta" 96 | 97 | #: management.py:13 98 | msgid "you have deleted a message" 99 | msgstr "jūs ištrynėte žinutę" 100 | 101 | #: management.py:14 102 | msgid "Message Recovered" 103 | msgstr "Žinutė Atstatyta" 104 | 105 | #: management.py:14 106 | msgid "you have undeleted a message" 107 | msgstr "jūs atstatėte ištrintą žinutę" 108 | 109 | #: models.py:51 templates/messages/inbox.html:7 110 | #: templates/messages/trash.html:7 templates/messages/view.html:8 111 | msgid "Sender" 112 | msgstr "Siuntėjas" 113 | 114 | #: models.py:53 115 | msgid "Parent message" 116 | msgstr "Pirminė žinutė" 117 | 118 | #: models.py:54 119 | msgid "sent at" 120 | msgstr "išsiųsta" 121 | 122 | #: models.py:55 123 | msgid "read at" 124 | msgstr "perskaityta" 125 | 126 | #: models.py:56 127 | msgid "replied at" 128 | msgstr "atsakyta" 129 | 130 | #: models.py:57 131 | msgid "Sender deleted at" 132 | msgstr "Siuntėjas ištrynė" 133 | 134 | #: models.py:58 135 | msgid "Recipient deleted at" 136 | msgstr "Gavėjas ištrynė" 137 | 138 | #: models.py:89 139 | msgid "Messages" 140 | msgstr "Žinutės" 141 | 142 | #: utils.py:27 143 | #, python-format 144 | msgid "New Message: %(subject)s" 145 | msgstr "Nauja žinutė: %(subject)s" 146 | 147 | #: views.py:78 views.py:112 148 | msgid "Message successfully sent." 149 | msgstr "Žinutė sėkmingai išsiųsta." 150 | 151 | #: views.py:118 152 | #, python-format 153 | msgid "" 154 | "%(sender)s wrote:\n" 155 | "%(body)s" 156 | msgstr "" 157 | "%(sender)s parašė:\n" 158 | "%(body)s" 159 | 160 | #: views.py:122 161 | #, python-format 162 | msgid "Re: %(subject)s" 163 | msgstr "Ats: %(subject)s" 164 | 165 | #: views.py:158 166 | msgid "Message successfully deleted." 167 | msgstr "Žinutė sėkmingai ištrinta." 168 | 169 | #: views.py:185 170 | msgid "Message successfully recovered." 171 | msgstr "Žinutė sėkmingai atstatyta." 172 | 173 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 174 | #: templates/messages/new_message.html:10 175 | msgid "Inbox" 176 | msgstr "Gautos" 177 | 178 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 179 | msgid "Sent Messages" 180 | msgstr "Išsiųstos žinutės" 181 | 182 | #: templates/messages/base.html:10 183 | msgid "New Message" 184 | msgstr "Nauja žinutė" 185 | 186 | #: templates/messages/base.html:11 187 | msgid "Trash" 188 | msgstr "Ištrintos" 189 | 190 | #: templates/messages/compose.html:4 191 | msgid "Compose Message" 192 | msgstr "Kurti žinutę" 193 | 194 | #: templates/messages/compose.html:9 195 | msgid "Send" 196 | msgstr "Siųsti" 197 | 198 | #: templates/messages/inbox.html:7 199 | msgid "Received" 200 | msgstr "Gauta" 201 | 202 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 203 | #: templates/messages/trash.html:7 204 | msgid "Action" 205 | msgstr "Veiksmas" 206 | 207 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 208 | #: templates/messages/trash.html:16 templates/messages/view.html:11 209 | msgid "DATETIME_FORMAT" 210 | msgstr "Y j. N, H:i" 211 | 212 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 213 | msgid "delete" 214 | msgstr "ištrinti" 215 | 216 | #: templates/messages/inbox.html:27 templates/messages/outbox.html:24 217 | #: templates/messages/trash.html:24 218 | msgid "No messages." 219 | msgstr "Žinučių nėra." 220 | 221 | #: templates/messages/new_message.html:1 222 | #, python-format 223 | msgid "" 224 | "Hello %(recipient)s,\n" 225 | "\n" 226 | "you received a private message from %(sender)s with\n" 227 | "the following contents:" 228 | msgstr "" 229 | "%(recipient)s,\n" 230 | "\n" 231 | "Gavote asmeninę žinutę nuo %(sender)s su\n" 232 | "šiuo turiniu:" 233 | 234 | #: templates/messages/new_message.html:9 235 | #, python-format 236 | msgid "Sent from %(site_url)s" 237 | msgstr "Siųsta iš %(site_url)s" 238 | 239 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 240 | msgid "Reply" 241 | msgstr "Atsakyti" 242 | 243 | #: templates/messages/outbox.html:7 244 | msgid "Sent" 245 | msgstr "Išsiųsta" 246 | 247 | #: templates/messages/trash.html:4 248 | msgid "Deleted Messages" 249 | msgstr "Ištrintos žinutės" 250 | 251 | #: templates/messages/trash.html:7 templates/messages/view.html:10 252 | msgid "Date" 253 | msgstr "Data" 254 | 255 | #: templates/messages/trash.html:17 256 | msgid "undelete" 257 | msgstr "atstatyti" 258 | 259 | #: templates/messages/trash.html:23 260 | msgid "" 261 | "Deleted Messages are removed from the trash at unregular intervals, don't " 262 | "rely on this feature for long-time storage." 263 | msgstr "" 264 | "Ištrintos žinutės pašalinamos periodiškai, nelaikykite ilgalaikių žinučių " 265 | "šiukšliadėžėje." 266 | 267 | #: templates/messages/view.html:4 268 | msgid "View Message" 269 | msgstr "Peržiūrėti žinutę" 270 | 271 | #: templates/messages/view.html:20 272 | msgid "Delete" 273 | msgstr "Ištrinti" 274 | 275 | #: templates/notification/messages_deleted/notice.html:1 276 | #, python-format 277 | msgid "" 278 | "You have deleted the message %(message)s." 279 | msgstr "" 280 | "Ištrynėte žinutę %(message)s." 281 | 282 | #: templates/notification/messages_received/notice.html:2 283 | #, python-format 284 | msgid "" 285 | "You have received the message %(message)s " 286 | "from %(message_sender)s." 287 | msgstr "" 288 | "Gavote žinutę %(message)s nuo %" 289 | "(message_sender)s." 290 | 291 | #: templates/notification/messages_recovered/notice.html:1 292 | #, python-format 293 | msgid "" 294 | "You have recovered the message %(message)s." 295 | msgstr "" 296 | "Atstatėte žinutę %(message)s." 297 | 298 | #: templates/notification/messages_replied/notice.html:2 299 | #, python-format 300 | msgid "" 301 | "You have replied to %(message_parent_msg)s " 302 | "from %(message_recipient)s." 303 | msgstr "" 304 | "Jūs atsakėte į žinutę %(message_parent_msg)" 305 | "s nuo %(message_recipient)s." 306 | 307 | #: templates/notification/messages_reply_received/notice.html:2 308 | #, python-format 309 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 310 | msgstr "" 311 | "%(message_sender)s atsiuntė atsakymą į %(message_parent_msg)s." 312 | 313 | #: templates/notification/messages_sent/notice.html:2 314 | #, python-format 315 | msgid "" 316 | "You have sent the message %(message)s to %" 317 | "(message_recipient)s." 318 | msgstr "" 319 | "Išsiuntėte žinutę %(message)s %" 320 | "(message_recipient)s." 321 | -------------------------------------------------------------------------------- /django_messages/locale/ro/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 11 | "PO-Revision-Date: 2014-05-14 16:59+0200\n" 12 | "Last-Translator: Eduard Luca \n" 13 | "Language-Team: LANGUAGE \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Poedit 1.5.4\n" 18 | 19 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 20 | #: templates/messages/view.html:12 21 | msgid "Recipient" 22 | msgstr "Destinatar" 23 | 24 | #: admin.py:15 25 | msgid "group" 26 | msgstr "grup" 27 | 28 | #: admin.py:16 29 | msgid "Creates the message optionally for all users or a group of users." 30 | msgstr "" 31 | "Creaza mesajul optional pentru toti utilizatorii sau pentru un grup de " 32 | "utilizatori." 33 | 34 | #: admin.py:23 35 | msgid "All users" 36 | msgstr "Toti utilizatorii" 37 | 38 | #: admin.py:38 models.py:88 39 | msgid "Message" 40 | msgstr "Mesaj" 41 | 42 | #: admin.py:45 43 | msgid "Date/time" 44 | msgstr "Data/ora" 45 | 46 | #: fields.py:53 47 | #, python-format 48 | msgid "The following usernames are incorrect: %(users)s" 49 | msgstr "Urmatoarele nume de utilizatori nu sunt corecte: %(users)s" 50 | 51 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 52 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 53 | #: templates/messages/view.html:6 54 | msgid "Subject" 55 | msgstr "Subiect" 56 | 57 | #: forms.py:22 models.py:50 58 | msgid "Body" 59 | msgstr "Continut" 60 | 61 | #: management.py:9 62 | msgid "Message Received" 63 | msgstr "Mesaj Primit" 64 | 65 | #: management.py:9 66 | msgid "you have received a message" 67 | msgstr "ati primit un mesaj nou" 68 | 69 | #: management.py:10 70 | msgid "Message Sent" 71 | msgstr "Mesaj Trimis" 72 | 73 | #: management.py:10 74 | msgid "you have sent a message" 75 | msgstr "ati trimis un mesaj" 76 | 77 | #: management.py:11 78 | msgid "Message Replied" 79 | msgstr "Mesaj Raspuns" 80 | 81 | #: management.py:11 82 | msgid "you have replied to a message" 83 | msgstr "ati raspuns la un mesaj" 84 | 85 | #: management.py:12 86 | msgid "Reply Received" 87 | msgstr "Raspuns Primit" 88 | 89 | #: management.py:12 90 | msgid "you have received a reply to a message" 91 | msgstr "ati primit un raspuns la un mesaj" 92 | 93 | #: management.py:13 94 | msgid "Message Deleted" 95 | msgstr "Mesaj Sters" 96 | 97 | #: management.py:13 98 | msgid "you have deleted a message" 99 | msgstr "ati sters un mesaj" 100 | 101 | #: management.py:14 102 | msgid "Message Recovered" 103 | msgstr "Mesaj Recuperat" 104 | 105 | #: management.py:14 106 | msgid "you have undeleted a message" 107 | msgstr "ati recuperat un mesaj" 108 | 109 | #: models.py:51 templates/messages/inbox.html:7 110 | #: templates/messages/trash.html:7 templates/messages/view.html:8 111 | msgid "Sender" 112 | msgstr "Expeditor" 113 | 114 | #: models.py:53 115 | msgid "Parent message" 116 | msgstr "Mesaj parinte" 117 | 118 | #: models.py:54 119 | msgid "sent at" 120 | msgstr "trimis" 121 | 122 | #: models.py:55 123 | msgid "read at" 124 | msgstr "citit" 125 | 126 | #: models.py:56 127 | msgid "replied at" 128 | msgstr "raspuns in" 129 | 130 | #: models.py:57 131 | msgid "Sender deleted at" 132 | msgstr "Sters la expeditor" 133 | 134 | #: models.py:58 135 | msgid "Recipient deleted at" 136 | msgstr "Sters la destinatar" 137 | 138 | #: models.py:89 139 | msgid "Messages" 140 | msgstr "Mesaje" 141 | 142 | #: utils.py:27 143 | #, python-format 144 | msgid "New Message: %(subject)s" 145 | msgstr "Mesaj Nou: %(subject)s" 146 | 147 | #: views.py:78 views.py:112 148 | msgid "Message successfully sent." 149 | msgstr "Mesaj trimis cu succes." 150 | 151 | #: views.py:118 152 | #, python-format 153 | msgid "" 154 | "%(sender)s wrote:\n" 155 | "%(body)s" 156 | msgstr "" 157 | "%(sender)s a scris:\n" 158 | "%(body)s" 159 | 160 | #: views.py:122 161 | #, python-format 162 | msgid "Re: %(subject)s" 163 | msgstr "Re: %(subject)s" 164 | 165 | #: views.py:158 166 | msgid "Message successfully deleted." 167 | msgstr "Mesaj sters cu succes." 168 | 169 | #: views.py:185 170 | msgid "Message successfully recovered." 171 | msgstr "Mesaj recuperat cu succes." 172 | 173 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 174 | #: templates/messages/new_message.html:10 175 | msgid "Inbox" 176 | msgstr "Primite" 177 | 178 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 179 | msgid "Sent Messages" 180 | msgstr "Trimise" 181 | 182 | #: templates/messages/base.html:10 183 | msgid "New Message" 184 | msgstr "Mesaj Nou" 185 | 186 | #: templates/messages/base.html:11 187 | msgid "Trash" 188 | msgstr "Cos de Gunoi" 189 | 190 | #: templates/messages/compose.html:4 191 | msgid "Compose Message" 192 | msgstr "Scrie un Mesaj" 193 | 194 | #: templates/messages/compose.html:9 195 | msgid "Send" 196 | msgstr "Trimite" 197 | 198 | #: templates/messages/inbox.html:7 199 | msgid "Received" 200 | msgstr "Primit" 201 | 202 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 203 | #: templates/messages/trash.html:7 204 | msgid "Action" 205 | msgstr "Actiune" 206 | 207 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 208 | #: templates/messages/trash.html:16 templates/messages/view.html:11 209 | msgid "DATETIME_FORMAT" 210 | msgstr "j. N Y, H:i" 211 | 212 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 213 | msgid "delete" 214 | msgstr "sterge" 215 | 216 | #: templates/messages/inbox.html:27 templates/messages/outbox.html:24 217 | #: templates/messages/trash.html:24 218 | msgid "No messages." 219 | msgstr "Nu sunt mesaje." 220 | 221 | #: templates/messages/new_message.html:1 222 | #, python-format 223 | msgid "" 224 | "Hello %(recipient)s,\n" 225 | "\n" 226 | "you received a private message from %(sender)s with\n" 227 | "the following contents:" 228 | msgstr "" 229 | "Buna %(recipient)s,\n" 230 | "\n" 231 | "ati primit un mesaj privat de la %(sender)s cu\n" 232 | "continutul:" 233 | 234 | #: templates/messages/new_message.html:9 235 | #, python-format 236 | msgid "Sent from %(site_url)s" 237 | msgstr "Trimis de %(site_url)s" 238 | 239 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 240 | msgid "Reply" 241 | msgstr "Raspunde" 242 | 243 | #: templates/messages/outbox.html:7 244 | msgid "Sent" 245 | msgstr "Trimis" 246 | 247 | #: templates/messages/trash.html:4 248 | msgid "Deleted Messages" 249 | msgstr "Mesaje Sterse" 250 | 251 | #: templates/messages/trash.html:7 templates/messages/view.html:10 252 | msgid "Date" 253 | msgstr "Data" 254 | 255 | #: templates/messages/trash.html:17 256 | msgid "undelete" 257 | msgstr "recupereaza" 258 | 259 | #: templates/messages/trash.html:23 260 | msgid "" 261 | "Deleted Messages are removed from the trash at unregular intervals, don't " 262 | "rely on this feature for long-time storage." 263 | msgstr "" 264 | "Mesajele sterse sunt inlaturate din sistem la intervale neregulate, nu va " 265 | "bazati pe stocarea acestor date." 266 | 267 | #: templates/messages/view.html:4 268 | msgid "View Message" 269 | msgstr "Vizualizati Mesaj" 270 | 271 | #: templates/messages/view.html:20 272 | msgid "Delete" 273 | msgstr "Stergere" 274 | 275 | #: templates/notification/messages_deleted/notice.html:1 276 | #, python-format 277 | msgid "" 278 | "You have deleted the message %(message)s." 279 | msgstr "Ati sters mesajul %(message)s." 280 | 281 | #: templates/notification/messages_received/notice.html:2 282 | #, python-format 283 | msgid "" 284 | "You have received the message %(message)s " 285 | "from %(message_sender)s." 286 | msgstr "" 287 | "Ati primit mesajul %(message)s von " 288 | "%(message_sender)s." 289 | 290 | #: templates/notification/messages_recovered/notice.html:1 291 | #, python-format 292 | msgid "" 293 | "You have recovered the message %(message)s." 294 | msgstr "Ati recuperat mesajul %(message)s." 295 | 296 | #: templates/notification/messages_replied/notice.html:2 297 | #, python-format 298 | msgid "" 299 | "You have replied to %(message_parent_msg)s " 300 | "from %(message_recipient)s." 301 | msgstr "" 302 | "Ati raspuns la mesajul %(message_parent_msg)s von %(message_recipient)s." 304 | 305 | #: templates/notification/messages_reply_received/notice.html:2 306 | #, python-format 307 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 308 | msgstr "%(message_sender)s a raspuns la mesajul %(message_parent_msg)s." 309 | 310 | #: templates/notification/messages_sent/notice.html:2 311 | #, python-format 312 | msgid "" 313 | "You have sent the message %(message)s to " 314 | "%(message_recipient)s." 315 | msgstr "" 316 | "Ati trimis mesajul %(message)s an " 317 | "%(message_recipient)s." 318 | -------------------------------------------------------------------------------- /django_messages/locale/ar/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Ossama M. Khayat , 2009. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2009-10-14 04:23+0300\n" 10 | "PO-Revision-Date: 2009-11-02 00:41+0300\n" 11 | "Last-Translator: Ossama M. Khayat \n" 12 | "Language-Team: Arabic \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "X-Generator: Lokalize 1.0\n" 17 | "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " 18 | "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" 19 | 20 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:8 21 | #: templates/messages/view.html:12 22 | msgid "Recipient" 23 | msgstr "المستلم" 24 | 25 | #: admin.py:15 26 | msgid "group" 27 | msgstr "مجموعة" 28 | 29 | #: admin.py:16 30 | msgid "Creates the message optionally for all users or a group of users." 31 | msgstr "ينشئ الرسالة اختياريا لجميع المستخدمين او لمجموعة من المستخدمين." 32 | 33 | #: admin.py:23 34 | msgid "All users" 35 | msgstr "جميع المستخدمين" 36 | 37 | #: admin.py:38 models.py:88 38 | msgid "Message" 39 | msgstr "الرسالة" 40 | 41 | #: admin.py:45 42 | msgid "Date/time" 43 | msgstr "التاريخ/الوقت" 44 | 45 | #: fields.py:53 46 | #, python-format 47 | msgid "The following usernames are incorrect: %(users)s" 48 | msgstr "أسماء المستخدمين التالي ذكرهم غير صحيحة: %(users)s" 49 | 50 | #: forms.py:21 models.py:49 templates/messages/inbox.html:8 51 | #: templates/messages/outbox.html:8 templates/messages/trash.html:8 52 | #: templates/messages/view.html:6 53 | msgid "Subject" 54 | msgstr "الموضوع" 55 | 56 | #: forms.py:22 models.py:50 57 | msgid "Body" 58 | msgstr "المحتوى" 59 | 60 | #: management.py:9 61 | msgid "Message Received" 62 | msgstr "تم استلام الرسالة" 63 | 64 | #: management.py:9 65 | msgid "you have received a message" 66 | msgstr "وصلتك رسالة" 67 | 68 | #: management.py:10 69 | msgid "Message Sent" 70 | msgstr "تم إرسال الرسالة" 71 | 72 | #: management.py:10 73 | msgid "you have sent a message" 74 | msgstr "قمت بإرسال رسالة" 75 | 76 | #: management.py:11 77 | msgid "Message Replied" 78 | msgstr "تم الرد على الرسالة" 79 | 80 | #: management.py:11 81 | msgid "you have replied to a message" 82 | msgstr "قمت بالرد على الرسالة" 83 | 84 | #: management.py:12 85 | msgid "Reply Received" 86 | msgstr "تم استلام الرد" 87 | 88 | #: management.py:12 89 | msgid "you have received a reply to a message" 90 | msgstr "استملت رداً على رسالة" 91 | 92 | #: management.py:13 93 | msgid "Message Deleted" 94 | msgstr "تم حذف الرسالة" 95 | 96 | #: management.py:13 97 | msgid "you have deleted a message" 98 | msgstr "قمت بحذف رسالة" 99 | 100 | #: management.py:14 101 | msgid "Message Recovered" 102 | msgstr "تم استرجاع الرسالة" 103 | 104 | #: management.py:14 105 | msgid "you have undeleted a message" 106 | msgstr "قمت باسترجاع رسالة" 107 | 108 | #: models.py:51 templates/messages/inbox.html:8 109 | #: templates/messages/trash.html:8 templates/messages/view.html:8 110 | msgid "Sender" 111 | msgstr "المرسل" 112 | 113 | #: models.py:53 114 | msgid "Parent message" 115 | msgstr "الرسالة الأساسية" 116 | 117 | #: models.py:54 118 | msgid "sent at" 119 | msgstr "أرسلت في" 120 | 121 | #: models.py:55 122 | msgid "read at" 123 | msgstr "قُرأت في" 124 | 125 | #: models.py:56 126 | msgid "replied at" 127 | msgstr "رُدّ عليها في" 128 | 129 | #: models.py:57 130 | msgid "Sender deleted at" 131 | msgstr "حذفها المُرسل في" 132 | 133 | #: models.py:58 134 | msgid "Recipient deleted at" 135 | msgstr "حذفها المستلم في" 136 | 137 | #: models.py:89 138 | msgid "Messages" 139 | msgstr "الرسائل" 140 | 141 | #: utils.py:27 142 | #, python-format 143 | msgid "New Message: %(subject)s" 144 | msgstr "رسالة جديدة: %(subject)s" 145 | 146 | #: views.py:78 views.py:112 147 | msgid "Message successfully sent." 148 | msgstr "تم إرسال الرسالة بنجاح." 149 | 150 | #: views.py:118 151 | #, python-format 152 | msgid "" 153 | "%(sender)s wrote:\n" 154 | "%(body)s" 155 | msgstr "" 156 | "كتب %(sender)s:\n" 157 | "%(body)s" 158 | 159 | #: views.py:122 160 | #, python-format 161 | msgid "Re: %(subject)s" 162 | msgstr "رد: %(subject)s" 163 | 164 | #: views.py:158 165 | msgid "Message successfully deleted." 166 | msgstr "تم حذف الرسالة بنجاح." 167 | 168 | #: views.py:185 169 | msgid "Message successfully recovered." 170 | msgstr "تم استرجاع الرسالة بنجاح." 171 | 172 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 173 | #: templates/messages/new_message.html:10 174 | msgid "Inbox" 175 | msgstr "الوارد" 176 | 177 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 178 | msgid "Sent Messages" 179 | msgstr "الرسائل المرسلة" 180 | 181 | #: templates/messages/base.html:10 182 | msgid "New Message" 183 | msgstr "رسالة جديدة" 184 | 185 | #: templates/messages/base.html:11 186 | msgid "Trash" 187 | msgstr "الحاوية" 188 | 189 | #: templates/messages/compose.html:4 190 | msgid "Compose Message" 191 | msgstr "أكتب رسالة" 192 | 193 | #: templates/messages/compose.html:9 194 | msgid "Send" 195 | msgstr "أرسل" 196 | 197 | #: templates/messages/inbox.html:8 198 | msgid "Received" 199 | msgstr "استُلمت" 200 | 201 | #: templates/messages/inbox.html:8 templates/messages/outbox.html:8 202 | #: templates/messages/trash.html:8 203 | msgid "Action" 204 | msgstr "إجراء" 205 | 206 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 207 | #: templates/messages/trash.html:17 templates/messages/view.html:11 208 | msgid "DATETIME_FORMAT" 209 | msgstr "DATETIME_FORMAT" 210 | 211 | #: templates/messages/inbox.html:21 templates/messages/outbox.html:18 212 | msgid "delete" 213 | msgstr "حذف" 214 | 215 | #: templates/messages/inbox.html:27 templates/messages/outbox.html:24 216 | #: templates/messages/trash.html:24 217 | msgid "No messages." 218 | msgstr "لا توجد رسائل." 219 | 220 | #: templates/messages/new_message.html:1 221 | #, python-format 222 | msgid "" 223 | "Hello %(recipient)s,\n" 224 | "\n" 225 | "you received a private message from %(sender)s with\n" 226 | "the following contents:" 227 | msgstr "" 228 | "مرحباً %(recipient)s،\n" 229 | "\n" 230 | "وصلتك رسالة خاصة من %(sender)s\n" 231 | "تحتوي ما يلي:" 232 | 233 | #: templates/messages/new_message.html:9 234 | #, python-format 235 | msgid "Sent from %(site_url)s" 236 | msgstr "أرسلت من %(site_url)s" 237 | 238 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 239 | msgid "Reply" 240 | msgstr "رد" 241 | 242 | #: templates/messages/outbox.html:8 243 | msgid "Sent" 244 | msgstr "أرسل" 245 | 246 | #: templates/messages/trash.html:4 247 | msgid "Deleted Messages" 248 | msgstr "الرسائل المحذوفة" 249 | 250 | #: templates/messages/trash.html:8 templates/messages/view.html:10 251 | msgid "Date" 252 | msgstr "التاريخ" 253 | 254 | #: templates/messages/trash.html:18 255 | msgid "undelete" 256 | msgstr "استرجاع" 257 | 258 | #: templates/messages/trash.html:27 259 | msgid "" 260 | "Deleted Messages are removed from the trash at unregular intervals, don't " 261 | "rely on this feature for long-time storage." 262 | msgstr "" 263 | "تتم إزالة الرسائل المحذوفة من الحاوية على فترات زمنيّة متفاوتة، " 264 | "فلا تعتمد على هذه الميزة للتخزين الطويل المدى." 265 | 266 | #: templates/messages/view.html:4 267 | msgid "View Message" 268 | msgstr "مشاهدة الرسالة" 269 | 270 | #: templates/messages/view.html:20 271 | msgid "Delete" 272 | msgstr "حذف" 273 | 274 | #: templates/notification/messages_deleted/notice.html:1 275 | #, python-format 276 | msgid "" 277 | "You have deleted the message %(message)s." 278 | msgstr "قمت بحذف الرسالة %(message)s." 279 | 280 | #: templates/notification/messages_received/notice.html:2 281 | #, python-format 282 | msgid "" 283 | "You have received the message %(message)s " 284 | "from %(message_sender)s." 285 | msgstr "" 286 | "وصلتك الرسالة %(message)s " 287 | "من %(message_sender)s." 288 | 289 | #: templates/notification/messages_recovered/notice.html:1 290 | #, python-format 291 | msgid "" 292 | "You have recovered the message %(message)s." 293 | msgstr "قمت باسترجاع الرسالة %(message)s." 294 | 295 | #: templates/notification/messages_replied/notice.html:2 296 | #, python-format 297 | msgid "" 298 | "You have replied to %(message_parent_msg)s " 299 | "from %(message_recipient)s." 300 | msgstr "" 301 | "قمت بالرد الرسائل %(message_parent_msg)s " 302 | "من %(message_recipient)s." 303 | 304 | #: templates/notification/messages_reply_received/notice.html:2 305 | #, python-format 306 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 307 | msgstr "أرسل لك %(message_sender)s رداً على %(message_parent_msg)s." 308 | 309 | #: templates/notification/messages_sent/notice.html:2 310 | #, python-format 311 | msgid "" 312 | "You have sent the message %(message)s to %" 313 | "(message_recipient)s." 314 | msgstr "" 315 | "قمت بإرسالة الرسالة %(message)s إلى %" 316 | "(message_recipient)s." 317 | 318 | -------------------------------------------------------------------------------- /django_messages/locale/ru/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Michail Sychev m.sychev@axion-rti.ru, 2009 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 20 | #: templates/messages/view.html:12 21 | msgid "Recipient" 22 | msgstr "Получатель" 23 | 24 | #: admin.py:15 25 | msgid "group" 26 | msgstr "Группа" 27 | 28 | #: admin.py:16 29 | msgid "Creates the message optionally for all users or a group of users." 30 | msgstr "Создать сообщения опционально для всех пользователей или группы" 31 | 32 | #: admin.py:23 33 | msgid "All users" 34 | msgstr "Все пользователи" 35 | 36 | #: admin.py:38 models.py:88 37 | msgid "Message" 38 | msgstr "Сообщение" 39 | 40 | #: admin.py:45 41 | msgid "Date/time" 42 | msgstr "Дата/Время" 43 | 44 | #: fields.py:53 45 | #, python-format 46 | msgid "The following usernames are incorrect: %(users)s" 47 | msgstr "Некорректные имена пользователей: %(users)s" 48 | 49 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 50 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 51 | #: templates/messages/view.html:6 52 | msgid "Subject" 53 | msgstr "Тема" 54 | 55 | #: forms.py:22 models.py:50 56 | msgid "Body" 57 | msgstr "Сообщение" 58 | 59 | #: management.py:9 60 | msgid "Message Received" 61 | msgstr "Сообщение получено" 62 | 63 | #: management.py:9 64 | msgid "you have received a message" 65 | msgstr "вы получили сообщение" 66 | 67 | #: management.py:10 68 | msgid "Message Sent" 69 | msgstr "Сообщение отправлено" 70 | 71 | #: management.py:10 72 | msgid "you have sent a message" 73 | msgstr "Вы отправили сообщение" 74 | 75 | #: management.py:11 76 | msgid "Message Replied" 77 | msgstr "Сообщение отвечено" 78 | 79 | #: management.py:11 80 | msgid "you have replied to a message" 81 | msgstr "вы ответили на сообщение" 82 | 83 | #: management.py:12 84 | msgid "Reply Received" 85 | msgstr "Ответ получен" 86 | 87 | #: management.py:12 88 | msgid "you have received a reply to a message" 89 | msgstr "вы получили ответ на сообщение" 90 | 91 | #: management.py:13 92 | msgid "Message Deleted" 93 | msgstr "Сообщение удалено" 94 | 95 | #: management.py:13 96 | msgid "you have deleted a message" 97 | msgstr "вы удалили сообщение" 98 | 99 | #: management.py:14 100 | msgid "Message Recovered" 101 | msgstr "Сообщение восстановлено" 102 | 103 | #: management.py:14 104 | msgid "you have undeleted a message" 105 | msgstr "вы восстановили сообщение" 106 | 107 | #: models.py:51 templates/messages/inbox.html:7 108 | #: templates/messages/trash.html:7 templates/messages/view.html:8 109 | msgid "Sender" 110 | msgstr "Отправитель" 111 | 112 | #: models.py:53 113 | msgid "Parent message" 114 | msgstr "Родительское сообщение" 115 | 116 | #: models.py:54 117 | msgid "sent at" 118 | msgstr "отправлено" 119 | 120 | #: models.py:55 121 | msgid "read at" 122 | msgstr "прочитано" 123 | 124 | #: models.py:56 125 | msgid "replied at" 126 | msgstr "отвечено" 127 | 128 | #: models.py:57 129 | msgid "Sender deleted at" 130 | msgstr "Отправитель удалил" 131 | 132 | #: models.py:58 133 | msgid "Recipient deleted at" 134 | msgstr "Получатель удалил" 135 | 136 | #: models.py:89 137 | msgid "Messages" 138 | msgstr "Сообщения" 139 | 140 | #: utils.py:27 141 | #, python-format 142 | msgid "New Message: %(subject)s" 143 | msgstr "Новое сообщение: %(subject)s" 144 | 145 | #: views.py:78 views.py:112 146 | msgid "Message successfully sent." 147 | msgstr "Сообщение успешно отправлено." 148 | 149 | #: views.py:118 150 | #, python-format 151 | msgid "" 152 | "%(sender)s wrote:\n" 153 | "%(body)s" 154 | msgstr "" 155 | "%(sender)s написал:\n" 156 | "%(body)s" 157 | 158 | #: views.py:122 159 | #, python-format 160 | msgid "Re: %(subject)s" 161 | msgstr "Re: %(subject)s" 162 | 163 | #: views.py:158 164 | msgid "Message successfully deleted." 165 | msgstr "Сообщение успешно удалено." 166 | 167 | #: views.py:185 168 | msgid "Message successfully recovered." 169 | msgstr "Сообщение успешно восстановлено." 170 | 171 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 172 | #: templates/messages/new_message.html:10 173 | msgid "Inbox" 174 | msgstr "Входящие" 175 | 176 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 177 | msgid "Sent Messages" 178 | msgstr "Исходящие" 179 | 180 | #: templates/messages/base.html:10 181 | msgid "New Message" 182 | msgstr "Новое сообщение" 183 | 184 | #: templates/messages/base.html:11 185 | msgid "Trash" 186 | msgstr "Удалённые" 187 | 188 | #: templates/messages/compose.html:4 189 | msgid "Compose Message" 190 | msgstr "Новое сообщение" 191 | 192 | #: templates/messages/compose.html:9 193 | msgid "Send" 194 | msgstr "Отправить" 195 | 196 | #: templates/messages/inbox.html:7 197 | msgid "Received" 198 | msgstr "Получено" 199 | 200 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 201 | #: templates/messages/trash.html:7 202 | msgid "Action" 203 | msgstr "Действия" 204 | 205 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 206 | #: templates/messages/trash.html:16 templates/messages/view.html:11 207 | msgid "DATETIME_FORMAT" 208 | msgstr "j. N Y, H:i" 209 | 210 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 211 | msgid "delete" 212 | msgstr "удалить" 213 | 214 | #: templates/messages/inbox.html:27 templates/messages/outbox.html:24 215 | #: templates/messages/trash.html:24 216 | msgid "No messages." 217 | msgstr "Сообщений нет." 218 | 219 | #: templates/messages/new_message.html:1 220 | #, python-format 221 | msgid "" 222 | "Hello %(recipient)s,\n" 223 | "\n" 224 | "you received a private message from %(sender)s with\n" 225 | "the following contents:" 226 | msgstr "" 227 | "Приветствуем, %(recipient)s!\n" 228 | "\n" 229 | "Вы получили сообщение от %(sender)s\n" 230 | "со следующим содержанием:" 231 | 232 | #: templates/messages/new_message.html:9 233 | #, python-format 234 | msgid "Sent from %(site_url)s" 235 | msgstr "Отправлено %(site_url)s" 236 | 237 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 238 | msgid "Reply" 239 | msgstr "Ответить" 240 | 241 | #: templates/messages/outbox.html:7 242 | msgid "Sent" 243 | msgstr "Отправлено" 244 | 245 | #: templates/messages/trash.html:4 246 | msgid "Deleted Messages" 247 | msgstr "Удалённые сообщения" 248 | 249 | #: templates/messages/trash.html:7 templates/messages/view.html:10 250 | msgid "Date" 251 | msgstr "Дата" 252 | 253 | #: templates/messages/trash.html:17 254 | msgid "undelete" 255 | msgstr "восстановить" 256 | 257 | #: templates/messages/trash.html:23 258 | msgid "" 259 | "Deleted Messages are removed from the trash at unregular intervals, don't " 260 | "rely on this feature for long-time storage." 261 | msgstr "" 262 | "Удалённые сообщения очищаются из корзины через произвольные интервалы,не " 263 | "используйте эту возможность как долгосрочное хранилище." 264 | 265 | #: templates/messages/view.html:4 266 | msgid "View Message" 267 | msgstr "Просмотр сообщений" 268 | 269 | #: templates/messages/view.html:20 270 | msgid "Delete" 271 | msgstr "Удалить" 272 | 273 | #: templates/notification/messages_deleted/notice.html:1 274 | #, python-format 275 | msgid "" 276 | "You have deleted the message %(message)s." 277 | msgstr "Вы удалили сообщение %(message)s." 278 | 279 | #: templates/notification/messages_received/notice.html:2 280 | #, python-format 281 | msgid "" 282 | "You have received the message %(message)s " 283 | "from %(message_sender)s." 284 | msgstr "" 285 | "Вы получили сообщение %(message)s от %" 286 | "(message_sender)s." 287 | 288 | #: templates/notification/messages_recovered/notice.html:1 289 | #, python-format 290 | msgid "" 291 | "You have recovered the message %(message)s." 292 | msgstr "Вы восстановили сообщение %(message)s." 293 | 294 | #: templates/notification/messages_replied/notice.html:2 295 | #, python-format 296 | msgid "" 297 | "You have replied to %(message_parent_msg)s " 298 | "from %(message_recipient)s." 299 | msgstr "" 300 | "Вы ответили на %(message_parent_msg)s от %" 301 | "(message_recipient)s." 302 | 303 | #: templates/notification/messages_reply_received/notice.html:2 304 | #, python-format 305 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 306 | msgstr "%(message_sender)s ответил на %(message_parent_msg)s." 307 | 308 | #: templates/notification/messages_sent/notice.html:2 309 | #, python-format 310 | msgid "" 311 | "You have sent the message %(message)s to %" 312 | "(message_recipient)s." 313 | msgstr "" 314 | "Вы отправили сообщение %(message)s " 315 | "получателям %(message_recipient)s." 316 | -------------------------------------------------------------------------------- /django_messages/locale/nl/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: django-messages-0.4.1\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: krisje8 \n" 14 | "Language-Team: krisje8 %(message)s." 273 | msgstr "" 274 | "Je hebt het bericht %(message)s verwijderd." 275 | 276 | #: templates/notification/messages_received/notice.html:2 277 | #, python-format 278 | msgid "" 279 | "You have received the message %(message)s " 280 | "from %(message_sender)s." 281 | msgstr "" 282 | "Je hebt het bericht %(message)s ontvangen " 283 | "van %(message_sender)s." 284 | 285 | #: templates/notification/messages_recovered/notice.html:1 286 | #, python-format 287 | msgid "" 288 | "You have recovered the message %(message)s." 289 | msgstr "" 290 | "Je hebt het bericht %(message)s hersteld." 291 | 292 | #: templates/notification/messages_replied/notice.html:2 293 | #, python-format 294 | msgid "" 295 | "You have replied to %(message_parent_msg)s " 296 | "from %(message_recipient)s." 297 | msgstr "" 298 | "Je hebt op %(message_parent_msg)s van %" 299 | "(message_recipient)s geantwoord." 300 | 301 | #: templates/notification/messages_reply_received/notice.html:2 302 | #, python-format 303 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 304 | msgstr "" 305 | "%(message_sender)s heeft je een antwoord op %(message_parent_msg)s gestuurd." 306 | 307 | #: templates/notification/messages_sent/notice.html:2 308 | #, python-format 309 | msgid "" 310 | "You have sent the message %(message)s to %" 311 | "(message_recipient)s." 312 | msgstr "" 313 | "Je hebt het bericht %(message)s naar %" 314 | "(message_recipient)s gestuurd." 315 | -------------------------------------------------------------------------------- /django_messages/locale/pt_BR/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Diego Martins , 2009. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2010-02-01 10:24+0100\n" 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: FULL NAME \n" 13 | "Language-Team: LANGUAGE \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | 18 | #: admin.py:19 forms.py:20 models.py:52 templates/messages/outbox.html:8 19 | #: templates/messages/view.html:12 20 | msgid "Recipient" 21 | msgstr "Usuário" 22 | 23 | #: admin.py:21 24 | msgid "group" 25 | msgstr "grupo" 26 | 27 | #: admin.py:22 28 | msgid "Creates the message optionally for all users or a group of users." 29 | msgstr "Cria a mensagem para todos os usuários ou para um grupo de usuários." 30 | 31 | #: admin.py:29 32 | msgid "All users" 33 | msgstr "Todos os usuários" 34 | 35 | #: admin.py:44 models.py:88 36 | msgid "Message" 37 | msgstr "Mensagem" 38 | 39 | #: admin.py:51 40 | msgid "Date/time" 41 | msgstr "Data/Hora" 42 | 43 | #: fields.py:53 44 | #, python-format 45 | msgid "The following usernames are incorrect: %(users)s" 46 | msgstr "Os seguintes nome de usuário estão incorretos: %(users)s" 47 | 48 | #: forms.py:21 models.py:49 templates/messages/inbox.html:8 49 | #: templates/messages/outbox.html:8 templates/messages/trash.html:8 50 | #: templates/messages/view.html:6 51 | msgid "Subject" 52 | msgstr "Assunto" 53 | 54 | #: forms.py:22 models.py:50 55 | msgid "Body" 56 | msgstr "Mensagem" 57 | 58 | #: management.py:9 59 | msgid "Message Received" 60 | msgstr "Mensagem Recebida" 61 | 62 | #: management.py:9 63 | msgid "you have received a message" 64 | msgstr "Você recebeu uma mensagem" 65 | 66 | #: management.py:10 67 | msgid "Message Sent" 68 | msgstr "Mensagem Enviada" 69 | 70 | #: management.py:10 71 | msgid "you have sent a message" 72 | msgstr "Você enviou uma mensagem" 73 | 74 | #: management.py:11 75 | msgid "Message Replied" 76 | msgstr "Mensagem Respondida" 77 | 78 | #: management.py:11 79 | msgid "you have replied to a message" 80 | msgstr "Você respondeu uma mensagem" 81 | 82 | #: management.py:12 83 | msgid "Reply Received" 84 | msgstr "Resposta Recebida" 85 | 86 | #: management.py:12 87 | msgid "you have received a reply to a message" 88 | msgstr "Você recebeu uma resposta de uma mensagem" 89 | 90 | #: management.py:13 91 | msgid "Message Deleted" 92 | msgstr "Mensagem excluída" 93 | 94 | #: management.py:13 95 | msgid "you have deleted a message" 96 | msgstr "Você excluiu uma mensagem" 97 | 98 | #: management.py:14 99 | msgid "Message Recovered" 100 | msgstr "Mensagem Recuperada" 101 | 102 | #: management.py:14 103 | msgid "you have undeleted a message" 104 | msgstr "Você recuperou uma mensagem" 105 | 106 | #: models.py:51 templates/messages/inbox.html:8 107 | #: templates/messages/trash.html:8 templates/messages/view.html:8 108 | msgid "Sender" 109 | msgstr "Remetente" 110 | 111 | #: models.py:53 112 | msgid "Parent message" 113 | msgstr "Mensagem pai" 114 | 115 | #: models.py:54 116 | msgid "sent at" 117 | msgstr "enviado à" 118 | 119 | #: models.py:55 120 | msgid "read at" 121 | msgstr "lido à" 122 | 123 | #: models.py:56 124 | msgid "replied at" 125 | msgstr "respondido à" 126 | 127 | #: models.py:57 128 | msgid "Sender deleted at" 129 | msgstr "Remetente excluiu à" 130 | 131 | #: models.py:58 132 | msgid "Recipient deleted at" 133 | msgstr "Destinatário excluiu à" 134 | 135 | #: models.py:89 136 | msgid "Messages" 137 | msgstr "Mensagens" 138 | 139 | #: utils.py:27 140 | #, python-format 141 | msgid "New Message: %(subject)s" 142 | msgstr "Nova Mensagem: %(subject)s" 143 | 144 | #: views.py:78 views.py:112 145 | msgid "Message successfully sent." 146 | msgstr "Mensagem enviada com sucesso." 147 | 148 | #: views.py:118 149 | #, python-format 150 | msgid "" 151 | "%(sender)s wrote:\n" 152 | "%(body)s" 153 | msgstr "" 154 | "%(sender)s escreveu:\n" 155 | "%(body)s" 156 | 157 | #: views.py:122 158 | #, python-format 159 | msgid "Re: %(subject)s" 160 | msgstr "Re: %(subject)s" 161 | 162 | #: views.py:158 163 | msgid "Message successfully deleted." 164 | msgstr "Mensagem excluida com sucesso." 165 | 166 | #: views.py:185 167 | msgid "Message successfully recovered." 168 | msgstr "Mensagem recuperada com sucesso." 169 | 170 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 171 | #: templates/messages/new_message.html:10 172 | msgid "Inbox" 173 | msgstr "Caixa de Entrada" 174 | 175 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 176 | msgid "Sent Messages" 177 | msgstr "Mensagens Enviadas" 178 | 179 | #: templates/messages/base.html:10 180 | msgid "New Message" 181 | msgstr "Nova Mensagem" 182 | 183 | #: templates/messages/base.html:11 184 | msgid "Trash" 185 | msgstr "Lixeira" 186 | 187 | #: templates/messages/compose.html:4 188 | msgid "Compose Message" 189 | msgstr "Escrever Mensagem" 190 | 191 | #: templates/messages/compose.html:9 192 | msgid "Send" 193 | msgstr "Enviar" 194 | 195 | #: templates/messages/inbox.html:8 196 | msgid "Received" 197 | msgstr "Recebida" 198 | 199 | #: templates/messages/inbox.html:8 templates/messages/outbox.html:8 200 | #: templates/messages/trash.html:8 201 | msgid "Action" 202 | msgstr "Ação" 203 | 204 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 205 | #: templates/messages/trash.html:17 templates/messages/view.html:11 206 | msgid "DATETIME_FORMAT" 207 | msgstr "DATETIME_FORMAT" 208 | 209 | #: templates/messages/inbox.html:21 templates/messages/outbox.html:18 210 | msgid "delete" 211 | msgstr "excluir" 212 | 213 | #: templates/messages/inbox.html:27 templates/messages/outbox.html:24 214 | #: templates/messages/trash.html:24 215 | msgid "No messages." 216 | msgstr "" 217 | 218 | #: templates/messages/new_message.html:1 219 | #, python-format 220 | msgid "" 221 | "Hello %(recipient)s,\n" 222 | "\n" 223 | "you received a private message from %(sender)s with\n" 224 | "the following contents:" 225 | msgstr "" 226 | "Ola %(recipient)s,\n" 227 | "\n" 228 | "Você recebeu uma mensagem privada de %(sender)s com\n" 229 | "o seguinte conteúdo:" 230 | 231 | #: templates/messages/new_message.html:9 232 | #, python-format 233 | msgid "Sent from %(site_url)s" 234 | msgstr "Enviado de %(site_url)s" 235 | 236 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 237 | msgid "Reply" 238 | msgstr "Responder" 239 | 240 | #: templates/messages/outbox.html:8 241 | msgid "Sent" 242 | msgstr "Enviada" 243 | 244 | #: templates/messages/trash.html:4 245 | msgid "Deleted Messages" 246 | msgstr "Mensagens Excluidas" 247 | 248 | #: templates/messages/trash.html:8 templates/messages/view.html:10 249 | msgid "Date" 250 | msgstr "Data" 251 | 252 | #: templates/messages/trash.html:18 253 | msgid "undelete" 254 | msgstr "recuperar" 255 | 256 | #: templates/messages/trash.html:27 257 | msgid "" 258 | "Deleted Messages are removed from the trash at unregular intervals, don't " 259 | "rely on this feature for long-time storage." 260 | msgstr "" 261 | "Mensagens excluidas são removidas da lixeira em intervalos de tempo não " 262 | "regulares,não use a lixeira para armazenar mensagens por muito tempo." 263 | 264 | #: templates/messages/view.html:4 265 | msgid "View Message" 266 | msgstr "Ver Mensagem" 267 | 268 | #: templates/messages/view.html:20 269 | msgid "Delete" 270 | msgstr "Excluir" 271 | 272 | #: templates/notification/messages_deleted/notice.html:1 273 | #, python-format 274 | msgid "" 275 | "You have deleted the message %(message)s." 276 | msgstr "Você excluiu a mensagem %(message)s." 277 | 278 | #: templates/notification/messages_received/notice.html:2 279 | #, python-format 280 | msgid "" 281 | "You have received the message %(message)s " 282 | "from %(message_sender)s." 283 | msgstr "" 284 | "Você recebeu a mensagem %(message)s de %" 285 | "(message_sender)s." 286 | 287 | #: templates/notification/messages_recovered/notice.html:1 288 | #, python-format 289 | msgid "" 290 | "You have recovered the message %(message)s." 291 | msgstr "Você recuperou a mensagem %(message)s." 292 | 293 | #: templates/notification/messages_replied/notice.html:2 294 | #, python-format 295 | msgid "" 296 | "You have replied to %(message_parent_msg)s " 297 | "from %(message_recipient)s." 298 | msgstr "" 299 | "Você respondeu a mensagem %(message_parent_msg)" 300 | "s de %(message_recipient)s." 301 | 302 | #: templates/notification/messages_reply_received/notice.html:2 303 | #, python-format 304 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 305 | msgstr "%(message_sender)s lhe enviou uma resposta a %(message_parent_msg)s." 306 | 307 | #: templates/notification/messages_sent/notice.html:2 308 | #, python-format 309 | msgid "" 310 | "You have sent the message %(message)s to %" 311 | "(message_recipient)s." 312 | msgstr "" 313 | "Você enviou a mensagem %(message)s para %" 314 | "(message_recipient)s." 315 | -------------------------------------------------------------------------------- /django_messages/locale/de/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2009-09-11 12:31-0700\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 20 | #: templates/messages/view.html:12 21 | msgid "Recipient" 22 | msgstr "Empfänger" 23 | 24 | #: admin.py:15 25 | msgid "group" 26 | msgstr "Gruppe" 27 | 28 | #: admin.py:16 29 | msgid "Creates the message optionally for all users or a group of users." 30 | msgstr "" 31 | "Fügt die Nachricht wahlweise für jeden Benutzer der ausgewählten Gruppe " 32 | "hinzu." 33 | 34 | #: admin.py:23 35 | msgid "All users" 36 | msgstr "Alle Benutzer" 37 | 38 | #: admin.py:38 models.py:88 39 | msgid "Message" 40 | msgstr "Nachricht" 41 | 42 | #: admin.py:45 43 | msgid "Date/time" 44 | msgstr "Datum/Zeit" 45 | 46 | #: fields.py:53 47 | #, python-format 48 | msgid "The following usernames are incorrect: %(users)s" 49 | msgstr "Die folgenden Benutzernamen sind nicht korrekt: %(users)s" 50 | 51 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 52 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 53 | #: templates/messages/view.html:6 54 | msgid "Subject" 55 | msgstr "Betreff" 56 | 57 | #: forms.py:22 models.py:50 58 | msgid "Body" 59 | msgstr "Inhalt" 60 | 61 | #: management.py:9 62 | msgid "Message Received" 63 | msgstr "Nachricht erhalten" 64 | 65 | #: management.py:9 66 | msgid "you have received a message" 67 | msgstr "Du hast eine Nachricht erhalten" 68 | 69 | #: management.py:10 70 | msgid "Message Sent" 71 | msgstr "Nachricht gesendet" 72 | 73 | #: management.py:10 74 | msgid "you have sent a message" 75 | msgstr "Du hast eine Nachricht gesendet" 76 | 77 | #: management.py:11 78 | msgid "Message Replied" 79 | msgstr "Nachricht beantwortet" 80 | 81 | #: management.py:11 82 | msgid "you have replied to a message" 83 | msgstr "Du hast eine Nachricht beantwortet" 84 | 85 | #: management.py:12 86 | msgid "Reply Received" 87 | msgstr "Antwort erhalten" 88 | 89 | #: management.py:12 90 | msgid "you have received a reply to a message" 91 | msgstr "Du hast eine Antwort auf eine Nachricht erhalten" 92 | 93 | #: management.py:13 94 | msgid "Message Deleted" 95 | msgstr "Nachricht gelöscht" 96 | 97 | #: management.py:13 98 | msgid "you have deleted a message" 99 | msgstr "Du hast eine Nachricht gelöscht" 100 | 101 | #: management.py:14 102 | msgid "Message Recovered" 103 | msgstr "Nachricht wiederhergestellt" 104 | 105 | #: management.py:14 106 | msgid "you have undeleted a message" 107 | msgstr "Du hast eine Nachricht wiederhergestellt" 108 | 109 | #: models.py:51 templates/messages/inbox.html:7 110 | #: templates/messages/trash.html:7 templates/messages/view.html:8 111 | msgid "Sender" 112 | msgstr "Absender" 113 | 114 | #: models.py:53 115 | msgid "Parent message" 116 | msgstr "Übergeordnete Nachricht" 117 | 118 | #: models.py:54 119 | msgid "sent at" 120 | msgstr "gesendet am" 121 | 122 | #: models.py:55 123 | msgid "read at" 124 | msgstr "gelesen am" 125 | 126 | #: models.py:56 127 | msgid "replied at" 128 | msgstr "beantwortet am" 129 | 130 | #: models.py:57 131 | msgid "Sender deleted at" 132 | msgstr "Vom Absender gelöscht" 133 | 134 | #: models.py:58 135 | msgid "Recipient deleted at" 136 | msgstr "Vom Empfänger gelöscht" 137 | 138 | #: models.py:89 139 | msgid "Messages" 140 | msgstr "Nachrichten" 141 | 142 | #: utils.py:27 143 | #, python-format 144 | msgid "New Message: %(subject)s" 145 | msgstr "Neue Nachricht: %(subject)s" 146 | 147 | #: views.py:78 views.py:112 148 | msgid "Message successfully sent." 149 | msgstr "Nachricht erfolgreich gesendet." 150 | 151 | #: views.py:118 152 | #, python-format 153 | msgid "" 154 | "%(sender)s wrote:\n" 155 | "%(body)s" 156 | msgstr "" 157 | "%(sender)s schrieb:\n" 158 | "%(body)s" 159 | 160 | #: views.py:122 161 | #, python-format 162 | msgid "Re: %(subject)s" 163 | msgstr "Re: %(subject)s" 164 | 165 | #: views.py:158 166 | msgid "Message successfully deleted." 167 | msgstr "Nachricht erfolgreich gelöscht." 168 | 169 | #: views.py:185 170 | msgid "Message successfully recovered." 171 | msgstr "Nachricht erfolgreich wiederhergestellt." 172 | 173 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 174 | #: templates/messages/new_message.html:10 175 | msgid "Inbox" 176 | msgstr "Posteingang" 177 | 178 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 179 | msgid "Sent Messages" 180 | msgstr "Gesendete Nachrichten" 181 | 182 | #: templates/messages/base.html:10 183 | msgid "New Message" 184 | msgstr "Neue Nachricht" 185 | 186 | #: templates/messages/base.html:11 187 | msgid "Trash" 188 | msgstr "Papierkorb" 189 | 190 | #: templates/messages/compose.html:4 191 | msgid "Compose Message" 192 | msgstr "Nachricht verfassen" 193 | 194 | #: templates/messages/compose.html:9 195 | msgid "Send" 196 | msgstr "Senden" 197 | 198 | #: templates/messages/inbox.html:7 199 | msgid "Received" 200 | msgstr "Erhalten" 201 | 202 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 203 | #: templates/messages/trash.html:7 204 | msgid "Action" 205 | msgstr "Aktion" 206 | 207 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 208 | #: templates/messages/trash.html:16 templates/messages/view.html:11 209 | msgid "DATETIME_FORMAT" 210 | msgstr "j. N Y, H:i" 211 | 212 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 213 | msgid "delete" 214 | msgstr "löschen" 215 | 216 | #: templates/messages/inbox.html:27 templates/messages/outbox.html:24 217 | #: templates/messages/trash.html:24 218 | msgid "No messages." 219 | msgstr "Keine Nachrichten." 220 | 221 | #: templates/messages/new_message.html:1 222 | #, python-format 223 | msgid "" 224 | "Hello %(recipient)s,\n" 225 | "\n" 226 | "you received a private message from %(sender)s with\n" 227 | "the following contents:" 228 | msgstr "" 229 | "Hallo %(recipient)s,\n" 230 | "\n" 231 | "du hast eine private Nachricht von %(sender)s mit\n" 232 | "dem folgenden Inhalt erhalten:" 233 | 234 | #: templates/messages/new_message.html:9 235 | #, python-format 236 | msgid "Sent from %(site_url)s" 237 | msgstr "Gesendet von %(site_url)s" 238 | 239 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 240 | msgid "Reply" 241 | msgstr "Antworten" 242 | 243 | #: templates/messages/outbox.html:7 244 | msgid "Sent" 245 | msgstr "Gesendet" 246 | 247 | #: templates/messages/trash.html:4 248 | msgid "Deleted Messages" 249 | msgstr "Gelöschte Nachrichten" 250 | 251 | #: templates/messages/trash.html:7 templates/messages/view.html:10 252 | msgid "Date" 253 | msgstr "Datum" 254 | 255 | #: templates/messages/trash.html:17 256 | msgid "undelete" 257 | msgstr "wiederherstellen" 258 | 259 | #: templates/messages/trash.html:23 260 | msgid "" 261 | "Deleted Messages are removed from the trash at unregular intervals, don't " 262 | "rely on this feature for long-time storage." 263 | msgstr "" 264 | "Gelöschte Nachrichten werden in unregelmäßigen Intervallen entfernt, verlass " 265 | "dich nicht drauf, dass diese Nachrichten hier lange gespeichert werden." 266 | 267 | #: templates/messages/view.html:4 268 | msgid "View Message" 269 | msgstr "Nachrichtendetails" 270 | 271 | #: templates/messages/view.html:20 272 | msgid "Delete" 273 | msgstr "Löschen" 274 | 275 | #: templates/notification/messages_deleted/notice.html:1 276 | #, python-format 277 | msgid "" 278 | "You have deleted the message %(message)s." 279 | msgstr "" 280 | "Du hast die Nachricht %(message)s gelöscht." 281 | 282 | #: templates/notification/messages_received/notice.html:2 283 | #, python-format 284 | msgid "" 285 | "You have received the message %(message)s " 286 | "from %(message_sender)s." 287 | msgstr "" 288 | "Du hast die Nachricht %(message)s von %" 289 | "(message_sender)s erhalten." 290 | 291 | #: templates/notification/messages_recovered/notice.html:1 292 | #, python-format 293 | msgid "" 294 | "You have recovered the message %(message)s." 295 | msgstr "" 296 | "Du hast die Nachricht %(message)s " 297 | "wiederhergestellt." 298 | 299 | #: templates/notification/messages_replied/notice.html:2 300 | #, python-format 301 | msgid "" 302 | "You have replied to %(message_parent_msg)s " 303 | "from %(message_recipient)s." 304 | msgstr "" 305 | "Du hast auf die Nachricht %(message_parent_msg)" 306 | "s von %(message_recipient)s geantwortet." 307 | 308 | #: templates/notification/messages_reply_received/notice.html:2 309 | #, python-format 310 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 311 | msgstr "" 312 | "%(message_sender)s hat dir eine Antwort auf %(message_parent_msg)s gesendet." 313 | 314 | #: templates/notification/messages_sent/notice.html:2 315 | #, python-format 316 | msgid "" 317 | "You have sent the message %(message)s to %" 318 | "(message_recipient)s." 319 | msgstr "" 320 | "Du hast die Nachricht %(message)s an %" 321 | "(message_recipient)s gesendet." 322 | -------------------------------------------------------------------------------- /django_messages/views.py: -------------------------------------------------------------------------------- 1 | from django.http import Http404, HttpResponseRedirect 2 | from django.shortcuts import render, get_object_or_404 3 | from django.template import RequestContext 4 | from django.contrib import messages 5 | from django.contrib.auth.decorators import login_required 6 | from django.utils.translation import ugettext as _ 7 | from django.utils import timezone 8 | try: 9 | from django.core.urlresolvers import reverse 10 | except ImportError: 11 | from django.urls import reverse 12 | from django.conf import settings 13 | 14 | from django_messages.models import Message 15 | from django_messages.forms import ComposeForm 16 | from django_messages.utils import format_quote, get_user_model, get_username_field 17 | 18 | User = get_user_model() 19 | 20 | if "pinax.notifications" in settings.INSTALLED_APPS and getattr(settings, 'DJANGO_MESSAGES_NOTIFY', True): 21 | from pinax.notifications import models as notification 22 | else: 23 | notification = None 24 | 25 | @login_required 26 | def inbox(request, template_name='django_messages/inbox.html'): 27 | """ 28 | Displays a list of received messages for the current user. 29 | Optional Arguments: 30 | ``template_name``: name of the template to use. 31 | """ 32 | message_list = Message.objects.inbox_for(request.user) 33 | return render(request, template_name, { 34 | 'message_list': message_list, 35 | }) 36 | 37 | @login_required 38 | def outbox(request, template_name='django_messages/outbox.html'): 39 | """ 40 | Displays a list of sent messages by the current user. 41 | Optional arguments: 42 | ``template_name``: name of the template to use. 43 | """ 44 | message_list = Message.objects.outbox_for(request.user) 45 | return render(request, template_name, { 46 | 'message_list': message_list, 47 | }) 48 | 49 | @login_required 50 | def trash(request, template_name='django_messages/trash.html'): 51 | """ 52 | Displays a list of deleted messages. 53 | Optional arguments: 54 | ``template_name``: name of the template to use 55 | Hint: A Cron-Job could periodicly clean up old messages, which are deleted 56 | by sender and recipient. 57 | """ 58 | message_list = Message.objects.trash_for(request.user) 59 | return render(request, template_name, { 60 | 'message_list': message_list, 61 | }) 62 | 63 | @login_required 64 | def compose(request, recipient=None, form_class=ComposeForm, 65 | template_name='django_messages/compose.html', success_url=None, 66 | recipient_filter=None): 67 | """ 68 | Displays and handles the ``form_class`` form to compose new messages. 69 | Required Arguments: None 70 | Optional Arguments: 71 | ``recipient``: username of a `django.contrib.auth` User, who should 72 | receive the message, optionally multiple usernames 73 | could be separated by a '+' 74 | ``form_class``: the form-class to use 75 | ``template_name``: the template to use 76 | ``success_url``: where to redirect after successfull submission 77 | ``recipient_filter``: a function which receives a user object and 78 | returns a boolean wether it is an allowed 79 | recipient or not 80 | 81 | Passing GET parameter ``subject`` to the view allows pre-filling the 82 | subject field of the form. 83 | """ 84 | if request.method == "POST": 85 | sender = request.user 86 | form = form_class(request.POST, recipient_filter=recipient_filter) 87 | if form.is_valid(): 88 | form.save(sender=request.user) 89 | messages.info(request, _(u"Message successfully sent.")) 90 | if success_url is None: 91 | success_url = reverse('messages_inbox') 92 | if 'next' in request.GET: 93 | success_url = request.GET['next'] 94 | return HttpResponseRedirect(success_url) 95 | else: 96 | form = form_class(initial={"subject": request.GET.get("subject", "")}) 97 | if recipient is not None: 98 | recipients = [u for u in User.objects.filter(**{'%s__in' % get_username_field(): [r.strip() for r in recipient.split('+')]})] 99 | form.fields['recipient'].initial = recipients 100 | return render(request, template_name, { 101 | 'form': form, 102 | }) 103 | 104 | @login_required 105 | def reply(request, message_id, form_class=ComposeForm, 106 | template_name='django_messages/compose.html', success_url=None, 107 | recipient_filter=None, quote_helper=format_quote, 108 | subject_template=_(u"Re: %(subject)s"),): 109 | """ 110 | Prepares the ``form_class`` form for writing a reply to a given message 111 | (specified via ``message_id``). Uses the ``format_quote`` helper from 112 | ``messages.utils`` to pre-format the quote. To change the quote format 113 | assign a different ``quote_helper`` kwarg in your url-conf. 114 | 115 | """ 116 | parent = get_object_or_404(Message, id=message_id) 117 | 118 | if parent.sender != request.user and parent.recipient != request.user: 119 | raise Http404 120 | 121 | if request.method == "POST": 122 | sender = request.user 123 | form = form_class(request.POST, recipient_filter=recipient_filter) 124 | if form.is_valid(): 125 | form.save(sender=request.user, parent_msg=parent) 126 | messages.info(request, _(u"Message successfully sent.")) 127 | if success_url is None: 128 | success_url = reverse('messages_inbox') 129 | return HttpResponseRedirect(success_url) 130 | else: 131 | form = form_class(initial={ 132 | 'body': quote_helper(parent.sender, parent.body), 133 | 'subject': subject_template % {'subject': parent.subject}, 134 | 'recipient': [parent.sender,] 135 | }) 136 | return render(request, template_name, { 137 | 'form': form, 138 | }) 139 | 140 | @login_required 141 | def delete(request, message_id, success_url=None): 142 | """ 143 | Marks a message as deleted by sender or recipient. The message is not 144 | really removed from the database, because two users must delete a message 145 | before it's save to remove it completely. 146 | A cron-job should prune the database and remove old messages which are 147 | deleted by both users. 148 | As a side effect, this makes it easy to implement a trash with undelete. 149 | 150 | You can pass ?next=/foo/bar/ via the url to redirect the user to a different 151 | page (e.g. `/foo/bar/`) than ``success_url`` after deletion of the message. 152 | """ 153 | user = request.user 154 | now = timezone.now() 155 | message = get_object_or_404(Message, id=message_id) 156 | deleted = False 157 | if success_url is None: 158 | success_url = reverse('messages_inbox') 159 | if 'next' in request.GET: 160 | success_url = request.GET['next'] 161 | if message.sender == user: 162 | message.sender_deleted_at = now 163 | deleted = True 164 | if message.recipient == user: 165 | message.recipient_deleted_at = now 166 | deleted = True 167 | if deleted: 168 | message.save() 169 | messages.info(request, _(u"Message successfully deleted.")) 170 | if notification: 171 | notification.send([user], "messages_deleted", {'message': message,}) 172 | return HttpResponseRedirect(success_url) 173 | raise Http404 174 | 175 | @login_required 176 | def undelete(request, message_id, success_url=None): 177 | """ 178 | Recovers a message from trash. This is achieved by removing the 179 | ``(sender|recipient)_deleted_at`` from the model. 180 | """ 181 | user = request.user 182 | message = get_object_or_404(Message, id=message_id) 183 | undeleted = False 184 | if success_url is None: 185 | success_url = reverse('messages_inbox') 186 | if 'next' in request.GET: 187 | success_url = request.GET['next'] 188 | if message.sender == user: 189 | message.sender_deleted_at = None 190 | undeleted = True 191 | if message.recipient == user: 192 | message.recipient_deleted_at = None 193 | undeleted = True 194 | if undeleted: 195 | message.save() 196 | messages.info(request, _(u"Message successfully recovered.")) 197 | if notification: 198 | notification.send([user], "messages_recovered", {'message': message,}) 199 | return HttpResponseRedirect(success_url) 200 | raise Http404 201 | 202 | @login_required 203 | def view(request, message_id, form_class=ComposeForm, quote_helper=format_quote, 204 | subject_template=_(u"Re: %(subject)s"), 205 | template_name='django_messages/view.html'): 206 | """ 207 | Shows a single message.``message_id`` argument is required. 208 | The user is only allowed to see the message, if he is either 209 | the sender or the recipient. If the user is not allowed a 404 210 | is raised. 211 | If the user is the recipient and the message is unread 212 | ``read_at`` is set to the current datetime. 213 | If the user is the recipient a reply form will be added to the 214 | tenplate context, otherwise 'reply_form' will be None. 215 | """ 216 | user = request.user 217 | now = timezone.now() 218 | message = get_object_or_404(Message, id=message_id) 219 | if (message.sender != user) and (message.recipient != user): 220 | raise Http404 221 | if message.read_at is None and message.recipient == user: 222 | message.read_at = now 223 | message.save() 224 | 225 | context = {'message': message, 'reply_form': None} 226 | if message.recipient == user: 227 | form = form_class(initial={ 228 | 'body': quote_helper(message.sender, message.body), 229 | 'subject': subject_template % {'subject': message.subject}, 230 | 'recipient': [message.sender,] 231 | }) 232 | context['reply_form'] = form 233 | return render(request, template_name, context) 234 | -------------------------------------------------------------------------------- /django_messages/locale/it/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Sergio Morstabilini , 2010. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: messages\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2010-03-03 12:31-0700\n" 11 | "PO-Revision-Date: 2010-03-03 21:58+0100\n" 12 | "Last-Translator: Sergio Morstabilini \n" 13 | "Language-Team: Sergio Morstabilini \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Poedit-Language: Italian\n" 19 | 20 | #: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7 21 | #: templates/messages/view.html:12 22 | msgid "Recipient" 23 | msgstr "Destinatario" 24 | 25 | #: admin.py:38 models.py:88 26 | msgid "Message" 27 | msgstr "Messaggio" 28 | 29 | #: forms.py:21 models.py:49 templates/messages/inbox.html:7 30 | #: templates/messages/outbox.html:7 templates/messages/trash.html:7 31 | #: templates/messages/view.html:6 32 | msgid "Subject" 33 | msgstr "Oggetto" 34 | 35 | #: forms.py:22 models.py:50 36 | msgid "Body" 37 | msgstr "Messaggio" 38 | 39 | #: management.py:9 40 | msgid "Message Received" 41 | msgstr "Messaggio Ricevuto" 42 | 43 | #: management.py:9 44 | msgid "you have received a message" 45 | msgstr "hai ricevuto un messaggio" 46 | 47 | #: management.py:10 48 | msgid "Message Sent" 49 | msgstr "Messaggio Inviato" 50 | 51 | #: management.py:10 52 | msgid "you have sent a message" 53 | msgstr "hai inviato un messaggio" 54 | 55 | #: management.py:11 56 | msgid "Message Replied" 57 | msgstr "Risposta Inviata" 58 | 59 | #: management.py:11 60 | msgid "you have replied to a message" 61 | msgstr "hai risposto ad un messaggio" 62 | 63 | #: management.py:12 64 | msgid "Reply Received" 65 | msgstr "Risposta Ricevuta" 66 | 67 | #: management.py:12 68 | msgid "you have received a reply to a message" 69 | msgstr "hai ricevuto una risposta ad un messaggio" 70 | 71 | #: management.py:13 72 | msgid "Message Deleted" 73 | msgstr "Messaggio Cancellato" 74 | 75 | #: management.py:13 76 | msgid "you have deleted a message" 77 | msgstr "hai cancellato un messaggio" 78 | 79 | #: management.py:14 80 | msgid "Message Recovered" 81 | msgstr "Messaggio Ripristinato" 82 | 83 | #: management.py:14 84 | msgid "you have undeleted a message" 85 | msgstr "hai ripristinato un messaggio" 86 | 87 | #: models.py:51 templates/messages/inbox.html:7 88 | #: templates/messages/trash.html:7 templates/messages/view.html:8 89 | msgid "Sender" 90 | msgstr "Mittente" 91 | 92 | #: models.py:53 93 | msgid "Parent message" 94 | msgstr "In risposta a" 95 | 96 | #: models.py:54 97 | msgid "sent at" 98 | msgstr "inviato il" 99 | 100 | #: models.py:55 101 | msgid "read at" 102 | msgstr "letto il" 103 | 104 | #: models.py:56 105 | msgid "replied at" 106 | msgstr "risposto il" 107 | 108 | #: models.py:57 109 | msgid "Sender deleted at" 110 | msgstr "Mittente cancellato il" 111 | 112 | #: models.py:58 113 | msgid "Recipient deleted at" 114 | msgstr "Destinatario cancellato il" 115 | 116 | #: models.py:89 117 | msgid "Messages" 118 | msgstr "Messaggi" 119 | 120 | #: views.py:78 views.py:112 121 | msgid "Message successfully sent." 122 | msgstr "Messaggio inviato con successo." 123 | 124 | #: views.py:118 125 | #, python-format 126 | msgid "" 127 | "%(sender)s wrote:\n" 128 | "%(body)s" 129 | msgstr "" 130 | "%(sender)s ha scritto:\n" 131 | "%(body)s" 132 | 133 | #: views.py:122 134 | #, python-format 135 | msgid "Re: %(subject)s" 136 | msgstr "Re: %(subject)s" 137 | 138 | #: views.py:158 139 | msgid "Message successfully deleted." 140 | msgstr "Messaggio cancellato con successo." 141 | 142 | #: views.py:185 143 | msgid "Message successfully recovered." 144 | msgstr "Messaggio recuperato con successo." 145 | 146 | #: templates/messages/base.html:8 templates/messages/inbox.html:4 147 | #: templates/messages/new_message.html:10 148 | msgid "Inbox" 149 | msgstr "Messaggi Ricevuti" 150 | 151 | #: templates/messages/base.html:9 templates/messages/outbox.html:4 152 | msgid "Sent Messages" 153 | msgstr "Messaggi Inviati" 154 | 155 | #: templates/messages/base.html:10 156 | msgid "New Message" 157 | msgstr "Nuovo Messaggio" 158 | 159 | #: templates/messages/base.html:11 160 | msgid "Trash" 161 | msgstr "Cestino" 162 | 163 | #: templates/messages/compose.html:4 164 | msgid "Compose Message" 165 | msgstr "Scrivi Messaggio" 166 | 167 | #: templates/messages/compose.html:9 168 | msgid "Send" 169 | msgstr "Invia" 170 | 171 | #: templates/messages/inbox.html:7 172 | msgid "Received" 173 | msgstr "Ricevuto" 174 | 175 | #: templates/messages/inbox.html:7 templates/messages/outbox.html:7 176 | #: templates/messages/trash.html:7 177 | msgid "Action" 178 | msgstr "Azione" 179 | 180 | #: templates/messages/inbox.html:19 templates/messages/outbox.html:16 181 | #: templates/messages/trash.html:16 templates/messages/view.html:11 182 | msgid "DATETIME_FORMAT" 183 | msgstr "j F Y, G:i" 184 | 185 | #: templates/messages/inbox.html:20 templates/messages/outbox.html:17 186 | msgid "delete" 187 | msgstr "cancella" 188 | 189 | #: templates/messages/new_message.html:9 190 | #, python-format 191 | msgid "Sent from %(site_url)s" 192 | msgstr "Spedito da %(site_url)s" 193 | 194 | #: templates/messages/new_message.html:11 templates/messages/view.html:18 195 | msgid "Reply" 196 | msgstr "Rispondi" 197 | 198 | #: templates/messages/outbox.html:7 199 | msgid "Sent" 200 | msgstr "Spedito" 201 | 202 | #: templates/messages/trash.html:4 203 | msgid "Deleted Messages" 204 | msgstr "Messaggi Cancellati" 205 | 206 | #: templates/messages/trash.html:7 templates/messages/view.html:10 207 | msgid "Date" 208 | msgstr "Data" 209 | 210 | #: templates/messages/trash.html:17 211 | msgid "undelete" 212 | msgstr "ripristina" 213 | 214 | #: templates/messages/trash.html:23 215 | msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." 216 | msgstr "I messaggi cancellati sono rimossi dal cestino ad intervalli irregolari, non affidatevi a questa cartella per salvare messaggi a lungo termine." 217 | 218 | #: templates/messages/view.html:4 219 | msgid "View Message" 220 | msgstr "Vedi Messaggio" 221 | 222 | #: templates/messages/view.html:20 223 | msgid "Delete" 224 | msgstr "Cancella" 225 | 226 | #: templates/notification/messages_deleted/notice.html:1 227 | #, python-format 228 | msgid "You have deleted the message %(message)s." 229 | msgstr "Hai cancellato il messaggio %(message)s." 230 | 231 | #: templates/notification/messages_recovered/notice.html:1 232 | #, python-format 233 | msgid "You have recovered the message %(message)s." 234 | msgstr "Hai ripristinato il messaggio %(message)s." 235 | 236 | #: templates/notification/messages_received/notice.html:2 237 | #, python-format 238 | msgid "You have received the message %(message)s from %(message_sender)s." 239 | msgstr "Hai ricevuto il messaggio %(message)s da %(message_sender)s." 240 | 241 | #: templates/notification/messages_reply_received/notice.html:2 242 | #, python-format 243 | msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s." 244 | msgstr "%(message_sender)s ha mandato una risposta a %(message_parent_msg)s." 245 | 246 | #: templates/notification/messages_sent/notice.html:2 247 | #, python-format 248 | msgid "You have sent the message %(message)s to %(message_recipient)s." 249 | msgstr "Hai inviato il messaggio %(message)s a %(message_recipient)s." 250 | 251 | #: templates/notification/messages_replied/notice.html:2 252 | #, python-format 253 | msgid "You have replied to %(message_parent_msg)s from %(message_recipient)s." 254 | msgstr "Hai risposto a %(message_parent_msg)s ricevuto da %(message_recipient)s." 255 | 256 | #: templates/messages/new_message.html:1 257 | #, python-format 258 | msgid "" 259 | "Hello %(recipient)s,\n" 260 | "\n" 261 | "you received a private message from %(sender)s with\n" 262 | "the following contents:" 263 | msgstr "" 264 | "Ciao %(recipient)s,\n" 265 | "\n" 266 | "hai ricevuto un messaggio privato da %(sender)s con\n" 267 | "il seguente contenuto:" 268 | 269 | #: admin.py:16 270 | msgid "Creates the message optionally for all users or a group of users." 271 | msgstr "Crea il messaggio facoltativamente per tutti gli utenti o per un gruppo di utenti." 272 | 273 | #: admin.py:15 274 | msgid "group" 275 | msgstr "gruppo" 276 | 277 | #: admin.py:23 278 | msgid "All users" 279 | msgstr "Tutti gli utenti" 280 | 281 | #: fields.py:53 282 | #, python-format 283 | msgid "The following usernames are incorrect: %(users)s" 284 | msgstr "I seguenti nomi utente sono incorretti: %(users)s" 285 | 286 | #: admin.py:45 287 | msgid "Date/time" 288 | msgstr "Data/ora" 289 | 290 | #: utils.py:27 291 | #, python-format 292 | msgid "New Message: %(subject)s" 293 | msgstr "Nuovo Messaggio: %(subject)s" 294 | 295 | #~ msgid "There is no user with this username." 296 | #~ msgstr "Non esiste un utente con questo nome." 297 | 298 | #~ msgid "New Message:" 299 | #~ msgstr "Nuovo Messaggio:" 300 | 301 | #~ msgid "You have deleted the message '%(message)s'." 302 | #~ msgstr "Hai cancellato il messaggio '%(message)s'." 303 | 304 | #~ msgid "You have received a message from %(message_sender)s." 305 | #~ msgstr "Hai ricevuto un messaggio da %(message_sender)s." 306 | 307 | #~ msgid "You have recovered the message '%(message)s'." 308 | #~ msgstr "Hai ripristinato il messaggio '%(message)s'." 309 | 310 | #~ msgid "You have replied to '%(message_parent_msg)s' from %(message_recipient)s." 311 | #~ msgstr "Hai risposto a '%(message_parent_msg)s' ricevuto da %(message_recipient)s." 312 | 313 | #~ msgid "%(message_sender)s has sent you a reply to '%(message_parent_msg)s'." 314 | #~ msgstr "%(message_sender)s ha risposto a '%(message_parent_msg)s'." 315 | 316 | #~ msgid "You have sent the message '%(message)s' to %(message_recipient)s." 317 | #~ msgstr "Hai spedito il messaggio '%(message)s' a %(message_recipient)s." 318 | --------------------------------------------------------------------------------