diff --git a/emencia/__init__.py b/emencia/__init__.py new file mode 100644 index 00000000..f48ad105 --- /dev/null +++ b/emencia/__init__.py @@ -0,0 +1,6 @@ +# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) diff --git a/emencia/django/__init__.py b/emencia/django/__init__.py new file mode 100644 index 00000000..f48ad105 --- /dev/null +++ b/emencia/django/__init__.py @@ -0,0 +1,6 @@ +# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) diff --git a/emencia/django/newsletter/__init__.py b/emencia/django/newsletter/__init__.py new file mode 100644 index 00000000..8cd2bd61 --- /dev/null +++ b/emencia/django/newsletter/__init__.py @@ -0,0 +1,8 @@ +"""emencia.django.newsletter""" +__version__ = '0.3.dev' +__license__ = 'BSD License' + +__author__ = 'Fantomas42' +__email__ = 'fantomas42@gmail.com' + +__url__ = 'http://emencia.fr/' diff --git a/emencia/django/newsletter/admin/__init__.py b/emencia/django/newsletter/admin/__init__.py new file mode 100644 index 00000000..9105faf4 --- /dev/null +++ b/emencia/django/newsletter/admin/__init__.py @@ -0,0 +1,35 @@ +"""Admin for emencia.django.newsletter""" +from django.contrib import admin +from django.conf import settings + +from emencia.django.newsletter.models import Link +from emencia.django.newsletter.models import Contact +from emencia.django.newsletter.models import WorkGroup +from emencia.django.newsletter.models import SMTPServer +from emencia.django.newsletter.models import Newsletter +from emencia.django.newsletter.models import MailingList +from emencia.django.newsletter.models import ContactMailingStatus + +from emencia.django.newsletter.settings import USE_WORKGROUPS +from emencia.django.newsletter.admin.contact import ContactAdmin +from emencia.django.newsletter.admin.workgroup import WorkGroupAdmin +from emencia.django.newsletter.admin.newsletter import NewsletterAdmin +from emencia.django.newsletter.admin.smtpserver import SMTPServerAdmin +from emencia.django.newsletter.admin.mailinglist import MailingListAdmin + + +admin.site.register(Contact, ContactAdmin) +admin.site.register(SMTPServer, SMTPServerAdmin) +admin.site.register(Newsletter, NewsletterAdmin) +admin.site.register(MailingList, MailingListAdmin) + +if USE_WORKGROUPS: + admin.site.register(WorkGroup, WorkGroupAdmin) + + +class LinkAdmin(admin.ModelAdmin): + list_display = ('title', 'url', 'creation_date') + +if settings.DEBUG: + admin.site.register(Link, LinkAdmin) + admin.site.register(ContactMailingStatus) diff --git a/emencia/django/newsletter/admin/contact.py b/emencia/django/newsletter/admin/contact.py new file mode 100644 index 00000000..3d5de5a3 --- /dev/null +++ b/emencia/django/newsletter/admin/contact.py @@ -0,0 +1,184 @@ +"""ModelAdmin for Contact""" +import StringIO +from django.conf import settings +from datetime import datetime + +from django.contrib import admin +from django.dispatch import Signal +from django.conf.urls.defaults import url +from django.conf.urls.defaults import patterns +from django.core.urlresolvers import reverse +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.utils.translation import ugettext_lazy as _ +from django.http import HttpResponseRedirect +from django.contrib.admin.views.main import ChangeList +from django.db import DatabaseError + +from emencia.django.newsletter.models import MailingList +from emencia.django.newsletter.settings import USE_WORKGROUPS +from emencia.django.newsletter.utils.importation import import_dispatcher +from emencia.django.newsletter.utils.workgroups import request_workgroups +from emencia.django.newsletter.utils.workgroups import request_workgroups_contacts_pk +from emencia.django.newsletter.utils.vcard import vcard_contacts_export_response +from emencia.django.newsletter.utils.excel import ExcelResponse + + +contacts_imported = Signal(providing_args=['source', 'type']) + + +class ContactAdmin(admin.ModelAdmin): + date_hierarchy = 'creation_date' + list_display = ('email', 'first_name', 'last_name', 'tags', 'tester', 'subscriber', + 'valid', 'total_subscriptions', 'creation_date', 'related_object_admin') + list_filter = ('subscriber', 'valid', 'tester', 'creation_date', 'modification_date') + search_fields = ('email', 'first_name', 'last_name', 'tags') + fieldsets = ((None, {'fields': ('email', 'first_name', 'last_name')}), + (None, {'fields': ('tags',)}), + (_('Status'), {'fields': ('subscriber', 'valid', 'tester')}), + (_('Advanced'), {'fields': ('object_id', 'content_type'), + 'classes': ('collapse',)}), + ) + actions = ['create_mailinglist', 'export_vcard', 'export_excel'] + actions_on_top = False + actions_on_bottom = True + + def queryset(self, request): + queryset = super(ContactAdmin, self).queryset(request) + if not request.user.is_superuser and USE_WORKGROUPS: + contacts_pk = request_workgroups_contacts_pk(request) + queryset = queryset.filter(pk__in=contacts_pk) + return queryset + + def save_model(self, request, contact, form, change): + workgroups = [] + if not contact.pk and not request.user.is_superuser \ + and USE_WORKGROUPS: + workgroups = request_workgroups(request) + contact.save() + for workgroup in workgroups: + workgroup.contacts.add(contact) + + def related_object_admin(self, contact): + """Display link to related object's admin""" + if contact.content_type and contact.object_id: + admin_url = reverse('admin:%s_%s_change' % (contact.content_type.app_label, + contact.content_type.model), + args=(contact.object_id,)) + return '%s: %s' % (contact.content_type.model.capitalize(), + admin_url, + contact.content_object.__unicode__()) + return _('No relative object') + related_object_admin.allow_tags = True + related_object_admin.short_description = _('Related object') + + def total_subscriptions(self, contact): + """Display user subscriptions to unsubscriptions""" + subscriptions = contact.subscriptions().count() + unsubscriptions = contact.unsubscriptions().count() + return '%s / %s' % (subscriptions - unsubscriptions, subscriptions) + total_subscriptions.short_description = _('Total subscriptions') + + def export_vcard(self, request, queryset, export_name=''): + """Export selected contact in VCard""" + return vcard_contacts_export_response(queryset) + export_vcard.short_description = _('Export contacts as VCard') + + def export_excel(self, request, queryset, export_name=''): + """Export selected contact in Excel""" + if not export_name: + export_name = 'contacts_edn_%s' % datetime.now().strftime('%d-%m-%Y') + return ExcelResponse(queryset, export_name) + export_excel.short_description = _('Export contacts in Excel') + + def create_mailinglist(self, request, queryset): + """Create a mailing list from selected contact""" + when = str(datetime.now()).split('.')[0] + new_mailing = MailingList(name=_('New mailinglist at %s') % when, + description=_('New mailing list created in admin at %s') % when) + new_mailing.save() + + if 'lite' in settings.DATABASES['default']['ENGINE']: + self.message_user(request, _('SQLite3 or a SpatialLite database type detected, ' \ + 'please note you will be limited to 999 contacts ' \ + 'per mailing list.')) + try: + new_mailing.subscribers = queryset.all() + except DatabaseError: + new_mailing.subscribers = queryset.none() + + if not request.user.is_superuser and USE_WORKGROUPS: + for workgroup in request_workgroups(request): + workgroup.mailinglists.add(new_mailing) + + self.message_user(request, _('%s succesfully created.') % new_mailing) + return HttpResponseRedirect(reverse('admin:newsletter_mailinglist_change', + args=[new_mailing.pk])) + create_mailinglist.short_description = _('Create a mailinglist') + + def importation(self, request): + """Import contacts from a VCard""" + opts = self.model._meta + + if request.POST: + source = request.FILES.get('source') or \ + StringIO.StringIO(request.POST.get('source', '')) + if not request.user.is_superuser and USE_WORKGROUPS: + workgroups = request_workgroups(request) + else: + workgroups = [] + inserted = import_dispatcher(source, request.POST['type'], + workgroups) + if inserted: + contacts_imported.send(sender=self, source=source, + type=request.POST['type']) + + self.message_user(request, _('%s contacts succesfully imported.') % inserted) + + context = {'title': _('Contact importation'), + 'opts': opts, + 'root_path': self.admin_site.root_path, + 'app_label': opts.app_label} + + return render_to_response('newsletter/contact_import.html', + context, RequestContext(request)) + + def filtered_request_queryset(self, request): + """Return queryset filtered by the admin list view""" + cl = ChangeList(request, self.model, self.list_display, + self.list_display_links, self.list_filter, + self.date_hierarchy, self.search_fields, + self.list_select_related, self.list_per_page, + self.list_editable, self) + return cl.get_query_set() + + def creation_mailinglist(self, request): + """Create a mailing list form the filtered contacts""" + return self.create_mailinglist(request, self.filtered_request_queryset(request)) + + def exportation_vcard(self, request): + """Export filtered contacts in VCard""" + return self.export_vcard(request, self.filtered_request_queryset(request), + 'contacts_edn_%s' % datetime.now().strftime('%d-%m-%Y')) + + def exportation_excel(self, request): + """Export filtered contacts in Excel""" + return self.export_excel(request, self.filtered_request_queryset(request), + 'contacts_edn_%s' % datetime.now().strftime('%d-%m-%Y')) + + def get_urls(self): + urls = super(ContactAdmin, self).get_urls() + my_urls = patterns('', + url(r'^import/$', + self.admin_site.admin_view(self.importation), + name='newsletter_contact_import'), + url(r'^create_mailinglist/$', + self.admin_site.admin_view(self.creation_mailinglist), + name='newsletter_contact_create_mailinglist'), + url(r'^export/vcard/$', + self.admin_site.admin_view(self.exportation_vcard), + name='newsletter_contact_export_vcard'), + url(r'^export/excel/$', + self.admin_site.admin_view(self.exportation_excel), + name='newsletter_contact_export_excel'),) + return my_urls + urls diff --git a/emencia/django/newsletter/admin/mailinglist.py b/emencia/django/newsletter/admin/mailinglist.py new file mode 100644 index 00000000..5f143720 --- /dev/null +++ b/emencia/django/newsletter/admin/mailinglist.py @@ -0,0 +1,125 @@ +"""ModelAdmin for MailingList""" +from datetime import datetime + +from django.contrib import admin +from django.conf.urls.defaults import url +from django.conf.urls.defaults import patterns +from django.utils.encoding import smart_str +from django.core.urlresolvers import reverse +from django.shortcuts import get_object_or_404 +from django.utils.translation import ugettext_lazy as _ +from django.http import HttpResponseRedirect + +from emencia.django.newsletter.models import Contact +from emencia.django.newsletter.models import MailingList +from emencia.django.newsletter.settings import USE_WORKGROUPS +from emencia.django.newsletter.utils.workgroups import request_workgroups +from emencia.django.newsletter.utils.workgroups import request_workgroups_contacts_pk +from emencia.django.newsletter.utils.workgroups import request_workgroups_mailinglists_pk +from emencia.django.newsletter.utils.vcard import vcard_contacts_export_response +from emencia.django.newsletter.utils.excel import ExcelResponse + + +class MailingListAdmin(admin.ModelAdmin): + date_hierarchy = 'creation_date' + list_display = ('creation_date', 'name', 'description', + 'subscribers_count', 'unsubscribers_count', + 'exportation_links') + list_editable = ('name', 'description') + list_filter = ('creation_date', 'modification_date') + search_fields = ('name', 'description',) + filter_horizontal = ['subscribers', 'unsubscribers'] + fieldsets = ((None, {'fields': ('name', 'description',)}), + (None, {'fields': ('subscribers',)}), + (None, {'fields': ('unsubscribers',)}), + ) + actions = ['merge_mailinglist'] + actions_on_top = False + actions_on_bottom = True + + def queryset(self, request): + queryset = super(MailingListAdmin, self).queryset(request) + if not request.user.is_superuser and USE_WORKGROUPS: + mailinglists_pk = request_workgroups_mailinglists_pk(request) + queryset = queryset.filter(pk__in=mailinglists_pk) + return queryset + + def save_model(self, request, mailinglist, form, change): + workgroups = [] + if not mailinglist.pk and not request.user.is_superuser \ + and USE_WORKGROUPS: + workgroups = request_workgroups(request) + mailinglist.save() + for workgroup in workgroups: + workgroup.mailinglists.add(mailinglist) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if 'subscribers' in db_field.name and not request.user.is_superuser \ + and USE_WORKGROUPS: + contacts_pk = request_workgroups_contacts_pk(request) + kwargs['queryset'] = Contact.objects.filter(pk__in=contacts_pk) + return super(MailingListAdmin, self).formfield_for_manytomany( + db_field, request, **kwargs) + + def merge_mailinglist(self, request, queryset): + """Merge multiple mailing list""" + if queryset.count() == 1: + self.message_user(request, _('Please select a least 2 mailing list.')) + return None + + subscribers = {} + unsubscribers = {} + for ml in queryset: + for contact in ml.subscribers.all(): + subscribers[contact] = '' + for contact in ml.unsubscribers.all(): + unsubscribers[contact] = '' + + when = str(datetime.now()).split('.')[0] + new_mailing = MailingList(name=_('Merging list at %s') % when, + description=_('Mailing list created by merging at %s') % when) + new_mailing.save() + new_mailing.subscribers = subscribers.keys() + new_mailing.unsubscribers = unsubscribers.keys() + + if not request.user.is_superuser and USE_WORKGROUPS: + for workgroup in request_workgroups(request): + workgroup.mailinglists.add(new_mailing) + + self.message_user(request, _('%s succesfully created by merging.') % new_mailing) + return HttpResponseRedirect(reverse('admin:newsletter_mailinglist_change', + args=[new_mailing.pk])) + merge_mailinglist.short_description = _('Merge selected mailinglists') + + def exportation_links(self, mailinglist): + """Display links for exportation""" + return u'%s / %s' % ( + reverse('admin:newsletter_mailinglist_export_excel', + args=[mailinglist.pk]), _('Excel'), + reverse('admin:newsletter_mailinglist_export_vcard', + args=[mailinglist.pk]), _('VCard')) + exportation_links.allow_tags = True + exportation_links.short_description = _('Export') + + def exportion_vcard(self, request, mailinglist_id): + """Export subscribers in the mailing in VCard""" + mailinglist = get_object_or_404(MailingList, pk=mailinglist_id) + name = 'contacts_%s' % smart_str(mailinglist.name) + return vcard_contacts_export_response(mailinglist.subscribers.all(), name) + + def exportion_excel(self, request, mailinglist_id): + """Export subscribers in the mailing in Excel""" + mailinglist = get_object_or_404(MailingList, pk=mailinglist_id) + name = 'contacts_%s' % smart_str(mailinglist.name) + return ExcelResponse(mailinglist.subscribers.all(), name) + + def get_urls(self): + urls = super(MailingListAdmin, self).get_urls() + my_urls = patterns('', + url(r'^export/vcard/(?P\d+)/$', + self.admin_site.admin_view(self.exportion_vcard), + name='newsletter_mailinglist_export_vcard'), + url(r'^export/excel/(?P\d+)/$', + self.admin_site.admin_view(self.exportion_excel), + name='newsletter_mailinglist_export_excel')) + return my_urls + urls diff --git a/emencia/django/newsletter/admin/newsletter.py b/emencia/django/newsletter/admin/newsletter.py new file mode 100644 index 00000000..2574015e --- /dev/null +++ b/emencia/django/newsletter/admin/newsletter.py @@ -0,0 +1,185 @@ +"""ModelAdmin for Newsletter""" +from HTMLParser import HTMLParseError + +from django import forms +from django.db.models import Q +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from emencia.django.newsletter.models import Contact +from emencia.django.newsletter.models import Newsletter +from emencia.django.newsletter.models import Attachment +from emencia.django.newsletter.models import MailingList +from emencia.django.newsletter.mailer import Mailer +from emencia.django.newsletter.settings import USE_TINYMCE +from emencia.django.newsletter.settings import USE_WORKGROUPS +try: + CAN_USE_PREMAILER = True + from emencia.django.newsletter.utils.premailer import Premailer + from emencia.django.newsletter.utils.premailer import PremailerError +except ImportError: + CAN_USE_PREMAILER = False +from emencia.django.newsletter.utils.workgroups import request_workgroups +from emencia.django.newsletter.utils.workgroups import request_workgroups_contacts_pk +from emencia.django.newsletter.utils.workgroups import request_workgroups_newsletters_pk +from emencia.django.newsletter.utils.workgroups import request_workgroups_mailinglists_pk + + +class AttachmentAdminInline(admin.TabularInline): + model = Attachment + extra = 1 + fieldsets = ((None, {'fields': (('title', 'file_attachment'))}),) + + +class BaseNewsletterAdmin(admin.ModelAdmin): + date_hierarchy = 'creation_date' + list_display = ('title', 'mailing_list', 'server', 'status', + 'sending_date', 'creation_date', 'modification_date', + 'historic_link', 'statistics_link') + list_filter = ('status', 'sending_date', 'creation_date', 'modification_date') + search_fields = ('title', 'content', 'header_sender', 'header_reply') + filter_horizontal = ['test_contacts'] + fieldsets = ((None, {'fields': ('title', 'content',)}), + (_('Receivers'), {'fields': ('mailing_list', 'test_contacts',)}), + (_('Sending'), {'fields': ('sending_date', 'status',)}), + (_('Miscellaneous'), {'fields': ('server', 'header_sender', + 'header_reply', 'slug'), + 'classes': ('collapse',)}), + ) + prepopulated_fields = {'slug': ('title',)} + inlines = (AttachmentAdminInline,) + actions = ['send_mail_test', 'make_ready_to_send', 'make_cancel_sending'] + actions_on_top = False + actions_on_bottom = True + + def get_actions(self, request): + actions = super(BaseNewsletterAdmin, self).get_actions(request) + if not request.user.has_perm('newsletter.can_change_status'): + del actions['make_ready_to_send'] + del actions['make_cancel_sending'] + return actions + + def queryset(self, request): + queryset = super(BaseNewsletterAdmin, self).queryset(request) + if not request.user.is_superuser and USE_WORKGROUPS: + newsletters_pk = request_workgroups_newsletters_pk(request) + queryset = queryset.filter(pk__in=newsletters_pk) + return queryset + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == 'mailing_list' and \ + not request.user.is_superuser and USE_WORKGROUPS: + mailinglists_pk = request_workgroups_mailinglists_pk(request) + kwargs['queryset'] = MailingList.objects.filter(pk__in=mailinglists_pk) + return db_field.formfield(**kwargs) + return super(BaseNewsletterAdmin, self).formfield_for_foreignkey( + db_field, request, **kwargs) + + def formfield_for_choice_field(self, db_field, request, **kwargs): + if db_field.name == 'status' and \ + not request.user.has_perm('newsletter.can_change_status'): + kwargs['choices'] = ((Newsletter.DRAFT, _('Default')),) + return db_field.formfield(**kwargs) + return super(BaseNewsletterAdmin, self).formfield_for_choice_field( + db_field, request, **kwargs) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if db_field.name == 'test_contacts': + queryset = Contact.objects.filter(tester=True) + if not request.user.is_superuser and USE_WORKGROUPS: + contacts_pk = request_workgroups_contacts_pk(request) + queryset = queryset.filter(pk__in=contacts_pk) + kwargs['queryset'] = queryset + return super(BaseNewsletterAdmin, self).formfield_for_manytomany( + db_field, request, **kwargs) + + def save_model(self, request, newsletter, form, change): + workgroups = [] + if not newsletter.pk and not request.user.is_superuser \ + and USE_WORKGROUPS: + workgroups = request_workgroups(request) + + if newsletter.content.startswith('http://'): + if CAN_USE_PREMAILER: + try: + premailer = Premailer(newsletter.content.strip()) + newsletter.content = premailer.transform() + except PremailerError: + self.message_user(request, _('Unable to download HTML, due to errors within.')) + else: + self.message_user(request, _('Please install lxml for parsing an URL.')) + if not request.user.has_perm('newsletter.can_change_status'): + newsletter.status = form.initial.get('status', Newsletter.DRAFT) + + newsletter.save() + + for workgroup in workgroups: + workgroup.newsletters.add(newsletter) + + def historic_link(self, newsletter): + """Display link for historic""" + if newsletter.contactmailingstatus_set.count(): + return u'%s' % (newsletter.get_historic_url(), _('View historic')) + return _('Not available') + historic_link.allow_tags = True + historic_link.short_description = _('Historic') + + def statistics_link(self, newsletter): + """Display link for statistics""" + if newsletter.status == Newsletter.SENDING or \ + newsletter.status == Newsletter.SENT: + return u'%s' % (newsletter.get_statistics_url(), _('View statistics')) + return _('Not available') + statistics_link.allow_tags = True + statistics_link.short_description = _('Statistics') + + def send_mail_test(self, request, queryset): + """Send newsletter in test""" + for newsletter in queryset: + if newsletter.test_contacts.count(): + mailer = Mailer(newsletter, test=True) + try: + mailer.run() + except HTMLParseError: + self.message_user(request, _('Unable send newsletter, due to errors within HTML.')) + continue + self.message_user(request, _('%s succesfully sent.') % newsletter) + else: + self.message_user(request, _('No test contacts assigned for %s.') % newsletter) + send_mail_test.short_description = _('Send test email') + + def make_ready_to_send(self, request, queryset): + """Make newsletter ready to send""" + queryset = queryset.filter(status=Newsletter.DRAFT) + for newsletter in queryset: + newsletter.status = Newsletter.WAITING + newsletter.save() + self.message_user(request, _('%s newletters are ready to send') % queryset.count()) + make_ready_to_send.short_description = _('Make ready to send') + + def make_cancel_sending(self, request, queryset): + """Cancel the sending of newsletters""" + queryset = queryset.filter(Q(status=Newsletter.WAITING) | + Q(status=Newsletter.SENDING)) + for newsletter in queryset: + newsletter.status = Newsletter.CANCELED + newsletter.save() + self.message_user(request, _('%s newletters are cancelled') % queryset.count()) + make_cancel_sending.short_description = _('Cancel the sending') + + +if USE_TINYMCE: + from tinymce.widgets import TinyMCE + + class NewsletterTinyMCEForm(forms.ModelForm): + content = forms.CharField( + widget=TinyMCE(attrs={'cols': 150, 'rows': 80})) + + class Meta: + model = Newsletter + + class NewsletterAdmin(BaseNewsletterAdmin): + form = NewsletterTinyMCEForm +else: + class NewsletterAdmin(BaseNewsletterAdmin): + pass diff --git a/emencia/django/newsletter/admin/smtpserver.py b/emencia/django/newsletter/admin/smtpserver.py new file mode 100644 index 00000000..a69687c2 --- /dev/null +++ b/emencia/django/newsletter/admin/smtpserver.py @@ -0,0 +1,57 @@ +"""ModelAdmin for SMTPServer""" +from django import forms +from django.contrib import admin +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ + +from emencia.django.newsletter.models import SMTPServer + + +class SMTPServerAdminForm(forms.ModelForm): + """Form ofr SMTPServer with custom validation""" + + def clean_headers(self): + """Check if the headers are well formated""" + for line in self.cleaned_data['headers'].splitlines(): + elems = line.split(':') + if len(elems) < 2: + raise ValidationError(_('Invalid syntax, do not forget the ":".')) + if len(elems) > 2: + raise ValidationError(_('Invalid syntax, several assignments by line.')) + + return self.cleaned_data['headers'] + + class Meta: + model = SMTPServer + + +class SMTPServerAdmin(admin.ModelAdmin): + form = SMTPServerAdminForm + list_display = ('name', 'host', 'port', 'user', 'tls', 'mails_hour',) + list_filter = ('tls',) + search_fields = ('name', 'host', 'user') + fieldsets = ((None, {'fields': ('name', )}), + (_('Configuration'), {'fields': ('host', 'port', + 'user', 'password', 'tls')}), + (_('Miscellaneous'), {'fields': ('mails_hour', 'headers'), + 'classes': ('collapse', )}), + ) + actions = ['check_connections'] + actions_on_top = False + actions_on_bottom = True + + def check_connections(self, request, queryset): + """Check the SMTP connection""" + message = '%s connection %s' + for server in queryset: + try: + smtp = server.connect() + if smtp: + status = 'OK' + smtp.quit() + else: + status = 'KO' + except: + status = 'KO' + self.message_user(request, message % (server.__unicode__(), status)) + check_connections.short_description = _('Check connection') diff --git a/emencia/django/newsletter/admin/workgroup.py b/emencia/django/newsletter/admin/workgroup.py new file mode 100644 index 00000000..bb9a1dd0 --- /dev/null +++ b/emencia/django/newsletter/admin/workgroup.py @@ -0,0 +1,26 @@ +"""ModelAdmin for WorkGroup""" +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + + +class WorkGroupAdmin(admin.ModelAdmin): + list_display = ('name', 'group', 'contacts_length', + 'mailinglists_length', 'newsletters_length') + fieldsets = ((None, {'fields': ('name', 'group')}), + (None, {'fields': ('contacts', 'mailinglists', 'newsletters')}), + ) + filter_horizontal = ['contacts', 'mailinglists', 'newsletters'] + actions_on_top = False + actions_on_bottom = True + + def contacts_length(self, workgroup): + return workgroup.contacts.count() + contacts_length.short_description = _('Contacts length') + + def mailinglists_length(self, workgroup): + return workgroup.mailinglists.count() + mailinglists_length.short_description = _('Mailing List length') + + def newsletters_length(self, workgroup): + return workgroup.newsletters.count() + newsletters_length.short_description = _('Newsletter length') diff --git a/emencia/django/newsletter/admin_forms.py b/emencia/django/newsletter/admin_forms.py new file mode 100644 index 00000000..2fc719af --- /dev/null +++ b/emencia/django/newsletter/admin_forms.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +from django import forms +from django.utils.translation import ugettext_lazy as _ +from ckeditor.widgets import CKEditorWidget +from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter +from city.models import City + + +class ContactSettingsForm(forms.ModelForm): + city = forms.CharField(label=u'Город', widget=forms.HiddenInput() ,required=False) + periodic = forms.ChoiceField(choices=ContactSettings.PERIODIC_CHOICES, + label=_(u'Периодичность отправки')) + first_name = forms.CharField(label=_('first name')) + subscriber = forms.BooleanField(label=_('subscriber'), required=False) + valid = forms.BooleanField(label=_('valid email'), required=False) + tester = forms.BooleanField(label=_('contact tester'), required=False) + + class Meta: + model = ContactSettings + fields = ('periodic', 'exponent_practicum', 'organiser_practicum', 'theme', 'area', 'country', 'city', ) + + def save(self, commit=True): + contactsettings = super(ContactSettingsForm, self).save(commit=False) + if commit: + contactsettings.save() + contact = contactsettings.contact + contact.first_name = self.cleaned_data['first_name'] + contact.subscriber = self.cleaned_data['subscriber'] + contact.valid = self.cleaned_data['valid'] + contact.tester = self.cleaned_data['tester'] + contact.save() + return contactsettings + + def clean_periodic(self): + + return int(self.cleaned_data['periodic']) + + def clean_city(self): + return City.objects.none() + +class MailingListForm(forms.ModelForm): + class Meta: + model = MailingList + fields = ('name', 'description') + +class NewsletterForm(forms.ModelForm): + test_contacts = forms.CharField(label=u'Тестовые контакты', widget=forms.HiddenInput(), required=False) + content = forms.CharField(label=_('content'), widget=CKEditorWidget(config_name='newsletters')) + class Meta: + model = Newsletter + fields = ('title', 'content', 'mailing_list', 'test_contacts', 'header_sender', + 'header_reply', 'status', 'sending_date', 'slug') \ No newline at end of file diff --git a/emencia/django/newsletter/admin_urls.py b/emencia/django/newsletter/admin_urls.py new file mode 100644 index 00000000..2aa5b071 --- /dev/null +++ b/emencia/django/newsletter/admin_urls.py @@ -0,0 +1,20 @@ +from django.conf.urls import url +from django.conf.urls import include +from django.conf.urls import patterns +from django.http import HttpResponse +from emencia.django.newsletter.views.admin_views import ContactList, UpdateContact, MailingListView, UpdateMailingList,\ + CreateMailingList, NewsletterCreate + + +urlpatterns = patterns('', + url(r'^newsletters/all/$', MailingListView.as_view(), name='newsletters_mailinglist'), + url(r'^newsletters/(?P\d+)/edit/', UpdateMailingList.as_view(), name='newsletters_mailinglist_update'), + url(r'^newsletters/', NewsletterCreate.as_view(), name='newsletters_newsletters_create'), + + url(r'^mailinglist/all/$', MailingListView.as_view(), name='newsletters_mailinglist'), + url(r'^mailinglist/(?P\d+)/edit/', UpdateMailingList.as_view(), name='newsletters_mailinglist_update'), + url(r'^mailinglist/', CreateMailingList.as_view(), name='newsletters_mailinglist_create'), + + url(r'^contact/(?P\d+)/edit/', UpdateContact.as_view(), name='newsletters_contact_update'), + url(r'^contact/all/$', ContactList.as_view(), name='newsletters_contact_list'), + ) \ No newline at end of file diff --git a/emencia/django/newsletter/cmsplugin_newsletter/__init__.py b/emencia/django/newsletter/cmsplugin_newsletter/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/emencia/django/newsletter/cmsplugin_newsletter/cms_plugins.py b/emencia/django/newsletter/cmsplugin_newsletter/cms_plugins.py new file mode 100644 index 00000000..790199ee --- /dev/null +++ b/emencia/django/newsletter/cmsplugin_newsletter/cms_plugins.py @@ -0,0 +1,38 @@ +"""Plugins for CMS""" +from django.utils.translation import ugettext_lazy as _ + +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool + +from emencia.django.newsletter.cmsplugin_newsletter import settings +from emencia.django.newsletter.cmsplugin_newsletter.models import SubscriptionFormPlugin +from emencia.django.newsletter.forms import MailingListSubscriptionForm + + +class CMSSubscriptionFormPlugin(CMSPluginBase): + module = _('newsletter') + model = SubscriptionFormPlugin + name = _('Subscription Form') + render_template = 'newsletter/cms/subscription_form.html' + text_enabled = False + admin_preview = False + + def render(self, context, instance, placeholder): + request = context['request'] + if request.method == "POST" and (settings.FORM_NAME in request.POST.keys()): + form = MailingListSubscriptionForm(data=request.POST) + if form.is_valid(): + form.save(instance.mailing_list) + form.saved = True + else: + form = MailingListSubscriptionForm() + context.update({ + 'object': instance, + 'form': form, + 'form_name': settings.FORM_NAME, + 'placeholder': placeholder, + }) + return context + + +plugin_pool.register_plugin(CMSSubscriptionFormPlugin) diff --git a/emencia/django/newsletter/cmsplugin_newsletter/models.py b/emencia/django/newsletter/cmsplugin_newsletter/models.py new file mode 100644 index 00000000..37e88252 --- /dev/null +++ b/emencia/django/newsletter/cmsplugin_newsletter/models.py @@ -0,0 +1,19 @@ +"""Models of Emencia CMS Plugins""" +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from cms.models import CMSPlugin + +from emencia.django.newsletter.models import MailingList + + +class SubscriptionFormPlugin(CMSPlugin): + """CMS Plugin for susbcribing to a mailing list""" + title = models.CharField(_('title'), max_length=100, blank=True) + show_description = models.BooleanField(_('show description'), default=True, + help_text=_('Show the mailing list\'s description.')) + mailing_list = models.ForeignKey(MailingList, verbose_name=_('mailing list'), + help_text=_('Mailing List to subscribe to.')) + + def __unicode__(self): + return self.mailing_list.name diff --git a/emencia/django/newsletter/cmsplugin_newsletter/settings.py b/emencia/django/newsletter/cmsplugin_newsletter/settings.py new file mode 100644 index 00000000..a19b5bd8 --- /dev/null +++ b/emencia/django/newsletter/cmsplugin_newsletter/settings.py @@ -0,0 +1,4 @@ +"""Settings for emencia.django.newsletter.cmsplugin_newsletter""" +from django.conf import settings + +FORM_NAME = getattr(settings, 'SUBSCRIPTION_FORM_NAME', 'cms_subscription_form_plugin') diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py new file mode 100644 index 00000000..6c212211 --- /dev/null +++ b/emencia/django/newsletter/forms.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +"""Forms for emencia.django.newsletter""" +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from emencia.django.newsletter.models import Contact, ContactSettings +from emencia.django.newsletter.models import MailingList +from theme.models import Theme + + +class MailingListSubscriptionForm(forms.ModelForm): + """Form for subscribing to a mailing list""" + # Notes : This form will not check the uniquess of + # the 'email' field, by defining it explictly and setting + # it the Meta.exclude list, for allowing registration + # to a mailing list even if the contact already exists. + # Then the contact is always added to the subscribers field + # of the mailing list because it will be cleaned with no + # double. + + email = forms.EmailField(label=_('Email'), max_length=75) + + def save(self, mailing_list): + data = self.cleaned_data + contact, created = Contact.objects.get_or_create( + email=data['email'], + defaults={'first_name': data['first_name'], + 'last_name': data['last_name']}) + + mailing_list.subscribers.add(contact) + mailing_list.unsubscribers.remove(contact) + + class Meta: + model = Contact + fields = ('first_name', 'last_name') + exclude = ('email',) + + +class AllMailingListSubscriptionForm(MailingListSubscriptionForm): + """Form for subscribing to all mailing list""" + + mailing_lists = forms.ModelMultipleChoiceField( + queryset=MailingList.objects.all(), + initial=[obj.id for obj in MailingList.objects.all()], + label=_('Mailing lists'), + widget=forms.CheckboxSelectMultiple()) + + def save(self, mailing_list): + data = self.cleaned_data + contact, created = Contact.objects.get_or_create( + email=data['email'], + defaults={'first_name': data['first_name'], + 'last_name': data['last_name']}) + + for mailing_list in data['mailing_lists']: + mailing_list.subscribers.add(contact) + mailing_list.unsubscribers.remove(contact) + + +class ContactForm(forms.ModelForm): + email = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder': _(u'Ваш e-mail')})) + first_name = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder': _(u'Ваше имя')})) + class Meta: + model = Contact + fields = ('email', 'first_name', ) + +class ContactSettingsForm(forms.ModelForm): + theme = forms.MultipleChoiceField(choices=[(str(item.id), item.name) for item in list(Theme.objects.language().all())], + widget=forms.CheckboxSelectMultiple(attrs={'class': 'pr-checkbox'}), required=False) + class Meta: + model = ContactSettings + fields = ('exponent_practicum', 'organiser_practicum', 'theme') + + def clean_theme(self): + theme = self.cleaned_data.get('theme') + if theme: + return Theme.objects.filter(id__in=theme) + else: + return Theme.objects.none() \ No newline at end of file diff --git a/emencia/django/newsletter/locale/cs/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 00000000..1a36c84a Binary files /dev/null and b/emencia/django/newsletter/locale/cs/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/cs/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000..e9210bec --- /dev/null +++ b/emencia/django/newsletter/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,856 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-11-08 09:01+0000\n" +"Last-Translator: xaralis \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" + +#: forms.py:20 +msgid "Email" +msgstr "Email" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Mailing listy" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Jméno" + +#: models.py:40 +msgid "server host" +msgstr "Server" + +#: models.py:41 +msgid "server user" +msgstr "Uživatelské jméno" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Pokud je server veřejný, ponechte prázdné." + +#: models.py:43 +msgid "server password" +msgstr "Heslo" + +#: models.py:45 +msgid "server port" +msgstr "Port" + +#: models.py:46 +msgid "server use TLS" +msgstr "Server používá TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "vlastní hlavičky" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" +"klíč1: hodnota1, klíč2: hodnota2, odděleno novým řádkem.\n" +"Užitečné pro trackovací hlavičky, pokud to umožňuje váš provider." + +#: models.py:51 +msgid "mails per hour" +msgstr "počet emailů za hodinu" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP server" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP servery" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "E-mail" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Křestní jméno" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Příjmení" + +#: models.py:103 +msgid "subscriber" +msgstr "Odebíratel" + +#: models.py:104 +msgid "valid email" +msgstr "Platný e-mail" + +#: models.py:105 +msgid "contact tester" +msgstr "Testovací kontakt" + +#: models.py:106 +msgid "tags" +msgstr "Tagy" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Datum vytvoření" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Datum úpravy" + +#: models.py:132 +msgid "mail format" +msgstr "Formát e-mailu" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "kontakt" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "kontakty" + +#: models.py:157 +msgid "description" +msgstr "Popis" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Odebíratelé" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "Zrušené odběry" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Mailing list" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "mailing listy" + +#: models.py:198 +msgid "draft" +msgstr "Návrh" + +#: models.py:199 +msgid "waiting sending" +msgstr "Čeká na odeslání" + +#: models.py:200 +msgid "sending" +msgstr "Odesílá se" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Odesláno" + +#: models.py:202 +msgid "canceled" +msgstr "Zrušeno" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Titulek" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "V titulku můžete použít proměnnou \"{{ UNIQUE_KEY }}\"" + +#: models.py:208 +msgid "content" +msgstr "Obsah" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Nebo vložte URL." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "Testovací kontakty" + +#: models.py:215 +msgid "smtp server" +msgstr "SMTP server" + +#: models.py:217 +msgid "sender" +msgstr "Odesílatel" + +#: models.py:219 +msgid "reply to" +msgstr "Odpovědět komu" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Stav" + +#: models.py:223 +msgid "sending date" +msgstr "Bude odesláno v" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Použito pro zobrazení newsletteru na stránkách." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "newsletter" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "newslettery" + +#: models.py:258 +msgid "url" +msgstr "URL" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "odkaz" + +#: models.py:271 +msgid "links" +msgstr "odkaz" + +#: models.py:283 +msgid "file to attach" +msgstr "příloha" + +#: models.py:287 +msgid "attachment" +msgstr "příloha" + +#: models.py:288 +msgid "attachments" +msgstr "přílohy" + +#: models.py:308 +msgid "sent in test" +msgstr "Odeslán testovací e-mail" + +#: models.py:310 +msgid "error" +msgstr "Při odesílání došlo k chybě" + +#: models.py:311 +msgid "invalid email" +msgstr "Neplatný e-mail" + +#: models.py:312 +msgid "opened" +msgstr "Zobrazil e-mail" + +#: models.py:313 +msgid "opened on site" +msgstr "Zobrazil e-mail na stránkách" + +#: models.py:314 +msgid "link opened" +msgstr "Odkaz otevřen" + +#: models.py:315 +msgid "unsubscription" +msgstr "Zrušil odběr" + +#: models.py:333 +msgid "contact mailing status" +msgstr "Stav zasílání" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "Stav zasílání" + +#: models.py:340 +msgid "permissions group" +msgstr "Skupina oprávnění" + +#: models.py:353 +msgid "workgroup" +msgstr "Pracovní skupina" + +#: models.py:354 +msgid "workgroups" +msgstr "Pracovní skupiny" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Stav" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Pokročilé" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Žádný související objekt" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Související objekt" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Celkem přihlášek k odběru" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Exportovat kontakty jako VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Exportovat kontakty jako VCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nový mailing list ze dne %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nový mailing list vytvořený v administraci dne %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s byl úspěšně vytvořen." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Vytvořit mailing list" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s kontaktů bylo úspěšně importováno." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Importovat kontakty" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Prosím zvolte alespoň 2 mailing listy." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Sloučený mailing list z %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Mailing list vytvořený sloučením v %s." + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s byl úspěšně vytvořen sloučením." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Sloučit vybrané mailing listy." + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Exportovat odběratele" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Exportovat" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Příjemci" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Odesílání" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Další nastavení" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Výchozí" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Nelze stáhnout HTML kvůli interní chybě." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Prosím nainstalujte lxml pro parsování URL." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Zobrazit historii" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "v tuto chvíli nedostupné" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Historie" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Zobrazit statistiky" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistiky" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Nelze odeslat newsletter kvůli interní HTML chybě." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s úspěšně odeslán." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "K %s nejsou přiřazeny žádné kontakty." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Odeslat testovací e-mail" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s newsletterů je připraveno k odeslání" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Změnit na \"připraveno k odeslání\"" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s newsletterů bylo zrušeno" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Zrušit odesílání" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "Neplatná syntaxe, nezapomeňte na \":\"." + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "Neplatná syntaxe: více přiřazení na řádku." + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Konfigurace" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Zkontrolovat připojení" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Počet kontaktů" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Počet mailing listů" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Počet newsletterů" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Přihlašovací formulář" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "Zobrazit popis" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Zobrazit popis mailing listu." + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Mailing list pro přihlášení." + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Přidat %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Akce" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importovat %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Přidat do mailing listu" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Exportovat %(name)s jako VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Exportovat %(name)s jako Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Domů" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Import" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Soubor Excelu (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Importovat kontakty z Excelu" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Sloupce jsou [email][příjmení][křestní jméno][tagy]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Všechny sloupce jsou volitelné kromě e-mailu." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Import" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Text" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Textový soubor (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Importovat kontakty z textového souboru, nebo CSV." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" +"Sloupce jsou [email][příjmení][křestní jméno][tagy] oddělené středníkem." + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "Soubor elektronické vizitky VCard (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" +"Importovat kontakty z vašeho oblíbeného mailového klienta poskytnutím " +"elektronické vizitky VCard." + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "Prostý text" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Přihlášení do mailing listu" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Děkujeme za vaši prihlášku!" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Vyplňte tento formulář pro přihlášení do mailing listu." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Přiíhlásit se k odběru" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Odhlášení od odběru" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Jste odhlášen od odběru tohoto newsletteru." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Vyplňte tento formulář pro odhlášení od oběru." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Odhlásit se od odběru" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Administrátor" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Datu" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Kontakt" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Akce" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Pokud nevidíte tento e-mail" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "klikněte zde" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Pro odhlášení z tohoto mailing listu" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Histogram konzultací" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Období" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Statistiky" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Celkový počet zobrazení" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Počet zobrazení na webu" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Počet unikátních zobrazení" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Doručení nepotvrzeno" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Počet odhlášení od odběru" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Průměrný počet zobrazení" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Statistiky odkazů" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Počet kliků celkem" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Počet unikátních kliků na odkazy" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Počet kliků v poměru k otevření" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Počet kliků na odkazy průměrně" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Výkaz" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Stáhnout CSV výkaz" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Informace" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Příjemci" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Zobrazit" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Datum odeslání" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Testů odesláno" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Nejžhavější odkazy" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Mapa hustoty" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Informace nedostupné." + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Byl jste odhlášen od odběru." + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "Mailing list vytvořený import v %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "Kontakty importovány %s." + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Statistiky %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "počet zobrazení" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "#val# zobrazení" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# kliků" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Historie %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/de/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 00000000..60ab673e Binary files /dev/null and b/emencia/django/newsletter/locale/de/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/de/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/de/LC_MESSAGES/django.po new file mode 100644 index 00000000..e205e4bb --- /dev/null +++ b/emencia/django/newsletter/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,856 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Marc Dierckx , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-11-04 16:00+0000\n" +"Last-Translator: felarov \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Email" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Verteilerliste" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Name" + +#: models.py:40 +msgid "server host" +msgstr "Server Host" + +#: models.py:41 +msgid "server user" +msgstr "Server Benutzer" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Leer lassen wenn Ihr Server öffentlich ist" + +#: models.py:43 +msgid "server password" +msgstr "Server Passwort" + +#: models.py:45 +msgid "server port" +msgstr "Server Port" + +#: models.py:46 +msgid "server use TLS" +msgstr "Server benutzt TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "Benutzerdefinierte Kopfzeile" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" +"key1: value1 key2: value2, splitted by return line.Useful for passing some " +"tracking headers if your provider allows it" + +#: models.py:51 +msgid "mails per hour" +msgstr "Mails pro Stunde" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP-Server" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP-Server" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "E-Mail" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Vorname" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Nachname" + +#: models.py:103 +msgid "subscriber" +msgstr "Abonnent" + +#: models.py:104 +msgid "valid email" +msgstr "gültige E-Mail" + +#: models.py:105 +msgid "contact tester" +msgstr "Kontaktversuchsperson" + +#: models.py:106 +msgid "tags" +msgstr "Tags" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Erstellungsdatum" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Geändert am" + +#: models.py:132 +msgid "mail format" +msgstr "Email Format" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "Kontakt" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "Kontakte" + +#: models.py:157 +msgid "description" +msgstr "Beschreibung" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Abonnenten" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "Mit gekündigtem Abonnement" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Verteilerliste" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "Verteilerlisten" + +#: models.py:198 +msgid "draft" +msgstr "Entwurf" + +#: models.py:199 +msgid "waiting sending" +msgstr "Warte bis Sendung" + +#: models.py:200 +msgid "sending" +msgstr "Senden" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Gesendet" + +#: models.py:202 +msgid "canceled" +msgstr "Abgebrochen" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Titel" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." + +#: models.py:208 +msgid "content" +msgstr "Inhalt" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "oder kleb die URL" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "Editiere Ihre Newsletter hier" + +#: models.py:212 +msgid "test contacts" +msgstr "Versuchskontakte" + +#: models.py:215 +msgid "smtp server" +msgstr "Mail Server" + +#: models.py:217 +msgid "sender" +msgstr "Versender" + +#: models.py:219 +msgid "reply to" +msgstr "Antwort an" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Status" + +#: models.py:223 +msgid "sending date" +msgstr "Senddatum" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Newsletter Name auf der Seite" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "Newsletter" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "Newsletters" + +#: models.py:258 +msgid "url" +msgstr "Url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "Link" + +#: models.py:271 +msgid "links" +msgstr "Links" + +#: models.py:283 +msgid "file to attach" +msgstr "Datei hinzufügen" + +#: models.py:287 +msgid "attachment" +msgstr "Datei anbei" + +#: models.py:288 +msgid "attachments" +msgstr "D" + +#: models.py:308 +msgid "sent in test" +msgstr "Versuchsversand" + +#: models.py:310 +msgid "error" +msgstr "Fehler" + +#: models.py:311 +msgid "invalid email" +msgstr "ungültige E-Mail" + +#: models.py:312 +msgid "opened" +msgstr "Geöffnet" + +#: models.py:313 +msgid "opened on site" +msgstr "Geöffnet auf der Seite" + +#: models.py:314 +msgid "link opened" +msgstr "Link geöffnet" + +#: models.py:315 +msgid "unsubscription" +msgstr "Abonnement abbestellt" + +#: models.py:333 +msgid "contact mailing status" +msgstr "Versandstatus" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "Versandstatus" + +#: models.py:340 +msgid "permissions group" +msgstr "Berechtigungsgruppe" + +#: models.py:353 +msgid "workgroup" +msgstr "Arbeitsgruppe" + +#: models.py:354 +msgid "workgroups" +msgstr "Arbeitsgruppen" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Status" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Erweitert" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Keine relatives Objekt" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Verwantes Objekt" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Anzahl Abonnenten" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Kontakte als VCard exportieren" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Kontakte als VCard exportieren" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Neue Verteilerliste bei %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Neue Verteilerliste würde angelegt bei %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s erfolgreich angelegt" + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Lege eine Verteilerliste an" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s Kontakte erfolgreich importiert" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Import" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "MIndestens 2 Verteilerlisten selektieren" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Verteilerliste als %s zusammenlegen" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Verteilerliste angelegt durch Zusammenlegen bei %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s erfolgreich angelegt durch Zusammenlegen" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Lege den selektierten Verteilerlisten zusammen" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Exportiere Abonnenten" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Export" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Empfänger" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Senden" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Sonstiges" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Standard" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Runterladen ist leider nicht möglich" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Python package lxml ist notwendig" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Historie" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Nicht verfügbar" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Historie" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Statistiken ansehen" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistiken" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Versand nicht möglich wegen vorhandene HTML Fehler" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "Versand %s erfolgreich" + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Kein Versuchskontakt an %s zugeordnet" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Sende ein Versuchsmail" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s Newsletters sind fertig für Versand" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Änder Status in Fertig für Versand" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s Newsletters sind annuliert" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Abbrechen" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "Ungültige Grammatik" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "Ungültige Grammatik" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Konfiguration" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Verbindung ungültig" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Anzahl Kontakte" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Anzahl Verteilerlisten" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Anzahl Newsletters" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Abonnement abbestellen" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "Bescrhreibung" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Bescreibung der Verteilerliste" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Anzahl Verteilerlisten" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Füge %(name)s hinzu" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Aktion" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importiere %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Neue Verteilerliste" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Exportier Kontakte im VCard Format" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Exportiere %(name)s" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Startseite" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Import" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "EXCEL" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "EXCEL Datei (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Exportiere Kontakte als VCard" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Verfügbare Kollome sind [email][last name][first name][tags]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Alle Kollome sind optional,ausser Email" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Import" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Tekst" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Tekst Datei (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Importiere die Kontakte von einer Tekstdatei oder csv Datei" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" +"Columns are [email][last name][first name][tags] getrennt durch Kommas" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "Vcard Datei (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "Importier Kontakte (VCard Datei)" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "Rohe Tekst" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Neue Verteilerliste" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Anzahl Teilnehmer" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Bestätig dieses Formular für eine erfolgreiche Abmeldung" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Teilnehmer" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Abmeldung" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Sie sind erfolgreich abgemeldet" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Bestätig dieses Formular für eine erfolgreiche Abmeldung" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Abonnement abbestellen" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Admin" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Datum" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Kontakt" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Aktion" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "When Sie dieses Mail nicht sehen," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "Klick hier" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Sie haben sich erfolgreich abgemeldet" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Histogram" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Periode" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Statistiken" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Anzahl Abonnenten" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Geöffnet auf der Webseite" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Gesammt einfache Öffnungen" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Lieferung unbekannt" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Abmeldung" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Anzahl Abonnenten" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Statistiken" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Anzahl Abonnenten" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Anzahl einfach angeklickte Links" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "angeklickte Links pro Versand" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Anzahl von Abonnenten" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Exportiere Zusammenfassung" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "CSV Zusammenfassung runterladen" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Import" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Empfänger" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Ansicht" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Versanndatum" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Versuche abgeschickt" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Top links" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Dichtheit" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Keine Top Links vorhanden" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Sie haben sich erfolgreich abgemeldet" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "Verteilerliste wurde angelegt durch Zusammenfügen bei %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "Import" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Statistiken von %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "Anzahl Teilnehmer" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "Anzahl Teilnehmer" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "\"val\" Klicks" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Historie von %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/en/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 00000000..f1443358 Binary files /dev/null and b/emencia/django/newsletter/locale/en/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/en/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/en/LC_MESSAGES/django.po new file mode 100644 index 00000000..60101f15 --- /dev/null +++ b/emencia/django/newsletter/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,886 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2010-01-21 10:54+0100\n" +"Last-Translator: Fantomas \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:20 +#, fuzzy +msgid "Email" +msgstr "Email" + +#: forms.py:44 +#, fuzzy +msgid "Mailing lists" +msgstr "mailing lists" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Name" + +#: models.py:40 +msgid "server host" +msgstr "Server host" + +#: models.py:41 +msgid "server user" +msgstr "Server user" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Leave it empty if the host is public." + +#: models.py:43 +msgid "server password" +msgstr "Server password" + +#: models.py:45 +msgid "server port" +msgstr "Server port" + +#: models.py:46 +msgid "server use TLS" +msgstr "Server use TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "custom headers" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "mails per hour" + +#: models.py:93 +#, fuzzy +msgid "SMTP server" +msgstr "SMTP Server" + +#: models.py:94 +#, fuzzy +msgid "SMTP servers" +msgstr "SMTP Servers" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "Email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "First name" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Last name" + +#: models.py:103 +msgid "subscriber" +msgstr "Subscriber" + +#: models.py:104 +msgid "valid email" +msgstr "Valid email" + +#: models.py:105 +msgid "contact tester" +msgstr "Contact tester" + +#: models.py:106 +msgid "tags" +msgstr "Tags" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Date of creation" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Date of modification" + +#: models.py:132 +msgid "mail format" +msgstr "Mail format" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "contact" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "contacts" + +#: models.py:157 +msgid "description" +msgstr "Description" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Subscribers" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "Unsubscribers" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Mailing list" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "mailing lists" + +#: models.py:198 +msgid "draft" +msgstr "Draft" + +#: models.py:199 +msgid "waiting sending" +msgstr "Waiting sending" + +#: models.py:200 +msgid "sending" +msgstr "Sending" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Sent" + +#: models.py:202 +msgid "canceled" +msgstr "Canceled" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Title" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "Content" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Or paste an URL." + +#: models.py:209 +#, fuzzy +msgid "" +"\n" +"\n" +"" +msgstr "Edit your newsletter here" + +#: models.py:212 +msgid "test contacts" +msgstr "Test contacts" + +#: models.py:215 +msgid "smtp server" +msgstr "Smtp server" + +#: models.py:217 +msgid "sender" +msgstr "Sender" + +#: models.py:219 +msgid "reply to" +msgstr "Reply to" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Status" + +#: models.py:223 +msgid "sending date" +msgstr "Sending date" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Used for displaying the newsletter on the site." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "newsletter" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "newsletters" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "link" + +#: models.py:271 +#, fuzzy +msgid "links" +msgstr "link" + +#: models.py:283 +msgid "file to attach" +msgstr "" + +#: models.py:287 +msgid "attachment" +msgstr "" + +#: models.py:288 +msgid "attachments" +msgstr "" + +#: models.py:308 +msgid "sent in test" +msgstr "Sent in test" + +#: models.py:310 +msgid "error" +msgstr "Error" + +#: models.py:311 +msgid "invalid email" +msgstr "Invalid email" + +#: models.py:312 +msgid "opened" +msgstr "Opened" + +#: models.py:313 +msgid "opened on site" +msgstr "Opened on site" + +#: models.py:314 +msgid "link opened" +msgstr "Link opened" + +#: models.py:315 +#, fuzzy +msgid "unsubscription" +msgstr "Unsubscription" + +#: models.py:333 +#, fuzzy +msgid "contact mailing status" +msgstr "Mailing Status" + +#: models.py:334 +#, fuzzy +msgid "contact mailing statuses" +msgstr "Mailing Status" + +#: models.py:340 +msgid "permissions group" +msgstr "Permission group" + +#: models.py:353 +#, fuzzy +msgid "workgroup" +msgstr "Work Group" + +#: models.py:354 +#, fuzzy +msgid "workgroups" +msgstr "Work Groups" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Status" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Advanced" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "No relative object" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Related object" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Total Subscriptions" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Export contacts as VCard" + +#: admin/contact.py:90 +#, fuzzy +msgid "Export contacts in Excel" +msgstr "Export contacts as VCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "New mailing list at %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "New mailing list created in admin at %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s successfully created." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Create a mailing list" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s contacts successfully imported." + +#: admin/contact.py:128 +#, fuzzy +msgid "Contact importation" +msgstr "Import" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Please select a least 2 mailing list." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Merging list at %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Mailing list created by merging at %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s successfully created by merging." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Merge selected mailing lists" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Export Subscribers" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Export" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Receivers" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Sending" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Miscellaneous" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Default" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Unable to download HTML, due to internal errors." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "View historic" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Not available" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Historic" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "View statistics" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistics" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Unable to send the newsletter, due to internal HTML errors." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s successfully sent." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "No contact test assigned for %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Send email test" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s newsletters are ready to send" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Make it \"ready to send\"" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s newsletters are cancelled" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Cancel the sending" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Configuration" + +#: admin/smtpserver.py:57 +#, fuzzy +msgid "Check connection" +msgstr "Connection valid" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Number of contacts" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Number of mailing List " + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Number of newsletter " + +#: cmsplugin_newsletter/cms_plugins.py:15 +#, fuzzy +msgid "Subscription Form" +msgstr "Unsubscription" + +#: cmsplugin_newsletter/models.py:13 +#, fuzzy +msgid "show description" +msgstr "Description" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +#, fuzzy +msgid "Mailing List to subscribe to." +msgstr "Number of mailing List " + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Add %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +#, fuzzy +msgid "Actions" +msgstr "Action" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, fuzzy, python-format +msgid "Import %(name)ss" +msgstr "Import %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +#, fuzzy +msgid "Add to a mailing list" +msgstr "Create a mailing list" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, fuzzy, python-format +msgid "Export %(name)s as VCard" +msgstr "Export contacts as VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, fuzzy, python-format +msgid "Export %(name)s as Excel" +msgstr "Export %(name)s" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Home" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Import" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "" + +#: templates/newsletter/contact_import.html:31 +#, fuzzy +msgid "Import contacts from a Excel file." +msgstr "Export contacts as VCard" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +#, fuzzy +msgid "Import" +msgstr "Import" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +#, fuzzy +msgid "Subscription to mailing list" +msgstr "Create a mailing list" + +#: templates/newsletter/mailing_list_subscribe.html:10 +#, fuzzy +msgid "Thanks for your subscription!" +msgstr "Total Subscriptions" + +#: templates/newsletter/mailing_list_subscribe.html:16 +#, fuzzy +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Validate this form to unsubscribe to this mailing list." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +#, fuzzy +msgid "Subscribe" +msgstr "Subscriber" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Unsubscription" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "You are unsubscribed to this mailing list." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Validate this form to unsubscribe to this mailing list." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Unsubscribe" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Admin" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Date" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Contact" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Action" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +#, fuzzy +msgid "For unsubscribing to this mailing list," +msgstr "You are unsubscribed to this mailing list." + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Consultation histogram" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Period" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +#, fuzzy +msgid "Broadcasting statistics" +msgstr "View statistics" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +#, fuzzy +msgid "Total openings" +msgstr "Total Subscriptions" + +#: templates/newsletter/newsletter_statistics.html:120 +#, fuzzy +msgid "Openings on site" +msgstr "Opened on site" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Total single opening" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Unknown delivery" + +#: templates/newsletter/newsletter_statistics.html:135 +#, fuzzy +msgid "Unsubscriptions" +msgstr "Unsubscription" + +#: templates/newsletter/newsletter_statistics.html:140 +#, fuzzy +msgid "Openings average" +msgstr "Total Subscriptions" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +#, fuzzy +msgid "Links statistics" +msgstr "View statistics" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +#, fuzzy +msgid "Total clicked links" +msgstr "Total Subscriptions" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Total of single clicked links" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Clicked links per opening" + +#: templates/newsletter/newsletter_statistics.html:166 +#, fuzzy +msgid "Clicked links average" +msgstr "Total Subscriptions" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Export Report" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Download CSV report" + +#: templates/newsletter/newsletter_statistics.html:185 +#, fuzzy +msgid "Informations" +msgstr "Import" + +#: templates/newsletter/newsletter_statistics.html:186 +#, fuzzy +msgid "Recipients" +msgstr "Receivers" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "View" + +#: templates/newsletter/newsletter_statistics.html:190 +#, fuzzy +msgid "Sending date" +msgstr "Sending date" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Tests sent" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Top Links" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Density map" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "There is no Top links yet available" + +#: templates/newsletter/cms/subscription_form.html:8 +#, fuzzy +msgid "You have successfully subscribed to the mailing list!" +msgstr "You are unsubscribed to this mailing list." + +#: utils/importation.py:52 +#, fuzzy, python-format +msgid "Mailing list created by importation at %s" +msgstr "Mailing list created by merging at %s" + +#: utils/importation.py:53 +#, fuzzy, python-format +msgid "Contacts imported by %s." +msgstr "Import" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Statistics of %s" + +#: views/statistics.py:76 +#, fuzzy +msgid "openings" +msgstr "Total Subscriptions" + +#: views/statistics.py:139 +#, fuzzy +msgid "#val# openings" +msgstr "Total Subscriptions" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Historic of %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" diff --git a/emencia/django/newsletter/locale/es/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 00000000..ac4c2f61 Binary files /dev/null and b/emencia/django/newsletter/locale/es/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/es/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/es/LC_MESSAGES/django.po new file mode 100644 index 00000000..71e20dcc --- /dev/null +++ b/emencia/django/newsletter/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,861 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +# sergiodlc , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Correo" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Listas de correo" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "nombre" + +#: models.py:40 +msgid "server host" +msgstr "dirección del servidor" + +#: models.py:41 +msgid "server user" +msgstr "usuario del servidor" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Dejar en blanco si el servidor es público" + +#: models.py:43 +msgid "server password" +msgstr "contraseña del servidor" + +#: models.py:45 +msgid "server port" +msgstr "puerto del servidor" + +#: models.py:46 +msgid "server use TLS" +msgstr "el servidor utiliza TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "cabeceras personalizadas" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" +"clave1: valor1 clave2: valor2, separados por un salto de línea.\n" +"Sirve para pasar algunos encabezados de rastreo si tu proveedor los permite." + +#: models.py:51 +msgid "mails per hour" +msgstr "emails por hora" + +#: models.py:93 +msgid "SMTP server" +msgstr "Servidor SMTP" + +#: models.py:94 +msgid "SMTP servers" +msgstr "Servidores SMTP" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "nombre" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "apellido" + +#: models.py:103 +msgid "subscriber" +msgstr "suscriptor" + +#: models.py:104 +msgid "valid email" +msgstr "email válido" + +#: models.py:105 +msgid "contact tester" +msgstr "contacto de prueba" + +#: models.py:106 +msgid "tags" +msgstr "etiquetas" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "fecha de creación" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "fecha de modificación" + +#: models.py:132 +msgid "mail format" +msgstr "formato de email" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "contacto" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "contactos" + +#: models.py:157 +msgid "description" +msgstr "descripción" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "suscriptores" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "desuscritos" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "lista de correo" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "listas de correo" + +#: models.py:198 +msgid "draft" +msgstr "borrador" + +#: models.py:199 +msgid "waiting sending" +msgstr "en cola para enviar" + +#: models.py:200 +msgid "sending" +msgstr "enviando" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "enviado" + +#: models.py:202 +msgid "canceled" +msgstr "cancelado" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "título" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" +"Puedes usar la variable \"{{ UNIQUE_KEY }} para identificar de forma única " +"el título del newsletter" + +#: models.py:208 +msgid "content" +msgstr "contenido" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "O pega una URL." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "Edita tu newsletter aqui" + +#: models.py:212 +msgid "test contacts" +msgstr "probar contactos" + +#: models.py:215 +msgid "smtp server" +msgstr "servidor smtp" + +#: models.py:217 +msgid "sender" +msgstr "emisor" + +#: models.py:219 +msgid "reply to" +msgstr "responder a" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "estado" + +#: models.py:223 +msgid "sending date" +msgstr "fecha de envío" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Utilizado para mostrar el boletín de noticias en el sitio web." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "boletín de noticias" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "boletines de noticias" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "enlace" + +#: models.py:271 +msgid "links" +msgstr "enlaces" + +#: models.py:283 +msgid "file to attach" +msgstr "archivo a adjuntar" + +#: models.py:287 +msgid "attachment" +msgstr "adjunto" + +#: models.py:288 +msgid "attachments" +msgstr "adjuntos" + +#: models.py:308 +msgid "sent in test" +msgstr "envío en prueba" + +#: models.py:310 +msgid "error" +msgstr "error" + +#: models.py:311 +msgid "invalid email" +msgstr "email inválido" + +#: models.py:312 +msgid "opened" +msgstr "abierto" + +#: models.py:313 +msgid "opened on site" +msgstr "abierto en sitio web" + +#: models.py:314 +msgid "link opened" +msgstr "enlace abierto" + +#: models.py:315 +msgid "unsubscription" +msgstr "desuscripción" + +#: models.py:333 +msgid "contact mailing status" +msgstr "Estado del envío" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "Estado de los envíos" + +#: models.py:340 +msgid "permissions group" +msgstr "grupo de permisos" + +#: models.py:353 +msgid "workgroup" +msgstr "Grupo de Trabajo" + +#: models.py:354 +msgid "workgroups" +msgstr "Grupos de Trabajo" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Estado" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Avanzado" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Sin objetos relacionados" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Objetos relacionados" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Suscriptores totales" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Exportar contactos como VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Exportar contactos a Excel" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nueva lista de correo en %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nueva lista de correo creada en %s utilizando la administración" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s creados con éxito." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Crear una lista de correo" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s contactos importados satisfactoriamente." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "importar" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Por favor selecciona al menos 2 listas de correo." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Uniendo lista en %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Lista de correo creada al unir %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s creado exitosamente tras la unión." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Unir las listas de correo seleccionadas" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Exportar Suscriptores" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Exportar" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Receptores" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Enviando" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Miscelánea" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Por defecto" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Imposible descargar el HTML dado que contiene errores." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Por favor instala lxml para parsear una URL." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Ver Historial" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "No están disponibles" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Historial" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Ver estadísticas" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Estadísticas" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "" +"Imposible enviar el boletin de noticias dado que el HTML contiene errores." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s enviado correctamente." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Sin contactos de prueba asignados a %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Enviar email de prueba" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s boletines de noticias listos para ser enviados" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Preparar para envío" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s boletines de noticias cancelados" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Cancelar el envío" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "Sintax incorrecto, no te olvides los \":\"." + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "Sintax incorrecto, demasiadas asignaciones por linea." + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Configuración" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Probar conexión" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Número de Contactos" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Número de listas de correo" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Número de boletines de noticias" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Desuscripción" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "Descripción" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Ver descripción de la lista." + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Número de lista de mailing" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Añadir %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Acciones" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importar %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Añadir a la lista de correo" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Exportar %(name)s como VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Exportar %(name)s como Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Inicio" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Importación" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Archivo de Excel (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Exportar contactos como VCard" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Las columnas son [email][last name][first name][tags]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Todas las columnas son opcionales excepto el correo." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Importar" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Texto" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Archivo de texto (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Importar contactos desde un archivo de texto o desde un archivo CSV." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" +"Las Columnas son [email][last name][first name][tags], separadas por un " +"punto y coma" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "Archivo VCard (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" +"Importa contactos desde tu cliente de correo preferido, proveyendo un " +"archivo VCard." + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Subscripción a la lista de correo" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Total de suscripciones" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Complete este formulario para suscribirse a la lista de correo." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Suscribirse" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Desuscripción" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Has sido desuscrito de la lista de correo." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Complete este formulario para desuscribirse de esta lista de correo." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Desuscribir" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Administración" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Fecha" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Contacto" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Acción" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Si no puedes ver este correo," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "pincha aqui" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Has sido desuscrito de la lista de correo." + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Histograma de consultas" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Período" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Estadísticas de difusión" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Total abiertos" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Abierto en sitio web" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Total de los abiertos únicos" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Entregas no conocidas" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Desuscripción" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Aperturas medias" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Estadísticas de enlaces" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Total de enlaces pulsados" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Total de enlaces únicos pulsados" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Enlaces pulsados por apertura" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Media de enlaces pulsados" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Informe" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Descargar el informe en CSV" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Informaciones" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Receptores" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Ver" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Fecha de envío" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Envio de prueba" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Principales enlaces" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Mapa de la densidad" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Ninguna tapa liga todavía." + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Has sido desuscrito de la lista de correo." + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "Lista de correo creada uniendola con %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Estadísticas de %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "abiertos" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "#val# abiertos" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# clicks" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Historial de %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/es_DO/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/es_DO/LC_MESSAGES/django.mo new file mode 100644 index 00000000..40e1ca6d Binary files /dev/null and b/emencia/django/newsletter/locale/es_DO/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/es_DO/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/es_DO/LC_MESSAGES/django.po new file mode 100644 index 00000000..b5278e5b --- /dev/null +++ b/emencia/django/newsletter/locale/es_DO/LC_MESSAGES/django.po @@ -0,0 +1,851 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_DO\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Correo Electrónico" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Listas de correos" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Nombre" + +#: models.py:40 +msgid "server host" +msgstr "Servidor" + +#: models.py:41 +msgid "server user" +msgstr "Usuario del servidor" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Déje en blanco si el servidor es público" + +#: models.py:43 +msgid "server password" +msgstr "Contraseña del servidor" + +#: models.py:45 +msgid "server port" +msgstr "Puerto del servidor" + +#: models.py:46 +msgid "server use TLS" +msgstr "User servidor TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "Encabezados personalizados" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "Correos por hora" + +#: models.py:93 +msgid "SMTP server" +msgstr "Servidor SMTP" + +#: models.py:94 +msgid "SMTP servers" +msgstr "Servidores SMTP" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "Correo electrónico" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Nombre" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Apellido" + +#: models.py:103 +msgid "subscriber" +msgstr "Suscribirse" + +#: models.py:104 +msgid "valid email" +msgstr "Email válido" + +#: models.py:105 +msgid "contact tester" +msgstr "Probar contacto" + +#: models.py:106 +msgid "tags" +msgstr "Etiquetas" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Fecha de creación" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Fecha de modificación" + +#: models.py:132 +msgid "mail format" +msgstr "Formato de correo" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "Contacto" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "Contactos" + +#: models.py:157 +msgid "description" +msgstr "Descripción" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Suscriptores" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Lista de correo" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "Listas de correos" + +#: models.py:198 +msgid "draft" +msgstr "Borrador" + +#: models.py:199 +msgid "waiting sending" +msgstr "Esperando el envio" + +#: models.py:200 +msgid "sending" +msgstr "Enviando" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Enviado" + +#: models.py:202 +msgid "canceled" +msgstr "Cancelado" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Título" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "Contenido" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "O pegue una URL" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "Prueba de contactos" + +#: models.py:215 +msgid "smtp server" +msgstr "Servidor SMTP" + +#: models.py:217 +msgid "sender" +msgstr "Remitente" + +#: models.py:219 +msgid "reply to" +msgstr "Responder a" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Estatus" + +#: models.py:223 +msgid "sending date" +msgstr "Fecha de envío" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Usado para mostrar el boletín en otro website" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "boletín" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "boletines" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "enlace" + +#: models.py:271 +msgid "links" +msgstr "enlace" + +#: models.py:283 +msgid "file to attach" +msgstr "archivo para adjuntar" + +#: models.py:287 +msgid "attachment" +msgstr "adjunto" + +#: models.py:288 +msgid "attachments" +msgstr "adjuntos" + +#: models.py:308 +msgid "sent in test" +msgstr "Pueba enviada" + +#: models.py:310 +msgid "error" +msgstr "Error" + +#: models.py:311 +msgid "invalid email" +msgstr "Correo electrónico inválido" + +#: models.py:312 +msgid "opened" +msgstr "Abierto" + +#: models.py:313 +msgid "opened on site" +msgstr "Abierto en el website" + +#: models.py:314 +msgid "link opened" +msgstr "Enlace abierto" + +#: models.py:315 +msgid "unsubscription" +msgstr "" + +#: models.py:333 +msgid "contact mailing status" +msgstr "" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "" + +#: models.py:340 +msgid "permissions group" +msgstr "" + +#: models.py:353 +msgid "workgroup" +msgstr "Grupo de trabajo" + +#: models.py:354 +msgid "workgroups" +msgstr "Grupos de trabajo" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Estatus" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Avanzado" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Sin objecto relacionado" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Objecto relacionado" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Total de suscriptores" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Exportar contactos como VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Exportar contactos como VCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nueva lista de correo como %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "" + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Crear lista de correo" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Importar" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Por favor seleccione por lo menos 2 listas de correo" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "" + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/fo/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/fo/LC_MESSAGES/django.mo new file mode 100644 index 00000000..36c75321 Binary files /dev/null and b/emencia/django/newsletter/locale/fo/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/fo/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/fo/LC_MESSAGES/django.po new file mode 100644 index 00000000..1f60e871 --- /dev/null +++ b/emencia/django/newsletter/locale/fo/LC_MESSAGES/django.po @@ -0,0 +1,851 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Gunleif Joensen , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fo\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "T-postur" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Postlistar" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Navn" + +#: models.py:40 +msgid "server host" +msgstr "ambætara vertur" + +#: models.py:41 +msgid "server user" +msgstr "ambætara brúkari" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Lat verða tómt, um verturin er almennur." + +#: models.py:43 +msgid "server password" +msgstr "ambætara atlát" + +#: models.py:45 +msgid "server port" +msgstr "ambætara portur" + +#: models.py:46 +msgid "server use TLS" +msgstr "ambætarin nýtur TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "tillagað teksthøvd" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "t-postar um tíman" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP ambætari" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP ambætarir" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "t-postur" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "fornavn" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "eftirnavn" + +#: models.py:103 +msgid "subscriber" +msgstr "haldari" + +#: models.py:104 +msgid "valid email" +msgstr "gildur t-postur" + +#: models.py:105 +msgid "contact tester" +msgstr "" + +#: models.py:106 +msgid "tags" +msgstr "spjøldur" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "stovningardagur" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "broytingardagur" + +#: models.py:132 +msgid "mail format" +msgstr "t-post snið" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "" + +#: models.py:157 +msgid "description" +msgstr "lýsing" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "haldarir" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "givnir haldarir" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "postlisti" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "postlistar" + +#: models.py:198 +msgid "draft" +msgstr "útkast" + +#: models.py:199 +msgid "waiting sending" +msgstr "bíði sendi" + +#: models.py:200 +msgid "sending" +msgstr "sendi" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "sent" + +#: models.py:202 +msgid "canceled" +msgstr "avlýst" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "heiti" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "innihald" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Ella set eina URLu inn." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "" + +#: models.py:215 +msgid "smtp server" +msgstr "smtp ambætari" + +#: models.py:217 +msgid "sender" +msgstr "avsendari" + +#: models.py:219 +msgid "reply to" +msgstr "aftursvara" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "støða" + +#: models.py:223 +msgid "sending date" +msgstr "sendidagur" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Nýtt til at sýna tíðindaskrivið í staðnum." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "tíðindaskriv" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "tíðindaskriv" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "leinkja" + +#: models.py:271 +msgid "links" +msgstr "leinkjur" + +#: models.py:283 +msgid "file to attach" +msgstr "fíla at viðfesta" + +#: models.py:287 +msgid "attachment" +msgstr "viðfesti" + +#: models.py:288 +msgid "attachments" +msgstr "viðfesti" + +#: models.py:308 +msgid "sent in test" +msgstr "" + +#: models.py:310 +msgid "error" +msgstr "villa" + +#: models.py:311 +msgid "invalid email" +msgstr "ógildigur t-postur" + +#: models.py:312 +msgid "opened" +msgstr "upplatin" + +#: models.py:313 +msgid "opened on site" +msgstr "" + +#: models.py:314 +msgid "link opened" +msgstr "" + +#: models.py:315 +msgid "unsubscription" +msgstr "" + +#: models.py:333 +msgid "contact mailing status" +msgstr "" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "" + +#: models.py:340 +msgid "permissions group" +msgstr "" + +#: models.py:353 +msgid "workgroup" +msgstr "arbeiðsbólkur" + +#: models.py:354 +msgid "workgroups" +msgstr "arbeiðsbólkar" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Standur" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Framkomið" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Eingin skyldur lutur" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Skyldir lutir" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Haldarir í alt" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "" + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Stovna ein postlista" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Flyt haldarar út" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Flyt út" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Móttakarir" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Sendi" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Ymiskt" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Forsett" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Sýn hagfrøði" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Hagfrøði" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Ikki før fyri at senda tíðindaskrivið, vegna villur inni í HTML." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s er væleydnað sent." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Senda royndar t-post" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s tíðindaskriv eru til reiðar at senda" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Gerð til reiðar at senda" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s tíðindaskriv eru avlýst" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Avlýs sendingina" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Samanseting" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Kanna sambinding" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Postlista-longd" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Longd á tíðindaskrivi" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Legg %(name)s til" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Atgerðir" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Flyt %(name)s inn" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Legg afturat einum postlista" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Flyt út %(name)s sum VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Flyt út %(name)s sum Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Heim" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Excel fíla (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Teigar eru [t-postur][eftirnavn][fornavn][spjældur]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Allir teigar eru sjálvbodnir, uttan t-postadressan." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Flyta inn" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Tekstur" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Tekstfíla (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "VCard fíla (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Takk fyri títt hald!" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Gerst haldari" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Gevst við haldi" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Tú er givin at halda hendan postlistan." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Gevst at halda" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Dato" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Atgerð" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Tíðarskeið" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Upplatingar í alt" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Upplatingar á staðnum" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Einskildar upplatingar í alt " + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Givnir haldarir" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Upplatingar í meðal" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Leinkju hagfrøði" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Frásøgn" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Tak CSV frásøgn niður" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Upplýsingar" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Móttakarir" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Sýn" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "sendidagur" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Royndir sendar" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/fr/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 00000000..aaa1b615 Binary files /dev/null and b/emencia/django/newsletter/locale/fr/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/fr/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 00000000..ad6e952e --- /dev/null +++ b/emencia/django/newsletter/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,861 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Julien Fache , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-23 15:07+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Email" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Listes de diffusion" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Nom" + +#: models.py:40 +msgid "server host" +msgstr "Hôte" + +#: models.py:41 +msgid "server user" +msgstr "Utilisateur" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Laissez ce champs vide, si aucune authentification n'est nécessaire." + +#: models.py:43 +msgid "server password" +msgstr "Mot de passe" + +#: models.py:45 +msgid "server port" +msgstr "Port" + +#: models.py:46 +msgid "server use TLS" +msgstr "Chiffrement TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "Entêtes personnalisées " + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" +"clef1: valeur1 clef2: valeur2, séparés par un retour à la ligne.\n" +"Utile pour passer des en-têtes de suivi si votre fournisseur le permet." + +#: models.py:51 +msgid "mails per hour" +msgstr "Envois/Heure" + +#: models.py:93 +msgid "SMTP server" +msgstr "serveur SMTP" + +#: models.py:94 +msgid "SMTP servers" +msgstr "serveurs SMTP" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "Email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Prénom" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Nom" + +#: models.py:103 +msgid "subscriber" +msgstr "Opt-in Newsletter" + +#: models.py:104 +msgid "valid email" +msgstr "Email valide" + +#: models.py:105 +msgid "contact tester" +msgstr "Testeur" + +#: models.py:106 +msgid "tags" +msgstr "Tags" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Date de création" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Date de modification" + +#: models.py:132 +msgid "mail format" +msgstr "Contact" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "contact" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "contacts" + +#: models.py:157 +msgid "description" +msgstr "Description" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Inscrits" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "Désinscrits" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Liste de diffusion" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "listes de diffusion" + +#: models.py:198 +msgid "draft" +msgstr "Brouillon" + +#: models.py:199 +msgid "waiting sending" +msgstr "Prête à envoyer" + +#: models.py:200 +msgid "sending" +msgstr "En cours d'envois" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Envoyée" + +#: models.py:202 +msgid "canceled" +msgstr "Annulée" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Titre" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" +"Vous pouvez utiliser la variable \"{{ UNIQUE_KEY }}\" pour avoir un " +"identifiant unique dans le titre de la newsletter." + +#: models.py:208 +msgid "content" +msgstr "Contenu" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Ou collez simplement une URL." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" +"\n" +"\n" +"" + +#: models.py:212 +msgid "test contacts" +msgstr "Contacts de test" + +#: models.py:215 +msgid "smtp server" +msgstr "Serveur d'envois" + +#: models.py:217 +msgid "sender" +msgstr "Expéditeur" + +#: models.py:219 +msgid "reply to" +msgstr "Répondre à" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Statut" + +#: models.py:223 +msgid "sending date" +msgstr "Date d'envois" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Utilisé pour construire le lien vers le site." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "Newsletter" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "newsletters" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "lien" + +#: models.py:271 +msgid "links" +msgstr "liens" + +#: models.py:283 +msgid "file to attach" +msgstr "fichier à attacher" + +#: models.py:287 +msgid "attachment" +msgstr "pièce jointe" + +#: models.py:288 +msgid "attachments" +msgstr "pièces jointes" + +#: models.py:308 +msgid "sent in test" +msgstr "Envois en test" + +#: models.py:310 +msgid "error" +msgstr "Erreur lors de l'envois" + +#: models.py:311 +msgid "invalid email" +msgstr "Email Invalide" + +#: models.py:312 +msgid "opened" +msgstr "Réception OK" + +#: models.py:313 +msgid "opened on site" +msgstr "Ouvert sur le site" + +#: models.py:314 +msgid "link opened" +msgstr "Lien ouvert" + +#: models.py:315 +msgid "unsubscription" +msgstr "désabonnement" + +#: models.py:333 +msgid "contact mailing status" +msgstr "statut d'envoi" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "statuts d'envoi" + +#: models.py:340 +msgid "permissions group" +msgstr "groupe de permissions" + +#: models.py:353 +msgid "workgroup" +msgstr "groupe de travail" + +#: models.py:354 +msgid "workgroups" +msgstr "groupes de travail" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Statut" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Avancé" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Pas de relations" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Objet relatif" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Abonnements" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Exporter les contacts en VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Exporter les contacts dans Excel" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nouvelle liste de diffusion du %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nouvelle de liste de diffusion créée depuis la table contact le %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s créée avec succès." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Créer une liste de diffusion" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s contacts importés avec succès." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Importation de contacts" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Veuillez sélectionner au moins 2 listes de diffusions." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Liste de diffusion fusionnée du %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Liste de diffusion créée par fusion le %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s créée avec succès." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Fusionner les listes de diffusions sélectionnées." + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Export des inscrits" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Exportation" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Destinataires" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Expédition" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Divers" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Par défault" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Impossible de télécharger le HTML, il contient des erreurs." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Veuillez installer lxml pour récupérer une URL." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Historique d'envois" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Non disponible" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Historique" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Statistiques" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistiques" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Impossible d'envoyer la newsletter, le HTML est mal formaté." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s envoyée en test avec succès." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Pas de contacts de test assignés pour %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Effectuer un test d'envois" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s newsletters sont prêtes à être envoyées." + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Passer en attente d'expédition" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s newsletters ont été annulées." + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Annuler les envois" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "Syntaxe invalide, n'oubliez pas les \":\"." + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "Syntaxe invalide, plusieurs assignations par ligne." + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Configuration" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Tester la connection" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Nombre de contacts" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Nombre de listes de diffusion" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Nombre de newsletters" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Formulaire d'abonnement" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "description visible" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Affiche la description de la liste de diffusion." + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Listes de diffusions disponible à l'abonnement." + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Ajouter %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Actions" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importer %(name)ss" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Ajouter à une liste de diffusion" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Exporter %(name)s en VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Exporter %(name)s dans Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Accueil" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Importation" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Fichier Excel (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Importez vos contacts depuis un fichier Excel." + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Les colonnes sont [email][prénom][nom][tags]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Toutes les colonnes sont optionnels à l'exception de l'email." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Importation" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Texte" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Fichier texte (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Importez vos contacts depuis un fichier texte ou un fichier CSV." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" +"Les colonnes sont [email][prénom][nom][tags], séparées par un point virgule." + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "Fichier VCard (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" +"Importez vos contacts depuis votre client mail favoris en fournissant un " +"fichier VCard." + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "Texte brut" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Inscription aux listes de diffusions" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Merci pour votre inscription à la liste de diffusion !" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Validez ce formulaire pour vous inscrire aux listes de diffusion." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "S'inscrire" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Désabonnements" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Vous êtes désinscrit de cette liste de diffusion." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Validez ce formulaire pour vous désinscrire de la liste de diffusion." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Désinscription" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Admin." + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Date" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Contact" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Action" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Si vous ne pouvez voir cet e-mail," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "cliquez ici" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Pour vous désinscrire de cette liste de diffusion," + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Histogramme des consultations" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Période" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Statistiques de diffusion" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Ouvertures" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Ouvertures sur le site" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Destinataires ayant ouvert" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Réceptions inconnues" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Désabonnements" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Nombre moyen d'ouvertures" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Statistiques sur les liens" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Clics" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Destinataires ayant cliqué" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Taux de réactivité (clics/ouvertures)" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Nombre moyen de clics" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Rapport" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Télécharger le rapport CSV" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Informations" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Destinataires" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Voir" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Date d'envoi" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Envois en test" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Top Liens" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Carte de densité" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Pas de Top Liens pour l'instant." + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Vous êtes inscrit avec succès à cette liste de diffusion." + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "Liste de diffusion créée par importation le %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "Contacts importés par %s." + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Statistiques de %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "Ouvertures" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "#val# ouvertures" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# clics" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Historique de %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/it/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 00000000..947bf1e4 Binary files /dev/null and b/emencia/django/newsletter/locale/it/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/it/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/it/LC_MESSAGES/django.po new file mode 100644 index 00000000..15c483ac --- /dev/null +++ b/emencia/django/newsletter/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,854 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Denis Darii , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "E-mail" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Elenchi email" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "nome" + +#: models.py:40 +msgid "server host" +msgstr "host" + +#: models.py:41 +msgid "server user" +msgstr "user" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Lascia vuoto se il server è pubblico" + +#: models.py:43 +msgid "server password" +msgstr "password" + +#: models.py:45 +msgid "server port" +msgstr "porta" + +#: models.py:46 +msgid "server use TLS" +msgstr "utilizza TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "header personalizzati" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "mail all'ora" + +#: models.py:93 +msgid "SMTP server" +msgstr "Server SMTP" + +#: models.py:94 +msgid "SMTP servers" +msgstr "Server SMTP" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "nome" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "cognome" + +#: models.py:103 +msgid "subscriber" +msgstr "sottoscrittore" + +#: models.py:104 +msgid "valid email" +msgstr "email valida" + +#: models.py:105 +msgid "contact tester" +msgstr "contatto di prova" + +#: models.py:106 +msgid "tags" +msgstr "tag" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "data di creazione" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "data di modifica" + +#: models.py:132 +msgid "mail format" +msgstr "formato messaggio" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "contatto" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "contatti" + +#: models.py:157 +msgid "description" +msgstr "descrizione" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "sottoscrittori" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "sottoscrizione rimossa" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "lista di distribuzione" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "liste di distribuzione" + +#: models.py:198 +msgid "draft" +msgstr "bozza" + +#: models.py:199 +msgid "waiting sending" +msgstr "in attesa di invio" + +#: models.py:200 +msgid "sending" +msgstr "invio in corso" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "inviata" + +#: models.py:202 +msgid "canceled" +msgstr "annullata" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "titolo" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "contenuto" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Oppure incolla un URL." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "contatti di prova" + +#: models.py:215 +msgid "smtp server" +msgstr "server smtp" + +#: models.py:217 +msgid "sender" +msgstr "mittente" + +#: models.py:219 +msgid "reply to" +msgstr "rispondi a" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "stato" + +#: models.py:223 +msgid "sending date" +msgstr "data di invio" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Usato per mostrare la newsletter sul sito." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "newsletter" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "newsletter" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "collegamento" + +#: models.py:271 +msgid "links" +msgstr "collegamenti" + +#: models.py:283 +msgid "file to attach" +msgstr "file da allegare" + +#: models.py:287 +msgid "attachment" +msgstr "allegato" + +#: models.py:288 +msgid "attachments" +msgstr "allegati" + +#: models.py:308 +msgid "sent in test" +msgstr "inviata in prova" + +#: models.py:310 +msgid "error" +msgstr "errore" + +#: models.py:311 +msgid "invalid email" +msgstr "email non valida" + +#: models.py:312 +msgid "opened" +msgstr "aperta" + +#: models.py:313 +msgid "opened on site" +msgstr "aperta sul sito" + +#: models.py:314 +msgid "link opened" +msgstr "collegamento seguito" + +#: models.py:315 +msgid "unsubscription" +msgstr "annullamento sottoscrizione" + +#: models.py:333 +msgid "contact mailing status" +msgstr "stato del contatto" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "stati del contatto" + +#: models.py:340 +msgid "permissions group" +msgstr "permessi del gruppo" + +#: models.py:353 +msgid "workgroup" +msgstr "gruppo di lavoro" + +#: models.py:354 +msgid "workgroups" +msgstr "gruppi di lavoro" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Stato" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Avanzate" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Nessun oggetto correlato" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Oggetto correlato" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Sottoscrizioni totali" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Esporta i contatti come VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Esporta i contatti come Excel" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nuova lista di distribuzione per %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nuova lista di distribuzione creata in amministrazione per %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s creata con successo." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Crea una lista di distribuzione" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s contatti importati con successo." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Importazione contatti" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Seleziona almento 2 liste di distribuzione." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Unione delle liste per %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Lista di distribuzione creata per unione per %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s creata con successo per unione." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Unisci le liste di distribuzione selezionate" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Esporta i sottoscrittori" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Esporta" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Destinatari" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Invio in corso" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Varie" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Predefinito" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Impossibile scaricare l'HTML, a causa di errori nel codice." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Si prega di installare LXML per il parsing di URL." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Mostra storico" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Non disponibile" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Storico" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Mostra statistiche" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistiche" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Impossibile inviare la newsletter, per errori nel codice HTML." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s inviata con successo." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Nessun contatto assegnato a %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Invia email di test" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s newsletter sono pronte per l'invio" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Prepara per l'invio" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s newsletter sono annullate" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Annulla l'invio" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Configurazione" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Verifica connessione" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Lunghezza contatti" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Lunghezza lista di distribuzione" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Lunghezza newsletter" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Modulo di abbonamento" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "mostra descrizione" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Mailing List per abbonarsi." + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Aggiungi %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Azioni" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importazione %(name)ss" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Aggiungi ad una lista" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Esporta %(name)s come VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Esporta %(name)s come Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Pagina iniziale" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Importazione" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "File excel (. xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Importa contatti da un file Excel." + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Importa" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Testo" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "File di testo (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "File VCard (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Abbonati alla mailing list" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Grazie per il vostro abbonamento!" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Convalida questo form per abbonarti alla mailing list." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Abbonati" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Annullamento sottoscrizione" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" +"La tua sottoscrizione a questa lista di distribuzione è stata rimossa." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" +"Conferma questo indirizzo per rimuovere la sottoscrizione a questa lista di " +"distribuzione." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Rimuovi la sottoscrizione" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Pagina iniziale" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Data" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Contatto" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Azione" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Se non riesci a vedere questa e-mail," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "clicca qui" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Per annullare l'iscrizione a questa mailing list," + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Grafico consultazione" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Periodo" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Statistiche di diffusione" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Totale aperture" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Aperture sul sito" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Totale aperture univoche" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Stato di recapito sconosciuto" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Annullamento sottoscrizioni" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Media aperture" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Statistiche collegamenti" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Totale collegamenti seguiti" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Totale collegamenti univoci seguiti " + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Collegamenti seguiti per apertura" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Media collegamenti seguiti" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Report" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Scarica report in CSV" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Informazioni" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Destinatari" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Mostra" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Data di invio" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Prove inviate" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Collegamenti popolari" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Mappa densità" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Nessun collegamento popolare." + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Ti sei iscritto correttamente alla mailing list!" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Statistiche di %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "aperture" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "#val# aperture" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# click" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Storico di %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/ja/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 00000000..a6b8e964 Binary files /dev/null and b/emencia/django/newsletter/locale/ja/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/ja/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 00000000..00d47cb4 --- /dev/null +++ b/emencia/django/newsletter/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,850 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2010-11-30 00:55+0000\n" +"Last-Translator: Fantomas \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0\n" + +#: forms.py:20 +msgid "Email" +msgstr "" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "" + +#: models.py:40 +msgid "server host" +msgstr "" + +#: models.py:41 +msgid "server user" +msgstr "" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "" + +#: models.py:43 +msgid "server password" +msgstr "" + +#: models.py:45 +msgid "server port" +msgstr "" + +#: models.py:46 +msgid "server use TLS" +msgstr "" + +#: models.py:48 +msgid "custom headers" +msgstr "" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "" + +#: models.py:93 +msgid "SMTP server" +msgstr "" + +#: models.py:94 +msgid "SMTP servers" +msgstr "" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "" + +#: models.py:103 +msgid "subscriber" +msgstr "" + +#: models.py:104 +msgid "valid email" +msgstr "" + +#: models.py:105 +msgid "contact tester" +msgstr "" + +#: models.py:106 +msgid "tags" +msgstr "" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "" + +#: models.py:132 +msgid "mail format" +msgstr "" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "" + +#: models.py:157 +msgid "description" +msgstr "" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "" + +#: models.py:198 +msgid "draft" +msgstr "" + +#: models.py:199 +msgid "waiting sending" +msgstr "" + +#: models.py:200 +msgid "sending" +msgstr "" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "" + +#: models.py:202 +msgid "canceled" +msgstr "" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "" + +#: models.py:215 +msgid "smtp server" +msgstr "" + +#: models.py:217 +msgid "sender" +msgstr "" + +#: models.py:219 +msgid "reply to" +msgstr "" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "" + +#: models.py:223 +msgid "sending date" +msgstr "" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "" + +#: models.py:258 +msgid "url" +msgstr "" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "" + +#: models.py:271 +msgid "links" +msgstr "" + +#: models.py:283 +msgid "file to attach" +msgstr "" + +#: models.py:287 +msgid "attachment" +msgstr "" + +#: models.py:288 +msgid "attachments" +msgstr "" + +#: models.py:308 +msgid "sent in test" +msgstr "" + +#: models.py:310 +msgid "error" +msgstr "" + +#: models.py:311 +msgid "invalid email" +msgstr "" + +#: models.py:312 +msgid "opened" +msgstr "" + +#: models.py:313 +msgid "opened on site" +msgstr "" + +#: models.py:314 +msgid "link opened" +msgstr "" + +#: models.py:315 +msgid "unsubscription" +msgstr "" + +#: models.py:333 +msgid "contact mailing status" +msgstr "" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "" + +#: models.py:340 +msgid "permissions group" +msgstr "" + +#: models.py:353 +msgid "workgroup" +msgstr "" + +#: models.py:354 +msgid "workgroups" +msgstr "" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "" + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "" + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/nl/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 00000000..ded6b2f9 Binary files /dev/null and b/emencia/django/newsletter/locale/nl/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/nl/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 00000000..cdc38e74 --- /dev/null +++ b/emencia/django/newsletter/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,853 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Marc Dierckx , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-11-05 09:20+0000\n" +"Last-Translator: felarov \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Email" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Mailing Lijst" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Naam" + +#: models.py:40 +msgid "server host" +msgstr "Server host" + +#: models.py:41 +msgid "server user" +msgstr "Server gebruiker" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Leeg laten voor een publieke host" + +#: models.py:43 +msgid "server password" +msgstr "Server paswoord" + +#: models.py:45 +msgid "server port" +msgstr "Server port" + +#: models.py:46 +msgid "server use TLS" +msgstr "Server gebruikt TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "Eigen headers" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "Mails per uur" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP Server" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP Servers" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "Email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Voornaam" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Familienaam" + +#: models.py:103 +msgid "subscriber" +msgstr "Abonnent" + +#: models.py:104 +msgid "valid email" +msgstr "Geldig email" + +#: models.py:105 +msgid "contact tester" +msgstr "Contact tester" + +#: models.py:106 +msgid "tags" +msgstr "Tags" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Creatiedatum" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Veranderingsdatum" + +#: models.py:132 +msgid "mail format" +msgstr "Mail formaat" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "Contact" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "Contacten" + +#: models.py:157 +msgid "description" +msgstr "Beschrijving" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Abonnenten" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "Afgemeld" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Mailing lijst" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "Mailing lijsten" + +#: models.py:198 +msgid "draft" +msgstr "Klad" + +#: models.py:199 +msgid "waiting sending" +msgstr "Wacht tot zending" + +#: models.py:200 +msgid "sending" +msgstr "Zenden" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Gezonden" + +#: models.py:202 +msgid "canceled" +msgstr "Geannuleerd" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Titel" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "Inhoud" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "of kleef een URL" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "Bewerk hier uw nieuwsbrief" + +#: models.py:212 +msgid "test contacts" +msgstr "Testcontacten" + +#: models.py:215 +msgid "smtp server" +msgstr "smtp Server" + +#: models.py:217 +msgid "sender" +msgstr "Zender" + +#: models.py:219 +msgid "reply to" +msgstr "Antwoord aan" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Status" + +#: models.py:223 +msgid "sending date" +msgstr "Zenddatum" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Naam die wordt getoond op de website" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "nieuwsbrief" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "nieuwsbrieven" + +#: models.py:258 +msgid "url" +msgstr "URL" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "link" + +#: models.py:271 +msgid "links" +msgstr "link" + +#: models.py:283 +msgid "file to attach" +msgstr "file voor de annex" + +#: models.py:287 +msgid "attachment" +msgstr "annex" + +#: models.py:288 +msgid "attachments" +msgstr "annex" + +#: models.py:308 +msgid "sent in test" +msgstr "zend als test" + +#: models.py:310 +msgid "error" +msgstr "fout" + +#: models.py:311 +msgid "invalid email" +msgstr "ongeldig email" + +#: models.py:312 +msgid "opened" +msgstr "geopend" + +#: models.py:313 +msgid "opened on site" +msgstr "geopend op de website" + +#: models.py:314 +msgid "link opened" +msgstr "link geopend" + +#: models.py:315 +msgid "unsubscription" +msgstr "afgemeld" + +#: models.py:333 +msgid "contact mailing status" +msgstr "mailing status" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "mailing status" + +#: models.py:340 +msgid "permissions group" +msgstr "groep met rechten" + +#: models.py:353 +msgid "workgroup" +msgstr "werkgroep" + +#: models.py:354 +msgid "workgroups" +msgstr "werkgroepen" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "status" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Gevorderd" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Geen relatief object" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Verwant object" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Totaal aantal abonnentenl " + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Contactpersonen exporteren als vCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Contactpersonen exporteren als vCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nieuwe mailing lijst op %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nieuwe mailinglijst gemaakt in admin at %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s met succes aangemaakt." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Maak een mailing lijst" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s contacten met success geïmporteerd." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Import" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Selecteer ten minste 2 mailinglijsten." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Samenvoegen van de lijst op %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Mailing lijst gemaakt door het samenvoegen op %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s met succes aangemaakt door tesamenvoeging." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Tesamenvoegen van de geselecteerde mailinglijsten" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Export Abonnenten" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Export" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Ontvangers" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Verzenden" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Diversen" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Standaard" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Interne fouten tijdens het downloaden." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Bekijk de historiek" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Niet beschikbaar" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Historiek" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Bekijk de statistieken" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistiek" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "nterne HTML-fouten verhinderen de verzending" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s succesvol verstuurd." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Geen testcontact toegewezen voor %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Stuur e-mail-test" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s nieuwsbrieven zijn klaar om te verzenden" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Maak het \"klaar om te verzenden\"" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s nieuwsbrieven werden geannuleerd" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Annuleer de verzending" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Configuratie" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Geldige verbinding" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Aantal contacten" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Aantal mailinglijsten" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Aantal nieuwsbrieven" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Uitschrijven" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "Beschrijving" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Beschrijving van de mailing lijst" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Aantal mailinglijsten" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Voeg %(name)s toe" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Actie" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Import %(name)s " + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Maak een mailing list" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Contactpersonen exporteren als vCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Export %(name)s " + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Startpagina" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Import" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Excel-bestand (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Contactpersonen exporteren als vCard" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Kolommen beschikbaar zijn [email] [achternaam] [voornaam] [tags]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Alle kolommen zijn optionaal behalve e-mail." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Import" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Tekst" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Tekstbestand (.txt,.csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Contactpersonen importeren uit een tekstbestand of een CSV-bestand." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" +"Kolommen beschikbaar zijn [email] [achternaam] [voornaam] [tags], gesplitst " +"door een punt coma." + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "VCard-bestand (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "Basis text" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Maak een mailing lijst" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Totaal Abonnementen" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Abonnent" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Uitschrijven" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Indien deze e-mail niet zichtbaar is," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "Klik hier" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Je bent van deze mailing lijst afgemeld." + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Je bent een lid van deze mailing lijst" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "Mailing lijst gemaakt door het samenvoegen van %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "Import" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "Totaal aantal abonnementen" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "Totaal aantal abonnementen" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# klikken" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Historiek van %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/pt/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 00000000..8a9e4c23 Binary files /dev/null and b/emencia/django/newsletter/locale/pt/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/pt/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 00000000..55d82bad --- /dev/null +++ b/emencia/django/newsletter/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,850 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2010-11-30 00:55+0000\n" +"Last-Translator: Fantomas \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "" + +#: models.py:40 +msgid "server host" +msgstr "" + +#: models.py:41 +msgid "server user" +msgstr "" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "" + +#: models.py:43 +msgid "server password" +msgstr "" + +#: models.py:45 +msgid "server port" +msgstr "" + +#: models.py:46 +msgid "server use TLS" +msgstr "" + +#: models.py:48 +msgid "custom headers" +msgstr "" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "" + +#: models.py:93 +msgid "SMTP server" +msgstr "" + +#: models.py:94 +msgid "SMTP servers" +msgstr "" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "" + +#: models.py:103 +msgid "subscriber" +msgstr "" + +#: models.py:104 +msgid "valid email" +msgstr "" + +#: models.py:105 +msgid "contact tester" +msgstr "" + +#: models.py:106 +msgid "tags" +msgstr "" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "" + +#: models.py:132 +msgid "mail format" +msgstr "" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "" + +#: models.py:157 +msgid "description" +msgstr "" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "" + +#: models.py:198 +msgid "draft" +msgstr "" + +#: models.py:199 +msgid "waiting sending" +msgstr "" + +#: models.py:200 +msgid "sending" +msgstr "" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "" + +#: models.py:202 +msgid "canceled" +msgstr "" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "" + +#: models.py:215 +msgid "smtp server" +msgstr "" + +#: models.py:217 +msgid "sender" +msgstr "" + +#: models.py:219 +msgid "reply to" +msgstr "" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "" + +#: models.py:223 +msgid "sending date" +msgstr "" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "" + +#: models.py:258 +msgid "url" +msgstr "" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "" + +#: models.py:271 +msgid "links" +msgstr "" + +#: models.py:283 +msgid "file to attach" +msgstr "" + +#: models.py:287 +msgid "attachment" +msgstr "" + +#: models.py:288 +msgid "attachments" +msgstr "" + +#: models.py:308 +msgid "sent in test" +msgstr "" + +#: models.py:310 +msgid "error" +msgstr "" + +#: models.py:311 +msgid "invalid email" +msgstr "" + +#: models.py:312 +msgid "opened" +msgstr "" + +#: models.py:313 +msgid "opened on site" +msgstr "" + +#: models.py:314 +msgid "link opened" +msgstr "" + +#: models.py:315 +msgid "unsubscription" +msgstr "" + +#: models.py:333 +msgid "contact mailing status" +msgstr "" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "" + +#: models.py:340 +msgid "permissions group" +msgstr "" + +#: models.py:353 +msgid "workgroup" +msgstr "" + +#: models.py:354 +msgid "workgroups" +msgstr "" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "" + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "" + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/pt_BR/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 00000000..1539a65d Binary files /dev/null and b/emencia/django/newsletter/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/pt_BR/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 00000000..b7d2cddb --- /dev/null +++ b/emencia/django/newsletter/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,852 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Fábio , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Email" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Nome" + +#: models.py:40 +msgid "server host" +msgstr "Host do servidor" + +#: models.py:41 +msgid "server user" +msgstr "Usuário do servidor" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Deixar vazio se o host é público." + +#: models.py:43 +msgid "server password" +msgstr "Senha do servidor" + +#: models.py:45 +msgid "server port" +msgstr "Porta do servidor" + +#: models.py:46 +msgid "server use TLS" +msgstr "Servidor usa TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "cabeçalhos personalizados" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "mensagens por hora" + +#: models.py:93 +msgid "SMTP server" +msgstr "Servidor de SMTP" + +#: models.py:94 +msgid "SMTP servers" +msgstr "Servidores de SMTP" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "Email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Primeiro nome" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Sobrenome" + +#: models.py:103 +msgid "subscriber" +msgstr "Assinante" + +#: models.py:104 +msgid "valid email" +msgstr "E-mail válido" + +#: models.py:105 +msgid "contact tester" +msgstr "Testador de contato" + +#: models.py:106 +msgid "tags" +msgstr "Tags" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Data de criação" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Data de modificação" + +#: models.py:132 +msgid "mail format" +msgstr "Formato de mensagem" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "contato" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "contatos" + +#: models.py:157 +msgid "description" +msgstr "Descrição" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Assinantes" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "" + +#: models.py:198 +msgid "draft" +msgstr "Rascunho" + +#: models.py:199 +msgid "waiting sending" +msgstr "Aguardando o envio" + +#: models.py:200 +msgid "sending" +msgstr "Enviando" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Enviado" + +#: models.py:202 +msgid "canceled" +msgstr "Cancelado" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Título" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "Conteúdo" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "Edite seu boletim informativo aqui" + +#: models.py:212 +msgid "test contacts" +msgstr "" + +#: models.py:215 +msgid "smtp server" +msgstr "Servidor SMTP" + +#: models.py:217 +msgid "sender" +msgstr "Remetente" + +#: models.py:219 +msgid "reply to" +msgstr "Responder para" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Estado" + +#: models.py:223 +msgid "sending date" +msgstr "Data de envio" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Usado para exibir o boletim informativo no site." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "boletim informativo" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "boletins informativos" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "link" + +#: models.py:271 +msgid "links" +msgstr "link" + +#: models.py:283 +msgid "file to attach" +msgstr "arquivo para anexar" + +#: models.py:287 +msgid "attachment" +msgstr "anexo" + +#: models.py:288 +msgid "attachments" +msgstr "anexos" + +#: models.py:308 +msgid "sent in test" +msgstr "Enviado em teste" + +#: models.py:310 +msgid "error" +msgstr "Erro" + +#: models.py:311 +msgid "invalid email" +msgstr "E-mail inválido" + +#: models.py:312 +msgid "opened" +msgstr "Aberto" + +#: models.py:313 +msgid "opened on site" +msgstr "" + +#: models.py:314 +msgid "link opened" +msgstr "Link abriu" + +#: models.py:315 +msgid "unsubscription" +msgstr "" + +#: models.py:333 +msgid "contact mailing status" +msgstr "" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "" + +#: models.py:340 +msgid "permissions group" +msgstr "Grupo de permissões" + +#: models.py:353 +msgid "workgroup" +msgstr "Grupo de Trabalho" + +#: models.py:354 +msgid "workgroups" +msgstr "Grupos de Trabalho" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Estado" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Avançado" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Total de Assinaturas" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Exportar contatos para formato VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Exportar contatos para formato VCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s criado com sucesso." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s contatos importados com êxito." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Importar" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Exportar Assinantes" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Exportar" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Enviando" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Diversos" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Padrão" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Não é possível baixar HTML, devido a erros internos." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Por favor, instale lxml para analisar uma URL." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Visualizar histórico" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Não disponível" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Visualizar estatísticas" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Estatísticas" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "" +"Não foi possível enviar o boletim informativo, devido a erros HTML internos." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s enviado com sucesso." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Torná-lo \"pronto para enviar\"" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Cancelar o envio" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Configuração" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Conexão válida" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Número de contatos" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Número do boletim informativos" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "Descrição" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Adicionar %(name)s " + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Ação" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importar %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Início" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Importar" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Todas as colunas são opcionais com exceção da coluna e-mail." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Importar" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Texto" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Arquivo de texto (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Importar contatos de um arquivo de texto ou um arquivo CSV." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Data" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Contato" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Ação" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "clique aqui" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Consultar Histograma" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Período" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Visualizar estatísticas" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Total de Assinaturas" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Visualizar estatísticas" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Total de Assinaturas" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Total de links clicados um única vez" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Total de Assinaturas" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Exportar relatório" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Download relatório em CSV" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Importar" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Visualizar" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Data de envio" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Top Links" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Mapa de densidade" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Estatísticas de %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "Total de Assinaturas" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "Total de Assinaturas" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Histórico de %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/ro/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 00000000..d989bebc Binary files /dev/null and b/emencia/django/newsletter/locale/ro/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/ro/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 00000000..af7117db --- /dev/null +++ b/emencia/django/newsletter/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,851 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Denis Darii , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n" + +#: forms.py:20 +msgid "Email" +msgstr "E-mail" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Listele de corespondenţă" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "numele" + +#: models.py:40 +msgid "server host" +msgstr "server gazdă" + +#: models.py:41 +msgid "server user" +msgstr "utilizatorul serverului" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Lăsaţi-l gol în cazul în care hostul este public." + +#: models.py:43 +msgid "server password" +msgstr "parola server" + +#: models.py:45 +msgid "server port" +msgstr "poartă server" + +#: models.py:46 +msgid "server use TLS" +msgstr "serverul folosește TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "antetele personalizate" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "mailuri pe oră" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP server" + +#: models.py:94 +msgid "SMTP servers" +msgstr "servere SMTP" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "e-mail" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "prenume" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "nume" + +#: models.py:103 +msgid "subscriber" +msgstr "abonat" + +#: models.py:104 +msgid "valid email" +msgstr "email valid" + +#: models.py:105 +msgid "contact tester" +msgstr "contactează tester" + +#: models.py:106 +msgid "tags" +msgstr "tag-uri" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "data creării" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "data modificării" + +#: models.py:132 +msgid "mail format" +msgstr "formatul emailului" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "contact" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "contacte" + +#: models.py:157 +msgid "description" +msgstr "descriere" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "abonaţi" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "dez" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "listele de corespondenţă" + +#: models.py:198 +msgid "draft" +msgstr "draft" + +#: models.py:199 +msgid "waiting sending" +msgstr "aşteptare trimiterea" + +#: models.py:200 +msgid "sending" +msgstr "trimitere" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "trimis" + +#: models.py:202 +msgid "canceled" +msgstr "anulat" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "titlu" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "conţinut" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "" + +#: models.py:215 +msgid "smtp server" +msgstr "smtp server" + +#: models.py:217 +msgid "sender" +msgstr "expeditor" + +#: models.py:219 +msgid "reply to" +msgstr "răspuns la" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "statutul" + +#: models.py:223 +msgid "sending date" +msgstr "data trimiterii" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "buletin de ştiri" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "buletine de ştiri" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "link-ul" + +#: models.py:271 +msgid "links" +msgstr "Link-uri" + +#: models.py:283 +msgid "file to attach" +msgstr "fişier de ataşat" + +#: models.py:287 +msgid "attachment" +msgstr "ataşament" + +#: models.py:288 +msgid "attachments" +msgstr "ataşamente" + +#: models.py:308 +msgid "sent in test" +msgstr "trimis în test" + +#: models.py:310 +msgid "error" +msgstr "eroare" + +#: models.py:311 +msgid "invalid email" +msgstr "email nevalid" + +#: models.py:312 +msgid "opened" +msgstr "deschis" + +#: models.py:313 +msgid "opened on site" +msgstr "" + +#: models.py:314 +msgid "link opened" +msgstr "" + +#: models.py:315 +msgid "unsubscription" +msgstr "" + +#: models.py:333 +msgid "contact mailing status" +msgstr "" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "" + +#: models.py:340 +msgid "permissions group" +msgstr "" + +#: models.py:353 +msgid "workgroup" +msgstr "" + +#: models.py:354 +msgid "workgroups" +msgstr "grupuri de lucru" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Status" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Avansat" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Total abonați" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "" + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Creaţi o lista de emailuri" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Importarea contactelor" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Exportați abonații" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Export" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Beneficiarii" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Trimitere" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Implicit" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Vezi istoric" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Istoric" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Vezi statistici" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistici" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "" + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/ru/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 00000000..b97ca5dd Binary files /dev/null and b/emencia/django/newsletter/locale/ru/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/ru/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 00000000..4fc9ce2a --- /dev/null +++ b/emencia/django/newsletter/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,858 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Oleg Prans , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: forms.py:20 +msgid "Email" +msgstr "Е-мейл" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "Список рассылки" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "наименование" + +#: models.py:40 +msgid "server host" +msgstr "хост сервера" + +#: models.py:41 +msgid "server user" +msgstr "пользователь сервера" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Оставить незаполненным если хост публичный." + +#: models.py:43 +msgid "server password" +msgstr "пароль сервера" + +#: models.py:45 +msgid "server port" +msgstr "порт сервера" + +#: models.py:46 +msgid "server use TLS" +msgstr "сервер использует TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "собственные заголовки" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" +"ключ1: значение1 ключ2: значение2, все с новой строки.\n" +"Используется для изменения хидеров, если ваш провайдер разрешает это." + +#: models.py:51 +msgid "mails per hour" +msgstr "мейлов в час" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP сервер" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP серверы" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "е-мейл" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "имя" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "фамилия" + +#: models.py:103 +msgid "subscriber" +msgstr "посписчик" + +#: models.py:104 +msgid "valid email" +msgstr "валидный е-мейл" + +#: models.py:105 +msgid "contact tester" +msgstr "контакт тестер" + +#: models.py:106 +msgid "tags" +msgstr "тэги" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "дата создания" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "дата изменения" + +#: models.py:132 +msgid "mail format" +msgstr "формат е-мейла" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "контакт" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "контакты" + +#: models.py:157 +msgid "description" +msgstr "описание" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "подписчики" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "отказавшиеся от подписки" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "список рассылки" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "списки рассылки" + +#: models.py:198 +msgid "draft" +msgstr "черновик" + +#: models.py:199 +msgid "waiting sending" +msgstr "ожидание отправки" + +#: models.py:200 +msgid "sending" +msgstr "отправка" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "отправлено" + +#: models.py:202 +msgid "canceled" +msgstr "отменено" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "заголовок" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" +"Вы можете использовать \"{{ UNIQUE_KEY }}\" переменную для уникальной " +"идентификации внутри заголовка рассылки новостей." + +#: models.py:208 +msgid "content" +msgstr "контент" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Или вставьте УРЛ." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" +"\n" +"\n" +"" + +#: models.py:212 +msgid "test contacts" +msgstr "тестовые контакты" + +#: models.py:215 +msgid "smtp server" +msgstr "smtp сервер" + +#: models.py:217 +msgid "sender" +msgstr "отправитель" + +#: models.py:219 +msgid "reply to" +msgstr "копия для" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "статус" + +#: models.py:223 +msgid "sending date" +msgstr "дата отправки" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Используется для показа текста рассылки на сайте." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "текст рассылки" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "тексты рассылок" + +#: models.py:258 +msgid "url" +msgstr "урл" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "линк" + +#: models.py:271 +msgid "links" +msgstr "линки" + +#: models.py:283 +msgid "file to attach" +msgstr "прикрепленный файл" + +#: models.py:287 +msgid "attachment" +msgstr "включение" + +#: models.py:288 +msgid "attachments" +msgstr "включения" + +#: models.py:308 +msgid "sent in test" +msgstr "отпралено для теста" + +#: models.py:310 +msgid "error" +msgstr "ошибка" + +#: models.py:311 +msgid "invalid email" +msgstr "неправильный е-мейл" + +#: models.py:312 +msgid "opened" +msgstr "открыт" + +#: models.py:313 +msgid "opened on site" +msgstr "открыт на сайте" + +#: models.py:314 +msgid "link opened" +msgstr "линк открыт" + +#: models.py:315 +msgid "unsubscription" +msgstr "отказ от подписки" + +#: models.py:333 +msgid "contact mailing status" +msgstr "статус отправки е-мейла подписчику" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "статусы отправок е-мейлов подписчикам" + +#: models.py:340 +msgid "permissions group" +msgstr "разрешения групп" + +#: models.py:353 +msgid "workgroup" +msgstr "рабочая группа" + +#: models.py:354 +msgid "workgroups" +msgstr "рабочие группы" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Статус" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Дополнительно" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Нет родительского объекта" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Родительский объект" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Всего подписок" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Экспорт контактов из VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Экспорт контактов из Excel" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Новый список рассыки на %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Новый список рассыки создан в админке на %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s успешно создано." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Создать список рассылки" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s контактов успешно импортировано." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Импорт контакта" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Пожалуйста выберите как минимум 2 списка рассылок." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Добавить список к %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Список рассылки добавлен к %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s успешно добавлен." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Добавить выбранные списки рассылок" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Экспорт подписчиков" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Экспорт" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Получатели" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Отправка" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Прочее" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "По-умолчанию" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Невозможно загрузить HTML, есть ошибки." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Пожалуйста установите lxml для парсинга урлов." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Посмотреть историю" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Недоступно" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "История" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Посмотреть статистику" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Статистика" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Невозможно отправить рассылку, есть ошибки HTML." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s успешно отправлено." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Нет тестовых контактов относящихся к %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Отпрака тестового е-мейла" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s рассылка готова к отправке" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Подготовить к отправке" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s рассылки отмененены" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Отмена отправки" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "Неверный синтаксис, не забывайте использовать \":\"." + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "Неверный синтаксис, несколько условий в строке" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Конфигурация" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Проверка подключения" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Количество контактов" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Количество списков рассылок" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Количество рассылок новостей" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Форма подписки" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "показ описания" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Содержание списка рассылки." + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "Список рассылки для подписки." + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Добавить %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Акции" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Импорт %(name)ss" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Добавить к списку рассылки" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Экспорт %(name)s как VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Экспорт %(name)s как Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Главная" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Импорт" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Excel файл (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Импорт контактов из Excel файла." + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Колонки [е-мейл][фамилия][имя][теги]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Колонки, кроме е-мейл, не обязательны." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Импорт" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Текст" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Текстовый файл (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Импорт контактов из текстового или CSV файлa." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "Колонки [е-мейл][фамиля][имя][теги] разделяются точкой с запятой." + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "VCard файл (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "Импорт контактов из вашего е-мейл клиента, посредством VCard файла." + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Подписка на е-мейл рассылку" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Спасибо за вашу подписку!" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Проверка этой формы для подписки на рассылку." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Подписка" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Отказ от подписки" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Ваш отказ от подписки на рассылку." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Проверка этой формы для отказа от подписки на рассылку." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Отказ от подписки" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Админ." + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Дата" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Контакт" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Акция" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Если вы не можете видеть этот е-мейл," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "кликните здесь" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "Для отказа от подписки на эту рассылку," + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Гистограмма" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Период" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Статистика публикаций" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Всего открыто" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Открыто на сайте" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Всего уникальных открытий" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Доставка по-умолчанию" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Отказы от подписки" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Открывалось в среднем" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Линки статистики" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Всего кликов на линки" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Всего уникальных кликов на линки" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Клинкнуто открытых линков" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Кликнуто линков в среднем" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Отчет" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Загрузка CSV отчета" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Информация" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Пользователи" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Просмотр" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Дата рассылки" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Тестовая рассылка" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Популярные линки" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Карта нагрузки" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Пока непопулярные линки." + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Вы успешно подписались на е-мейл рассылку!" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "Список рассылки создан с помощью импорта %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "Контакты импортированы из %s." + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Статистика %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "открыто" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "#val# открыто" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# кликов" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "История %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/sk_SK/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/sk_SK/LC_MESSAGES/django.mo new file mode 100644 index 00000000..ed388c16 Binary files /dev/null and b/emencia/django/newsletter/locale/sk_SK/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/sk_SK/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/sk_SK/LC_MESSAGES/django.po new file mode 100644 index 00000000..65f02779 --- /dev/null +++ b/emencia/django/newsletter/locale/sk_SK/LC_MESSAGES/django.po @@ -0,0 +1,853 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk_SK\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" + +#: forms.py:20 +msgid "Email" +msgstr "Email" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "zoznamy emailov" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "Názov" + +#: models.py:40 +msgid "server host" +msgstr "Adresa servera" + +#: models.py:41 +msgid "server user" +msgstr "Konto na serveri" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Nechajte prázdne, ak je server verejný." + +#: models.py:43 +msgid "server password" +msgstr "Heslo" + +#: models.py:45 +msgid "server port" +msgstr "Port servera" + +#: models.py:46 +msgid "server use TLS" +msgstr "Server používa TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "vlastné hlavičky" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" + +#: models.py:51 +msgid "mails per hour" +msgstr "maily za hodinu" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP Server" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP Servery" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "Email" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "Krstné meno" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "Priezvisko" + +#: models.py:103 +msgid "subscriber" +msgstr "Odberateľ" + +#: models.py:104 +msgid "valid email" +msgstr "Platný email" + +#: models.py:105 +msgid "contact tester" +msgstr "Testovací kontakt" + +#: models.py:106 +msgid "tags" +msgstr "Tagy" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "Dátum vytvorenia" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "Dátum zmeny" + +#: models.py:132 +msgid "mail format" +msgstr "Formát mailu" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "kontakt" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "kontakty" + +#: models.py:157 +msgid "description" +msgstr "Popis" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "Odberatelia" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "Ex-odberatelia" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "Zoznam emailov" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "zoznamy emailov" + +#: models.py:198 +msgid "draft" +msgstr "Koncept" + +#: models.py:199 +msgid "waiting sending" +msgstr "Čaká na odoslanie" + +#: models.py:200 +msgid "sending" +msgstr "Posiela sa" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "Odoslaný" + +#: models.py:202 +msgid "canceled" +msgstr "Zrušený" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "Názov" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" + +#: models.py:208 +msgid "content" +msgstr "Obsah" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Alebo vložte URL" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "" + +#: models.py:212 +msgid "test contacts" +msgstr "Testovacie kontakty" + +#: models.py:215 +msgid "smtp server" +msgstr "Smtp server" + +#: models.py:217 +msgid "sender" +msgstr "Odosielateľ" + +#: models.py:219 +msgid "reply to" +msgstr "Odpovedať na" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "Stav" + +#: models.py:223 +msgid "sending date" +msgstr "Dátum odoslania" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Používa sa na zobrazenie newslettera na stránke." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "newsletter" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "newsletters" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "odkaz" + +#: models.py:271 +msgid "links" +msgstr "odkaz" + +#: models.py:283 +msgid "file to attach" +msgstr "súbor na priloženie" + +#: models.py:287 +msgid "attachment" +msgstr "príloha" + +#: models.py:288 +msgid "attachments" +msgstr "prílohy" + +#: models.py:308 +msgid "sent in test" +msgstr "Odoslané v teste" + +#: models.py:310 +msgid "error" +msgstr "Chyba" + +#: models.py:311 +msgid "invalid email" +msgstr "Nesprávny email" + +#: models.py:312 +msgid "opened" +msgstr "Otvorený" + +#: models.py:313 +msgid "opened on site" +msgstr "Otvorený na stránke" + +#: models.py:314 +msgid "link opened" +msgstr "Odkaz otvorený" + +#: models.py:315 +msgid "unsubscription" +msgstr "Odhlásenie" + +#: models.py:333 +msgid "contact mailing status" +msgstr "Stav korešpondencie" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "Stav korešpondencie" + +#: models.py:340 +msgid "permissions group" +msgstr "Skupina oprávnení" + +#: models.py:353 +msgid "workgroup" +msgstr "Pracovná skupina" + +#: models.py:354 +msgid "workgroups" +msgstr "Pracovné skupiny" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Stav" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Pokročilý" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Žiaden súvisiaci objekt" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Súvisiaci objekt" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Odberateľov celkom" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Exportovať kontakty ako VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Exportovať kontakty ako VCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nový zoznam emailov pre %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nový zoznam emailov vytvorená v administrácii %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s úspešne vytvorený." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Vytvoriť zoznam emailov" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s kontaktov úspešne importovaných." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Import" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Prosím zvoľte aspoň 2 zoznamy emailov." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Zlučujem zoznam na %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "Zoznam emailov vytvorený zlúčením na %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s úspešne vytvorený zlúčením." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Zlúčiť vybrané zoznamy emailov" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Exportovať odberateľov" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Export" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Príjemcovia" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Odosielanie" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Rôzne" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Základné" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "Nie je možné stiahnuť HTML, kvôli interným chybám." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Pozrieť históriu" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Nie je k dispozícii" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "História" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Pozrieť štatistiky" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Štatistiky" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Nie je možné odoslať newsletter, kvôli interným chybám." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s úspešne odoslané." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Nebol priradený žiaden testovací kontakt ku %s" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Poslať testovací email" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s newletterov je pripravených na odoslanie" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Nastaviť \"pripravené na odoslanie\"" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s newsletterov zrušených" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Zrušit odosielanie" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Nastavenia" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Pripojenie funguje" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Počet kontaktov" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Počet zoznamov emailov" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Počet newsletterov" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Pridať %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Akcia" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Importovať %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Vytvoriť zoznam mailov" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Exportovať %(name)s ako VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Exportovať %(name)s ako Excel" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Úvod" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Import" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Excel súbor (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Exportovať kontakty ako VCard" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Stĺpce sú [email][priezvisko][meno][tagy]" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Všetky stĺpce sú nepovinné okrem emailu." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Import" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Text" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Textový súbor (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Importovať kontakty z textového alebo CSV súboru." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "Stĺpce sú [email][priezvisko][meno][tagy], oddelené bodkočiarkou." + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "VCard súbor (.csv)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "" +"Importovať kontakty z Vášho obľúbeného emailového klienta použitím VCard " +"súboru." + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Vytvoriť zoznam mailov" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Spolu odberateľov" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Overte tento formulár pre odstránenie odberateľa zo zoznamu." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Odberateľ" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Odhlásenie z odoberania" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Boli ste odhlásený z odoberania." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Overte tento formulár pre odstránenie odberateľa zo zoznamu." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Odhlásiť odoberanie" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Admin" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Dátum" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Kontakt" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Akcia" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "" + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Zobraziť štatistiky" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Spolu odberateľov" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Otvorené na stránke" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Jednotlivé otvorenia celkovo" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Neznáme doručenie" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Odhlásenie z odoberania" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Spolu odberateľov" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Zobraziť štatistiky" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Spolu odberateľov" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "" + +#: views/statistics.py:76 +msgid "openings" +msgstr "" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/sl/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 00000000..2a050d9a Binary files /dev/null and b/emencia/django/newsletter/locale/sl/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/sl/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 00000000..7244c4fa --- /dev/null +++ b/emencia/django/newsletter/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,856 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Primož Verdnik , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n" + +#: forms.py:20 +msgid "Email" +msgstr "E-pošta" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "E-poštni seznami" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "ime" + +#: models.py:40 +msgid "server host" +msgstr "naslov strežnika" + +#: models.py:41 +msgid "server user" +msgstr "uporabniško ime" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "Pustite prazno, če je strežnik javni." + +#: models.py:43 +msgid "server password" +msgstr "geslo strežnika" + +#: models.py:45 +msgid "server port" +msgstr "vrata strežnika" + +#: models.py:46 +msgid "server use TLS" +msgstr "server uporablja TLS" + +#: models.py:48 +msgid "custom headers" +msgstr "glava po meri" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "" +"ključ1: vrednost1 ključ2: vrednost2, ločeno z novo vrstico.\n" +"Uporabno za podajanje nekaterih sledilnih podatkov, če to vaš ponudnik omogoča." + +#: models.py:51 +msgid "mails per hour" +msgstr "število e-poštnih sporočil na uro" + +#: models.py:93 +msgid "SMTP server" +msgstr "SMTP strežnik" + +#: models.py:94 +msgid "SMTP servers" +msgstr "SMTP strežniki" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "e-pošta" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "ime" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "priimek" + +#: models.py:103 +msgid "subscriber" +msgstr "naročnik" + +#: models.py:104 +msgid "valid email" +msgstr "veljavni e-poštni naslov" + +#: models.py:105 +msgid "contact tester" +msgstr "testni kontakt" + +#: models.py:106 +msgid "tags" +msgstr "značke" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "ustvarjeno" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "spremenjeno" + +#: models.py:132 +msgid "mail format" +msgstr "format e-poštnega sporočila" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "kontakt" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "kontakti" + +#: models.py:157 +msgid "description" +msgstr "opis" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "naročniki" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "nenaročniki" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "e-poštni seznam" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "e-poštni seznami" + +#: models.py:198 +msgid "draft" +msgstr "osnutek" + +#: models.py:199 +msgid "waiting sending" +msgstr "pošiljanje na čakanju" + +#: models.py:200 +msgid "sending" +msgstr "pošiljanje v teku" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "poslano" + +#: models.py:202 +msgid "canceled" +msgstr "preklicano" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "naslov" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "" +"Za unikatne identifikatorje znotraj naslova lahk uporabite spremenljivko " +"\"{{ UNIQUE_KEY }}\"." + +#: models.py:208 +msgid "content" +msgstr "vsebina" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "Ali prilepite URL." + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "uredite svoje glasilo tukaj" + +#: models.py:212 +msgid "test contacts" +msgstr "testni kontakt" + +#: models.py:215 +msgid "smtp server" +msgstr "smtp strežnik" + +#: models.py:217 +msgid "sender" +msgstr "pošiljatelj" + +#: models.py:219 +msgid "reply to" +msgstr "naslov za odgovor" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "stanje" + +#: models.py:223 +msgid "sending date" +msgstr "datum pošiljanja" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "Se uporablja za prikaz glasila na spletni strani." + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "glasilo" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "glasila" + +#: models.py:258 +msgid "url" +msgstr "url" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "povezava" + +#: models.py:271 +msgid "links" +msgstr "povezava" + +#: models.py:283 +msgid "file to attach" +msgstr "datoteka za pripenjanje" + +#: models.py:287 +msgid "attachment" +msgstr "priponka" + +#: models.py:288 +msgid "attachments" +msgstr "priponke" + +#: models.py:308 +msgid "sent in test" +msgstr "poslano v sklopu testa" + +#: models.py:310 +msgid "error" +msgstr "napaka" + +#: models.py:311 +msgid "invalid email" +msgstr "neveljavna e-pošta" + +#: models.py:312 +msgid "opened" +msgstr "odprto" + +#: models.py:313 +msgid "opened on site" +msgstr "odprto na strani" + +#: models.py:314 +msgid "link opened" +msgstr "povezava obiskana" + +#: models.py:315 +msgid "unsubscription" +msgstr "odjava" + +#: models.py:333 +msgid "contact mailing status" +msgstr "stanje pošiljanja za kontakt" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "stanje pošiljanja za kontakte" + +#: models.py:340 +msgid "permissions group" +msgstr "skupina s pravicami" + +#: models.py:353 +msgid "workgroup" +msgstr "Delovna skupina" + +#: models.py:354 +msgid "workgroups" +msgstr "delovne skupine" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "Status" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "Napredno" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "Ni povezanega objekta" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "Povezan objekt" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "Vseh naročnikov" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "Izvozi kontakte kot VCard" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "Izvozi kontakte kot VCard" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "Nov e-poštni seznam na %s" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "Nov e-poštni seznam ustvarjen v admin ob %s" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s uspešno ustvarjen." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "Naredi e-poštni seznam" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s kontaktov uspešno uvoženih." + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "Uvozi" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "Prosim izberite vsaj 2 e-poštna seznama." + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "Spajam seznam na %s" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "E-poštni seznam ustvarjen s spajanjem na %s" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s uspešno ustvarjen s spajanjem." + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "Spoji izbrane e-poštne sezname" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "Izvozi naročnike" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "Izvozi" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "Prejemniki" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "Pošiljanje" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "Razno" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "Privzeto" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "HTML-ja ni bilo moč presneti, zaradi interne napake." + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "Prosim namestite lxml za parsanje URLjev." + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "Poglej zgodovino" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "Ni na voljo" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "Zgodovina" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "Poglej statistiko" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "Statistika" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "Glasila ni bilo moč poslati, zaradi notranjih HTML napak." + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s uspešno poslan." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "Noben testni račun ni dodeljen %s." + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "Pošlji testno e-pošto" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s glasil je pripravljenih na pošiljanje" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "Pripravi za pošiljanje" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s glasil je preklicanih" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "Prekliči pošiljanje" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "Neveljavna sintaksa, ne pozabite na \":\"." + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "Neveljavna sintaksa, preveč dodelitev na vrstico." + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "Konfiguracija" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "Preveri povezavo" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "Dolžina kontaktov" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "Dolžina e-poštnega seznama" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "Dolžina glasila" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "Naročnina na e-poštni seznam" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "prikaži opis" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "Prikaži opis e-poštnega seznama." + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "E-poštni seznam." + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "Akcije" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "Uvozi %(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "Ustvari e-poštni seznam" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "Izvozi %(name)s kot VCard" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "Izvozi %(name)s kot Excelovo datoteko" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "Domov" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "Uvoz" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "Datoteka Excel (.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "Uvozi kontakte iz Excelove datoteke." + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "Stoplci so [e-pošta][priimek][ime][značke]." + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "Noben stolpec razen e-pošte ni obvezen." + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "Uvozi" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "Besedil" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "Datoteka z besedilom (.txt, .csv)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "Uvozi kontakte iz datoteke z besedilom ali datoteke tipa CSV." + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "Stoplci so [e-pošta][priimek][ime][značke], ločeni s podpičjem." + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "Vcard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "Datoteka tipa VCard (.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "Uvozi kontakte iz e-poštnega programa, s pomočjo datoteke tipa VCard." + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "Ustvari e-poštni seznam" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "Hvala za prijavo!" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "Potrdite odjavo iz tega e-poštnega seznama." + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "Naroči se" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "Odjava iz e-poštnega seznama" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "Iz tega e-poštnega seznama ste odjavljeni." + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "Potrdite odjavo iz tega e-poštnega seznama." + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "Odjavi se" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "Admin" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "Datum" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "Kontakt" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "Akcija" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "Če te e-pošte ne morete videti," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "kliknite tukaj" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "" +"Za odjavo iz tega e-poštnega seznama,Za odjavo iz tega e-poštnega seznama" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "Informativni histogram" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "Obdobje" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "Statistika pošiljanja" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "Vseh pogledov" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "Odprto na strani" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "Skupaj posameznih ogledov" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "Podatek o dostavi neznan" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "Odjava naročnine" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "Povprečno pogledov" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "Statistika povezav" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "Vseh klikanih povezav" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "Skupno število enkrat obiskanih povezav" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "Obiskanih povezav med ogledom" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "Povprečje klikanih povezav" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "Poročilo" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "Presnami poročilo CSV" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "Imformacije" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "Prejemniki" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "Poglej" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "Datum pošiljanja" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "Poslanih testov" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "Naj povezave" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "Mapa gostote" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "Zaenkrat naj povezav ni na voljo" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "Na ta e-poštni seznam niste več naročeni." + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "E-poštni seznam ustvarjen s spajanjem na %s" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "Kontakte uvozil %s." + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "Statistika %s" + +#: views/statistics.py:76 +msgid "openings" +msgstr "pogledov" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "#val# pogledov" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "#val# klikov" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "Zgodovina %s" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/locale/zh_CN/LC_MESSAGES/django.mo b/emencia/django/newsletter/locale/zh_CN/LC_MESSAGES/django.mo new file mode 100644 index 00000000..92cb1fca Binary files /dev/null and b/emencia/django/newsletter/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/emencia/django/newsletter/locale/zh_CN/LC_MESSAGES/django.po b/emencia/django/newsletter/locale/zh_CN/LC_MESSAGES/django.po new file mode 100644 index 00000000..e1b031da --- /dev/null +++ b/emencia/django/newsletter/locale/zh_CN/LC_MESSAGES/django.po @@ -0,0 +1,851 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# aaffdd11 , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Emencia Django Newsletter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-22 06:00-0500\n" +"PO-Revision-Date: 2011-09-22 11:01+0000\n" +"Last-Translator: Fantomas42 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0\n" + +#: forms.py:20 +msgid "Email" +msgstr "电子邮件" + +#: forms.py:44 +msgid "Mailing lists" +msgstr "邮件表" + +#: models.py:39 models.py:156 models.py:339 +msgid "name" +msgstr "姓名" + +#: models.py:40 +msgid "server host" +msgstr "服务器主机" + +#: models.py:41 +msgid "server user" +msgstr "服务器用户" + +#: models.py:42 models.py:44 +msgid "Leave it empty if the host is public." +msgstr "如果主机是公用的则清空" + +#: models.py:43 +msgid "server password" +msgstr "服务器密码" + +#: models.py:45 +msgid "server port" +msgstr "服务器端口" + +#: models.py:46 +msgid "server use TLS" +msgstr "服务器使用的传输层协议" + +#: models.py:48 +msgid "custom headers" +msgstr "自定义页头" + +#: models.py:49 +msgid "" +"key1: value1 key2: value2, splitted by return line.\n" +"Useful for passing some tracking headers if your provider allows it." +msgstr "键1:值1 键2:值2,通过换行分隔。提供商允许的话可以用于传递一些有用的跟踪头。" + +#: models.py:51 +msgid "mails per hour" +msgstr "每小时邮件数" + +#: models.py:93 +msgid "SMTP server" +msgstr "电子邮件传输服务器" + +#: models.py:94 +msgid "SMTP servers" +msgstr "电子邮件传输服务器群" + +#: models.py:99 views/statistics.py:76 +msgid "email" +msgstr "电子邮件" + +#: models.py:100 views/statistics.py:75 +msgid "first name" +msgstr "名" + +#: models.py:101 views/statistics.py:75 +msgid "last name" +msgstr "姓" + +#: models.py:103 +msgid "subscriber" +msgstr "用户" + +#: models.py:104 +msgid "valid email" +msgstr "有效的电子邮件" + +#: models.py:105 +msgid "contact tester" +msgstr "接触试验" + +#: models.py:106 +msgid "tags" +msgstr "标记" + +#: models.py:112 models.py:165 models.py:227 models.py:260 models.py:324 +msgid "creation date" +msgstr "建立日期" + +#: models.py:113 models.py:166 models.py:228 +msgid "modification date" +msgstr "更改日期" + +#: models.py:132 +msgid "mail format" +msgstr "邮件格式" + +#: models.py:150 models.py:319 +msgid "contact" +msgstr "联系" + +#: models.py:151 models.py:342 +msgid "contacts" +msgstr "联系" + +#: models.py:157 +msgid "description" +msgstr "描述" + +#: models.py:159 models.py:170 +msgid "subscribers" +msgstr "订购" + +#: models.py:161 models.py:174 +msgid "unsubscribers" +msgstr "无效订购" + +#: models.py:186 models.py:211 cmsplugin_newsletter/models.py:15 +msgid "mailing list" +msgstr "邮件清单" + +#: models.py:187 models.py:344 +msgid "mailing lists" +msgstr "邮件表" + +#: models.py:198 +msgid "draft" +msgstr "草稿" + +#: models.py:199 +msgid "waiting sending" +msgstr "正在等待发送" + +#: models.py:200 +msgid "sending" +msgstr "正在发送" + +#: models.py:201 models.py:309 +msgid "sent" +msgstr "已发送" + +#: models.py:202 +msgid "canceled" +msgstr "已取消" + +#: models.py:205 models.py:257 models.py:282 cmsplugin_newsletter/models.py:12 +msgid "title" +msgstr "标题" + +#: models.py:206 +msgid "" +"You can use the \"{{ UNIQUE_KEY }}\" variable for unique identifier within " +"the newsletter's title." +msgstr "你可以在简讯标题种使用{{UNIQUE_KEY}}来确保唯一性。" + +#: models.py:208 +msgid "content" +msgstr "内容" + +#: models.py:208 +msgid "Or paste an URL." +msgstr "或粘帖一个互联网地址" + +#: models.py:209 +msgid "" +"\n" +"\n" +"" +msgstr "在这里编辑您的简讯" + +#: models.py:212 +msgid "test contacts" +msgstr "测试接触" + +#: models.py:215 +msgid "smtp server" +msgstr "邮件传输协议服务" + +#: models.py:217 +msgid "sender" +msgstr "发送人" + +#: models.py:219 +msgid "reply to" +msgstr "回复" + +#: models.py:222 models.py:320 +msgid "status" +msgstr "状态" + +#: models.py:223 +msgid "sending date" +msgstr "发送日期" + +#: models.py:225 +msgid "Used for displaying the newsletter on the site." +msgstr "用于在这个位置显示简报" + +#: models.py:250 models.py:281 models.py:318 +#: cmsplugin_newsletter/cms_plugins.py:13 +msgid "newsletter" +msgstr "通迅;简报" + +#: models.py:251 models.py:346 +msgid "newsletters" +msgstr "通迅;简报" + +#: models.py:258 +msgid "url" +msgstr "互联网地址" + +#: models.py:270 models.py:321 +msgid "link" +msgstr "连接" + +#: models.py:271 +msgid "links" +msgstr "链接" + +#: models.py:283 +msgid "file to attach" +msgstr "附上文件" + +#: models.py:287 +msgid "attachment" +msgstr "附件" + +#: models.py:288 +msgid "attachments" +msgstr "附件" + +#: models.py:308 +msgid "sent in test" +msgstr "发送试验" + +#: models.py:310 +msgid "error" +msgstr "错误" + +#: models.py:311 +msgid "invalid email" +msgstr "无效邮件" + +#: models.py:312 +msgid "opened" +msgstr "已打开的" + +#: models.py:313 +msgid "opened on site" +msgstr "访问于" + +#: models.py:314 +msgid "link opened" +msgstr "打开的链接" + +#: models.py:315 +msgid "unsubscription" +msgstr "取消订阅" + +#: models.py:333 +msgid "contact mailing status" +msgstr "邮件状态" + +#: models.py:334 +msgid "contact mailing statuses" +msgstr "邮件状态" + +#: models.py:340 +msgid "permissions group" +msgstr "权限组" + +#: models.py:353 +msgid "workgroup" +msgstr "工作组" + +#: models.py:354 +msgid "workgroups" +msgstr "工作组" + +#: admin/contact.py:36 templates/newsletter/newsletter_statistics.html:188 +msgid "Status" +msgstr "状态" + +#: admin/contact.py:37 +msgid "Advanced" +msgstr "高级的" + +#: admin/contact.py:69 +msgid "No relative object" +msgstr "没有相关对象" + +#: admin/contact.py:71 +msgid "Related object" +msgstr "相关对象" + +#: admin/contact.py:78 +msgid "Total subscriptions" +msgstr "总订阅数" + +#: admin/contact.py:83 +msgid "Export contacts as VCard" +msgstr "以VCard导出联系人" + +#: admin/contact.py:90 +msgid "Export contacts in Excel" +msgstr "以VCard导出联系人" + +#: admin/contact.py:95 +#, python-format +msgid "New mailinglist at %s" +msgstr "于%s创建的新邮件列表" + +#: admin/contact.py:96 +#, python-format +msgid "New mailing list created in admin at %s" +msgstr "于%s创建的新邮件列表" + +#: admin/contact.py:104 +#, python-format +msgid "%s succesfully created." +msgstr "%s发送成功." + +#: admin/contact.py:107 +msgid "Create a mailinglist" +msgstr "创建一个邮件列表" + +#: admin/contact.py:126 +#, python-format +msgid "%s contacts succesfully imported." +msgstr "%s联系人成功导入。" + +#: admin/contact.py:128 +msgid "Contact importation" +msgstr "导入" + +#: admin/mailinglist.py:65 +msgid "Please select a least 2 mailing list." +msgstr "请至少选择2个邮件列表。" + +#: admin/mailinglist.py:77 +#, python-format +msgid "Merging list at %s" +msgstr "于%s创建的合并列表" + +#: admin/mailinglist.py:78 +#, python-format +msgid "Mailing list created by merging at %s" +msgstr "于%s合并创建的邮件列表" + +#: admin/mailinglist.py:87 +#, python-format +msgid "%s succesfully created by merging." +msgstr "%s创建成功" + +#: admin/mailinglist.py:90 +msgid "Merge selected mailinglists" +msgstr "选择合并的邮件列表" + +#: admin/mailinglist.py:96 +msgid "Export Subscribers" +msgstr "导出订阅人" + +#: admin/mailinglist.py:98 +msgid "Export" +msgstr "导出" + +#: admin/newsletter.py:41 +msgid "Receivers" +msgstr "接收人" + +#: admin/newsletter.py:42 +msgid "Sending" +msgstr "正在发送" + +#: admin/newsletter.py:43 admin/smtpserver.py:36 +msgid "Miscellaneous" +msgstr "杂项" + +#: admin/newsletter.py:79 +msgid "Default" +msgstr "默认" + +#: admin/newsletter.py:106 +msgid "Unable to download HTML, due to errors within." +msgstr "由于内部HTML错误无法发送的新闻" + +#: admin/newsletter.py:108 +msgid "Please install lxml for parsing an URL." +msgstr "请安装用于解析URL的lxml。" + +#: admin/newsletter.py:120 +msgid "View historic" +msgstr "查看历史" + +#: admin/newsletter.py:121 admin/newsletter.py:130 +msgid "Not available" +msgstr "不可用" + +#: admin/newsletter.py:123 +msgid "Historic" +msgstr "历史" + +#: admin/newsletter.py:129 +msgid "View statistics" +msgstr "查看统计" + +#: admin/newsletter.py:132 +msgid "Statistics" +msgstr "统计" + +#: admin/newsletter.py:142 +msgid "Unable send newsletter, due to errors within HTML." +msgstr "由于内部HTML错误无法发送的新闻。" + +#: admin/newsletter.py:144 +#, python-format +msgid "%s succesfully sent." +msgstr "%s发送成功." + +#: admin/newsletter.py:146 +#, python-format +msgid "No test contacts assigned for %s." +msgstr "%s没有测试人。" + +#: admin/newsletter.py:147 +msgid "Send test email" +msgstr "发送邮件测试" + +#: admin/newsletter.py:155 +#, python-format +msgid "%s newletters are ready to send" +msgstr "%s简讯已准备好发送" + +#: admin/newsletter.py:156 +msgid "Make ready to send" +msgstr "设为“准备发送”" + +#: admin/newsletter.py:165 +#, python-format +msgid "%s newletters are cancelled" +msgstr "%s通讯被取消" + +#: admin/newsletter.py:166 +msgid "Cancel the sending" +msgstr "取消发送" + +#: admin/smtpserver.py:18 +msgid "Invalid syntax, do not forget the \":\"." +msgstr "无效的语法,不要忘了“:”。" + +#: admin/smtpserver.py:20 +msgid "Invalid syntax, several assignments by line." +msgstr "无效的语法,一行有太多的赋值。" + +#: admin/smtpserver.py:34 +msgid "Configuration" +msgstr "配置" + +#: admin/smtpserver.py:57 +msgid "Check connection" +msgstr "有效的连接" + +#: admin/workgroup.py:18 +msgid "Contacts length" +msgstr "联系人数量" + +#: admin/workgroup.py:22 +msgid "Mailing List length" +msgstr "邮件列表数量" + +#: admin/workgroup.py:26 +msgid "Newsletter length" +msgstr "读物数量" + +#: cmsplugin_newsletter/cms_plugins.py:15 +msgid "Subscription Form" +msgstr "取消订阅" + +#: cmsplugin_newsletter/models.py:13 +msgid "show description" +msgstr "介绍" + +#: cmsplugin_newsletter/models.py:14 +msgid "Show the mailing list's description." +msgstr "显示邮件列表的描述。" + +#: cmsplugin_newsletter/models.py:16 +msgid "Mailing List to subscribe to." +msgstr "邮件列表数量" + +#: templates/admin/newsletter/contact/change_list.html:36 +#, python-format +msgid "Add %(name)s" +msgstr "添加%(name)s" + +#: templates/admin/newsletter/contact/change_list.html:42 +msgid "Actions" +msgstr "行为" + +#: templates/admin/newsletter/contact/change_list.html:51 +#, python-format +msgid "Import %(name)ss" +msgstr "导入%(name)s" + +#: templates/admin/newsletter/contact/change_list.html:58 +msgid "Add to a mailing list" +msgstr "创建一个邮件列表" + +#: templates/admin/newsletter/contact/change_list.html:65 +#, python-format +msgid "Export %(name)s as VCard" +msgstr "以VCard导出联系人%(name)s" + +#: templates/admin/newsletter/contact/change_list.html:70 +#, python-format +msgid "Export %(name)s as Excel" +msgstr "导出%(name)s" + +#: templates/newsletter/contact_import.html:7 +msgid "Home" +msgstr "首页" + +#: templates/newsletter/contact_import.html:10 +msgid "Importation" +msgstr "导入" + +#: templates/newsletter/contact_import.html:24 +msgid "Excel" +msgstr "Excel" + +#: templates/newsletter/contact_import.html:27 +msgid "Excel file (.xls)" +msgstr "导出文件(.xls)" + +#: templates/newsletter/contact_import.html:31 +msgid "Import contacts from a Excel file." +msgstr "以VCard导出联系人" + +#: templates/newsletter/contact_import.html:32 +msgid "Columns are [email][last name][first name][tags]." +msgstr "列表含[电子邮件] [姓氏] [名字] [标签]。" + +#: templates/newsletter/contact_import.html:33 +#: templates/newsletter/contact_import.html:56 +#: templates/newsletter/contact_import.html:98 +msgid "All columns are optionnal excepting the email." +msgstr "除电子邮件外所有列皆为可选。" + +#: templates/newsletter/contact_import.html:38 +#: templates/newsletter/contact_import.html:61 +#: templates/newsletter/contact_import.html:81 +#: templates/newsletter/contact_import.html:103 +msgid "Import" +msgstr "导入" + +#: templates/newsletter/contact_import.html:47 +msgid "Text" +msgstr "文本" + +#: templates/newsletter/contact_import.html:50 +msgid "Text file (.txt, .csv)" +msgstr "文本文件(.txt,.csv格式)" + +#: templates/newsletter/contact_import.html:54 +msgid "Import contacts from a text file, or a CSV file." +msgstr "从文本文件或CSV文件导入联系人。" + +#: templates/newsletter/contact_import.html:55 +#: templates/newsletter/contact_import.html:97 +msgid "" +"Columns are [email][last name][first name][tags], splitted by a dot coma." +msgstr "列表含[电子邮件] [姓氏] [名字] [标签],由逗号分隔。" + +#: templates/newsletter/contact_import.html:70 +msgid "VCard" +msgstr "VCard" + +#: templates/newsletter/contact_import.html:73 +msgid "VCard file (.cvf)" +msgstr "VCard文件(.cvf)" + +#: templates/newsletter/contact_import.html:77 +msgid "" +"Import contacts from your favorite mail client, by providing a VCard file." +msgstr "用VCard文件导入您最喜欢的邮件客户端联系人。" + +#: templates/newsletter/contact_import.html:90 +#: templates/newsletter/contact_import.html:93 +msgid "Raw text" +msgstr "" + +#: templates/newsletter/mailing_list_subscribe.html:4 +#: templates/newsletter/mailing_list_subscribe.html:7 +msgid "Subscription to mailing list" +msgstr "创建一个邮件列表" + +#: templates/newsletter/mailing_list_subscribe.html:10 +msgid "Thanks for your subscription!" +msgstr "总订阅数" + +#: templates/newsletter/mailing_list_subscribe.html:16 +msgid "Validate this form to subscribe to the mailing lists." +msgstr "验证此表以取消订阅本邮件列表。" + +#: templates/newsletter/mailing_list_subscribe.html:21 +#: templates/newsletter/cms/subscription_form.html:20 +msgid "Subscribe" +msgstr "订户" + +#: templates/newsletter/mailing_list_unsubscribe.html:4 +#: templates/newsletter/mailing_list_unsubscribe.html:7 +msgid "Unsubscription" +msgstr "取消订阅" + +#: templates/newsletter/mailing_list_unsubscribe.html:9 +msgid "You are unsubscribed for this mailing list." +msgstr "你已退订这个邮件列表。" + +#: templates/newsletter/mailing_list_unsubscribe.html:11 +msgid "Validate this form to unsubscribe to this mailing list." +msgstr "验证此表以取消订阅本邮件列表。" + +#: templates/newsletter/mailing_list_unsubscribe.html:15 +msgid "Unsubscribe" +msgstr "取消订阅" + +#: templates/newsletter/newsletter_historic.html:9 +#: templates/newsletter/newsletter_statistics.html:68 +msgid "Admin." +msgstr "管理" + +#: templates/newsletter/newsletter_historic.html:23 +msgid "Date" +msgstr "日期" + +#: templates/newsletter/newsletter_historic.html:24 +msgid "Contact" +msgstr "联系" + +#: templates/newsletter/newsletter_historic.html:25 +msgid "Action" +msgstr "行为" + +#: templates/newsletter/newsletter_link_site.html:5 +msgid "If you cannot see this email," +msgstr "如果你不能看到这封电子邮件," + +#: templates/newsletter/newsletter_link_site.html:6 +#: templates/newsletter/newsletter_link_unsubscribe.html:6 +msgid "click here" +msgstr "点击这里" + +#: templates/newsletter/newsletter_link_unsubscribe.html:5 +msgid "For unsubscribing to this mailing list," +msgstr "你已退订这个邮件列表。" + +#: templates/newsletter/newsletter_statistics.html:86 views/statistics.py:147 +msgid "Consultation histogram" +msgstr "参考直方图" + +#: templates/newsletter/newsletter_statistics.html:89 +msgid "Period" +msgstr "周期" + +#: templates/newsletter/newsletter_statistics.html:112 +#: templates/newsletter/newsletter_statistics.html:113 +msgid "Broadcasting statistics" +msgstr "查看统计" + +#: templates/newsletter/newsletter_statistics.html:115 views/statistics.py:139 +msgid "Total openings" +msgstr "总订阅数" + +#: templates/newsletter/newsletter_statistics.html:120 +msgid "Openings on site" +msgstr "访问于" + +#: templates/newsletter/newsletter_statistics.html:125 +msgid "Total openings unique" +msgstr "总访问数" + +#: templates/newsletter/newsletter_statistics.html:130 +msgid "Unknow delivery" +msgstr "未知邮件" + +#: templates/newsletter/newsletter_statistics.html:135 +msgid "Unsubscriptions" +msgstr "取消订阅" + +#: templates/newsletter/newsletter_statistics.html:140 +msgid "Openings average" +msgstr "总订阅数" + +#: templates/newsletter/newsletter_statistics.html:148 +#: templates/newsletter/newsletter_statistics.html:149 +msgid "Links statistics" +msgstr "查看统计" + +#: templates/newsletter/newsletter_statistics.html:151 views/statistics.py:143 +msgid "Total clicked links" +msgstr "总订阅数" + +#: templates/newsletter/newsletter_statistics.html:156 +msgid "Total clicked links unique" +msgstr "总点击次数" + +#: templates/newsletter/newsletter_statistics.html:161 +msgid "Clicked links by openings" +msgstr "每次访问的点击数" + +#: templates/newsletter/newsletter_statistics.html:166 +msgid "Clicked links average" +msgstr "总订阅数" + +#: templates/newsletter/newsletter_statistics.html:178 +msgid "Report" +msgstr "导出报告" + +#: templates/newsletter/newsletter_statistics.html:180 +msgid "Download CSV report" +msgstr "下载CSV报告" + +#: templates/newsletter/newsletter_statistics.html:185 +msgid "Informations" +msgstr "导入" + +#: templates/newsletter/newsletter_statistics.html:186 +msgid "Recipients" +msgstr "接收人" + +#: templates/newsletter/newsletter_statistics.html:187 +msgid "View" +msgstr "查看" + +#: templates/newsletter/newsletter_statistics.html:190 +msgid "Sending date" +msgstr "发送日期" + +#: templates/newsletter/newsletter_statistics.html:193 +msgid "Tests sent" +msgstr "发送测试" + +#: templates/newsletter/newsletter_statistics.html:198 +msgid "Top Links" +msgstr "受欢迎的链接" + +#: templates/newsletter/newsletter_statistics.html:199 +msgid "Density map" +msgstr "密度图" + +#: templates/newsletter/newsletter_statistics.html:208 +msgid "No Top Links yet." +msgstr "目前尚未有任何的受欢迎链接" + +#: templates/newsletter/cms/subscription_form.html:8 +msgid "You have successfully subscribed to the mailing list!" +msgstr "你已退订这个邮件列表。" + +#: utils/importation.py:52 +#, python-format +msgid "Mailing list created by importation at %s" +msgstr "于%s合并创建的邮件列表" + +#: utils/importation.py:53 +#, python-format +msgid "Contacts imported by %s." +msgstr "联系人由%s导入。" + +#: views/statistics.py:54 +#, python-format +msgid "Statistics of %s" +msgstr "%s统计" + +#: views/statistics.py:76 +msgid "openings" +msgstr "总订阅数" + +#: views/statistics.py:139 +msgid "#val# openings" +msgstr "总订阅数" + +#: views/statistics.py:143 +msgid "#val# clicks" +msgstr "点击数" + +#: views/tracking.py:67 +#, python-format +msgid "Historic of %s" +msgstr "%s的历史" + +#~ msgid "key1: value1 key2: value2, splitted by return line." +#~ msgstr "key1: value1 key2: value2, splitted by return line." + +#~ msgid "Can change status" +#~ msgstr "Can change status" + +#~ msgid "VCard import" +#~ msgstr "VCard import" + +#~ msgid "Contacts" +#~ msgstr "Contacts" + +#~ msgid "Mailing List" +#~ msgstr "Mailing List" + +#~ msgid "Mailing Lists" +#~ msgstr "Mailing Lists" + +#~ msgid "Newsletter" +#~ msgstr "Newsletter" + +#~ msgid "Newsletters" +#~ msgstr "Newsletters" + +#~ msgid "Link" +#~ msgstr "Link" + +#~ msgid "Links" +#~ msgstr "Links" + +#~ msgid "group" +#~ msgstr "group" + +#~ msgid "Connection valid" +#~ msgstr "Connection valid" + +#~ msgid "Double openings" +#~ msgstr "Total Subscriptions" + + diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py new file mode 100644 index 00000000..9891a751 --- /dev/null +++ b/emencia/django/newsletter/mailer.py @@ -0,0 +1,494 @@ +"""Mailer for emencia.django.newsletter""" +import re +import sys +import time +import threading +import mimetypes +import base64 +import quopri +from random import sample +from StringIO import StringIO +from datetime import datetime +from datetime import timedelta +from smtplib import SMTPRecipientsRefused + +try: + from email.mime.multipart import MIMEMultipart + from email.mime.text import MIMEText + from email.mime.Encoders import encode_base64 + from email.mime.MIMEAudio import MIMEAudio + from email.mime.MIMEBase import MIMEBase + from email.mime.MIMEImage import MIMEImage +except ImportError: # Python 2.4 compatibility + from email.MIMEMultipart import MIMEMultipart + from email.MIMEText import MIMEText + from email.Encoders import encode_base64 + from email.MIMEAudio import MIMEAudio + from email.MIMEBase import MIMEBase + from email.MIMEImage import MIMEImage +from email import message_from_file +from html2text import html2text as html2text_orig +from django.contrib.sites.models import Site +from django.template import Context, Template +from django.template.loader import render_to_string +from django.utils.encoding import smart_str +from django.utils.encoding import smart_unicode +from django.core.urlresolvers import reverse + +from emencia.django.newsletter.models import Newsletter +from emencia.django.newsletter.models import ContactMailingStatus +from emencia.django.newsletter.utils.tokens import tokenize +from emencia.django.newsletter.utils.newsletter import track_links +from emencia.django.newsletter.utils.newsletter import body_insertion +from emencia.django.newsletter.settings import TRACKING_LINKS +from emencia.django.newsletter.settings import TRACKING_IMAGE +from emencia.django.newsletter.settings import TRACKING_IMAGE_FORMAT +from emencia.django.newsletter.settings import UNIQUE_KEY_LENGTH +from emencia.django.newsletter.settings import UNIQUE_KEY_CHAR_SET +from emencia.django.newsletter.settings import INCLUDE_UNSUBSCRIPTION +from emencia.django.newsletter.settings import SLEEP_BETWEEN_SENDING +from emencia.django.newsletter.settings import \ + RESTART_CONNECTION_BETWEEN_SENDING + +import HTMLParser +import chardet + +if not hasattr(timedelta, 'total_seconds'): + def total_seconds(td): + return ((td.microseconds + + (td.seconds + td.days * 24 * 3600) * 1000000) / + 1000000.0) +else: + total_seconds = lambda td: td.total_seconds() + + +LINK_RE = re.compile(r"https?://([^ \n]+\n)+[^ \n]+", re.MULTILINE) + + +def html2text(html): + """Use html2text but repair newlines cutting urls. + Need to use this hack until + https://github.com/aaronsw/html2text/issues/#issue/7 is not fixed""" + txt = html2text_orig(html) + return txt + """ + links = list(LINK_RE.finditer(txt)) + out = StringIO() + pos = 0 + for l in links: + out.write(txt[pos:l.start()]) + out.write(l.group().replace('\n', '')) + pos = l.end() + out.write(txt[pos:]) + return out.getvalue() + """ + +def encodestring(instring, tabs=0): + outfile = StringIO() + quopri.encode(StringIO(instring), outfile, tabs) + return outfile.getvalue() + +def decodestring(instring): + outfile = StringIO() + quopri.decode(StringIO(instring), outfile) + return outfile.getvalue() + +class NewsLetterSender(object): + + def __init__(self, newsletter, test=False, verbose=0): + self.test = test + self.verbose = verbose + self.newsletter = newsletter + self.newsletter_template = Template(self.newsletter.content) + self.title_template = Template(self.newsletter.title) + + def build_message(self, contact): + """ + Build the email as a multipart message containing + a multipart alternative for text (plain, HTML) plus + all the attached files. + """ + content_html = self.build_email_content(contact) + h = HTMLParser.HTMLParser() + content_html = h.unescape(content_html) + content_text = html2text(content_html) + + content_html = encodestring(smart_str(content_html)) + content_text = encodestring(smart_str(content_text)) + + + message = MIMEMultipart() + + message['Subject'] = smart_str(self.build_title_content(contact)) + message['From'] = smart_str(self.newsletter.header_sender) + message['Reply-to'] = smart_str(self.newsletter.header_reply) + message['To'] = smart_str(contact.mail_format()) + + message_alt = MIMEMultipart('alternative') + text = MIMEText(content_text, 'plain', 'UTF-8') + text.replace_header('Content-Transfer-Encoding', 'quoted-printable') + + message_alt.attach(text) + html = MIMEText(content_html, 'html', 'UTF-8') + html.replace_header('Content-Transfer-Encoding', 'quoted-printable') + #encode_base64(text) + message_alt.attach(html) + message.attach(message_alt) + + + for attachment in self.attachments: + message.attach(attachment) + + for header, value in self.newsletter.server.custom_headers.items(): + message[header] = value + + uidb36, token = tokenize(contact) + unsubscribe_link = 'http://' + Site.objects.get_current().domain + reverse('newsletter_mailinglist_unsubscribe', args=[self.newsletter.slug, uidb36, token]) + + message['List-Unsubscribe'] = '<' + unsubscribe_link + '>' + message['List-Id'] = str(self.newsletter.id) + + + return message + + def build_attachments(self): + """Build email's attachment messages""" + attachments = [] + + for attachment in self.newsletter.attachment_set.all(): + ctype, encoding = mimetypes.guess_type(attachment.file_attachment.path) + + if ctype is None or encoding is not None: + ctype = 'application/octet-stream' + + maintype, subtype = ctype.split('/', 1) + + fd = open(attachment.file_attachment.path, 'rb') + if maintype == 'text': + message_attachment = MIMEText(fd.read(), _subtype=subtype) + + elif maintype == 'message': + message_attachment = message_from_file(fd) + elif maintype == 'image': + message_attachment = MIMEImage(fd.read(), _subtype=subtype) + elif maintype == 'audio': + message_attachment = MIMEAudio(fd.read(), _subtype=subtype) + else: + message_attachment = MIMEBase(maintype, subtype) + message_attachment.set_payload(fd.read()) + encode_base64(message_attachment) + fd.close() + message_attachment.add_header('Content-ID', '<'+attachment.title+'>') + #message_attachment.add_header('Content-Disposition', 'attachment', + # filename=attachment.title) + attachments.append(message_attachment) + + return attachments + + def build_title_content(self, contact): + """Generate the email title for a contact""" + context = Context({'contact': contact, + 'UNIQUE_KEY': ''.join(sample(UNIQUE_KEY_CHAR_SET, + UNIQUE_KEY_LENGTH))}) + title = self.title_template.render(context) + return title + + def build_email_content(self, contact): + """Generate the mail for a contact""" + uidb36, token = tokenize(contact) + context = Context({'contact': contact, + 'domain': Site.objects.get_current().domain, + 'newsletter': self.newsletter, + 'tracking_image_format': TRACKING_IMAGE_FORMAT, + 'uidb36': uidb36, 'token': token}) + + content = self.newsletter_template.render(context) + + if TRACKING_LINKS: + content = track_links(content, context) + link_site = render_to_string('newsletter/newsletter_link_site.html', context) + content = body_insertion(content, link_site) + + + if INCLUDE_UNSUBSCRIPTION: + unsubscription = render_to_string('newsletter/newsletter_link_unsubscribe.html', context) + content = body_insertion(content, unsubscription, end=True) + + if TRACKING_IMAGE: + image_tracking = render_to_string('newsletter/newsletter_image_tracking.html', context) + content = body_insertion(content, image_tracking, end=True) + #return content + + #return encodestring(content) + return smart_unicode(content) + + def update_newsletter_status(self): + """Update the status of the newsletter""" + if self.test: + return + + if self.newsletter.status == Newsletter.WAITING: + self.newsletter.status = Newsletter.SENDING + if self.newsletter.status == Newsletter.SENDING and \ + self.newsletter.mails_sent() >= \ + self.newsletter.mailing_list.expedition_set().count(): + self.newsletter.status = Newsletter.SENT + self.newsletter.save() + + @property + def can_send(self): + """Check if the newsletter can be sent""" + if self.test: + return True + if self.newsletter.sending_date <= datetime.now() and \ + (self.newsletter.status == Newsletter.WAITING or \ + self.newsletter.status == Newsletter.SENDING): + return True + + return False + + @property + def expedition_list(self): + """Build the expedition list""" + if self.test: + return self.newsletter.test_contacts.all() + + already_sent = ContactMailingStatus.objects.filter(status=ContactMailingStatus.SENT, + newsletter=self.newsletter).values_list('contact__id', flat=True) + expedition_list = self.newsletter.mailing_list.expedition_set().exclude(id__in=already_sent) + return expedition_list + + def update_contact_status(self, contact, exception): + if exception is None: + status = (self.test + and ContactMailingStatus.SENT_TEST + or ContactMailingStatus.SENT) + elif isinstance(exception, (UnicodeError, SMTPRecipientsRefused)): + status = ContactMailingStatus.INVALID + contact.valid = False + contact.save() + else: + # signal error + print >>sys.stderr, 'smtp connection raises %s' % exception + status = ContactMailingStatus.ERROR + + ContactMailingStatus.objects.create( + newsletter=self.newsletter, contact=contact, status=status) + + +class Mailer(NewsLetterSender): + """Mailer for generating and sending newsletters + In test mode the mailer always send mails but do not log it""" + smtp = None + + def run(self): + """Send the mails""" + if not self.can_send: + return + + if not self.smtp: + self.smtp_connect() + + self.attachments = self.build_attachments() + + expedition_list = self.expedition_list + + number_of_recipients = len(expedition_list) + if self.verbose: + print '%i emails will be sent' % number_of_recipients + + i = 1 + for contact in expedition_list: + if self.verbose: + print '- Processing %s/%s (%s)' % ( + i, number_of_recipients, contact.pk) + message = self.build_message(contact) + self.smtp.sendmail(self.newsletter.header_sender, + contact.email, + message.as_string()) + try: + pass + + except Exception, e: + exception = e + else: + exception = None + self.update_contact_status(contact, exception) + + if SLEEP_BETWEEN_SENDING: + time.sleep(SLEEP_BETWEEN_SENDING) + if RESTART_CONNECTION_BETWEEN_SENDING: + self.smtp.quit() + self.smtp_connect() + + i += 1 + + self.smtp.quit() + self.update_newsletter_status() + + def smtp_connect(self): + """Make a connection to the SMTP""" + self.smtp = self.newsletter.server.connect() + + @property + def expedition_list(self): + """Build the expedition list""" + credits = self.newsletter.server.credits() + if credits <= 0: + return [] + return super(Mailer, self).expedition_list[:credits] + + @property + def can_send(self): + """Check if the newsletter can be sent""" + if self.newsletter.server.credits() <= 0: + return False + return super(Mailer, self).can_send + + +class SMTPMailer(object): + """for generating and sending newsletters + + SMTPMailer takes the problem on a different basis than Mailer, it use + a SMTP server and make a roundrobin over all newsletters to be sent + dispatching it's send command to smtp server regularly over time to + reach the limit. + + It is more robust in term of predictability. + + In test mode the mailer always send mails but do not log it""" + + smtp = None + + def __init__(self, server, test=False, verbose=0): + self.start = datetime.now() + self.server = server + self.test = test + self.verbose = verbose + self.stop_event = threading.Event() + + def run(self): + """send mails + """ + sending = dict() + candidates = self.get_candidates() + roundrobin = [] + + if not self.smtp: + self.smtp_connect() + + delay = self.server.delay() + + i = 1 + sleep_time = 0 + while (not self.stop_event.wait(sleep_time) and + not self.stop_event.is_set()): + if not roundrobin: + # refresh the list + for expedition in candidates: + if expedition.id not in sending and expedition.can_send: + sending[expedition.id] = expedition() + + roundrobin = list(sending.keys()) + + if roundrobin: + nl_id = roundrobin.pop() + nl = sending[nl_id] + + try: + self.smtp.sendmail(*nl.next()) + except StopIteration: + del sending[nl_id] + except Exception, e: + nl.throw(e) + else: + nl.next() + + sleep_time = (delay * i - + total_seconds(datetime.now() - self.start)) + if SLEEP_BETWEEN_SENDING: + sleep_time = max(time.sleep(SLEEP_BETWEEN_SENDING), sleep_time) + if RESTART_CONNECTION_BETWEEN_SENDING: + self.smtp.quit() + self.smtp_connect() + i += 1 + else: + # no work, sleep a bit and some reset + sleep_time = 600 + i = 1 + self.start = datetime.now() + + if sleep_time < 0: + sleep_time = 0 + + self.smtp.quit() + + def get_candidates(self): + """get candidates NL""" + return [NewsLetterExpedition(nl, self) + for nl in Newsletter.objects.filter(server=self.server)] + + def smtp_connect(self): + """Make a connection to the SMTP""" + self.smtp = self.server.connect() + + +class NewsLetterExpedition(NewsLetterSender): + """coroutine that will give messages to be sent with mailer + + between to message it alternate with None so that + the mailer give it a chance to save status to db + """ + + def __init__(self, newsletter, mailer): + super(NewsLetterExpedition, self).__init__( + newsletter, test=mailer.test, verbose=mailer.verbose) + self.mailer = mailer + self.id = newsletter.id + + def __call__(self): + """iterator on messages to be sent + """ + newsletter = self.newsletter + + title = 'smtp-%s (%s), nl-%s (%s)' % ( + self.mailer.server.id, self.mailer.server.name[:10], + newsletter.id, newsletter.title[:10]) + # ajust len + title = '%-30s' % title + + self.attachments = self.build_attachments() + + expedition_list = self.expedition_list + + number_of_recipients = len(expedition_list) + if self.verbose: + print '%s %s: %i emails will be sent' % ( + datetime.now().strftime('%Y-%m-%d'), + title, number_of_recipients) + + try: + i = 1 + for contact in expedition_list: + if self.verbose: + print '%s %s: processing %s/%s (%s)' % ( + datetime.now().strftime('%H:%M:%S'), + title, i, number_of_recipients, contact.pk) + + try: + message = self.build_message(contact) + yield (smart_str(self.newsletter.header_sender), + contact.email, + message.as_string()) + except Exception, e: + exception = e + else: + exception = None + + self.update_contact_status(contact, exception) + i += 1 + # this one permits us to save to database imediately + # and acknoledge eventual exceptions + yield None + finally: + self.update_newsletter_status() diff --git a/emencia/django/newsletter/management/__init__.py b/emencia/django/newsletter/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/emencia/django/newsletter/management/commands/__init__.py b/emencia/django/newsletter/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/emencia/django/newsletter/management/commands/send_newsletter.py b/emencia/django/newsletter/management/commands/send_newsletter.py new file mode 100644 index 00000000..77bb17c5 --- /dev/null +++ b/emencia/django/newsletter/management/commands/send_newsletter.py @@ -0,0 +1,31 @@ +"""Command for sending the newsletter""" +from django.conf import settings +from django.utils.translation import activate +from django.core.management.base import NoArgsCommand + +from emencia.django.newsletter.mailer import Mailer +from emencia.django.newsletter.models import Newsletter + + +class Command(NoArgsCommand): + """Send the newsletter in queue""" + help = 'Send the newsletter in queue' + + def handle_noargs(self, **options): + verbose = int(options['verbosity']) + + if verbose: + print 'Starting sending newsletters...' + + activate(settings.LANGUAGE_CODE) + + for newsletter in Newsletter.objects.exclude( + status=Newsletter.DRAFT).exclude(status=Newsletter.SENT): + mailer = Mailer(newsletter, verbose=verbose) + if mailer.can_send: + if verbose: + print 'Start emailing %s' % newsletter.title + mailer.run() + + if verbose: + print 'End session sending' diff --git a/emencia/django/newsletter/management/commands/send_newsletter_continuous.py b/emencia/django/newsletter/management/commands/send_newsletter_continuous.py new file mode 100644 index 00000000..eddbab5f --- /dev/null +++ b/emencia/django/newsletter/management/commands/send_newsletter_continuous.py @@ -0,0 +1,60 @@ +"""Command for sending the newsletter""" +from threading import Thread +import signal +import sys + +from django.conf import settings +from django.utils.translation import activate +from django.core import signals +from django.core.management.base import NoArgsCommand + +from emencia.django.newsletter.mailer import SMTPMailer +from emencia.django.newsletter.models import SMTPServer + + +class Command(NoArgsCommand): + """Send the newsletter in queue""" + help = 'Send the newsletter in queue' + + def handle_noargs(self, **options): + verbose = int(options['verbosity']) + + if verbose: + print 'Starting sending newsletters...' + + activate(settings.LANGUAGE_CODE) + + senders = SMTPServer.objects.all() + workers = [] + + for sender in senders: + worker = SMTPMailer(sender, verbose=verbose) + thread = Thread(target=worker.run, name=sender.name) + workers.append((worker, thread)) + + handler = term_handler(workers) + for s in [signal.SIGTERM, signal.SIGINT]: + signal.signal(s, handler) + + # first close current connection + signals.request_finished.send(sender=self.__class__) + + for worker, thread in workers: + thread.start() + + signal.pause() # wait for sigterm + + for worker, thread in workers: + if thread.is_alive(): + thread.join() + + sys.exit(0) + + +def term_handler(workers): + + def handler(signum, frame): + for worker, thread in workers: + worker.stop_event.set() + + return handler diff --git a/emencia/django/newsletter/managers.py b/emencia/django/newsletter/managers.py new file mode 100644 index 00000000..e2f1550a --- /dev/null +++ b/emencia/django/newsletter/managers.py @@ -0,0 +1,40 @@ +"""Managers for emencia.django.newsletter""" +from django.db import models +from accounts.models import User + + +class ContactManager(models.Manager): + """Manager for the contacts""" + + def subscribers(self): + """Return all subscribers""" + return self.get_query_set().filter(subscriber=True) + + def unsubscribers(self): + """Return all unsubscribers""" + return self.get_query_set().filter(subscriber=False) + + def valids(self): + """Return only valid contacts""" + return self.get_query_set().filter(valid=True) + + def valid_subscribers(self): + """Return only valid subscribers""" + return self.subscribers().filter(valid=True) + + def activate(self, activation_key): + try: + contact = self.get(activation_code=activation_key) + except self.model.DoesNotExist: + return None + + contact.activated = True + try: + user = User.objects.get(username=contact.email) + except User.DoesNotExist: + user = None + + contact.user = user + + contact.save() + return contact \ No newline at end of file diff --git a/emencia/django/newsletter/migrations/0001_initial.py b/emencia/django/newsletter/migrations/0001_initial.py new file mode 100644 index 00000000..d5b2e548 --- /dev/null +++ b/emencia/django/newsletter/migrations/0001_initial.py @@ -0,0 +1,272 @@ +from south.db import db +from django.db import models +from emencia.django.newsletter.models import * + + +class Migration: + + def forwards(self, orm): + + # Adding model 'MailingList' + db.create_table('newsletter_mailinglist', ( + ('id', orm['newsletter.MailingList:id']), + ('name', orm['newsletter.MailingList:name']), + ('description', orm['newsletter.MailingList:description']), + ('creation_date', orm['newsletter.MailingList:creation_date']), + ('modification_date', orm['newsletter.MailingList:modification_date']), + )) + db.send_create_signal('newsletter', ['MailingList']) + + # Adding model 'ContactMailingStatus' + db.create_table('newsletter_contactmailingstatus', ( + ('id', orm['newsletter.ContactMailingStatus:id']), + ('newsletter', orm['newsletter.ContactMailingStatus:newsletter']), + ('contact', orm['newsletter.ContactMailingStatus:contact']), + ('status', orm['newsletter.ContactMailingStatus:status']), + ('link', orm['newsletter.ContactMailingStatus:link']), + ('creation_date', orm['newsletter.ContactMailingStatus:creation_date']), + )) + db.send_create_signal('newsletter', ['ContactMailingStatus']) + + # Adding model 'WorkGroup' + db.create_table('newsletter_workgroup', ( + ('id', orm['newsletter.WorkGroup:id']), + ('name', orm['newsletter.WorkGroup:name']), + ('group', orm['newsletter.WorkGroup:group']), + )) + db.send_create_signal('newsletter', ['WorkGroup']) + + # Adding model 'Link' + db.create_table('newsletter_link', ( + ('id', orm['newsletter.Link:id']), + ('title', orm['newsletter.Link:title']), + ('url', orm['newsletter.Link:url']), + ('creation_date', orm['newsletter.Link:creation_date']), + )) + db.send_create_signal('newsletter', ['Link']) + + # Adding model 'Newsletter' + db.create_table('newsletter_newsletter', ( + ('id', orm['newsletter.Newsletter:id']), + ('title', orm['newsletter.Newsletter:title']), + ('content', orm['newsletter.Newsletter:content']), + ('mailing_list', orm['newsletter.Newsletter:mailing_list']), + ('server', orm['newsletter.Newsletter:server']), + ('header_sender', orm['newsletter.Newsletter:header_sender']), + ('header_reply', orm['newsletter.Newsletter:header_reply']), + ('status', orm['newsletter.Newsletter:status']), + ('sending_date', orm['newsletter.Newsletter:sending_date']), + ('slug', orm['newsletter.Newsletter:slug']), + ('creation_date', orm['newsletter.Newsletter:creation_date']), + ('modification_date', orm['newsletter.Newsletter:modification_date']), + )) + db.send_create_signal('newsletter', ['Newsletter']) + + # Adding model 'SMTPServer' + db.create_table('newsletter_smtpserver', ( + ('id', orm['newsletter.SMTPServer:id']), + ('name', orm['newsletter.SMTPServer:name']), + ('host', orm['newsletter.SMTPServer:host']), + ('user', orm['newsletter.SMTPServer:user']), + ('password', orm['newsletter.SMTPServer:password']), + ('port', orm['newsletter.SMTPServer:port']), + ('tls', orm['newsletter.SMTPServer:tls']), + ('headers', orm['newsletter.SMTPServer:headers']), + ('mails_hour', orm['newsletter.SMTPServer:mails_hour']), + )) + db.send_create_signal('newsletter', ['SMTPServer']) + + # Adding model 'Contact' + db.create_table('newsletter_contact', ( + ('id', orm['newsletter.Contact:id']), + ('email', orm['newsletter.Contact:email']), + ('first_name', orm['newsletter.Contact:first_name']), + ('last_name', orm['newsletter.Contact:last_name']), + ('subscriber', orm['newsletter.Contact:subscriber']), + ('valid', orm['newsletter.Contact:valid']), + ('tester', orm['newsletter.Contact:tester']), + ('tags', orm['newsletter.Contact:tags']), + ('content_type', orm['newsletter.Contact:content_type']), + ('object_id', orm['newsletter.Contact:object_id']), + ('creation_date', orm['newsletter.Contact:creation_date']), + ('modification_date', orm['newsletter.Contact:modification_date']), + )) + db.send_create_signal('newsletter', ['Contact']) + + # Adding ManyToManyField 'WorkGroup.mailinglists' + db.create_table('newsletter_workgroup_mailinglists', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), + ('mailinglist', models.ForeignKey(orm.MailingList, null=False)) + )) + + # Adding ManyToManyField 'MailingList.subscribers' + db.create_table('newsletter_mailinglist_subscribers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('mailinglist', models.ForeignKey(orm.MailingList, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + # Adding ManyToManyField 'WorkGroup.contacts' + db.create_table('newsletter_workgroup_contacts', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + # Adding ManyToManyField 'WorkGroup.newsletters' + db.create_table('newsletter_workgroup_newsletters', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), + ('newsletter', models.ForeignKey(orm.Newsletter, null=False)) + )) + + # Adding ManyToManyField 'MailingList.unsubscribers' + db.create_table('newsletter_mailinglist_unsubscribers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('mailinglist', models.ForeignKey(orm.MailingList, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + # Adding ManyToManyField 'Newsletter.test_contacts' + db.create_table('newsletter_newsletter_test_contacts', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('newsletter', models.ForeignKey(orm.Newsletter, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + def backwards(self, orm): + + # Deleting model 'MailingList' + db.delete_table('newsletter_mailinglist') + + # Deleting model 'ContactMailingStatus' + db.delete_table('newsletter_contactmailingstatus') + + # Deleting model 'WorkGroup' + db.delete_table('newsletter_workgroup') + + # Deleting model 'Link' + db.delete_table('newsletter_link') + + # Deleting model 'Newsletter' + db.delete_table('newsletter_newsletter') + + # Deleting model 'SMTPServer' + db.delete_table('newsletter_smtpserver') + + # Deleting model 'Contact' + db.delete_table('newsletter_contact') + + # Dropping ManyToManyField 'WorkGroup.mailinglists' + db.delete_table('newsletter_workgroup_mailinglists') + + # Dropping ManyToManyField 'MailingList.subscribers' + db.delete_table('newsletter_mailinglist_subscribers') + + # Dropping ManyToManyField 'WorkGroup.contacts' + db.delete_table('newsletter_workgroup_contacts') + + # Dropping ManyToManyField 'WorkGroup.newsletters' + db.delete_table('newsletter_workgroup_newsletters') + + # Dropping ManyToManyField 'MailingList.unsubscribers' + db.delete_table('newsletter_mailinglist_unsubscribers') + + # Dropping ManyToManyField 'Newsletter.test_contacts' + db.delete_table('newsletter_newsletter_test_contacts') + + models = { + 'auth.group': { + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'newsletter.contact': { + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {'default': "''"}), + 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}) + }, + 'newsletter.contactmailingstatus': { + 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Contact']"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + 'status': ('django.db.models.fields.IntegerField', [], {}) + }, + 'newsletter.link': { + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.mailinglist': { + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']"}), + 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}) + }, + 'newsletter.newsletter': { + 'content': ('django.db.models.fields.TextField', [], {'default': "u'\\n\\n'"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), + 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.MailingList']"}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'sending_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'server': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': "orm['newsletter.SMTPServer']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}), + 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.smtpserver': { + 'headers': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mails_hour': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'port': ('django.db.models.fields.IntegerField', [], {'default': '25'}), + 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'user': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) + }, + 'newsletter.workgroup': { + 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['newsletter'] diff --git a/emencia/django/newsletter/migrations/0002_auto__add_attachment.py b/emencia/django/newsletter/migrations/0002_auto__add_attachment.py new file mode 100644 index 00000000..d070a5ed --- /dev/null +++ b/emencia/django/newsletter/migrations/0002_auto__add_attachment.py @@ -0,0 +1,130 @@ +from south.db import db +from south.v2 import SchemaMigration + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'Attachment' + db.create_table('newsletter_attachment', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('newsletter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.Newsletter'])), + ('title', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('file_attachment', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + )) + db.send_create_signal('newsletter', ['Attachment']) + + def backwards(self, orm): + # Deleting model 'Attachment' + db.delete_table('newsletter_attachment') + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'newsletter.attachment': { + 'Meta': {'object_name': 'Attachment'}, + 'file_attachment': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.contact': { + 'Meta': {'object_name': 'Contact'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {'default': "''"}), + 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}) + }, + 'newsletter.contactmailingstatus': { + 'Meta': {'object_name': 'ContactMailingStatus'}, + 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Contact']"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + 'status': ('django.db.models.fields.IntegerField', [], {}) + }, + 'newsletter.link': { + 'Meta': {'object_name': 'Link'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.mailinglist': { + 'Meta': {'object_name': 'MailingList'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'mailinglist_subscriber'", 'symmetrical': 'False', 'to': "orm['newsletter.Contact']"}), + 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'mailinglist_unsubscriber'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['newsletter.Contact']"}) + }, + 'newsletter.newsletter': { + 'Meta': {'object_name': 'Newsletter'}, + 'content': ('django.db.models.fields.TextField', [], {'default': "u'\\n\\n'"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Giorgio Barbarotta Newsletter'", 'max_length': '255'}), + 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Giorgio Barbarotta Newsletter'", 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.MailingList']"}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'sending_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'server': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': "orm['newsletter.SMTPServer']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}), + 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.smtpserver': { + 'Meta': {'object_name': 'SMTPServer'}, + 'headers': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mails_hour': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'port': ('django.db.models.fields.IntegerField', [], {'default': '25'}), + 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'user': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) + }, + 'newsletter.workgroup': { + 'Meta': {'object_name': 'WorkGroup'}, + 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['newsletter'] diff --git a/emencia/django/newsletter/migrations/0003_auto__add_unique_newsletter_slug.py b/emencia/django/newsletter/migrations/0003_auto__add_unique_newsletter_slug.py new file mode 100644 index 00000000..14645df9 --- /dev/null +++ b/emencia/django/newsletter/migrations/0003_auto__add_unique_newsletter_slug.py @@ -0,0 +1,123 @@ +from south.db import db +from south.v2 import SchemaMigration + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding unique constraint on 'Newsletter', fields ['slug'] + db.create_unique('newsletter_newsletter', ['slug']) + + def backwards(self, orm): + # Removing unique constraint on 'Newsletter', fields ['slug'] + db.delete_unique('newsletter_newsletter', ['slug']) + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'newsletter.attachment': { + 'Meta': {'object_name': 'Attachment'}, + 'file_attachment': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.contact': { + 'Meta': {'ordering': "('creation_date',)", 'object_name': 'Contact'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'tags': ('tagging.fields.TagField', [], {'default': "''"}), + 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'newsletter.contactmailingstatus': { + 'Meta': {'ordering': "('creation_date',)", 'object_name': 'ContactMailingStatus'}, + 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Contact']"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + 'status': ('django.db.models.fields.IntegerField', [], {}) + }, + 'newsletter.link': { + 'Meta': {'ordering': "('creation_date',)", 'object_name': 'Link'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.mailinglist': { + 'Meta': {'ordering': "('creation_date',)", 'object_name': 'MailingList'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'mailinglist_subscriber'", 'symmetrical': 'False', 'to': "orm['newsletter.Contact']"}), + 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'mailinglist_unsubscriber'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['newsletter.Contact']"}) + }, + 'newsletter.newsletter': { + 'Meta': {'ordering': "('creation_date',)", 'object_name': 'Newsletter'}, + 'content': ('django.db.models.fields.TextField', [], {'default': "u'\\n\\n'"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), + 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.MailingList']"}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'sending_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'server': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': "orm['newsletter.SMTPServer']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}), + 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.smtpserver': { + 'Meta': {'object_name': 'SMTPServer'}, + 'headers': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mails_hour': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'port': ('django.db.models.fields.IntegerField', [], {'default': '25'}), + 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) + }, + 'newsletter.workgroup': { + 'Meta': {'object_name': 'WorkGroup'}, + 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['newsletter'] diff --git a/emencia/django/newsletter/migrations/__init__.py b/emencia/django/newsletter/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py new file mode 100644 index 00000000..1180e54d --- /dev/null +++ b/emencia/django/newsletter/models.py @@ -0,0 +1,419 @@ +# -*- coding: utf-8 -*- +"""Models for emencia.django.newsletter""" +from smtplib import SMTP +from smtplib import SMTPHeloError +from datetime import datetime +from datetime import timedelta +from email.MIMEImage import MIMEImage + +from django.core.mail import EmailMessage +from django.template import Context +from django.db import models +from django.contrib.sites.models import Site +from django.conf import settings +from django.utils.encoding import smart_str +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ +from django.contrib.contenttypes import generic +from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import Group +from django.utils.encoding import force_unicode +from django.template.loader import render_to_string, get_template + + +from emencia.django.newsletter.managers import ContactManager +from emencia.django.newsletter.settings import BASE_PATH +from emencia.django.newsletter.settings import MAILER_HARD_LIMIT +from emencia.django.newsletter.settings import DEFAULT_HEADER_REPLY +from emencia.django.newsletter.settings import DEFAULT_HEADER_SENDER +from emencia.django.newsletter.settings import ACTIVATION_SUBJECT, ACTIVATION_TEMPLATE +from emencia.django.newsletter.utils.vcard import vcard_contact_export +from emencia.django.newsletter.utils import make_activation_code + + + +class SMTPServer(models.Model): + """Configuration of a SMTP server""" + name = models.CharField(_('name'), max_length=255) + host = models.CharField(_('server host'), max_length=255) + user = models.CharField(_('server user'), max_length=128, blank=True, + help_text=_('Leave it empty if the host is public.')) + password = models.CharField(_('server password'), max_length=128, blank=True, + help_text=_('Leave it empty if the host is public.')) + port = models.IntegerField(_('server port'), default=25) + tls = models.BooleanField(_('server use TLS')) + + headers = models.TextField(_('custom headers'), blank=True, + help_text=_('key1: value1 key2: value2, splitted by return line.\n'\ + 'Useful for passing some tracking headers if your provider allows it.')) + mails_hour = models.IntegerField(_('mails per hour'), default=0) + + def connect(self): + """Connect the SMTP Server""" + smtp = SMTP(smart_str(self.host), int(self.port)) + smtp.ehlo_or_helo_if_needed() + if self.tls: + smtp.starttls() + smtp.ehlo_or_helo_if_needed() + + if self.user or self.password: + smtp.login(smart_str(self.user), smart_str(self.password)) + return smtp + + def delay(self): + """compute the delay (in seconds) between mails to ensure mails + per hour limit is not reached + + :rtype: float + """ + if not self.mails_hour: + return 0.0 + else: + return 3600.0 / self.mails_hour + + def credits(self): + """Return how many mails the server can send""" + if not self.mails_hour: + return MAILER_HARD_LIMIT + + last_hour = datetime.now() - timedelta(hours=1) + sent_last_hour = ContactMailingStatus.objects.filter( + models.Q(status=ContactMailingStatus.SENT) | + models.Q(status=ContactMailingStatus.SENT_TEST), + newsletter__server=self, + creation_date__gte=last_hour).count() + return self.mails_hour - sent_last_hour + + @property + def custom_headers(self): + if self.headers: + headers = {} + for header in self.headers.splitlines(): + if header: + key, value = header.split(':') + headers[key.strip()] = value.strip() + return headers + return {} + + def __unicode__(self): + return '%s (%s)' % (self.name, self.host) + + class Meta: + verbose_name = _('SMTP server') + verbose_name_plural = _('SMTP servers') + + +class Contact(models.Model): + """Contact for emailing""" + activation_subject = ACTIVATION_SUBJECT + activation_template = ACTIVATION_TEMPLATE + user = models.ForeignKey('accounts.User', null=True) + email = models.EmailField(_('email'), unique=True) + first_name = models.CharField(_('first name'), max_length=50, blank=True) + last_name = models.CharField(_('last name'), max_length=50, blank=True) + + subscriber = models.BooleanField(_('subscriber'), default=True) + valid = models.BooleanField(_('valid email'), default=True) + tester = models.BooleanField(_('contact tester'), default=False) + activation_code = models.CharField( + verbose_name=_('activation code'), max_length=40, + default=make_activation_code + ) + activated = models.BooleanField(default=False) + + content_type = models.ForeignKey(ContentType, blank=True, null=True) + object_id = models.PositiveIntegerField(blank=True, null=True) + content_object = generic.GenericForeignKey('content_type', 'object_id') + + creation_date = models.DateTimeField(_('creation date'), auto_now_add=True) + modification_date = models.DateTimeField(_('modification date'), auto_now=True) + + objects = ContactManager() + + def subscriptions(self): + """Return the user subscriptions""" + return MailingList.objects.filter(subscribers=self) + + def unsubscriptions(self): + """Return the user unsubscriptions""" + return MailingList.objects.filter(unsubscribers=self) + + def vcard_format(self): + return vcard_contact_export(self) + + def mail_format(self): + if self.first_name and self.last_name: + return '%s %s <%s>' % (self.last_name, self.first_name, self.email) + return self.email + mail_format.short_description = _('mail format') + + def get_absolute_url(self): + if self.content_type and self.object_id: + return self.content_object.get_absolute_url() + return reverse('admin:newsletter_contact_change', args=(self.pk,)) + + def __unicode__(self): + if self.first_name and self.last_name: + contact_name = '%s %s' % (self.last_name, self.first_name) + else: + contact_name = self.email + return contact_name + + def send_activation(self): + user = self + site = Site.objects.get_current() + ctx_dict = {'activation_key': self.activation_code, + 'site': site, + 'user': user} + subject = render_to_string(self.activation_subject, + ctx_dict) + # Email subject *must not* contain newlines + subject = ''.join(subject.splitlines()) + + message = get_template(self.activation_template).render(Context(ctx_dict)) + msg = EmailMessage(subject, message, settings.DEFAULT_FROM_EMAIL, [user.email]) + msg.content_subtype = "html" + images =(('/img/logo_reg.png', 'logo'), + ('/img/soc-medias/sm-icon-rss.png', 'rss'), + ('/img/soc-medias/sm-icon-fb.png', 'fb'), + ('/img/soc-medias/sm-icon-lin.png', 'linkedin'), + ('/img/soc-medias/sm-icon-vk.png', 'vk'), + ('/img/soc-medias/sm-icon-twit.png', 'twit'), + ('/img/mail-logo-2.jpg','logo2')) + for img in images: + fp = open(settings.STATIC_ROOT+img[0], 'rb') + msg_img = MIMEImage(fp.read()) + fp.close() + msg_img.add_header('Content-ID', '<'+img[1]+'>') + msg.attach(msg_img) + + msg.send() + + class Meta: + ordering = ('-modification_date',) + verbose_name = _('contact') + verbose_name_plural = _('contacts') + + +class ContactSettings(models.Model): + WEEK = 1 # every week + WEEK_2 = 2 # every 2 weeks + MONTH = 3 # every 4 month + + PERIODIC_CHOICES = [(WEEK, 'Раз в неделю'), + (WEEK_2, 'Раз в 2 недели'), + (MONTH, 'Разв месяц') + ] + + contact = models.OneToOneField(Contact) + periodic = models.PositiveIntegerField(verbose_name=_(u'Периодичность отправки'), choices=PERIODIC_CHOICES, default=WEEK) + exponent_practicum = models.BooleanField(default=True, verbose_name=_(u'Практикум экспонента')) + organiser_practicum = models.BooleanField(default=True, verbose_name=_(u'Практикум организатора событий')) + theme = models.ManyToManyField('theme.Theme', blank=True, null=True, verbose_name=_(u'Тематики')) + area = models.ManyToManyField('country.Area', blank=True, null=True, verbose_name=_(u'Географические зоны')) + country = models.ManyToManyField('country.Country', blank=True, null=True, verbose_name=_(u'Страны')) + city = models.ManyToManyField('city.City', blank=True, null=True, verbose_name=_(u'Города')) + + +class MailingList(models.Model): + """Mailing list""" + name = models.CharField(_('name'), max_length=255) + description = models.TextField(_('description'), blank=True) + + subscribers = models.ManyToManyField(Contact, verbose_name=_('subscribers'), + related_name='mailinglist_subscriber') + unsubscribers = models.ManyToManyField(Contact, verbose_name=_('unsubscribers'), + related_name='mailinglist_unsubscriber', + null=True, blank=True) + announce = models.BooleanField(default=False) + announce_public_day = models.IntegerField(default=2) + creation_date = models.DateTimeField(_('creation date'), auto_now_add=True) + modification_date = models.DateTimeField(_('modification date'), auto_now=True) + + def subscribers_count(self): + return self.subscribers.all().count() + subscribers_count.short_description = _('subscribers') + + def unsubscribers_count(self): + return self.unsubscribers.all().count() + unsubscribers_count.short_description = _('unsubscribers') + + def expedition_set(self): + unsubscribers_id = self.unsubscribers.values_list('id', flat=True) + return self.subscribers.valid_subscribers().exclude( + id__in=unsubscribers_id) + + def __unicode__(self): + return self.name + + class Meta: + ordering = ('-creation_date',) + verbose_name = _('mailing list') + verbose_name_plural = _('mailing lists') + + +class Newsletter(models.Model): + """Newsletter to be sended to contacts""" + DRAFT = 0 + WAITING = 1 + SENDING = 2 + SENT = 4 + CANCELED = 5 + + STATUS_CHOICES = ((DRAFT, _('draft')), + (WAITING, _('waiting sending')), + (SENDING, _('sending')), + (SENT, _('sent')), + (CANCELED, _('canceled')), + ) + + title = models.CharField(_('title'), max_length=255, + help_text=_('You can use the "{{ UNIQUE_KEY }}" variable ' \ + 'for unique identifier within the newsletter\'s title.')) + content = models.TextField(_('content'), help_text=_('Or paste an URL.'), + default=_('\n\n')) + + mailing_list = models.ForeignKey(MailingList, verbose_name=_('mailing list')) + test_contacts = models.ManyToManyField(Contact, verbose_name=_('test contacts'), + blank=True, null=True) + + server = models.ForeignKey(SMTPServer, verbose_name=_('smtp server'), + default=lambda: SMTPServer.objects.get(id=1)) + header_sender = models.CharField(_('sender'), max_length=255, + default=DEFAULT_HEADER_SENDER) + header_reply = models.CharField(_('reply to'), max_length=255, + default=DEFAULT_HEADER_REPLY) + + status = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=DRAFT) + sending_date = models.DateTimeField(_('sending date'), default=datetime.now) + + slug = models.SlugField(help_text=_('Used for displaying the newsletter on the site.'), + unique=True) + creation_date = models.DateTimeField(_('creation date'), auto_now_add=True) + modification_date = models.DateTimeField(_('modification date'), auto_now=True) + + def mails_sent(self): + return self.contactmailingstatus_set.filter(status=ContactMailingStatus.SENT).count() + + @models.permalink + def get_absolute_url(self): + return ('newsletter_newsletter_preview', (self.slug,)) + + @models.permalink + def get_historic_url(self): + return ('newsletter_newsletter_historic', (self.slug,)) + + @models.permalink + def get_statistics_url(self): + return ('newsletter_newsletter_statistics', (self.slug,)) + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('-creation_date',) + verbose_name = _('newsletter') + verbose_name_plural = _('newsletters') + permissions = (('can_change_status', 'Can change status'),) + + +class Link(models.Model): + """Link sended in a newsletter""" + title = models.CharField(_('title'), max_length=255) + url = models.CharField(_('url'), max_length=255) + + creation_date = models.DateTimeField(_('creation date'), auto_now_add=True) + + def get_absolute_url(self): + return self.url + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('-creation_date',) + verbose_name = _('link') + verbose_name_plural = _('links') + + +class Attachment(models.Model): + """Attachment file in a newsletter""" + + def get_newsletter_storage_path(self, filename): + filename = force_unicode(filename) + return '/'.join([BASE_PATH, self.newsletter.slug, filename]) + + newsletter = models.ForeignKey(Newsletter, verbose_name=_('newsletter')) + title = models.CharField(_('title'), max_length=255) + file_attachment = models.FileField(_('file to attach'), max_length=255, + upload_to=get_newsletter_storage_path) + + class Meta: + verbose_name = _('attachment') + verbose_name_plural = _('attachments') + + def __unicode__(self): + return self.title + + def get_absolute_url(self): + return self.file_attachment.url + + +class ContactMailingStatus(models.Model): + """Status of the reception""" + SENT_TEST = -1 + SENT = 0 + ERROR = 1 + INVALID = 2 + OPENED = 4 + OPENED_ON_SITE = 5 + LINK_OPENED = 6 + UNSUBSCRIPTION = 7 + + STATUS_CHOICES = ((SENT_TEST, _('sent in test')), + (SENT, _('sent')), + (ERROR, _('error')), + (INVALID, _('invalid email')), + (OPENED, _('opened')), + (OPENED_ON_SITE, _('opened on site')), + (LINK_OPENED, _('link opened')), + (UNSUBSCRIPTION, _('unsubscription')), + ) + + newsletter = models.ForeignKey(Newsletter, verbose_name=_('newsletter')) + contact = models.ForeignKey(Contact, verbose_name=_('contact')) + status = models.IntegerField(_('status'), choices=STATUS_CHOICES) + link = models.ForeignKey(Link, verbose_name=_('link'), + blank=True, null=True) + + creation_date = models.DateTimeField(_('creation date'), auto_now_add=True) + + def __unicode__(self): + return '%s : %s : %s' % (self.newsletter.__unicode__(), + self.contact.__unicode__(), + self.get_status_display()) + + class Meta: + ordering = ('-creation_date',) + verbose_name = _('contact mailing status') + verbose_name_plural = _('contact mailing statuses') + + +class WorkGroup(models.Model): + """Work Group for privatization of the ressources""" + name = models.CharField(_('name'), max_length=255) + group = models.ForeignKey(Group, verbose_name=_('permissions group')) + + contacts = models.ManyToManyField(Contact, verbose_name=_('contacts'), + blank=True, null=True) + mailinglists = models.ManyToManyField(MailingList, verbose_name=_('mailing lists'), + blank=True, null=True) + newsletters = models.ManyToManyField(Newsletter, verbose_name=_('newsletters'), + blank=True, null=True) + + def __unicode__(self): + return self.name + + class Meta: + verbose_name = _('workgroup') + verbose_name_plural = _('workgroups') diff --git a/emencia/django/newsletter/settings.py b/emencia/django/newsletter/settings.py new file mode 100644 index 00000000..29a05275 --- /dev/null +++ b/emencia/django/newsletter/settings.py @@ -0,0 +1,43 @@ +"""Settings for emencia.django.newsletter""" +import string +from django.conf import settings + +BASE64_IMAGES = { + 'gif': 'AJEAAAAAAP///////wAAACH5BAEHAAIALAAAAAABAAEAAAICVAEAOw==', + 'png': 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+P//PwNAgAEACPwC/tuiTRYAAAAASUVORK5CYII=', + 'jpg': '/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAABAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAAAAAAAAAAACP/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AVIP/2Q==' + } + +USE_WORKGROUPS = getattr(settings, 'NEWSLETTER_USE_WORKGROUPS', False) +USE_UTM_TAGS = getattr(settings, 'NEWSLETTER_USE_UTM_TAGS', True) +USE_TINYMCE = getattr(settings, 'NEWSLETTER_USE_TINYMCE', + 'tinymce' in settings.INSTALLED_APPS) + +USE_PRETTIFY = getattr(settings, 'NEWSLETTER_USE_PRETTIFY', True) + +MAILER_HARD_LIMIT = getattr(settings, 'NEWSLETTER_MAILER_HARD_LIMIT', 100) + +INCLUDE_UNSUBSCRIPTION = getattr(settings, 'NEWSLETTER_INCLUDE_UNSUBSCRIPTION', True) + +UNIQUE_KEY_LENGTH = getattr(settings, 'NEWSLETTER_UNIQUE_KEY_LENGTH', 8) +UNIQUE_KEY_CHAR_SET = getattr(settings, 'NEWSLETTER_UNIQUE_KEY_CHAR_SET', string.ascii_uppercase + string.digits) + +DEFAULT_HEADER_SENDER = getattr(settings, 'NEWSLETTER_DEFAULT_HEADER_SENDER', + 'Expomap') +DEFAULT_HEADER_REPLY = getattr(settings, 'NEWSLETTER_DEFAULT_HEADER_REPLY', + DEFAULT_HEADER_SENDER) + +TRACKING_LINKS = getattr(settings, 'NEWSLETTER_TRACKING_LINKS', True) +TRACKING_IMAGE_FORMAT = getattr(settings, 'NEWSLETTER_TRACKING_IMAGE_FORMAT', 'jpg') +TRACKING_IMAGE = getattr(settings, 'NEWSLETTER_TRACKING_IMAGE', + BASE64_IMAGES[TRACKING_IMAGE_FORMAT]) + +SLEEP_BETWEEN_SENDING = getattr( + settings, 'NEWSLETTER_SLEEP_BETWEEN_SENDING', 10) +RESTART_CONNECTION_BETWEEN_SENDING = getattr( + settings, 'NEWSLETTER_RESTART_CONNECTION_BETWEEN_SENDING', False) + +BASE_PATH = getattr(settings, 'NEWSLETTER_BASE_PATH', 'uploads/newsletter') + +ACTIVATION_SUBJECT = 'client/newsletters/activation_subject.txt' +ACTIVATION_TEMPLATE = 'client/newsletters/activation_template.html' diff --git a/emencia/django/newsletter/static/edn/js/jquery.form.js b/emencia/django/newsletter/static/edn/js/jquery.form.js new file mode 100644 index 00000000..dde39427 --- /dev/null +++ b/emencia/django/newsletter/static/edn/js/jquery.form.js @@ -0,0 +1,660 @@ +/* + * jQuery Form Plugin + * version: 2.36 (07-NOV-2009) + * @requires jQuery v1.2.6 or later + * + * Examples and documentation at: http://malsup.com/jquery/form/ + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +;(function($) { + +/* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are intended to be exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').bind('submit', function() { + $(this).ajaxSubmit({ + target: '#output' + }); + return false; // <-- important! + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ + target: '#output' + }); + }); + + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. +*/ + +/** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + */ +$.fn.ajaxSubmit = function(options) { + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); + return this; + } + + if (typeof options == 'function') + options = { success: options }; + + var url = $.trim(this.attr('action')); + if (url) { + // clean url (don't include hash vaue) + url = (url.match(/^([^#]+)/)||[])[1]; + } + url = url || window.location.href || ''; + + options = $.extend({ + url: url, + type: this.attr('method') || 'GET', + iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' + }, options || {}); + + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; + this.trigger('form-pre-serialize', [this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + return this; + } + + // provide opportunity to alter form data before it is serialized + if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSerialize callback'); + return this; + } + + var a = this.formToArray(options.semantic); + if (options.data) { + options.extraData = options.data; + for (var n in options.data) { + if(options.data[n] instanceof Array) { + for (var k in options.data[n]) + a.push( { name: n, value: options.data[n][k] } ); + } + else + a.push( { name: n, value: options.data[n] } ); + } + } + + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + return this; + } + + // fire vetoable 'validate' event + this.trigger('form-submit-validate', [a, this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); + return this; + } + + var q = $.param(a); + + if (options.type.toUpperCase() == 'GET') { + options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; + options.data = null; // data is null for 'get' + } + else + options.data = q; // data is the query string for 'post' + + var $form = this, callbacks = []; + if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); + if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); + + // perform a load on the target only if dataType is not provided + if (!options.dataType && options.target) { + var oldSuccess = options.success || function(){}; + callbacks.push(function(data) { + $(options.target).html(data).each(oldSuccess, arguments); + }); + } + else if (options.success) + callbacks.push(options.success); + + options.success = function(data, status) { + for (var i=0, max=callbacks.length; i < max; i++) + callbacks[i].apply(options, [data, status, $form]); + }; + + // are there files to upload? + var files = $('input:file', this).fieldValue(); + var found = false; + for (var j=0; j < files.length; j++) + if (files[j]) + found = true; + + var multipart = false; +// var mp = 'multipart/form-data'; +// multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); + + // options.iframe allows user to force iframe mode + // 06-NOV-09: now defaulting to iframe mode if file input is detected + if ((files.length && options.iframe !== false) || options.iframe || found || multipart) { + // hack to fix Safari hang (thanks to Tim Molendijk for this) + // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d + if (options.closeKeepAlive) + $.get(options.closeKeepAlive, fileUpload); + else + fileUpload(); + } + else + $.ajax(options); + + // fire 'notify' event + this.trigger('form-submit-notify', [this, options]); + return this; + + + // private function for handling file uploads (hat tip to YAHOO!) + function fileUpload() { + var form = $form[0]; + + if ($(':input[name=submit]', form).length) { + alert('Error: Form elements must not be named "submit".'); + return; + } + + var opts = $.extend({}, $.ajaxSettings, options); + var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts); + + var id = 'jqFormIO' + (new Date().getTime()); + var $io = $('