1327: Этап №3 - Переводчик функционала

remotes/origin/search
Alexander Burdeiny 10 years ago
parent 7f03825c22
commit d495988a7c
  1. 2
      accounts/admin.py
  2. 2
      accounts/edit_forms.py
  3. 20
      accounts/forms.py
  4. 12
      accounts/models.py
  5. 1
      article/admin.py
  6. 48
      article/forms.py
  7. 1
      city/admin.py
  8. 39
      city/forms.py
  9. 2
      city/models.py
  10. 1
      company/admin.py
  11. 75
      company/forms.py
  12. 30
      company/models.py
  13. 93
      conference/forms.py
  14. 74
      conference/models.py
  15. 7
      conference/views.py
  16. 2
      core/forms.py
  17. 11
      core/models.py
  18. 34
      core/simple_views.py
  19. 54
      country/forms.py
  20. 2
      country/models.py
  21. 2
      django_messages/admin.py
  22. 8
      emencia/django/newsletter/admin_forms.py
  23. 22
      emencia/django/newsletter/forms.py
  24. 25
      emencia/django/newsletter/templates/newsletter/announce_template.html
  25. 6
      emencia/django/newsletter/templates/newsletter/base.html
  26. 8
      emencia/django/newsletter/templates/newsletter/mailing_list_unsubscribe.html
  27. 2
      emencia/django/newsletter/templates/newsletter/newsletter_link_unsubscribe.html
  28. 2
      emencia/django/newsletter/views/admin_views.py
  29. 3
      emencia/django/newsletter/views/mailing_list.py
  30. 8
      expobanner/admin.py
  31. 60
      expobanner/forms.py
  32. 60
      expobanner/models.py
  33. 3
      expobanner/stat_views.py
  34. 154
      exposition/forms.py
  35. 128
      exposition/models.py
  36. 16
      exposition/views.py
  37. 26
      file/forms.py
  38. 16
      file/models.py
  39. 6
      functions/custom_views.py
  40. 3
      functions/form_check.py
  41. 3
      functions/model_mixin.py
  42. 3
      import_xls/admin.py
  43. 21
      import_xls/export_forms.py
  44. 17
      import_xls/import_forms.py
  45. 15
      import_xls/utils.py
  46. BIN
      locale/en/LC_MESSAGES/django.mo
  47. BIN
      locale/en/LC_MESSAGES/django.po
  48. BIN
      locale/ru/LC_MESSAGES/django.mo
  49. 10308
      locale/ru/LC_MESSAGES/django.po
  50. 11
      meta/forms.py
  51. 10
      meta/models.py
  52. 33
      news/forms.py
  53. 16
      news/models.py
  54. 69
      organiser/forms.py
  55. 36
      organiser/models.py
  56. 27
      password_reset/templates/password_reset/recovery_email_expo.html
  57. 13
      photologue/forms.py
  58. 2
      photologue/migrations/0002_photosize_data.py
  59. 11
      photoreport/forms.py
  60. 92
      place_conference/forms.py
  61. 100
      place_exposition/forms.py
  62. 8
      place_exposition/models.py
  63. 2
      proj/admin_urls.py
  64. 2
      proj/settings.py
  65. 5
      review/models.py
  66. 67
      seminar/forms.py
  67. 51
      seminar/models.py
  68. 31
      service/forms.py
  69. 17
      service/models.py
  70. 5
      settings/forms.py
  71. 45
      specialist_catalog/models.py
  72. 11
      templates/admin/expobanner/link_list.html
  73. 1
      templates/admin/includes/admin_nav.html
  74. 9
      templates/client/404_test.html
  75. 2
      templates/client/accounts/translators/translator_city.html
  76. 4
      templates/client/accounts/translators/translator_country.html
  77. 2
      templates/client/accounts/translators/translator_profile.html
  78. 2
      templates/client/article/article.html
  79. 4
      templates/client/city/city.html
  80. 2
      templates/client/country/country.html
  81. 5
      templates/client/includes/accounts/blocked_user.html
  82. 4
      templates/client/includes/accounts/current_user.html
  83. 5
      templates/client/includes/company/company_blocked.html
  84. 12
      templates/client/includes/company/company_edit.html
  85. 4
      templates/client/includes/event_list.html
  86. 2
      templates/client/includes/exposition/expo_paid.html
  87. 2
      templates/client/includes/exposition/exposition_object.html
  88. 6
      templates/client/includes/exposition/programm.html
  89. 3
      templates/client/includes/page_filter.html
  90. 14
      templates/client/newsletters/activation_complete.html
  91. 17
      templates/client/newsletters/activation_template.html
  92. 88
      templates/client/organiser/add_event.html
  93. 26
      templates/client/photoreport.html
  94. 4
      templates/client/popups/advertise.html
  95. 2
      templates/client/popups/callback.html
  96. 2
      templates/client/popups/register.html
  97. 4
      templates/client/popups/theme.html
  98. 12
      templates/client/search/search.html
  99. 6
      templates/client/service/participation.html
  100. 4
      templates/client/service/remotely.html
  101. Some files were not shown because too many files have changed in this diff Show More

@ -198,7 +198,7 @@ def change_password(request):
#user.set_password(form.cleaned_data.get('new_password')) #user.set_password(form.cleaned_data.get('new_password'))
#user.save() #user.save()
success['success'] = True success['success'] = True
success['message'] = _(u'Пароль именен') success['message'] = _(u'Пароль изменен')
return HttpResponse(json.dumps(success), content_type='application/json') return HttpResponse(json.dumps(success), content_type='application/json')
else: else:
errors = {'errors': [_(u'Не правильный пароль')]} errors = {'errors': [_(u'Не правильный пароль')]}

@ -30,7 +30,7 @@ class NameForm(forms.ModelForm):
class HomeForm(forms.ModelForm): class HomeForm(forms.ModelForm):
city = forms.CharField(label='Город', required=False, city = forms.CharField(label=_(u'Город'), required=False,
widget=forms.HiddenInput(attrs={'class': 'select2'})) widget=forms.HiddenInput(attrs={'class': 'select2'}))
country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()], country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()],
required=False, widget=forms.Select(attrs={'class': 'select2'})) required=False, widget=forms.Select(attrs={'class': 'select2'}))

@ -27,8 +27,8 @@ def clean_relation_field(inst, field_name, model):
class UserCreationForm(forms.ModelForm): class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput(render_value=False)) password1 = forms.CharField(label=_(u'Пароль'), widget=forms.PasswordInput(render_value=False))
password2 = forms.CharField(label='Повторите пароль', widget=forms.PasswordInput(render_value=False)) password2 = forms.CharField(label=_(u'Повторите пароль'), widget=forms.PasswordInput(render_value=False))
class Meta: class Meta:
model = User model = User
@ -43,14 +43,14 @@ class UserCreationForm(forms.ModelForm):
User.objects.get(email=email) User.objects.get(email=email)
except User.DoesNotExist: except User.DoesNotExist:
return email return email
raise forms.ValidationError('Пользователь с таким email уже существует') raise forms.ValidationError(_(u'Пользователь с таким email уже существует'))
def clean_password2(self): def clean_password2(self):
password1 = self.cleaned_data.get('password1') password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2') password2 = self.cleaned_data.get('password2')
if password1 and password2 and password1 != password2: if password1 and password2 and password1 != password2:
raise forms.ValidationError('Пароли не совпадают') raise forms.ValidationError(_(u'Пароли не совпадают'))
return password2 return password2
def save(self, commit=True): def save(self, commit=True):
@ -65,10 +65,10 @@ class UserCreationForm(forms.ModelForm):
class UserForm(forms.ModelForm): class UserForm(forms.ModelForm):
# email = forms.EmailField(widget=forms.TextInput(attrs={'disabled' : True}), required=False) # email = forms.EmailField(widget=forms.TextInput(attrs={'disabled' : True}), required=False)
country = forms.ChoiceField(label='Страна', choices=[(item.id, item.name) for item in Country.objects.language().all()], country = forms.ChoiceField(label=_(u'Страна'), choices=[(item.id, item.name) for item in Country.objects.language().all()],
required=False) required=False)
city = forms.CharField(label='Город', widget=forms.HiddenInput(), required=False) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput(), required=False)
company = forms.ChoiceField(label='Компания', company = forms.ChoiceField(label=_(u'Компания'),
choices=[(item.id, item.name) for item in Company.objects.language().all()], choices=[(item.id, item.name) for item in Company.objects.language().all()],
required=False) required=False)
@ -149,7 +149,7 @@ class UserForm(forms.ModelForm):
if phone.isdigit(): if phone.isdigit():
return phone return phone
else: else:
raise forms.ValidationError('Введите правильный код страны') raise forms.ValidationError(_(u'Введите правильный код страны'))
class ChangePasswordForm(forms.Form): class ChangePasswordForm(forms.Form):
@ -201,9 +201,9 @@ class EmailAnnouncementForm(forms.Form):
class RegistrationCompleteForm(forms.ModelForm): class RegistrationCompleteForm(forms.ModelForm):
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(),
widget=forms.Select(attrs={'class': 'select2'})) widget=forms.Select(attrs={'class': 'select2'}))
city = forms.CharField(label='Город', widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
url = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'url(обязательно)')})) url = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'url(обязательно)')}))
# code_country = forms.ChoiceField(label=_(u'код страны'), initial='70', # code_country = forms.ChoiceField(label=_(u'код страны'), initial='70',

@ -22,7 +22,7 @@ class UserManager(BaseUserManager):
def create_user(self, email, first_name, last_name, password=None, **extra_fields): def create_user(self, email, first_name, last_name, password=None, **extra_fields):
now = timezone.now() now = timezone.now()
if not email: if not email:
raise ValueError('Вы должни ввести электронную почту') raise ValueError(_(u'Вы должни ввести электронную почту'))
user = self.model( user = self.model(
email=UserManager.normalize_email(email), email=UserManager.normalize_email(email),
@ -38,7 +38,7 @@ class UserManager(BaseUserManager):
def create_superuser(self, username, first_name, last_name, password, **extra_fields): def create_superuser(self, username, first_name, last_name, password, **extra_fields):
if not username: if not username:
raise ValueError('Вы должни ввести электронную почту') raise ValueError(_(u'Вы должни ввести электронную почту'))
username = UserManager.normalize_email(username) username = UserManager.normalize_email(username)
@ -82,7 +82,7 @@ class User(AbstractBaseUser, PermissionsMixin, GetURLorPK):
#unique = True, #unique = True,
db_index=True, db_index=True,
) )
username = models.CharField(verbose_name='Email', max_length=255, unique=True, db_index=True) username = models.CharField(verbose_name=_(u'Email'), max_length=255, unique=True, db_index=True)
first_name = models.CharField(verbose_name=_(u'First name'), max_length=255) first_name = models.CharField(verbose_name=_(u'First name'), max_length=255)
last_name = models.CharField(verbose_name=_(u'Last name'), max_length=255) last_name = models.CharField(verbose_name=_(u'Last name'), max_length=255)
rating = models.IntegerField(verbose_name=_(u'Рейтинг'), default=100)# добавить индекс в базе rating = models.IntegerField(verbose_name=_(u'Рейтинг'), default=100)# добавить индекс в базе
@ -94,15 +94,15 @@ class User(AbstractBaseUser, PermissionsMixin, GetURLorPK):
date_registered = models.DateTimeField(verbose_name=_(u'Дата регистрации'), blank=True, null=True) date_registered = models.DateTimeField(verbose_name=_(u'Дата регистрации'), blank=True, null=True)
date_modified = models.DateTimeField(verbose_name=_(u'Изменен'), auto_now=True) date_modified = models.DateTimeField(verbose_name=_(u'Изменен'), auto_now=True)
#relations #relations
organiser = models.ForeignKey('organiser.Organiser', verbose_name='Организатор', blank=True, null=True, organiser = models.ForeignKey('organiser.Organiser', verbose_name=_(u'Организатор'), blank=True, null=True,
unique=True, unique=True,
on_delete=models.PROTECT) on_delete=models.PROTECT)
translator = models.ForeignKey('translator.Translator', verbose_name='Переводчик', blank=True, null=True, translator = models.ForeignKey('translator.Translator', verbose_name=_(u'Переводчик'), blank=True, null=True,
unique=True, unique=True,
on_delete=models.PROTECT, related_name='user') on_delete=models.PROTECT, related_name='user')
company = models.ForeignKey('company.Company', verbose_name=_(u'Компания'), blank=True, null=True, company = models.ForeignKey('company.Company', verbose_name=_(u'Компания'), blank=True, null=True,
related_name='users') related_name='users')
position = models.CharField(verbose_name='Должность', max_length=255, blank=True) position = models.CharField(verbose_name=_(u'Должность'), max_length=255, blank=True)
blocked = models.BooleanField(verbose_name=_(u'Заблокирован?'), default=False) blocked = models.BooleanField(verbose_name=_(u'Заблокирован?'), default=False)
objects = UserManager() objects = UserManager()

@ -15,6 +15,7 @@ from file.forms import FileModelForm, FileForm
#custom views #custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object from functions.custom_views import objects_list, add_object_with_file, delete_object
from functions.views_help import get_referer from functions.views_help import get_referer
from django.utils.translation import ugettext_lazy as _
class ArticleDeleteView(DeleteView): class ArticleDeleteView(DeleteView):

@ -16,12 +16,12 @@ from conference.models import Conference
class _BlogForm(forms.Form): class _BlogForm(forms.Form):
type = Article.blog type = Article.blog
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=ThemeBlog.objects.all(), required=False, theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=ThemeBlog.objects.all(), required=False,
widget=forms.SelectMultiple(attrs={'style':'width: 550px'})) widget=forms.SelectMultiple(attrs={'style':'width: 550px'}))
slug = forms.SlugField(label=u'URL', max_length=255, min_length=1, required=False) slug = forms.SlugField(label=_(u'URL'), max_length=255, min_length=1, required=False)
publish_date = forms.DateField(label=u'Дата публикации', input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False) publish_date = forms.DateField(label=_(u'Дата публикации'), input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False)
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
logo = forms.ImageField(label=u'Лого', required=False) logo = forms.ImageField(label=_(u'Лого'), required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -35,15 +35,15 @@ class _BlogForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required) self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required)
self.fields['preview_%s' % code] = forms.CharField(label='Превью', required=False, widget=CKEditorWidget) self.fields['preview_%s' % code] = forms.CharField(label=_(u'Превью'), required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, author, article=None, commit=True): def save(self, author, article=None, commit=True):
@ -107,9 +107,9 @@ class BlogForm(_BlogForm):
class NewsForm(_BlogForm): class NewsForm(_BlogForm):
type = Article.news type = Article.news
exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput(), required=False) exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput(), required=False)
conference = forms.CharField(label=u'Конференция', widget=forms.HiddenInput(), required=False) conference = forms.CharField(label=_(u'Конференция'), widget=forms.HiddenInput(), required=False)
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all(), required=False, theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all(), required=False,
widget=forms.SelectMultiple(attrs={'style':'width: 550px'})) widget=forms.SelectMultiple(attrs={'style':'width: 550px'}))
def save(self, author, article=None): def save(self, author, article=None):
@ -151,12 +151,12 @@ class ArticleForm(forms.Form):
save function saves data in Article object. If it doesnt exist create new object save function saves data in Article object. If it doesnt exist create new object
""" """
#users that have organiser profile #users that have organiser profile
author = forms.ModelChoiceField(label='Автор',queryset=User.objects.exclude(organiser__isnull=True)) author = forms.ModelChoiceField(label=_(u'Автор'),queryset=User.objects.exclude(organiser__isnull=True))
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all()) theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all())
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
tag = forms.MultipleChoiceField(label='Теги', required=False) tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
article_id = forms.CharField(required=False, widget=forms.HiddenInput()) article_id = forms.CharField(required=False, widget=forms.HiddenInput())
@ -172,15 +172,15 @@ class ArticleForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required) self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required)
self.fields['preview_%s' % code] = forms.CharField(label='Превью', required=required, widget=CKEditorWidget) self.fields['preview_%s' % code] = forms.CharField(label=_(u'Превью'), required=required, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=required, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=required, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, id=None): def save(self, id=None):
@ -229,7 +229,7 @@ class ArticleForm(forms.Form):
article = Article.objects.filter(url=translit_with_separator(main_title_ru)) article = Article.objects.filter(url=translit_with_separator(main_title_ru))
if article and str(article[0].id) != id: if article and str(article[0].id) != id:
msg = 'Статья с таким названием уже существует' msg = _(u'Статья с таким названием уже существует')
self._errors['main_title_ru'] = ErrorList([msg]) self._errors['main_title_ru'] = ErrorList([msg])
del self.cleaned_data['main_title_ru'] del self.cleaned_data['main_title_ru']

@ -13,6 +13,7 @@ from file.forms import FileModelForm
#custom views #custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object from functions.custom_views import objects_list, add_object_with_file, delete_object
from functions.admin_views import AdminListView from functions.admin_views import AdminListView
from django.utils.translation import ugettext_lazy as _
def city_all(request): def city_all(request):

@ -14,6 +14,7 @@ from functions.translate import fill_with_signal
from functions.form_check import is_positive_integer, translit_with_separator from functions.form_check import is_positive_integer, translit_with_separator
from functions.files import check_tmp_files from functions.files import check_tmp_files
from functions.admin_forms import AdminFilterForm from functions.admin_forms import AdminFilterForm
from django.utils.translation import ugettext_lazy as _
class CityForm(forms.Form): class CityForm(forms.Form):
@ -25,16 +26,16 @@ class CityForm(forms.Form):
save function saves data in City object. If it doesnt exist create new object save function saves data in City object. If it doesnt exist create new object
""" """
country = forms.ModelChoiceField(label='Страна', country = forms.ModelChoiceField(label=_(u'Страна'),
queryset=Country.objects.filter(translations__language_code=lang()).order_by('translations__name'), queryset=Country.objects.filter(translations__language_code=lang()).order_by('translations__name'),
empty_label=None) empty_label=None)
population = forms.CharField(label='Население', required=False, population = forms.CharField(label=_(u'Население'), required=False,
widget=forms.TextInput(attrs={'placeholder':'Население'})) widget=forms.TextInput(attrs={'placeholder':_(u'Население')}))
phone_code = forms.CharField(label='Код города', required=False, phone_code = forms.CharField(label=_(u'Код города'), required=False,
widget=forms.TextInput(attrs={'placeholder':'Код города'})) widget=forms.TextInput(attrs={'placeholder':_(u'Код города')}))
code_IATA = forms.ModelChoiceField(label='Код IATA', queryset=Iata.objects.all(), empty_label=None, required=False) code_IATA = forms.ModelChoiceField(label=_(u'Код IATA'), queryset=Iata.objects.all(), empty_label=None, required=False)
inflect = forms.CharField(label='Inflect', required=False) inflect = forms.CharField(label=_(u'Inflect'), required=False)
logo = forms.ImageField(label='Logo', required=False) logo = forms.ImageField(label=_(u'Logo'), required=False)
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
# #
@ -53,20 +54,20 @@ class CityForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['region_%s' % code] = forms.CharField(label='Регион', required=False) self.fields['region_%s' % code] = forms.CharField(label=_(u'Регион'), required=False)
self.fields['description_%s' % code] = forms.CharField(label='Описание', self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['famous_places_%s' % code] = forms.CharField(label='Знаменитые места', self.fields['famous_places_%s' % code] = forms.CharField(label=_(u'Знаменитые места'),
required=False, widget=CKEditorWidget()) required=False, widget=CKEditorWidget())
self.fields['shoping_%s' % code] = forms.CharField(label='Шопинг', required=False, widget=CKEditorWidget()) self.fields['shoping_%s' % code] = forms.CharField(label=_(u'Шопинг'), required=False, widget=CKEditorWidget())
self.fields['transport_%s' % code] = forms.CharField(label='Транспорт', required=False, widget=CKEditorWidget()) self.fields['transport_%s' % code] = forms.CharField(label=_(u'Транспорт'), required=False, widget=CKEditorWidget())
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
@ -148,7 +149,7 @@ class CityForm(forms.Form):
if phone_code.isdigit(): if phone_code.isdigit():
return phone_code return phone_code
else: else:
raise ValidationError('Введите правильный телефонный код') raise ValidationError(_(u'Введите правильный телефонный код'))
def clean_population(self): def clean_population(self):
""" """
@ -168,7 +169,7 @@ class CityDeleteForm(forms.ModelForm):
class CityFilterForm(AdminFilterForm): class CityFilterForm(AdminFilterForm):
country = forms.ChoiceField(choices=[('', '')]+[(item.id, item.name) for item in Country.objects.all()], required=False, country = forms.ChoiceField(choices=[('', '')]+[(item.id, item.name) for item in Country.objects.all()], required=False,
label='Страна') label=_(u'Страна'))
model = City model = City
def filter(self): def filter(self):

@ -28,7 +28,7 @@ class City(TranslatableModel):
catalog = '/city/' catalog = '/city/'
services = BitField(flags=flags) services = BitField(flags=flags)
url = models.SlugField(verbose_name=_(u'Url'), unique=True) url = models.SlugField(verbose_name=_(u'Url'), unique=True)
logo = models.ImageField(verbose_name='Logo', upload_to='city/logo/', blank=True, max_length=255) logo = models.ImageField(verbose_name=_(u'Logo'), upload_to='city/logo/', blank=True, max_length=255)
old_url = models.CharField(verbose_name=_(u'Url старой бд'), max_length=55) old_url = models.CharField(verbose_name=_(u'Url старой бд'), max_length=55)
# inflect name for russian language. example- в Москве # inflect name for russian language. example- в Москве
inflect = models.CharField(verbose_name=_(u'Склонение'), max_length=255, blank=True) inflect = models.CharField(verbose_name=_(u'Склонение'), max_length=255, blank=True)

@ -16,6 +16,7 @@ from functions.custom_views import (add_object_with_file, delete_object,
# models and forms # models and forms
from models import Company from models import Company
from theme.models import Tag from theme.models import Tag
from django.utils.translation import ugettext_lazy as _
def company_all(request): def company_all(request):

@ -27,30 +27,30 @@ class CompanyForm(forms.Form):
save function saves data in Company object. If it doesnt exist create new object save function saves data in Company object. If it doesnt exist create new object
""" """
url = forms.CharField(label='URL', widget=forms.TextInput(attrs={'placeholder': 'Введите URL'})) url = forms.CharField(label=_(u'URL'), widget=forms.TextInput(attrs={'placeholder': _(u'Введите URL')}))
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None) country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None)
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all()) theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all())
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
city = forms.ChoiceField(label='Город', choices=[('','')]) city = forms.ChoiceField(label=_(u'Город'), choices=[('','')])
tag = forms.MultipleChoiceField(label='Теги', required=False) tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
staff_number = forms.CharField(label='Количество сотрудников', required=False, staff_number = forms.CharField(label=_(u'Количество сотрудников'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество сотрудников'})) widget=forms.TextInput(attrs={'placeholder': _(u'Количество сотрудников')}))
#uses locationwidget #uses locationwidget
address = forms.CharField(label='Адрес', required=False, widget=LocationWidget) address = forms.CharField(label=_(u'Адрес'), required=False, widget=LocationWidget)
phone = forms.CharField(label='Телефон', required=False, phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label='Факс', required=False, fax = forms.CharField(label='Факс', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.CharField(label='Веб-сайт', required=False, web_page = forms.CharField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))
email = forms.CharField(label='Email', required=False, email = forms.CharField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))
social = forms.CharField(label='Социальные страници', required=False) social = forms.CharField(label=_(u'Социальные страници'), required=False)
foundation = forms.CharField(label='Год основания', required=False, foundation = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'})) widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
# #
@ -69,18 +69,18 @@ class CompanyForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание', self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['specialization_%s' % code] = forms.CharField(label='Специализация', required=False) self.fields['specialization_%s' % code] = forms.CharField(label=_(u'Специализация'), required=False)
self.fields['address_inf_%s' % code] = forms.CharField(label='Доп инф по адресу', self.fields['address_inf_%s' % code] = forms.CharField(label=_(u'Доп инф по адресу'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
@ -139,7 +139,7 @@ class CompanyForm(forms.Form):
company = Company.objects.filter(url=translit_with_separator(url)) company = Company.objects.filter(url=translit_with_separator(url))
if company and str(company[0].id) != id: if company and str(company[0].id) != id:
msg = 'Такой урл уже занят' msg = _(u'Такой урл уже занят')
self._errors['url'] = ErrorList([msg]) self._errors['url'] = ErrorList([msg])
del self.cleaned_data['url'] del self.cleaned_data['url']
@ -184,7 +184,7 @@ class CompanyForm(forms.Form):
if phone.isdigit(): if phone.isdigit():
return phone return phone
else: else:
raise ValidationError('Введите правильный телефон') raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self): def clean_fax(self):
""" """
@ -203,7 +203,8 @@ class CompanyForm(forms.Form):
if fax.isdigit(): if fax.isdigit():
return fax return fax
else: else:
raise ValidationError('Введите правильный факс') raise ValidationError(_(u'Введите правильный факс'))
class CompanyDeleteForm(forms.ModelForm): class CompanyDeleteForm(forms.ModelForm):
id = forms.CharField(widget=forms.HiddenInput()) id = forms.CharField(widget=forms.HiddenInput())
@ -212,6 +213,7 @@ class CompanyDeleteForm(forms.ModelForm):
model = Company model = Company
fields = ('id',) fields = ('id',)
class CompanyFormClient(forms.Form): class CompanyFormClient(forms.Form):
# translated fields # translated fields
@ -224,18 +226,18 @@ class CompanyFormClient(forms.Form):
country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None) country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None)
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all()) theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all())
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
phone = forms.CharField(label='Телефон', required=False) phone = forms.CharField(label=_(u'Телефон'), required=False)
fax = forms.CharField(label='Факс', required=False) fax = forms.CharField(label=_(u'Факс'), required=False)
web_page = forms.URLField(label='Веб-сайт', required=False) web_page = forms.URLField(label=_(u'Веб-сайт'), required=False)
email = forms.EmailField(label='Email', required=False) email = forms.EmailField(label=_(u'Email'), required=False)
foundation = forms.IntegerField(label=_(u'Год основания'), required=False) foundation = forms.IntegerField(label=_(u'Год основания'), required=False)
staff_number = forms.IntegerField(label=_(u'Количество сотрудников'), required=False) staff_number = forms.IntegerField(label=_(u'Количество сотрудников'), required=False)
vk = forms.URLField(label=_(u'в контакте'), required=False) vk = forms.URLField(label=_(u'в контакте'), required=False)
twitter = forms.URLField(label=u'Twitter', required=False) twitter = forms.URLField(label=_(u'Twitter'), required=False)
facebook = forms.URLField(label=u'Facebook', required=False) facebook = forms.URLField(label=_(u'Facebook'), required=False)
linkedin = forms.URLField(label=u'Linkedin', required=False) linkedin = forms.URLField(label=_(u'Linkedin'), required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -279,7 +281,6 @@ class CreateCompanyForm(forms.Form):
return company return company
def clean_url(self): def clean_url(self):
url = self.cleaned_data['url'] url = self.cleaned_data['url']
url = url.replace('http://expomap.ru/members/', '') url = url.replace('http://expomap.ru/members/', '')

@ -32,34 +32,34 @@ class Company(TranslatableModel, ExpoMixin, GetURLorPK):
url = models.SlugField(max_length=255) url = models.SlugField(max_length=255)
#relations #relations
creator = models.ForeignKey('accounts.User', verbose_name='Создатель', related_name='created_company', creator = models.ForeignKey('accounts.User', verbose_name=_(u'Создатель'), related_name='created_company',
blank=True, null=True) blank=True, null=True)
theme = models.ManyToManyField('theme.Theme', verbose_name='Отрасль', theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Отрасль'),
blank=True, null=True, related_name='companies') blank=True, null=True, related_name='companies')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True, related_name='companies') tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'), blank=True, null=True, related_name='companies')
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True, country = models.ForeignKey('country.Country', verbose_name=_(u'Страна'), blank=True, null=True,
on_delete=models.PROTECT, related_name='companies') on_delete=models.PROTECT, related_name='companies')
city = models.ForeignKey('city.City', verbose_name='Город', blank=True, null=True, city = models.ForeignKey('city.City', verbose_name=_(u'Город'), blank=True, null=True,
on_delete=models.PROTECT, related_name='companies') on_delete=models.PROTECT, related_name='companies')
#address. uses LocationField. saves data in json format #address. uses LocationField. saves data in json format
address = LocationField(verbose_name='Адрес', blank=True) address = LocationField(verbose_name='Адрес', blank=True)
staff_number = models.CharField(verbose_name='Количество сотрудников', max_length=50, blank=True) staff_number = models.CharField(verbose_name=_(u'Количество сотрудников'), max_length=50, blank=True)
phone = models.BigIntegerField(verbose_name='Телефон', blank=True, null=True) phone = models.BigIntegerField(verbose_name=_(u'Телефон'), blank=True, null=True)
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True) fax = models.BigIntegerField(verbose_name=_(u'Факс'), blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True) web_page = models.CharField(verbose_name=_(u'Веб-сайт'),max_length=255, blank=True)
email = models.EmailField(verbose_name='Email', blank=True) email = models.EmailField(verbose_name=_(u'Email'), blank=True)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True) facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True) twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True) linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True) vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
#translation fields #translation fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название компании', max_length=255), name = models.CharField(verbose_name=_(u'Название компании'), max_length=255),
specialization = models.CharField(verbose_name='Специализация', max_length=255, blank=True), specialization = models.CharField(verbose_name=_(u'Специализация'), max_length=255, blank=True),
description = models.TextField(verbose_name='О компании', blank=True), description = models.TextField(verbose_name=_(u'О компании'), blank=True),
address_inf = models.TextField(verbose_name='Доп инф по адресу', blank=True), address_inf = models.TextField(verbose_name=_(u'Доп инф по адресу'), blank=True),
#-----meta #-----meta
title = models.CharField(max_length=255), title = models.CharField(max_length=255),
descriptions = models.CharField(max_length=255), descriptions = models.CharField(max_length=255),

@ -4,6 +4,7 @@ from django.conf import settings
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.core.validators import validate_email, URLValidator from django.core.validators import validate_email, URLValidator
from django.utils.translation import ugettext as _
#models #models
from models import Conference, TimeTable, CURRENCY, Statistic, BIT_AUDIENCE from models import Conference, TimeTable, CURRENCY, Statistic, BIT_AUDIENCE
from country.models import Country from country.models import Country
@ -34,51 +35,51 @@ class ConferenceCreateForm(forms.Form):
save function saves data in Conference object. If it doesnt exist create new object save function saves data in Conference object. If it doesnt exist create new object
""" """
PERIODIC = ((0, u'Не выбрано'), (1.0, u'Ежегодно'), (2.0, u'2 раза в год'), (3.0, u'3 раза в год'), PERIODIC = ((0, _(u'Не выбрано')), (1.0, _(u'Ежегодно')), (2.0, _(u'2 раза в год')), (3.0, _(u'3 раза в год')),
(4.0, u'4 раза в год'), (5.0, u'5 раз в год'), (0.5, u'Раз в 2 года'),(0.33, u'Раз в 3 года'), (4.0, _(u'4 раза в год')), (5.0, _(u'5 раз в год')), (0.5, _(u'Раз в 2 года')),(0.33, _(u'Раз в 3 года')),
(0.25, u'Раз в 4 года'), (0.2, u'Раз в 5 лет')) (0.25, _(u'Раз в 4 года')), (0.2, _(u'Раз в 5 лет')))
public = [(item1, item2) for item1, item2 in BIT_AUDIENCE] public = [(item1, item2) for item1, item2 in BIT_AUDIENCE]
currencies = [(item, item) for item in CURRENCY] currencies = [(item, item) for item in CURRENCY]
data_begin = forms.DateField(label=u'Дата начала', input_formats=['%Y-%m-%d', '%d.%m.%Y']) data_begin = forms.DateField(label=_(u'Дата начала'), input_formats=['%Y-%m-%d', '%d.%m.%Y'])
data_end = forms.DateField(label=u'Дата окончания', input_formats=['%Y-%m-%d', '%d.%m.%Y']) data_end = forms.DateField(label=_(u'Дата окончания'), input_formats=['%Y-%m-%d', '%d.%m.%Y'])
logo = forms.ImageField(label='Logo', required=False) logo = forms.ImageField(label=_(u'Logo'), required=False)
#organiser = forms.MultipleChoiceField(label=u'Организаторы', required=False, #organiser = forms.MultipleChoiceField(label=u'Организаторы', required=False,
# choices=[(item.id, item.name) for item in Organiser.objects.language().all()]) # choices=[(item.id, item.name) for item in Organiser.objects.language().all()])
org = forms.CharField(required=False, label=u'Организатор') org = forms.CharField(required=False, label=_(u'Организатор'))
country = forms.ChoiceField(label=u'Страна', choices=[(c.id, c.name) for c in Country.objects.all()]) country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()])
theme = forms.MultipleChoiceField(label='Тематики', theme = forms.MultipleChoiceField(label=_(u'Тематики'),
choices=[(item.id, item.name) for item in Theme.objects.language().all()]) choices=[(item.id, item.name) for item in Theme.objects.language().all()])
place = forms.ChoiceField(label=u'Место проведения', required=False, place = forms.ChoiceField(label=_(u'Место проведения'), required=False,
choices=places) choices=places)
place_alt = forms.CharField(label = u"Альтернативное название места", required=False) place_alt = forms.CharField(label = _(u"Альтернативное название места"), required=False)
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
city = forms.CharField(label=u'Город', widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
periodic = forms.ChoiceField(label=u'Периодичность', choices=PERIODIC, required=False) periodic = forms.ChoiceField(label=_(u'Периодичность'), choices=PERIODIC, required=False)
audience = forms.MultipleChoiceField(label=u'Аудитория', choices=public, initial='', required=False) audience = forms.MultipleChoiceField(label=_(u'Аудитория'), choices=public, initial='', required=False)
web_page = forms.CharField(label='Веб страница', required=False) web_page = forms.CharField(label=_(u'Веб страница'), required=False)
link = forms.CharField(label='Линк на регистрацию', required=False) link = forms.CharField(label=_(u'Линк на регистрацию'), required=False)
foundation_year = forms.CharField(label='Год основания', required=False) foundation_year = forms.CharField(label=_(u'Год основания'), required=False)
members = forms.CharField(label='Участники', required=False) members = forms.CharField(label=_(u'Участники'), required=False)
visitors = forms.CharField(label='Посетители', required=False) visitors = forms.CharField(label=_(u'Посетители'), required=False)
discount = forms.CharField(label='Cкидка(%)', required=False) discount = forms.CharField(label=_(u'Cкидка(%)'), required=False)
# #
currency = forms.ChoiceField(label='Валюта', choices=currencies, required=False) currency = forms.ChoiceField(label=_(u'Валюта'), choices=currencies, required=False)
tax = forms.BooleanField(label='Налог включен', initial=True, required=False) tax = forms.BooleanField(label=_(u'Налог включен'), initial=True, required=False)
min_price = forms.CharField(label='Минимальная цена', required=False) min_price = forms.CharField(label=_(u'Минимальная цена'), required=False)
max_price = forms.CharField(label='Максимальная цена', required=False) max_price = forms.CharField(label=_(u'Максимальная цена'), required=False)
expohit = forms.BooleanField(label='Expohit', required=False) expohit = forms.BooleanField(label=_(u'Expohit'), required=False)
canceled = forms.BooleanField(label='Отменена', required=False) canceled = forms.BooleanField(label=_(u'Отменена'), required=False)
moved = forms.BooleanField(label='Перенесена', required=False) moved = forms.BooleanField(label=_(u'Перенесена'), required=False)
quality_label = forms.MultipleChoiceField(label='Тип', required=False, quality_label = forms.MultipleChoiceField(label=_(u'Тип'), required=False,
choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')], choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')],
widget=forms.CheckboxSelectMultiple()) widget=forms.CheckboxSelectMultiple())
@ -97,23 +98,23 @@ class ConferenceCreateForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание', self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['time_%s' % code] = forms.CharField(label='Время работы', self.fields['time_%s' % code] = forms.CharField(label=_(u'Время работы'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['main_themes_%s' % code] = forms.CharField(label='Основные темы', self.fields['main_themes_%s' % code] = forms.CharField(label=_(u'Основные темы'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['discount_description_%s' % code] = forms.CharField(label='Описание скидки', self.fields['discount_description_%s' % code] = forms.CharField(label=_(u'Описание скидки'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
@ -313,9 +314,9 @@ class ConferenceChangeForm(ConferenceCreateForm):
add some fields to ConferenceCreateForm add some fields to ConferenceCreateForm
""" """
organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False) organiser = forms.ModelMultipleChoiceField(label=_(u'Организаторы'), queryset=Organiser.objects.all(), required=False)
company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label=_(u'Компании'), queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) users = forms.ModelMultipleChoiceField(label=_(u'Пользователи'), queryset=User.objects.all(), required=False)
class ConferenceDeleteForm(forms.ModelForm): class ConferenceDeleteForm(forms.ModelForm):
@ -355,8 +356,8 @@ class TimeTableForm(forms.Form):
Create TimeTable form Create TimeTable form
day field must save automatically day field must save automatically
""" """
begin = forms.DateTimeField(label='Время начала') begin = forms.DateTimeField(label=_(u'Время начала'))
end = forms.DateTimeField(label='Время окончания') end = forms.DateTimeField(label=_(u'Время окончания'))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -378,7 +379,7 @@ class TimeTableForm(forms.Form):
class ConferenceFilterForm(AdminFilterForm): class ConferenceFilterForm(AdminFilterForm):
created = forms.DateField(required=False, label='Дата создания') created = forms.DateField(required=False, label=_(u'Дата создания'))
model = Conference model = Conference
def filter(self): def filter(self):

@ -47,27 +47,27 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
url = models.SlugField(unique=True, max_length=255) url = models.SlugField(unique=True, max_length=255)
old_url = models.SlugField(unique=True, max_length=255) old_url = models.SlugField(unique=True, max_length=255)
data_begin = models.DateField(verbose_name='Дата начала') data_begin = models.DateField(verbose_name=_(u'Дата начала'))
data_end = models.DateField(verbose_name='Дата окончания') data_end = models.DateField(verbose_name=_(u'Дата окончания'))
services = BitField(flags=flags) services = BitField(flags=flags)
#relations #relations
country = models.ForeignKey('country.Country', verbose_name='Страна', on_delete=models.PROTECT, country = models.ForeignKey('country.Country', verbose_name=_(u'Страна'), on_delete=models.PROTECT,
related_name='conference_country') related_name='conference_country')
city = models.ForeignKey('city.City', verbose_name='Город', on_delete=models.PROTECT, city = models.ForeignKey('city.City', verbose_name=_(u'Город'), on_delete=models.PROTECT,
related_name='conference_city') related_name='conference_city')
place = models.ForeignKey('place_conference.PlaceConference', verbose_name='Место проведения', place = models.ForeignKey('place_conference.PlaceConference', verbose_name=_(u'Место проведения'),
blank=True, null=True, on_delete=models.PROTECT, related_name='conference_place') blank=True, null=True, on_delete=models.PROTECT, related_name='conference_place')
place_alt = models.CharField(blank=True, null=True, max_length=255) # alternative for object place place_alt = models.CharField(blank=True, null=True, max_length=255) # alternative for object place
theme = models.ManyToManyField('theme.Theme', verbose_name='Тематики', theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики'),
related_name='conference_themes') related_name='conference_themes')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'),
blank=True, null=True, related_name='conference_tags') blank=True, null=True, related_name='conference_tags')
organiser = models.ManyToManyField('organiser.Organiser', verbose_name='Организатор', organiser = models.ManyToManyField('organiser.Organiser', verbose_name=_(u'Организатор'),
blank=True, null=True, related_name='conference_organisers') blank=True, null=True, related_name='conference_organisers')
org = models.CharField(max_length=255, blank=True, null=True) org = models.CharField(max_length=255, blank=True, null=True)
company = models.ManyToManyField('company.Company', verbose_name='Компании', company = models.ManyToManyField('company.Company', verbose_name=_(u'Компании'),
blank=True, null=True, related_name='conference_companies') blank=True, null=True, related_name='conference_companies')
users = models.ManyToManyField('accounts.User', verbose_name='Посетители выставки', users = models.ManyToManyField('accounts.User', verbose_name=_(u'Посетители выставки'),
blank=True, null=True, related_name='conference_users') blank=True, null=True, related_name='conference_users')
photogallery = models.ForeignKey('photologue.Gallery', blank=True, null=True, on_delete=models.SET_NULL) photogallery = models.ForeignKey('photologue.Gallery', blank=True, null=True, on_delete=models.SET_NULL)
logo = models.ImageField(verbose_name='Logo', upload_to='conference/logo/', blank=True) logo = models.ImageField(verbose_name='Logo', upload_to='conference/logo/', blank=True)
@ -75,17 +75,17 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
quality_label = BitField(flags=['ufi', 'rsva', 'exporating']) quality_label = BitField(flags=['ufi', 'rsva', 'exporating'])
periodic = models.FloatField(verbose_name='Переодичность', blank=True, null=True) periodic = models.FloatField(verbose_name=_(u'Переодичность'), blank=True, null=True)
audience = BitField(flags=[k for k, v in BIT_AUDIENCE]) audience = BitField(flags=[k for k, v in BIT_AUDIENCE])
web_page = models.CharField(verbose_name='Вебсайт', max_length=255, blank=True) web_page = models.CharField(verbose_name=_(u'Вебсайт'), max_length=255, blank=True)
link = models.CharField(verbose_name='Линк на регистрацию', max_length=255, blank=True) link = models.CharField(verbose_name=_(u'Линк на регистрацию'), max_length=255, blank=True)
discount = models.PositiveIntegerField(verbose_name='Скидка', blank=True, null=True) discount = models.PositiveIntegerField(verbose_name=_(u'Скидка'), blank=True, null=True)
# #
currency = EnumField(values=CURRENCY, default='USD') currency = EnumField(values=CURRENCY, default='USD')
tax = models.BooleanField(verbose_name='Налог', default=1) tax = models.BooleanField(verbose_name=_(u'Налог'), default=1)
min_price = models.PositiveIntegerField(verbose_name='Минимальная цена', blank=True, null=True) min_price = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена'), blank=True, null=True)
max_price = models.PositiveIntegerField(verbose_name='Максимальная цена', blank=True, null=True) max_price = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена'), blank=True, null=True)
#administrator can cancel conference #administrator can cancel conference
expohit = models.BooleanField(verbose_name='Expohit', default=0) expohit = models.BooleanField(verbose_name='Expohit', default=0)
canceled_by_administrator = models.BooleanField(default=0) canceled_by_administrator = models.BooleanField(default=0)
@ -97,17 +97,17 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id') files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id')
note = generic.GenericRelation('note.Note', content_type_field='content_type', object_id_field='object_id') note = generic.GenericRelation('note.Note', content_type_field='content_type', object_id_field='object_id')
# statistic # statistic
foundation_year = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation_year = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Посетитеил', blank=True, null=True) visitors = models.PositiveIntegerField(verbose_name=_(u'Посетитеил'), blank=True, null=True)
members = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True) members = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
#translated fields #translated fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255), name = models.CharField(verbose_name=_(u'Название'), max_length=255),
main_title=models.TextField(verbose_name='Краткое описание', blank=True), main_title=models.TextField(verbose_name=_(u'Краткое описание'), blank=True),
description=models.TextField(verbose_name='Описание', blank=True), description=models.TextField(verbose_name=_(u'Описание'), blank=True),
main_themes=models.TextField(verbose_name='Основные темы', blank=True), main_themes=models.TextField(verbose_name=_(u'Основные темы'), blank=True),
time=models.TextField(verbose_name='Время работы', blank=True), time=models.TextField(verbose_name=_(u'Время работы'), blank=True),
discount_description=models.TextField(verbose_name='Описание скидки', blank=True), discount_description=models.TextField(verbose_name=_(u'Описание скидки'), blank=True),
#-----meta data #-----meta data
title=models.CharField(max_length=250), title=models.CharField(max_length=250),
descriptions=models.CharField(max_length=250), descriptions=models.CharField(max_length=250),
@ -208,11 +208,11 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
class Statistic(TranslatableModel): class Statistic(TranslatableModel):
conference = models.ForeignKey(Conference, related_name='statistic') conference = models.ForeignKey(Conference, related_name='statistic')
year = models.PositiveIntegerField(verbose_name='Год') year = models.PositiveIntegerField(verbose_name=_(u'Год'))
members = models.PositiveIntegerField(verbose_name='Посетители', blank=True, null=True) members = models.PositiveIntegerField(verbose_name=_(u'Посетители'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True) visitors = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
area = models.PositiveIntegerField(verbose_name='Площадь', blank=True, null=True) area = models.PositiveIntegerField(verbose_name=_(u'Площадь'), blank=True, null=True)
countries_number = models.PositiveIntegerField(verbose_name='Количество стран', blank=True, null=True) countries_number = models.PositiveIntegerField(verbose_name=_(u'Количество стран'), blank=True, null=True)
translations = TranslatedFields( translations = TranslatedFields(
countries = models.TextField(blank=True) countries = models.TextField(blank=True)
@ -228,8 +228,8 @@ class TimeTable(TranslatableModel):
""" """
conference = models.ForeignKey(Conference, related_name='business_program') conference = models.ForeignKey(Conference, related_name='business_program')
begin = models.DateTimeField(verbose_name='Начало') begin = models.DateTimeField(verbose_name=_(u'Начало'))
end = models.DateTimeField(verbose_name='Конец') end = models.DateTimeField(verbose_name=_(u'Конец'))
timetable_organiser = models.ForeignKey('organiser.Organiser', null=True, blank=True, timetable_organiser = models.ForeignKey('organiser.Organiser', null=True, blank=True,
related_name='conf_timetable') related_name='conf_timetable')
# #
@ -237,10 +237,10 @@ class TimeTable(TranslatableModel):
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
#translated fields #translated fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название программы', max_length=255, blank=True), name = models.CharField(verbose_name=_(u'Название программы'), max_length=255, blank=True),
programe = models.TextField(verbose_name='Программа'), programe = models.TextField(verbose_name=_(u'Программа')),
speaker = models.CharField(verbose_name='Спикеры', max_length=255, blank=True), speaker = models.CharField(verbose_name=_(u'Спикеры'), max_length=255, blank=True),
place = models.CharField(verbose_name='Место проведения', max_length=255, blank=True) place = models.CharField(verbose_name=_(u'Место проведения'), max_length=255, blank=True)
) )
def to_dict(self): def to_dict(self):

@ -562,9 +562,10 @@ def send_to_organiser(request, slug):
email = request.POST.get('person') email = request.POST.get('person')
phone = request.POST.get('phone', '') phone = request.POST.get('phone', '')
question = request.POST.get('question', '') question = request.POST.get('question', '')
text = u"конференция: %s\n Контактное лицо:%s\nEmail: %s\nтелефон:%s\n вопрос:%s"%(exposition.name, name, email, data = {'expo_name': exposition.name, 'name': name, 'email': email,
phone, question) 'phone': phone, 'question': question}
msg = EmailMessage(u'Проплаченная конференция', text, settings.DEFAULT_FROM_EMAIL, [mail_send]) text = _(u"конференция: %(expo_name)s\n Контактное лицо:%(name)s\nEmail: %(email)s\nтелефон:%(phone)s\n вопрос:%(question)s") % data
msg = EmailMessage(_(u'Проплаченная конференция'), text, settings.DEFAULT_FROM_EMAIL, [mail_send])
msg.content_subtype = "html" msg.content_subtype = "html"
msg.send() msg.send()
redirect_to = '%sservice/thanks/'%exposition.get_permanent_url() redirect_to = '%sservice/thanks/'%exposition.get_permanent_url()

@ -2,6 +2,7 @@
from django import forms from django import forms
from django.conf import settings from django.conf import settings
from django.core.mail import send_mail from django.core.mail import send_mail
from django.utils.translation import ugettext as _
from place_exposition.models import PlaceExposition from place_exposition.models import PlaceExposition
from place_conference.models import PlaceConference from place_conference.models import PlaceConference
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -9,6 +10,7 @@ from haystack.query import SearchQuerySet, EmptySearchQuerySet
from hvad.forms import TranslatableModelForm from hvad.forms import TranslatableModelForm
from models import Page from models import Page
class PlaceSearchForm(forms.Form): class PlaceSearchForm(forms.Form):
q = forms.CharField(label=_(u'Поиск'), required=False) q = forms.CharField(label=_(u'Поиск'), required=False)
w = forms.CharField(label=_(u'Где'), required=False) w = forms.CharField(label=_(u'Где'), required=False)

@ -2,6 +2,7 @@
from django.contrib.syndication.views import Feed from django.contrib.syndication.views import Feed
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.db import models from django.db import models
from django.utils.translation import ugettext as _
from exposition.models import Exposition from exposition.models import Exposition
import copy import copy
@ -18,9 +19,9 @@ EXPO_ON_PAGE = 10
# nearest expositions at all # nearest expositions at all
class LatestExpositions(Feed): class LatestExpositions(Feed):
title = u"Ближайшие выставки на expomap.ru" title = _(u"Ближайшие выставки на expomap.ru")
link = '/rss/latest/' link = '/rss/latest/'
description = u'Подписывайтесь на наш RSS-канал' description = _(u'Подписывайтесь на наш RSS-канал')
def items(self): def items(self):
return Exposition.enable.upcoming()[:EXPO_ON_PAGE] return Exposition.enable.upcoming()[:EXPO_ON_PAGE]
@ -44,7 +45,7 @@ class CountryFeeds(Feed):
return get_object_or_404(Country, url=slug) return get_object_or_404(Country, url=slug)
def title(self, obj): def title(self, obj):
return u"Ближайшие выставки %s:" % obj.inflect return _(u"Ближайшие выставки %(obj)s:") % {'obj': obj.inflect}
def link(self,obj): def link(self,obj):
return obj.get_permanent_url() return obj.get_permanent_url()
@ -63,7 +64,7 @@ class CityFeeds(Feed):
return get_object_or_404(City, url=slug) return get_object_or_404(City, url=slug)
def title(self, obj): def title(self, obj):
return u"Ближайшие выставки в %s: " % obj.inflect return _(u"Ближайшие выставки в %(obj)s: ") % {'obj': obj.inflect}
def link(self,obj): def link(self,obj):
return obj.get_permanent_url() return obj.get_permanent_url()
@ -82,7 +83,7 @@ class ThemeFeeds(Feed):
return get_object_or_404(Theme, url=slug) return get_object_or_404(Theme, url=slug)
def title(self, obj): def title(self, obj):
return u"Ближайшие выставки %s: " % obj.inflect return _(u"Ближайшие выставки %(obj)s: ") % {'obj': obj.inflect}
def link(self,obj): def link(self,obj):
return obj.url return obj.url

@ -4,7 +4,7 @@ from django.views.generic import TemplateView
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.http import HttpResponse from django.http import HttpResponse
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext as _
class SeminarLendingView(TemplateView): class SeminarLendingView(TemplateView):
@ -14,30 +14,32 @@ class SeminarLendingView(TemplateView):
def send_to_organiser(request): def send_to_organiser(request):
mail_send = 'expomap@mail.ru' mail_send = 'expomap@mail.ru'
fname = request.POST.get('name') data = {
lname = request.POST.get('surname') 'fname': request.POST.get('name'),
email = request.POST.get('email', '') 'lname': request.POST.get('surname'),
company = request.POST.get('company', '') 'email': request.POST.get('email', ''),
office = request.POST.get('office', '') 'company': request.POST.get('company', ''),
phone = request.POST.get('phone', '') 'office': request.POST.get('office', ''),
'phone': request.POST.get('phone', ''),
}
title = request.POST.get('type', '') title = request.POST.get('type', '')
text = u"""Имя: %s; text = _(u"""Имя: %(fname)s;
Фамилия:%s; Фамилия:%(lname)s;
Email: %s; Email: %(email)s;
Телефон: %s; Телефон: %(phone)s;
компния:%s; компния: %(company)s;
должность: %s"""%(fname, lname, email, phone, company, office) должность: %(office)s""") % data
msg = EmailMessage(title, text, settings.DEFAULT_FROM_EMAIL, [mail_send]) msg = EmailMessage(title, text, settings.DEFAULT_FROM_EMAIL, [mail_send])
msg.content_subtype = "html" msg.content_subtype = "html"
msg.send() msg.send()
redirect_to = '/service/thanks/' redirect_to = '/service/thanks/'
if title.endswith(u'семинар'): if title.endswith(u'семинар'):
message = u"""Мы получили Ваш запрос и очень рады, что Вам интересно участие в семинаре Expomap. Если места еще есть, мы пришлем Вам приглашение на указанную Вами электронную почту. message = _(u"""Мы получили Ваш запрос и очень рады, что Вам интересно участие в семинаре Expomap. Если места еще есть, мы пришлем Вам приглашение на указанную Вами электронную почту.
Увидимся на welcome-coffee """ Увидимся на welcome-coffee """)
else: else:
message = u"""Благодарим за интерес к нашему семинару! За несколько дней до мероприятия мы пришлем Вам ссылку для подключения к онлайн-трансляции!""" message = _(u"""Благодарим за интерес к нашему семинару! За несколько дней до мероприятия мы пришлем Вам ссылку для подключения к онлайн-трансляции!""")
return HttpResponse(json.dumps({'success':True, 'redirect_to': redirect_to, 'message': message}), content_type='application/json') return HttpResponse(json.dumps({'success':True, 'redirect_to': redirect_to, 'message': message}), content_type='application/json')

@ -5,6 +5,8 @@ from ckeditor.widgets import CKEditorWidget
from tinymce.widgets import TinyMCE from tinymce.widgets import TinyMCE
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.utils.translation import ugettext as _
#models #models
from models import Country, City from models import Country, City
from directories.models import Language, Currency, Iata from directories.models import Language, Currency, Iata
@ -42,20 +44,20 @@ class CountryForm(forms.Form):
save function saves data in Country object. If it doesnt exist create new object save function saves data in Country object. If it doesnt exist create new object
""" """
# #
currency = forms.ModelMultipleChoiceField(label='Валюты', queryset=Currency.objects.all(), required=False) currency = forms.ModelMultipleChoiceField(label=_(u'Валюты'), queryset=Currency.objects.all(), required=False)
language = forms.ModelMultipleChoiceField(label='Языки', queryset=Language.objects.all(), required=False) language = forms.ModelMultipleChoiceField(label=_(u'Языки'), queryset=Language.objects.all(), required=False)
# #
population = forms.CharField(label='Население(млн)', required=False, population = forms.CharField(label=_(u'Население(млн)'), required=False,
widget=forms.TextInput(attrs={'placeholder':'Население(млн)'})) widget=forms.TextInput(attrs={'placeholder':_(u'Население(млн)')}))
teritory = forms.CharField(label='Территория(км2)', required=False, teritory = forms.CharField(label='Территория(км2)', required=False,
widget=forms.TextInput(attrs={'placeholder':'Територия(км2)'}))# km2 widget=forms.TextInput(attrs={'placeholder':_(u'Територия(км2)')}))# km2
timezone = forms.ChoiceField(label='Часовые пояса', required=False, choices=tz, initial=99) timezone = forms.ChoiceField(label=_(u'Часовые пояса'), required=False, choices=tz, initial=99)
phone_code = forms.CharField(label='Код страны', required=False, phone_code = forms.CharField(label=_(u'Код страны'), required=False,
widget=forms.TextInput(attrs={'placeholder':'Код страны'})) widget=forms.TextInput(attrs={'placeholder':_(u'Код страны')}))
time_delivery = forms.CharField(label='Срок выдачи', required=False, time_delivery = forms.CharField(label=_(u'Срок выдачи'), required=False,
widget=forms.TextInput(attrs={'placeholder':'Срок выдачи'})) widget=forms.TextInput(attrs={'placeholder':_(u'Срок выдачи')}))
logo = forms.ImageField(label='Logo', required=False) logo = forms.ImageField(label=_(u'Logo'), required=False)
#services = forms.MultipleChoiceField(label='Сервисы', required=False, choices=); #services = forms.MultipleChoiceField(label='Сервисы', required=False, choices=);
#field for comparing tmp files #field for comparing tmp files
@ -82,33 +84,33 @@ class CountryForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=False, widget=CKEditorWidget)
self.fields['transport_%s' % code] = forms.CharField(label='Транспорт', required=False, widget=CKEditorWidget) self.fields['transport_%s' % code] = forms.CharField(label=_(u'Транспорт'), required=False, widget=CKEditorWidget)
#vis inf #vis inf
self.fields['rules_%s' % code] = forms.CharField(label='Правила въезда', required=False, widget=CKEditorWidget()) self.fields['rules_%s' % code] = forms.CharField(label=_(u'Правила въезда'), required=False, widget=CKEditorWidget())
self.fields['documents_%s' % code] = forms.CharField(label='Документы', required=False, widget=CKEditorWidget()) self.fields['documents_%s' % code] = forms.CharField(label=_(u'Документы'), required=False, widget=CKEditorWidget())
self.fields['consulate_%s' % code] = forms.CharField(label='Консульство', required=False, widget=CKEditorWidget()) self.fields['consulate_%s' % code] = forms.CharField(label=_(u'Консульство'), required=False, widget=CKEditorWidget())
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
# check if exists cities connected with country # check if exists cities connected with country
countries = City.objects.language().filter(country = country_id).order_by('name') countries = City.objects.language().filter(country = country_id).order_by('name')
countries_list = [(item.id, item.name) for item in countries] countries_list = [(item.id, item.name) for item in countries]
if country_id == None or len(countries)==0: if country_id == None or len(countries)==0:
self.fields['capital'] = forms.ChoiceField(label='Столица',choices=((None,'Нет городов в стране'),), required=False, self.fields['capital'] = forms.ChoiceField(label=_(u'Столица'),choices=((None,_(u'Нет городов в стране')),), required=False,
widget=forms.Select(attrs={'disabled' : True})) widget=forms.Select(attrs={'disabled' : True}))
self.fields['big_cities'] = forms.MultipleChoiceField(label='Большие города',choices=((None,'Нет городов в стране'),), required=False, self.fields['big_cities'] = forms.MultipleChoiceField(label=_(u'Большие города'),choices=((None,_(u'Нет городов в стране')),), required=False,
widget=forms.Select(attrs={'disabled' : True})) widget=forms.Select(attrs={'disabled' : True}))
else: else:
self.fields['capital'] = forms.ChoiceField(label='Столица', choices=countries_list, self.fields['capital'] = forms.ChoiceField(label=_(u'Столица'), choices=countries_list,
required=False) required=False)
self.fields['big_cities'] = forms.MultipleChoiceField(label='Большие города', choices=countries_list, self.fields['big_cities'] = forms.MultipleChoiceField(label=_(u'Большие города'), choices=countries_list,
required=False) required=False)
def save(self, id=None): def save(self, id=None):
@ -181,7 +183,7 @@ class CountryForm(forms.Form):
if phone_code.isdigit(): if phone_code.isdigit():
return phone_code return phone_code
else: else:
raise ValidationError('Введите правильный код страны') raise ValidationError(_(u'Введите правильный код страны'))
def clean_population(self): def clean_population(self):
@ -195,7 +197,7 @@ class CountryForm(forms.Form):
elif population.isdigit() and population > 0: elif population.isdigit() and population > 0:
return int(population) return int(population)
else: else:
raise ValidationError('Введите правильное население') raise ValidationError(_(u'Введите правильное население'))
def clean_teritory(self): def clean_teritory(self):
""" """

@ -90,7 +90,7 @@ class Country(TranslatableModel):
# inflect name for russian language. example- в Росии # inflect name for russian language. example- в Росии
inflect = models.CharField(verbose_name=_(u'Склонение'), max_length=255, blank=True) inflect = models.CharField(verbose_name=_(u'Склонение'), max_length=255, blank=True)
area = models.ForeignKey(Area, verbose_name=_(u'Географическая зона')) area = models.ForeignKey(Area, verbose_name=_(u'Географическая зона'))
logo = models.ImageField(verbose_name='Logo', upload_to='country/logo/', blank=True, max_length=255) logo = models.ImageField(verbose_name=_(u'Logo'), upload_to='country/logo/', blank=True, max_length=255)
big_cities = models.ManyToManyField(City, verbose_name=_(u'Большые города'), blank=True, null=True, related_name='cities') big_cities = models.ManyToManyField(City, verbose_name=_(u'Большые города'), blank=True, null=True, related_name='cities')
capital = models.ForeignKey(City, verbose_name=_(u'Столица'), blank=True, null=True, on_delete=models.PROTECT, related_name='capital') capital = models.ForeignKey(City, verbose_name=_(u'Столица'), blank=True, null=True, on_delete=models.PROTECT, related_name='capital')
language = models.ManyToManyField(Language, blank=True, null=True) language = models.ManyToManyField(Language, blank=True, null=True)

@ -19,7 +19,7 @@ class MessageAdminForm(forms.ModelForm):
Custom AdminForm to enable messages to groups and all users. Custom AdminForm to enable messages to groups and all users.
""" """
group = forms.ChoiceField(label=_('group'), required=False, group = forms.ChoiceField(label=_('group'), required=False,
help_text=_('Creates the message optionally for all users or a group of users.')) help_text=_(_(u'Creates the message optionally for all users or a group of users.')))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(MessageAdminForm, self).__init__(*args, **kwargs) super(MessageAdminForm, self).__init__(*args, **kwargs)

@ -9,7 +9,7 @@ from country.models import Country, Area
class ContactSettingsForm(forms.ModelForm): class ContactSettingsForm(forms.ModelForm):
city = forms.CharField(label=u'Город', widget=forms.HiddenInput() ,required=False) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput() ,required=False)
periodic = forms.ChoiceField(choices=ContactSettings.PERIODIC_CHOICES, periodic = forms.ChoiceField(choices=ContactSettings.PERIODIC_CHOICES,
label=_(u'Периодичность отправки')) label=_(u'Периодичность отправки'))
first_name = forms.CharField(label=_('first name')) first_name = forms.CharField(label=_('first name'))
@ -65,8 +65,8 @@ import xlrd
from theme.models import Theme from theme.models import Theme
class MailingListForm(forms.ModelForm): class MailingListForm(forms.ModelForm):
excel_file = forms.FileField(label='Импортировать подписчиков', required=False) excel_file = forms.FileField(label=_(u'Импортировать подписчиков'), required=False)
theme_for_filter = forms.MultipleChoiceField(label=u'Тематики', required=False, theme_for_filter = forms.MultipleChoiceField(label=_(u'Тематики'), required=False,
choices=[(item.id, item.name) for item in Theme.objects.language().all()]) choices=[(item.id, item.name) for item in Theme.objects.language().all()])
class Meta: class Meta:
@ -92,7 +92,7 @@ class MailingListForm(forms.ModelForm):
class NewsletterForm(forms.ModelForm): class NewsletterForm(forms.ModelForm):
test_contacts = forms.ModelMultipleChoiceField(label=u'Тестовые контакты', required=False, test_contacts = forms.ModelMultipleChoiceField(label=_(u'Тестовые контакты'), required=False,
queryset=Contact.objects.filter(tester=True)) queryset=Contact.objects.filter(tester=True))
content = forms.CharField(label=_('content'), widget=CKEditorWidget(config_name='newsletters')) content = forms.CharField(label=_('content'), widget=CKEditorWidget(config_name='newsletters'))

@ -129,11 +129,11 @@ class ContactFilterForm(forms.Form):
label="Список рассылки", label="Список рассылки",
required=False required=False
) )
created_from = forms.CharField(max_length=255, label="Создан с", required=False) created_from = forms.CharField(max_length=255, label=_(u"Создан с"), required=False)
created_to = forms.CharField(max_length=255, label="Создан по", required=False) created_to = forms.CharField(max_length=255, label=_(u"Создан по"), required=False)
not_active = forms.BooleanField(label="Не подтверждена подписка", required=False) not_active = forms.BooleanField(label=_(u"Не подтверждена подписка"), required=False)
not_valid = forms.BooleanField(label="Неалидный Email", required=False) not_valid = forms.BooleanField(label=_(u"Неалидный Email"), required=False)
not_subscriber = forms.BooleanField(label="Отписался", required=False) not_subscriber = forms.BooleanField(label=_(u"Отписался"), required=False)
def filter(self): def filter(self):
title = 'contact list ' title = 'contact list '
@ -181,14 +181,14 @@ class ContactFilterForm(forms.Form):
import xlrd import xlrd
COUNTRY_CHOICES = [(c.id, c.name) for c in list(set(Country.objects.language('ru').all()))] COUNTRY_CHOICES = [(c.id, c.name) for c in list(set(Country.objects.language('ru').all()))]
COUNTRY_CHOICES.insert(0, ('', 'Страна')) COUNTRY_CHOICES.insert(0, ('', _(u'Страна')))
class ContactImportForm(forms.Form): class ContactImportForm(forms.Form):
excel_file = forms.FileField(label='Выберите файл') excel_file = forms.FileField(label=_(u'Выберите файл'))
activated = forms.BooleanField(label="Активные", required=False) activated = forms.BooleanField(label=_(u"Активные"), required=False)
is_tester = forms.BooleanField(label="Тестовые", required=False) is_tester = forms.BooleanField(label=_(u"Тестовые"), required=False)
country = forms.ChoiceField(label="Страна", choices=COUNTRY_CHOICES, required=False) country = forms.ChoiceField(label=_(u"Страна"), choices=COUNTRY_CHOICES, required=False)
def save(self): def save(self):
data = self.cleaned_data data = self.cleaned_data
@ -375,7 +375,7 @@ class PopupCountFilter(forms.Form):
class MailingStatusFilter(forms.Form): class MailingStatusFilter(forms.Form):
status = forms.ChoiceField(choices=[('', u'Не выбрано')] + [(item[0], item[1]) for item in ContactMailingStatus.STATUS_CHOICES], status = forms.ChoiceField(choices=[('', _(u'Не выбрано'))] + [(item[0], item[1]) for item in ContactMailingStatus.STATUS_CHOICES],
required=False) required=False)
email = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': 'Email'})) email = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': 'Email'}))

@ -1,3 +1,4 @@
{% load i18n %}
<body style="margin: 0; padding: 0; min-height: 100%; background: #f4f2ee;"> <body style="margin: 0; padding: 0; min-height: 100%; background: #f4f2ee;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%" bgcolor="#f4f2ee" style="font-family: Arial, sans-serif; background: #f4f2ee;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%" bgcolor="#f4f2ee" style="font-family: Arial, sans-serif; background: #f4f2ee;">
<tr> <tr>
@ -9,15 +10,15 @@
<div class="logo"> <div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="/"> <a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="/">
<img src="cid:logo" alt="Expomap.ru" /> <img src="cid:logo" alt="Expomap.ru" />
<b style="display: block; padding-left: 67px; margin-top: -5px;">Выставки, конференции, семинары</b> <b style="display: block; padding-left: 67px; margin-top: -5px;">{% trans "Выставки, конференции, семинары" %}</b>
</a> </a>
</div> </div>
</td> </td>
<td style="vertical-align: top; padding-top: 22px;"> <td style="vertical-align: top; padding-top: 22px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;"> <ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="/expo/">СОБЫТИЯ</a></li> <li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="/expo/">{% trans "СОБЫТИЯ" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/places/">МЕСТА</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/places/">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/members/">УЧАСТНИКИ</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/members/">{% trans "УЧАСТНИКИ" %}</a></li>
</ul> </ul>
<ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;"> <ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;">
@ -35,7 +36,7 @@
{% with events=events %} {% with events=events %}
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;"> <table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr> <tr>
<td style="padding: 20px 0 0;"><a style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px;" href="/expo/search/?{% for th in themes %}th={{ th.id }}&{% endfor %}{% if place %}co={{ place.id }}&{% endif %}">Выставки{% if place %} {{ place.inflect }}{% endif %} {% if themes|length == 1 %}по тематике:<b style="display: block; font-size: 26px;">{{ themes.0.name }}</b>{% endif %}</a></td> <td style="padding: 20px 0 0;"><a style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px;" href="/expo/search/?{% for th in themes %}th={{ th.id }}&{% endfor %}{% if place %}co={{ place.id }}&{% endif %}">{% trans "Выставки" %}{% if place %} {{ place.inflect }}{% endif %} {% if themes|length == 1 %}{% trans "по тематике" %}:<b style="display: block; font-size: 26px;">{{ themes.0.name }}</b>{% endif %}</a></td>
</tr> </tr>
<tr> <tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;"> <td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -65,7 +66,7 @@
</table> </table>
<div class="more" style="text-align: center;"> <div class="more" style="text-align: center;">
<a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 11px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="/expo/search/?{% for th in themes %}th={{ th.id }}&{% endfor %}{% if place %}co={{ place.id }}&{% endif %}">посмотреть все события</a> <a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 11px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="/expo/search/?{% for th in themes %}th={{ th.id }}&{% endfor %}{% if place %}co={{ place.id }}&{% endif %}">{% trans "посмотреть все события" %}</a>
</div> </div>
</td> </td>
@ -77,7 +78,7 @@
{% if news %} {% if news %}
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;"> <table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr> <tr>
<td style="padding: 20px 0 0;"><a style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px;" href="/news/">Новости событий</a></td> <td style="padding: 20px 0 0;"><a style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px;" href="/news/">{% trans "Новости событий" %}</a></td>
</tr> </tr>
<tr> <tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;"> <td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -109,7 +110,7 @@
</table> </table>
<div class="more" style="text-align: center;"> <div class="more" style="text-align: center;">
<a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 11px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="/news/">посмотреть все новости</a> <a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 11px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="/news/">{% trans "посмотреть все новости" %}</a>
</div> </div>
</td> </td>
@ -119,7 +120,7 @@
{% if blogs %} {% if blogs %}
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;"> <table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr> <tr>
<td style="padding: 20px 0 0;"><a style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px;" href="/blogs/">Аналитика для профессионалов</a></td> <td style="padding: 20px 0 0;"><a style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px;" href="/blogs/">{% trans "Аналитика для профессионалов" %}</a></td>
</tr> </tr>
<tr> <tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;"> <td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -162,9 +163,9 @@
</td> </td>
<td style="vertical-align: top; padding: 25px 0 5px;"> <td style="vertical-align: top; padding: 25px 0 5px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 14px; line-height: 15px; font-weight: bold;"> <ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 14px; line-height: 15px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="/expo/">СОБЫТИЯ</a></li> <li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="/expo/">{% trans "СОБЫТИЯ" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/places/">МЕСТА</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/places/">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/members/">УЧАСТНИКИ</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/members/">{% trans "УЧАСТНИКИ" %}</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>

@ -1,3 +1,5 @@
{% load i18n %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xml:lang="{{ LANGUAGE_CODE }}" lang="{{ LANGUAGE_CODE }}" version="-//W3C//DTD XHTML 1.1//EN" xmlns="http://www.w3.org/1999/xhtml"> <html xml:lang="{{ LANGUAGE_CODE }}" lang="{{ LANGUAGE_CODE }}" version="-//W3C//DTD XHTML 1.1//EN" xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
@ -5,10 +7,10 @@
<meta name="language" content="{{ LANGUAGE_CODE }}" /> <meta name="language" content="{{ LANGUAGE_CODE }}" />
<meta name="description" content="{% block meta-description %}Emencia Django Newsletter for sending newsletter.{% endblock %}" /> <meta name="description" content="{% block meta-description %}Emencia Django Newsletter for sending newsletter.{% endblock %}" />
<meta name="author" content="Fantomas42" /> <meta name="author" content="Fantomas42" />
<title>Emencia Django Newsletter - {% block title %}{% endblock %}</title> <title>{% trans "Emencia Django Newsletter" %} - {% block title %}{% endblock %}</title>
</head> </head>
<body> <body>
<h1>Emencia Django Newsletter</h1> <h1>{% trans "Emencia Django Newsletter" %}</h1>
{% block content %} {% block content %}
{% endblock %} {% endblock %}
</body> </body>

@ -1,17 +1,19 @@
{% extends 'client/blank.html' %} {% extends 'client/blank.html' %}
{% load i18n %}
{% block title %}Отписаться{% endblock %}
{% block title %}{% trans "Отписаться" %}{% endblock %}
{% block content %} {% block content %}
<div class="contactmore"> <div class="contactmore">
<div class="row"> <div class="row">
{% if already_unsubscribed %} {% if already_unsubscribed %}
<div class="small-12 large-8 medium-8 columns"> <div class="small-12 large-8 medium-8 columns">
<h2>Вы уже отписаны отэтой рассылки</h2> <h2>{% trans "Вы уже отписаны отэтой рассылки" %}</h2>
</div> </div>
{% else %} {% else %}
<div class="small-12 large-8 medium-8 columns"> <div class="small-12 large-8 medium-8 columns">
<h2>Отписаться</h2> <h2>{% trans "Отписаться" %}</h2>
<div class="section-title-bottom-line"></div> <div class="section-title-bottom-line"></div>
<div id="sendstatus"></div> <div id="sendstatus"></div>
<div id="contactform"> <div id="contactform">

@ -3,7 +3,7 @@
<table border="0" cellpadding="0" cellspacing="0" style="font-size: 12px; line-height: 15px; font-family: Arial, sans-serif; background: #f4f2ee;" width="100%" bgcolor="#f4f2ee" > <table border="0" cellpadding="0" cellspacing="0" style="font-size: 12px; line-height: 15px; font-family: Arial, sans-serif; background: #f4f2ee;" width="100%" bgcolor="#f4f2ee" >
<tbody> <tbody>
<tr> <tr>
<td style="vertical-align: top; padding: 15px 0 15px; text-align: center;">Чтобы отписаться от этой рассылки, перейдите <a href="{% if uidb36 and token %}http://{{ domain }}{% url 'newsletter_mailinglist_unsubscribe' slug=newsletter.slug uidb36=uidb36 token=token %}{% else %}#{% endif %}">по ссылке</a>. <td style="vertical-align: top; padding: 15px 0 15px; text-align: center;">{% trans "Чтобы отписаться от этой рассылки, перейдите" %} <a href="{% if uidb36 and token %}http://{{ domain }}{% url 'newsletter_mailinglist_unsubscribe' slug=newsletter.slug uidb36=uidb36 token=token %}{% else %}#{% endif %}">{% trans "по ссылке" %}</a>.
<td style="vertical-align: top; padding: 15px 0 15px; color: #a2a2a2; text-align: left;">&copy; 2008 &mdash; 2015 <a href="#" style="color: #a2a2a2; text-decoration: none;">Expomap.ru</a></td> <td style="vertical-align: top; padding: 15px 0 15px; color: #a2a2a2; text-align: left;">&copy; 2008 &mdash; 2015 <a href="#" style="color: #a2a2a2; text-decoration: none;">Expomap.ru</a></td>
</tr> </tr>
</tbody> </tbody>

@ -267,7 +267,7 @@ def send_test_newsletter(request, pk):
except HTMLParseError: except HTMLParseError:
return HttpResponse(_('Unable send newsletter, due to errors within HTML.')) return HttpResponse(_('Unable send newsletter, due to errors within HTML.'))
else: else:
return HttpResponse(u'Нет тестовых контактов') return HttpResponse(_(u'Нет тестовых контактов'))
redirect = request.META.get('HTTP_REFERER', '/admin/newsletter/newsletter/all/') redirect = request.META.get('HTTP_REFERER', '/admin/newsletter/newsletter/all/')
return HttpResponseRedirect(redirect) return HttpResponseRedirect(redirect)

@ -7,6 +7,7 @@ from django.contrib import messages
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.views.generic import DetailView, TemplateView from django.views.generic import DetailView, TemplateView
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext as _
from emencia.django.newsletter.utils.tokens import untokenize from emencia.django.newsletter.utils.tokens import untokenize
from emencia.django.newsletter.models import Newsletter, MailingList, ContactMailingStatus, Contact, ContactSettings from emencia.django.newsletter.models import Newsletter, MailingList, ContactMailingStatus, Contact, ContactSettings
@ -107,7 +108,7 @@ def unsubscription_handle(request):
form.save_additional_fields(setting) form.save_additional_fields(setting)
if form.cleaned_data.get('get_announce'): if form.cleaned_data.get('get_announce'):
messages.add_message(request, messages.INFO, u'Настройки вашой подписки успешно сохранены') messages.add_message(request, messages.INFO, _(u'Настройки вашой подписки успешно сохранены'))
else: else:
contact.subscriber = False contact.subscriber = False
contact.save() contact.save()

@ -78,17 +78,17 @@ class AbstractList(ListView):
class UrlList(AbstractList): class UrlList(AbstractList):
model = URL model = URL
verbose = u'Список урлов' verbose = _(u'Список урлов')
class BannerGroupList(AbstractList): class BannerGroupList(AbstractList):
model = BannerGroup model = BannerGroup
verbose = u'Список груп' verbose = _(u'Список груп')
class BannerList(AbstractList): class BannerList(AbstractList):
model = Banner model = Banner
verbose = u'Список банеров' verbose = _(u'Список банеров')
template_name = 'admin/expobanner/banner_list.html' template_name = 'admin/expobanner/banner_list.html'
def get_queryset(self): def get_queryset(self):
@ -103,7 +103,7 @@ class BannerList(AbstractList):
class LinkList(AbstractList): class LinkList(AbstractList):
model = Banner model = Banner
verbose = u'Список ссылок' verbose = _(u'Список ссылок')
template_name = 'admin/expobanner/link_list.html' template_name = 'admin/expobanner/link_list.html'
def get_queryset(self): def get_queryset(self):

@ -15,7 +15,7 @@ from theme.models import Tag, Theme
class UrlCreateForm(forms.ModelForm): class UrlCreateForm(forms.ModelForm):
verbose = u'Создать урл' verbose = _(u'Создать урл')
class Meta: class Meta:
model = URL model = URL
@ -23,14 +23,14 @@ class UrlCreateForm(forms.ModelForm):
class BannerCreateGroupForm(forms.ModelForm): class BannerCreateGroupForm(forms.ModelForm):
verbose = u'Создать групу' verbose = _(u'Создать групу')
class Meta: class Meta:
model = BannerGroup model = BannerGroup
exclude = ['created_at', 'updated_at', 'speed'] exclude = ['created_at', 'updated_at', 'speed']
class BannerGroupUpdateForm(BannerCreateGroupForm): class BannerGroupUpdateForm(BannerCreateGroupForm):
verbose = u'Изменить групу' verbose = _(u'Изменить групу')
class Meta: class Meta:
model = BannerGroup model = BannerGroup
@ -38,7 +38,7 @@ class BannerGroupUpdateForm(BannerCreateGroupForm):
class BannerCreateForm(forms.ModelForm): class BannerCreateForm(forms.ModelForm):
verbose = u'Создать банер' verbose = _(u'Создать банер')
text = forms.CharField(label=u'Текст', required=False, widget=CKEditorWidget) text = forms.CharField(label=u'Текст', required=False, widget=CKEditorWidget)
class Meta: class Meta:
model = Banner model = Banner
@ -46,7 +46,7 @@ class BannerCreateForm(forms.ModelForm):
class BannerLinkCreateForm(forms.ModelForm): class BannerLinkCreateForm(forms.ModelForm):
verbose = u'Отслеживаемую ссылку' verbose = _(u'Отслеживаемую ссылку')
class Meta: class Meta:
model = Banner model = Banner
@ -64,7 +64,7 @@ class BannerLinkCreateForm(forms.ModelForm):
class ClientStatForm(forms.Form): class ClientStatForm(forms.Form):
stat_pswd = forms.CharField(label=u'Введите пароль:') stat_pswd = forms.CharField(label=_(u'Введите пароль:'))
def check_pass(self, obj): def check_pass(self, obj):
pswd = self.cleaned_data['stat_pswd'] pswd = self.cleaned_data['stat_pswd']
@ -72,9 +72,9 @@ class ClientStatForm(forms.Form):
class BasePaidCreateForm(forms.ModelForm): class BasePaidCreateForm(forms.ModelForm):
tickets = forms.URLField(label=u'Линк на билеты') tickets = forms.URLField(label=_(u'Линк на билеты'))
participation = forms.URLField(label=u'Линк на участие') participation = forms.URLField(label=_(u'Линк на участие'))
official = forms.URLField(label=u'Линк на официальный сайт') official = forms.URLField(label=_(u'Линк на официальный сайт'))
class Meta: class Meta:
model = Paid model = Paid
@ -111,8 +111,8 @@ class BasePaidCreateForm(forms.ModelForm):
class PaidCreateForm(BasePaidCreateForm): class PaidCreateForm(BasePaidCreateForm):
kind = 1 kind = 1
verbose = u'Создать проплаченую выставку' verbose = _(u'Создать проплаченую выставку')
exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput()) exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput())
def get_target_obj(self): def get_target_obj(self):
return self.cleaned_data['exposition'] return self.cleaned_data['exposition']
@ -122,14 +122,14 @@ class PaidCreateForm(BasePaidCreateForm):
try: try:
expo = Exposition.objects.get(id=expo_id) expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist: except Exposition.DoesNotExist:
raise forms.ValidationError(u'Такой выставки не существует') raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo return expo
class PaidConfCreateForm(BasePaidCreateForm): class PaidConfCreateForm(BasePaidCreateForm):
kind = 2 kind = 2
verbose = u'Создать проплаченую конференцию' verbose = _(u'Создать проплаченую конференцию')
conference = forms.CharField(label=u'Конференция', widget=forms.HiddenInput()) conference = forms.CharField(label=_(u'Конференция'), widget=forms.HiddenInput())
def get_target_obj(self): def get_target_obj(self):
return self.cleaned_data['conference'] return self.cleaned_data['conference']
@ -139,13 +139,13 @@ class PaidConfCreateForm(BasePaidCreateForm):
try: try:
expo = Conference.objects.get(id=conference_id) expo = Conference.objects.get(id=conference_id)
except Conference.DoesNotExist: except Conference.DoesNotExist:
raise forms.ValidationError(u'Такой конференции не существует') raise forms.ValidationError(_(u'Такой конференции не существует'))
return expo return expo
class MainCreateForm(forms.ModelForm): class MainCreateForm(forms.ModelForm):
verbose = u'Добавить выставку на главную' verbose = _(u'Добавить выставку на главную')
exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput()) exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput())
class Meta: class Meta:
model = MainPage model = MainPage
@ -169,13 +169,13 @@ class MainCreateForm(forms.ModelForm):
try: try:
expo = Exposition.objects.get(id=expo_id) expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist: except Exposition.DoesNotExist:
raise forms.ValidationError(u'Такой выставки не существует') raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo return expo
class MainConfCreateForm(forms.ModelForm): class MainConfCreateForm(forms.ModelForm):
verbose = u'Добавить конференцию на главную' verbose = _(u'Добавить конференцию на главную')
conf = forms.CharField(label=u'Конференция', widget=forms.HiddenInput()) conf = forms.CharField(label=_(u'Конференция'), widget=forms.HiddenInput())
class Meta: class Meta:
model = MainPage model = MainPage
@ -199,14 +199,14 @@ class MainConfCreateForm(forms.ModelForm):
try: try:
conf = Conference.objects.get(id=conf_id) conf = Conference.objects.get(id=conf_id)
except Conference.DoesNotExist: except Conference.DoesNotExist:
raise forms.ValidationError(u'Такой конференции не существует') raise forms.ValidationError(_(u'Такой конференции не существует'))
return conf return conf
class PaidUpdateForm(forms.ModelForm): class PaidUpdateForm(forms.ModelForm):
tickets = forms.URLField(label=u'Линк на билеты') tickets = forms.URLField(label=_(u'Линк на билеты'))
participation = forms.URLField(label=u'Линк на участие') participation = forms.URLField(label=_(u'Линк на участие'))
official = forms.URLField(label=u'Линк на официальный сайт') official = forms.URLField(label=_(u'Линк на официальный сайт'))
class Meta: class Meta:
model = Paid model = Paid
@ -308,10 +308,10 @@ class TopMixinForm(forms.ModelForm, FieldsetMixin):
return top return top
class TopCreateForm(TopMixinForm): class TopCreateForm(TopMixinForm):
verbose = u'Создать выставку в топе' verbose = _(u'Создать выставку в топе')
exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput()) exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput())
country = forms.MultipleChoiceField(label=u'Страна', choices=[('', ' ')] + [(c.id, c.name) for c in Country.objects.all()], required=False) country = forms.MultipleChoiceField(label=_(u'Страна'), choices=[('', ' ')] + [(c.id, c.name) for c in Country.objects.all()], required=False)
theme = forms.MultipleChoiceField(label=u'Тематика', required=False, theme = forms.MultipleChoiceField(label=_(u'Тематика'), required=False,
choices=[('', ' ')] + [(item.id, item.name) for item in Theme.objects.language().all()]) choices=[('', ' ')] + [(item.id, item.name) for item in Theme.objects.language().all()])
#excluded_cities = forms.CharField(label=u'Город', widget=forms.HiddenInput(), required=False) #excluded_cities = forms.CharField(label=u'Город', widget=forms.HiddenInput(), required=False)
#excluded_tags = forms.CharField(label=u'Тег', widget=forms.HiddenInput(), required=False) #excluded_tags = forms.CharField(label=u'Тег', widget=forms.HiddenInput(), required=False)
@ -356,9 +356,9 @@ class TopCreateForm(TopMixinForm):
try: try:
expo = Exposition.objects.get(id=expo_id) expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist: except Exposition.DoesNotExist:
raise forms.ValidationError(u'Такой выставки не существует') raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo return expo
class TopUpdateForm(TopMixinForm): class TopUpdateForm(TopMixinForm):
verbose = u'Изменить выставку' verbose = _(u'Изменить выставку')

@ -23,12 +23,12 @@ class URL(models.Model):
""" """
Model for urls or regex urls that can be used in banners representation Model for urls or regex urls that can be used in banners representation
""" """
title = models.CharField(verbose_name=u'Заголовок', max_length=256) title = models.CharField(verbose_name=_(u'Заголовок'), max_length=256)
url = models.CharField(verbose_name=u'URL or URL RegEx', max_length=2048) url = models.CharField(verbose_name=_(u'URL or URL RegEx'), max_length=2048)
regex = models.BooleanField(verbose_name=u'RegEx', default=False) regex = models.BooleanField(verbose_name=_(u'RegEx'), default=False)
sites = models.ManyToManyField(Site, related_name='site_urls', verbose_name=_('Sites'), null=True, blank=True) sites = models.ManyToManyField(Site, related_name='site_urls', verbose_name=_('Sites'), null=True, blank=True)
public = models.BooleanField(verbose_name=u'Активный', default=True) public = models.BooleanField(verbose_name=_(u'Активный'), default=True)
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True)
@ -51,13 +51,13 @@ class BannerGroup (models.Model):
""" """
place where banner can be show place where banner can be show
""" """
name = models.CharField(verbose_name=u'Имя', max_length=255) name = models.CharField(verbose_name=_(u'Имя'), max_length=255)
slug = models.SlugField(verbose_name=u'URL', unique=True) slug = models.SlugField(verbose_name=_(u'URL'), unique=True)
width = models.PositiveSmallIntegerField(verbose_name=u'Ширина', default=0) width = models.PositiveSmallIntegerField(verbose_name=_(u'Ширина'), default=0)
height = models.PositiveSmallIntegerField(verbose_name=u'Высота', default=0) height = models.PositiveSmallIntegerField(verbose_name=_(u'Высота'), default=0)
speed = models.PositiveSmallIntegerField(verbose_name=u'Скорость отображения', default=2000) speed = models.PositiveSmallIntegerField(verbose_name=_(u'Скорость отображения'), default=2000)
public = models.BooleanField(verbose_name=u'Активная', default=True) public = models.BooleanField(verbose_name=_(u'Активная'), default=True)
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True)
@ -85,19 +85,19 @@ class Banner(models.Model, StatMixin):
""" """
objects = BiasedManager() objects = BiasedManager()
title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True) title = models.CharField(verbose_name=_(u'Заголовок'), max_length=255, blank=True)
alt = models.CharField(verbose_name=_('Alt'), max_length=255) alt = models.CharField(verbose_name=_('Alt'), max_length=255)
text = models.TextField(verbose_name=u'Текст', blank=True, null=True) text = models.TextField(verbose_name=_(u'Текст'), blank=True, null=True)
img = models.FileField(verbose_name=u'Картинка', upload_to='expo_upload', blank=True, null=True) img = models.FileField(verbose_name=_(u'Картинка'), upload_to='expo_upload', blank=True, null=True)
url = models.CharField(verbose_name=u'URL', max_length=1024) url = models.CharField(verbose_name=_(u'URL'), max_length=1024)
fr = models.DateField(default=date.today()) fr = models.DateField(default=date.today())
to = models.DateField(blank=True, null=True) to = models.DateField(blank=True, null=True)
theme = models.ManyToManyField(Theme, blank=True, null=True, verbose_name=u'Тематика') theme = models.ManyToManyField(Theme, blank=True, null=True, verbose_name=_(u'Тематика'))
country = models.ManyToManyField(Country, blank=True, null=True, verbose_name=u'Страна') country = models.ManyToManyField(Country, blank=True, null=True, verbose_name=_(u'Страна'))
sort = models.PositiveSmallIntegerField(verbose_name=u'Сорт', default=500) sort = models.PositiveSmallIntegerField(verbose_name=_(u'Сорт'), default=500)
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=u'Место', null=True, blank=True) group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=_(u'Место'), null=True, blank=True)
often = models.PositiveSmallIntegerField( often = models.PositiveSmallIntegerField(
verbose_name=_('Often'), verbose_name=_('Often'),
help_text=_('A ten will display 10 times more often that a one.'), help_text=_('A ten will display 10 times more often that a one.'),
@ -114,7 +114,7 @@ class Banner(models.Model, StatMixin):
# for detecting popups # for detecting popups
cookie = models.CharField(max_length=30, blank=True, null=True, default=settings.DEFAULT_POPUP_COOKIE) cookie = models.CharField(max_length=30, blank=True, null=True, default=settings.DEFAULT_POPUP_COOKIE)
public = models.BooleanField(verbose_name=u'Активный', default=True) public = models.BooleanField(verbose_name=_(u'Активный'), default=True)
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True)
# password for clients # password for clients
@ -247,7 +247,7 @@ class Paid(models.Model, StatMixin):
catalog = models.ForeignKey(Banner, related_name='paid_catalog') catalog = models.ForeignKey(Banner, related_name='paid_catalog')
logo = models.ImageField(upload_to='expo-b/paid', blank=True) logo = models.ImageField(upload_to='expo-b/paid', blank=True)
organiser = models.CharField(max_length=100, blank=True) organiser = models.CharField(max_length=100, blank=True)
public = models.BooleanField(default=True, verbose_name=u'Активная') public = models.BooleanField(default=True, verbose_name=_(u'Активная'))
stat_pswd = models.CharField(max_length=16) stat_pswd = models.CharField(max_length=16)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
@ -291,17 +291,17 @@ class Top(models.Model, StatMixin):
) )
link = models.ForeignKey(Banner) link = models.ForeignKey(Banner)
catalog = models.CharField(max_length=16, verbose_name=u'Каталог для топа') catalog = models.CharField(max_length=16, verbose_name=_(u'Каталог для топа'))
position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция') position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=_(u'Позиция'))
theme = models.ManyToManyField('theme.Theme', blank=True, null=True, verbose_name=u'Тематики') theme = models.ManyToManyField('theme.Theme', blank=True, null=True, verbose_name=_(u'Тематики'))
excluded_tags = models.ManyToManyField('theme.Tag', blank=True, null=True, verbose_name=u'Исключить теги') excluded_tags = models.ManyToManyField('theme.Tag', blank=True, null=True, verbose_name=_(u'Исключить теги'))
country = models.ManyToManyField('country.Country', blank=True, null=True, verbose_name=u'Страны') country = models.ManyToManyField('country.Country', blank=True, null=True, verbose_name=_(u'Страны'))
cities = models.ManyToManyField('city.City', related_name='top_in_set', blank=True, null=True, verbose_name=_(u'Города')) cities = models.ManyToManyField('city.City', related_name='top_in_set', blank=True, null=True, verbose_name=_(u'Города'))
months = MonthMultiSelectField(_(u'Топ месяца'), blank=True, null=True, default=None, max_length=255,) months = MonthMultiSelectField(_(u'Топ месяца'), blank=True, null=True, default=None, max_length=255,)
years = models.PositiveSmallIntegerField(_(u'Топ года'), choices=YEARS, blank=True, null=True, default=None) years = models.PositiveSmallIntegerField(_(u'Топ года'), choices=YEARS, blank=True, null=True, default=None)
excluded_cities = models.ManyToManyField('city.City', blank=True, null=True, verbose_name=u'Исключить города') excluded_cities = models.ManyToManyField('city.City', blank=True, null=True, verbose_name=_(u'Исключить города'))
fr = models.DateField(default=date.today(), verbose_name=u'Начало') fr = models.DateField(default=date.today(), verbose_name=_(u'Начало'))
to = models.DateField(blank=True, null=True, verbose_name=u'Конец') to = models.DateField(blank=True, null=True, verbose_name=_(u'Конец'))
stat_pswd = models.CharField(max_length=16) stat_pswd = models.CharField(max_length=16)
objects = models.Manager() objects = models.Manager()
@ -335,8 +335,8 @@ class MainPage(models.Model, StatMixin):
events on main page info events on main page info
""" """
link = models.ForeignKey(Banner) link = models.ForeignKey(Banner)
position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция') position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=_(u'Позиция'))
public = models.BooleanField(default=True, verbose_name=u'Активная') public = models.BooleanField(default=True, verbose_name=_(u'Активная'))
stat_pswd = models.CharField(max_length=16) stat_pswd = models.CharField(max_length=16)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)

@ -7,6 +7,7 @@ from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from expobanner.models import Banner, Paid from expobanner.models import Banner, Paid
from expobanner.forms import ClientStatForm from expobanner.forms import ClientStatForm
from django.utils.translation import ugettext as _
@ -46,7 +47,7 @@ class BannerStat(FormMixin, DetailView):
self.request.session[obj.get_cookie_name()] = 1 self.request.session[obj.get_cookie_name()] = 1
return HttpResponseRedirect(self.get_success_url()) return HttpResponseRedirect(self.get_success_url())
else: else:
form.errors['stat_pswd'] = ErrorList([u'Неправильный пароль']) form.errors['stat_pswd'] = ErrorList([_(u'Неправильный пароль')])
return self.form_invalid(form) return self.form_invalid(form)
class PaidStat(BannerStat): class PaidStat(BannerStat):

@ -32,64 +32,64 @@ class ExpositionCreateForm(forms.Form):
save function saves data in Exposition object. If it doesnt exist create new object save function saves data in Exposition object. If it doesnt exist create new object
""" """
PERIODIC = ((0, u'Не выбрано'), (1.0, u'Ежегодно'), (2.0, u'2 раза в год'), (3.0, u'3 раза в год'), PERIODIC = ((0, _(u'Не выбрано')), (1.0, _(u'Ежегодно')), (2.0, _(u'2 раза в год')), (3.0, _(u'3 раза в год')),
(4.0, u'4 раза в год'), (5.0, u'5 раз в год'), (0.5, u'Раз в 2 года'),(0.33, u'Раз в 3 года'), (4.0, _(u'4 раза в год')), (5.0, _(u'5 раз в год')), (0.5, _(u'Раз в 2 года')),(0.33, _(u'Раз в 3 года')),
(0.25, u'Раз в 4 года'), (0.2, u'Раз в 5 лет')) (0.25, _(u'Раз в 4 года')), (0.2, _(u'Раз в 5 лет')))
public = [(item1, item2) for item1, item2 in BIT_AUDIENCE] public = [(item1, item2) for item1, item2 in BIT_AUDIENCE]
currencies = [(item, item) for item in CURRENCY] currencies = [(item, item) for item in CURRENCY]
data_begin = forms.DateField(label=u'Дата начала', input_formats=['%Y-%m-%d', '%d.%m.%Y']) data_begin = forms.DateField(label=_(u'Дата начала'), input_formats=['%Y-%m-%d', '%d.%m.%Y'])
data_end = forms.DateField(label=u'Дата окончания', input_formats=['%Y-%m-%d', '%d.%m.%Y']) data_end = forms.DateField(label=_(u'Дата окончания'), input_formats=['%Y-%m-%d', '%d.%m.%Y'])
logo = forms.ImageField(label='Logo', required=False) logo = forms.ImageField(label=_('Logo'), required=False)
#organiser = forms.MultipleChoiceField(label=u'Организаторы', required=False, #organiser = forms.MultipleChoiceField(label=u'Организаторы', required=False,
# choices=[(item.id, item.name) for item in Organiser.objects.language().all()]) # choices=[(item.id, item.name) for item in Organiser.objects.language().all()])
org = forms.CharField(required=False, label=u'Организатор') org = forms.CharField(required=False, label=_(u'Организатор'))
#company = forms.MultipleChoiceField(label=u'Компании', required=False, #company = forms.MultipleChoiceField(label=u'Компании', required=False,
# choices=[(item.id, item.name) for item in Company.objects.language().all()] ) # choices=[(item.id, item.name) for item in Company.objects.language().all()] )
country = forms.ChoiceField(label=u'Страна', choices=[(c.id, c.name) for c in Country.objects.all()]) country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()])
theme = forms.MultipleChoiceField( theme = forms.MultipleChoiceField(
label='Тематики', label=_(u'Тематики'),
choices=[(item.id, item.name) for item in Theme.objects.language().filter(types=Theme.types.exposition)]) choices=[(item.id, item.name) for item in Theme.objects.language().filter(types=Theme.types.exposition)])
place = forms.ChoiceField(label=u'Место проведения', required=False, place = forms.ChoiceField(label=_(u'Место проведения'), required=False,
choices=places) choices=places)
place_alt = forms.CharField(required=False, label=u'Альтернативное место') place_alt = forms.CharField(required=False, label=_(u'Альтернативное место'))
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
city = forms.CharField(label=u'Город', widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
periodic = forms.ChoiceField(label=u'Периодичность', choices=PERIODIC, required=False) periodic = forms.ChoiceField(label=_(u'Периодичность'), choices=PERIODIC, required=False)
audience = forms.MultipleChoiceField(label=u'Аудитория', choices=public, initial='', required=False) audience = forms.MultipleChoiceField(label=_(u'Аудитория'), choices=public, initial='', required=False)
web_page = forms.CharField(label=u'Веб страница', required=False) web_page = forms.CharField(label=_(u'Веб страница'), required=False)
registration_link = forms.CharField(label=u'Ссылка на регистрацию', required=False) registration_link = forms.CharField(label=_(u'Ссылка на регистрацию'), required=False)
foundation_year = forms.CharField(label=u'Год основания', required=False) foundation_year = forms.CharField(label=_(u'Год основания'), required=False)
members = forms.CharField(label=u'Участники', required=False) members = forms.CharField(label=_(u'Участники'), required=False)
visitors = forms.CharField(label=u'Посетители', required=False) visitors = forms.CharField(label=_(u'Посетители'), required=False)
min_area = forms.CharField(label=u'Минимальная площадь', required=False) min_area = forms.CharField(label=_(u'Минимальная площадь'), required=False)
discount = forms.CharField(label=u'Cкидка(%)', required=False) discount = forms.CharField(label=_(u'Cкидка(%)'), required=False)
area = forms.CharField(label=u'Площадь', required=False) area = forms.CharField(label=_(u'Площадь'), required=False)
quality_label = forms.MultipleChoiceField(label=u'Метки', required=False, quality_label = forms.MultipleChoiceField(label=_(u'Метки'), required=False,
choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')], choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')],
widget=forms.CheckboxSelectMultiple()) widget=forms.CheckboxSelectMultiple())
# #
currency = forms.ChoiceField(label=u'Валюта', choices=currencies, required=False) currency = forms.ChoiceField(label=_(u'Валюта'), choices=currencies, required=False)
application_deadline = forms.DateField(label=u'Срок подачи стенда',input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False) application_deadline = forms.DateField(label=_(u'Срок подачи стенда'),input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False)
min_stand_size = forms.CharField(label=u'Минимальный размер стенда', required=False) min_stand_size = forms.CharField(label=_(u'Минимальный размер стенда'), required=False)
price_catalog = forms.CharField(label=u'Цена за каталог', required=False) price_catalog = forms.CharField(label=_(u'Цена за каталог'), required=False)
tax = forms.BooleanField(label=u'Налог включен', initial=True, required=False) tax = forms.BooleanField(label=_(u'Налог включен'), initial=True, required=False)
min_closed_area = forms.CharField(label=u'Минимальная цена закрытой НЕ оборудованной площади', required=False) min_closed_area = forms.CharField(label=_(u'Минимальная цена закрытой НЕ оборудованной площади'), required=False)
max_closed_area = forms.CharField(label=u'Максимальная цена закрытой НЕ оборудованной площади', required=False) max_closed_area = forms.CharField(label=_(u'Максимальная цена закрытой НЕ оборудованной площади'), required=False)
min_closed_equipped_area = forms.CharField(label=u'Минимальная цена закрытой оборудованной площади', required=False) min_closed_equipped_area = forms.CharField(label=_(u'Минимальная цена закрытой оборудованной площади'), required=False)
max_closed_equipped_area = forms.CharField(label=u'Максимальная цена закрытой оборудованной площади', required=False) max_closed_equipped_area = forms.CharField(label=_(u'Максимальная цена закрытой оборудованной площади'), required=False)
min_open_area = forms.CharField(label=u'Минимальная цена открытой площади', required=False) min_open_area = forms.CharField(label=_(u'Минимальная цена открытой площади'), required=False)
max_open_area = forms.CharField(label=u'Максимальная цена открытой площади', required=False) max_open_area = forms.CharField(label=_(u'Максимальная цена открытой площади'), required=False)
registration_payment = forms.CharField(label=u'Регистрационны взнос', required=False) registration_payment = forms.CharField(label=_(u'Регистрационны взнос'), required=False)
expohit = forms.BooleanField(label=u'Expohit', required=False) expohit = forms.BooleanField(label=_(u'Expohit'), required=False)
canceled = forms.BooleanField(label=u'Отменена', required=False) canceled = forms.BooleanField(label=_(u'Отменена'), required=False)
moved = forms.BooleanField(label=u'Перенесена', required=False) moved = forms.BooleanField(label=_(u'Перенесена'), required=False)
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
# #
@ -107,46 +107,46 @@ class ExpositionCreateForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label=u'Название', required=required, self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['main_title_%s' % code] = forms.CharField(label=u'Краткое описание', self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label=u'Описание', self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['time_%s' % code] = forms.CharField(label=u'Время работы', self.fields['time_%s' % code] = forms.CharField(label=_(u'Время работы'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['price_day_%s' % code] = forms.CharField(label=u'Стоимость билета 1 день', required=False, self.fields['price_day_%s' % code] = forms.CharField(label=_(u'Стоимость билета 1 день'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['price_all_%s' % code] = forms.CharField(label=u'Стоимость билета все дни', required=False, self.fields['price_all_%s' % code] = forms.CharField(label=_(u'Стоимость билета все дни'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['price_day_bar_%s' % code] = forms.CharField(label=u'Стоимость на стойке 1 день', required=False, self.fields['price_day_bar_%s' % code] = forms.CharField(label=_(u'Стоимость на стойке 1 день'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['price_all_bar_%s' % code] = forms.CharField(label=u'Стоимость на стойке все дни', required=False, self.fields['price_all_bar_%s' % code] = forms.CharField(label=_(u'Стоимость на стойке все дни'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['products_%s' % code] = forms.CharField(label=u'Экспонируемые продукты', self.fields['products_%s' % code] = forms.CharField(label=_(u'Экспонируемые продукты'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['discount_description_%s' % code] = forms.CharField(label=u'Описание скидки', self.fields['discount_description_%s' % code] = forms.CharField(label=_(u'Описание скидки'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['stat_countries_%s' % code] = forms.CharField(label=u'Участвующие страны', self.fields['stat_countries_%s' % code] = forms.CharField(label=_(u'Участвующие страны'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['pre_condition_%s' % code] = forms.CharField(label=u'Условия предварительной регистрации',required=False, self.fields['pre_condition_%s' % code] = forms.CharField(label=_(u'Условия предварительной регистрации'),required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['stand_condition_%s' % code] = forms.CharField(label=u'Условия регистрации на стойке',required=False, self.fields['stand_condition_%s' % code] = forms.CharField(label=_(u'Условия регистрации на стойке'),required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['visit_note_%s' % code] = forms.CharField(label=u'Примечание по посещению',required=False, self.fields['visit_note_%s' % code] = forms.CharField(label=_(u'Примечание по посещению'),required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['participation_note_%s' % code] = forms.CharField(label=u'Примечание по участии',required=False, self.fields['participation_note_%s' % code] = forms.CharField(label=_(u'Примечание по участии'),required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label=u'Meta title', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Meta title'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label=u'Meta keywords', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Meta keywords'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label=u'Meta description', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Meta description'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, obj=None): def save(self, obj=None):
@ -248,7 +248,7 @@ class ExpositionCreateForm(forms.Form):
exposition = Exposition.objects.filter(url=translit_with_separator(name_ru)) exposition = Exposition.objects.filter(url=translit_with_separator(name_ru))
if exposition and str(exposition[0].id) != id: if exposition and str(exposition[0].id) != id:
msg = 'Выставка с таким названием уже существует' msg = _(u'Выставка с таким названием уже существует')
self._errors['name_ru'] = ErrorList([msg]) self._errors['name_ru'] = ErrorList([msg])
del self.cleaned_data['name_ru'] del self.cleaned_data['name_ru']
@ -467,11 +467,11 @@ class ExpositionDeleteForm(forms.ModelForm):
class StatisticForm(forms.Form): class StatisticForm(forms.Form):
year = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), label='Год') year = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), label=_(u'Год'))
visitors = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label='Посетители') visitors = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label=_(u'Посетители'))
members = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label='Участники') members = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label=_(u'Участники'))
area = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label='Площадь') area = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label=_(u'Площадь'))
countries_number = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label='Число стран') countries_number = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label=_(u'Число стран'))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -485,7 +485,7 @@ class StatisticForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['countries_%s' % code] = forms.CharField(label=u'Участвующие страны', self.fields['countries_%s' % code] = forms.CharField(label=_(u'Участвующие страны'),
required=False, required=False,
widget=forms.TextInput(attrs={'style':'width: 250px'})) widget=forms.TextInput(attrs={'style':'width: 250px'}))
@ -532,11 +532,11 @@ class StatisticForm(forms.Form):
from functions.files import check_tmp_timetables from functions.files import check_tmp_timetables
class TimeTableForm(forms.Form): class TimeTableForm(forms.Form):
begin = forms.DateTimeField(label='Время начала', input_formats=date_formats, begin = forms.DateTimeField(label=_(u'Время начала'), input_formats=date_formats,
widget=forms.TextInput(attrs={'style':'width: 150px'})) widget=forms.TextInput(attrs={'style':'width: 150px'}))
end = forms.DateTimeField(label='Время окончания', input_formats=date_formats, end = forms.DateTimeField(label=_(u'Время окончания'), input_formats=date_formats,
widget=forms.TextInput(attrs={'style':'width: 150px'})) widget=forms.TextInput(attrs={'style':'width: 150px'}))
timetable_organiser = forms.ChoiceField(label='Организатор', required=False, timetable_organiser = forms.ChoiceField(label=_(u'Организатор'), required=False,
choices=[(item.id, item.name) for item in Organiser.objects.language().all()]) choices=[(item.id, item.name) for item in Organiser.objects.language().all()])
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -552,13 +552,13 @@ class TimeTableForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название программы', required=required, self.fields['name_%s' % code] = forms.CharField(label=_(u'Название программы'), required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['programe_%s' % code] = forms.CharField(label='Программа', required=False, self.fields['programe_%s' % code] = forms.CharField(label=_(u'Программа'), required=False,
widget=CKEditorWidget) widget=CKEditorWidget)
self.fields['speaker_%s' % code] = forms.CharField(label='Организатор', required=False, self.fields['speaker_%s' % code] = forms.CharField(label=_(u'Организатор'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['place_%s' % code] = forms.CharField(label='Место проведения', required=False, self.fields['place_%s' % code] = forms.CharField(label=_(u'Место проведения'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self,exposition=None): def save(self,exposition=None):
@ -591,11 +591,11 @@ monthes = [('', ''),
class ExpositionFilterForm(AdminFilterForm): class ExpositionFilterForm(AdminFilterForm):
model = Exposition model = Exposition
country = forms.MultipleChoiceField(label=u'Страна', choices=[(c.id, c.name) for c in Country.objects.all()], country = forms.MultipleChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()],
required=False) required=False)
#city = forms.CharField(label=u'Город', widget=forms.HiddenInput(), required=False) #city = forms.CharField(label=u'Город', widget=forms.HiddenInput(), required=False)
year = forms.CharField(label=u'Год', required=False) year = forms.CharField(label=_(u'Год'), required=False)
month = forms.ChoiceField(label=u'Месяц',choices=[(item[0], item[1]) for item in monthes], required=False) month = forms.ChoiceField(label=_(u'Месяц'),choices=[(item[0], item[1]) for item in monthes], required=False)
def filter(self): def filter(self):

@ -55,39 +55,39 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
url = models.SlugField(unique=True, max_length=255) url = models.SlugField(unique=True, max_length=255)
old_url = models.SlugField(unique=True, max_length=255) old_url = models.SlugField(unique=True, max_length=255)
data_begin = models.DateField(verbose_name='Дата начала') data_begin = models.DateField(verbose_name=_(u'Дата начала'))
data_end = models.DateField(verbose_name='Дата окончания') data_end = models.DateField(verbose_name=_(u'Дата окончания'))
services = BitField(flags=flags) services = BitField(flags=flags)
# relations # relations
creator = models.ForeignKey('accounts.User', verbose_name=u'Создатель', on_delete=models.SET_NULL, creator = models.ForeignKey('accounts.User', verbose_name=_(u'Создатель'), on_delete=models.SET_NULL,
related_name='exposition_creator', blank=True, null=True) related_name='exposition_creator', blank=True, null=True)
country = models.ForeignKey('country.Country', verbose_name='Страна', on_delete=models.PROTECT, country = models.ForeignKey('country.Country', verbose_name=_(u'Страна'), on_delete=models.PROTECT,
related_name='exposition_country') related_name='exposition_country')
city = models.ForeignKey('city.City', verbose_name='Город', on_delete=models.PROTECT, city = models.ForeignKey('city.City', verbose_name=_(u'Город'), on_delete=models.PROTECT,
related_name='exposition_city') related_name='exposition_city')
place = models.ForeignKey('place_exposition.PlaceExposition', verbose_name='Место проведения', place = models.ForeignKey('place_exposition.PlaceExposition', verbose_name=_(u'Место проведения'),
blank=True, null=True, on_delete=models.PROTECT, related_name='exposition_place') blank=True, null=True, on_delete=models.PROTECT, related_name='exposition_place')
theme = models.ManyToManyField('theme.Theme', verbose_name='Тематики', theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики'),
related_name='exposition_themes') related_name='exposition_themes')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'),
blank=True, null=True, related_name='exposition_tags') blank=True, null=True, related_name='exposition_tags')
organiser = models.ManyToManyField('organiser.Organiser', verbose_name='Организатор', organiser = models.ManyToManyField('organiser.Organiser', verbose_name=_(u'Организатор'),
blank=True, null=True, related_name='exposition_organisers') blank=True, null=True, related_name='exposition_organisers')
org = models.CharField(max_length=255, blank=True, null=True) org = models.CharField(max_length=255, blank=True, null=True)
place_alt = models.CharField(max_length=255, blank=True, null=True) place_alt = models.CharField(max_length=255, blank=True, null=True)
company = models.ManyToManyField('company.Company', verbose_name='Компании', company = models.ManyToManyField('company.Company', verbose_name=_(u'Компании'),
blank=True, null=True, related_name='exposition_companies') blank=True, null=True, related_name='exposition_companies')
users = models.ManyToManyField('accounts.User', verbose_name='Посетители выставки', users = models.ManyToManyField('accounts.User', verbose_name=_(u'Посетители выставки'),
blank=True, null=True, related_name='exposition_users') blank=True, null=True, related_name='exposition_users')
photogallery = models.ForeignKey('photologue.Gallery', blank=True, null=True, on_delete=models.SET_NULL) photogallery = models.ForeignKey('photologue.Gallery', blank=True, null=True, on_delete=models.SET_NULL)
logo = models.ImageField(verbose_name='Logo', upload_to='exposition/logo/', blank=True) logo = models.ImageField(verbose_name='Logo', upload_to='exposition/logo/', blank=True)
rating = models.IntegerField(default=0) # добавить индекс в базе rating = models.IntegerField(default=0) # добавить индекс в базе
quality_label = BitField(flags=['ufi', 'rsva', 'exporating']) quality_label = BitField(flags=['ufi', 'rsva', 'exporating'])
visitors = models.PositiveIntegerField(verbose_name='Посетители', blank=True, null=True) visitors = models.PositiveIntegerField(verbose_name=_(u'Посетители'), blank=True, null=True)
members = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True) members = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
discount = models.PositiveIntegerField(verbose_name='Скидка', blank=True, null=True) discount = models.PositiveIntegerField(verbose_name=_(u'Скидка'), blank=True, null=True)
expohit = models.BooleanField(verbose_name='Expohit', default=0) expohit = models.BooleanField(verbose_name=_(u'Expohit'), default=0)
# administrator can cancel exposition # administrator can cancel exposition
canceled_by_administrator = models.BooleanField(default=0) canceled_by_administrator = models.BooleanField(default=0)
#can publish not immediately #can publish not immediately
@ -103,22 +103,22 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
views = models.PositiveIntegerField(default=0) views = models.PositiveIntegerField(default=0)
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255), name = models.CharField(verbose_name=_(u'Название'), max_length=255),
main_title = models.TextField(verbose_name='Краткое описание', blank=True), main_title = models.TextField(verbose_name=_(u'Краткое описание'), blank=True),
description = models.TextField(verbose_name='Описание', blank=True), description = models.TextField(verbose_name=_(u'Описание'), blank=True),
products = models.TextField(verbose_name='Экспонируемые продукты', blank=True), products = models.TextField(verbose_name=_(u'Экспонируемые продукты'), blank=True),
discount_description = models.TextField(verbose_name='Описание скидки', blank=True), discount_description = models.TextField(verbose_name=_(u'Описание скидки'), blank=True),
time = models.TextField(verbose_name='Время работы', blank=True), time = models.TextField(verbose_name=_(u'Время работы'), blank=True),
# visit and particaption data # visit and particaption data
price_day = models.CharField(verbose_name='Стоимость билета 1 день', max_length=255, blank=True), price_day = models.CharField(verbose_name=_(u'Стоимость билета 1 день'), max_length=255, blank=True),
price_all = models.CharField(verbose_name='Стоимость билета все дни', max_length=255, blank=True), price_all = models.CharField(verbose_name=_(u'Стоимость билета все дни'), max_length=255, blank=True),
price_day_bar = models.CharField(verbose_name='Стоимость на стойке 1 день', max_length=255, blank=True), price_day_bar = models.CharField(verbose_name=_(u'Стоимость на стойке 1 день'), max_length=255, blank=True),
price_all_bar = models.CharField(verbose_name='Стоимость на стойке все дни', max_length=255, blank=True), price_all_bar = models.CharField(verbose_name=_(u'Стоимость на стойке все дни'), max_length=255, blank=True),
stat_countries = models.TextField(verbose_name='Участвующие страны', blank=True), stat_countries = models.TextField(verbose_name=_(u'Участвующие страны'), blank=True),
pre_condition = models.CharField(verbose_name='Условия предварительной регистрации', max_length=255, blank=True), pre_condition = models.CharField(verbose_name=_(u'Условия предварительной регистрации'), max_length=255, blank=True),
stand_condition = models.CharField(verbose_name='Условия регистрации на стойке', max_length=255, blank=True), stand_condition = models.CharField(verbose_name=_(u'Условия регистрации на стойке'), max_length=255, blank=True),
visit_note = models.CharField(verbose_name='Примечание по посещению', max_length=255, blank=True), visit_note = models.CharField(verbose_name=_(u'Примечание по посещению'), max_length=255, blank=True),
participation_note = models.TextField(verbose_name='Примечание по участии', blank=True), participation_note = models.TextField(verbose_name=_(u'Примечание по участии'), blank=True),
#-----meta data #-----meta data
@ -131,32 +131,32 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
note = generic.GenericRelation('note.Note', content_type_field='content_type', object_id_field='object_id') note = generic.GenericRelation('note.Note', content_type_field='content_type', object_id_field='object_id')
#about #about
periodic = models.FloatField(verbose_name='Переодичность', blank=True, null=True) periodic = models.FloatField(verbose_name=_(u'Переодичность'), blank=True, null=True)
audience = BitField(flags=[k for k, v in BIT_AUDIENCE]) audience = BitField(flags=[k for k, v in BIT_AUDIENCE])
web_page = models.CharField(verbose_name='Вебсайт', max_length=255, blank=True) web_page = models.CharField(verbose_name=_(u'Вебсайт'), max_length=255, blank=True)
foundation_year = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation_year = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
area = models.PositiveIntegerField(verbose_name='Площадь', blank=True, null=True) area = models.PositiveIntegerField(verbose_name=_(u'Площадь'), blank=True, null=True)
# conditions of Participation # conditions of Participation
registration_link = models.URLField(verbose_name='Ссылка на регистрацию', max_length=255, blank=True) registration_link = models.URLField(verbose_name=_(u'Ссылка на регистрацию'), max_length=255, blank=True)
min_area = models.PositiveIntegerField(verbose_name='Минимальная площадь', blank=True, null=True) min_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная площадь'), blank=True, null=True)
currency = EnumField(values=CURRENCY, default='USD') currency = EnumField(values=CURRENCY, default='USD')
application_deadline = models.DateField(verbose_name='Срок подачи заявки', null=True) application_deadline = models.DateField(verbose_name=_(u'Срок подачи заявки'), null=True)
min_stand_size = models.PositiveIntegerField(verbose_name='Минимальный размер стэнда', blank=True, null=True) min_stand_size = models.PositiveIntegerField(verbose_name=_(u'Минимальный размер стэнда'), blank=True, null=True)
price_catalog = models.PositiveIntegerField(verbose_name='Стоимость каталога', blank=True, null=True) price_catalog = models.PositiveIntegerField(verbose_name=_(u'Стоимость каталога'), blank=True, null=True)
tax = models.BooleanField(verbose_name='Налог', default=1) tax = models.BooleanField(verbose_name=_(u'Налог'), default=1)
min_closed_area = models.PositiveIntegerField(verbose_name='Минимальная цена закрытой НЕ оборудованной площади', min_closed_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена закрытой НЕ оборудованной площади'),
blank=True, null=True) blank=True, null=True)
max_closed_area = models.PositiveIntegerField(verbose_name='Максимальная цена закрытой НЕ оборудованной площади', max_closed_area = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена закрытой НЕ оборудованной площади'),
blank=True, null=True) blank=True, null=True)
min_closed_equipped_area = models.PositiveIntegerField(verbose_name='Минимальная цена закрытой оборудованной площади', min_closed_equipped_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена закрытой оборудованной площади'),
blank=True, null=True) blank=True, null=True)
max_closed_equipped_area = models.PositiveIntegerField(verbose_name='Максимальная цена закрытой оборудованной площади', max_closed_equipped_area = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена закрытой оборудованной площади'),
blank=True, null=True) blank=True, null=True)
min_open_area = models.PositiveIntegerField(verbose_name='Минимальная цена открытой площади', min_open_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена открытой площади'),
blank=True, null=True) blank=True, null=True)
max_open_area = models.PositiveIntegerField(verbose_name='Максимальная цена открытой площади', max_open_area = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена открытой площади'),
blank=True, null=True) blank=True, null=True)
registration_payment = models.PositiveIntegerField(verbose_name='Регистрационный взнос', blank=True, null=True) registration_payment = models.PositiveIntegerField(verbose_name=_(u'Регистрационный взнос'), blank=True, null=True)
paid_new = models.ForeignKey('expobanner.Paid', blank=True, null=True, on_delete=models.SET_NULL) paid_new = models.ForeignKey('expobanner.Paid', blank=True, null=True, on_delete=models.SET_NULL)
top = models.ForeignKey('expobanner.Top', blank=True, null=True, on_delete=models.SET_NULL) top = models.ForeignKey('expobanner.Top', blank=True, null=True, on_delete=models.SET_NULL)
@ -296,11 +296,11 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
class Statistic(TranslatableModel): class Statistic(TranslatableModel):
exposition = models.ForeignKey(Exposition, related_name='statistic') exposition = models.ForeignKey(Exposition, related_name='statistic')
year = models.PositiveIntegerField(verbose_name='Год') year = models.PositiveIntegerField(verbose_name=_(u'Год'))
members = models.PositiveIntegerField(verbose_name='Посетители', blank=True, null=True) members = models.PositiveIntegerField(verbose_name=_(u'Посетители'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True) visitors = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
area = models.PositiveIntegerField(verbose_name='Площадь', blank=True, null=True) area = models.PositiveIntegerField(verbose_name=_(u'Площадь'), blank=True, null=True)
countries_number = models.PositiveIntegerField(verbose_name='Количество стран', blank=True, null=True) countries_number = models.PositiveIntegerField(verbose_name=_(u'Количество стран'), blank=True, null=True)
translations = TranslatedFields( translations = TranslatedFields(
countries = models.TextField(blank=True) countries = models.TextField(blank=True)
@ -316,18 +316,18 @@ class TimeTable(TranslatableModel):
""" """
exposition = models.ForeignKey(Exposition, related_name='business_program') exposition = models.ForeignKey(Exposition, related_name='business_program')
begin = models.DateTimeField(verbose_name='Начало') begin = models.DateTimeField(verbose_name=_(u'Начало'))
end = models.DateTimeField(verbose_name='Конец') end = models.DateTimeField(verbose_name=_(u'Конец'))
timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True) timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True)
# #
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
#translated fields #translated fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название программы', max_length=255, blank=True), name = models.CharField(verbose_name=_(u'Название программы'), max_length=255, blank=True),
programe = models.TextField(verbose_name='Программа', blank=True), programe = models.TextField(verbose_name=_(u'Программа'), blank=True),
speaker = models.CharField(verbose_name='Организатор', max_length=255, blank=True), speaker = models.CharField(verbose_name=_(u'Организатор'), max_length=255, blank=True),
place = models.CharField(verbose_name='Место проведения', max_length=255, blank=True) place = models.CharField(verbose_name=_(u'Место проведения'), max_length=255, blank=True)
) )
def to_dict(self): def to_dict(self):
@ -336,8 +336,8 @@ class TimeTable(TranslatableModel):
class TmpTimeTable(TranslatableModel): class TmpTimeTable(TranslatableModel):
exposition = models.ForeignKey(Exposition, null=True, blank=True) exposition = models.ForeignKey(Exposition, null=True, blank=True)
begin = models.DateTimeField(verbose_name='Начало') begin = models.DateTimeField(verbose_name=_(u'Начало'))
end = models.DateTimeField(verbose_name='Конец') end = models.DateTimeField(verbose_name=_(u'Конец'))
timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True) timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True)
# key uses for checking keys from new objects. # key uses for checking keys from new objects.
key = models.CharField(max_length=255, blank=True) key = models.CharField(max_length=255, blank=True)
@ -346,10 +346,10 @@ class TmpTimeTable(TranslatableModel):
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
#translated fields #translated fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название программы', max_length=255, blank=True), name = models.CharField(verbose_name=_(u'Название программы'), max_length=255, blank=True),
programe = models.TextField(verbose_name='Программа'), programe = models.TextField(verbose_name=_(u'Программа')),
speaker = models.CharField(verbose_name='Спикеры', max_length=255, blank=True), speaker = models.CharField(verbose_name=_(u'Спикеры'), max_length=255, blank=True),
place = models.CharField(verbose_name='Место проведения', max_length=255, blank=True) place = models.CharField(verbose_name=_(u'Место проведения'), max_length=255, blank=True)
) )

@ -640,13 +640,15 @@ def add_note(request, slug):
def send_to_organiser(request, slug): def send_to_organiser(request, slug):
exposition = get_object_or_404(Exposition, url=slug) exposition = get_object_or_404(Exposition, url=slug)
mail_send = 'evm@expomap.ru' mail_send = 'evm@expomap.ru'
name = request.POST.get('person_inf') data = {
email = request.POST.get('person') 'expo_name': exposition.name,
phone = request.POST.get('phone', '') 'name': request.POST.get('person_inf'),
question = request.POST.get('question', '') 'email': request.POST.get('person'),
text = u"выставка: %s\n Контактное лицо:%s\nEmail: %s\nтелефон:%s\n вопрос:%s"%(exposition.name, name, email, 'phone': request.POST.get('phone', ''),
phone, question) 'question': request.POST.get('question', ''),
msg = EmailMessage(u'Проплаченная выставка', text, settings.DEFAULT_FROM_EMAIL, [mail_send]) }
text = _(u"выставка: %(expo_name)s\n Контактное лицо:%(name)s\nEmail: %(email)s\nтелефон:%(phone)s\n вопрос:%(question)s") % data
msg = EmailMessage(_(u'Проплаченная выставка'), text, settings.DEFAULT_FROM_EMAIL, [mail_send])
msg.content_subtype = "html" msg.content_subtype = "html"
msg.send() msg.send()
redirect_to = '%sservice/thanks/'%exposition.get_permanent_url() redirect_to = '%sservice/thanks/'%exposition.get_permanent_url()

@ -11,14 +11,14 @@ from functions.translate import populate, fill_trans_fields_all
#python #python
from PIL import Image from PIL import Image
import pytils, re import pytils, re
from django.utils.translation import ugettext as _
class FileForm(forms.Form): class FileForm(forms.Form):
file_path = forms.FileField(label='Выберите файл') file_path = forms.FileField(label=_(u'Выберите файл'))
model = forms.CharField(required=False, widget=forms.HiddenInput()) model = forms.CharField(required=False, widget=forms.HiddenInput())
purposes = [('scheme teritory','Схема территории'),('preview','Превью'), ('preview2','Превью2')] purposes = [('scheme teritory',_(u'Схема территории')),('preview',_(u'Превью')), ('preview2',_(u'Превью2'))]
purpose = forms.ChoiceField(label='Назначение', choices=purposes) purpose = forms.ChoiceField(label=_(u'Назначение'), choices=purposes)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -32,8 +32,8 @@ class FileForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['file_name_%s'%code] = forms.CharField(label='Имя файла',required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'})) self.fields['file_name_%s'%code] = forms.CharField(label=_(u'Имя файла'),required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'}))
self.fields['description_%s'%code] = forms.CharField(label='Описание', required=False, widget=forms.Textarea()) self.fields['description_%s'%code] = forms.CharField(label=_(u'Описание'), required=False, widget=forms.Textarea())
def save(self, request, obj=None): def save(self, request, obj=None):
""" """
@ -87,13 +87,13 @@ class FileModelForm(forms.Form):
save function saves data in FileModel object. If it doesnt exist create TmpFile object save function saves data in FileModel object. If it doesnt exist create TmpFile object
""" """
file_path = forms.FileField(label='Выберите файл') file_path = forms.FileField(label=_(u'Выберите файл'))
#uses for comparing with TmpFile key #uses for comparing with TmpFile key
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
model = forms.CharField(required=False, widget=forms.HiddenInput()) model = forms.CharField(required=False, widget=forms.HiddenInput())
purposes = [(item1, item2) for item1, item2 in PURPOSES] purposes = [(item1, item2) for item1, item2 in PURPOSES]
purpose = forms.ChoiceField(label='Назаначение', choices=purposes) purpose = forms.ChoiceField(label=_(u'Назаначение'), choices=purposes)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -107,8 +107,8 @@ class FileModelForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['file_name_%s'%code] = forms.CharField(label='Имя файла',required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'})) self.fields['file_name_%s'%code] = forms.CharField(label=_(u'Имя файла'),required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'}))
self.fields['description_%s'%code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget()) self.fields['description_%s'%code] = forms.CharField(label=_(u'Описание'), required=False, widget=CKEditorWidget())
def save(self, request, obj=None): def save(self, request, obj=None):
""" """
@ -168,7 +168,7 @@ class FileModelForm(forms.Form):
return file_obj return file_obj
class PhotoForm(forms.Form): class PhotoForm(forms.Form):
file_path = forms.FileField(label='Выберите файл') file_path = forms.FileField(label=_(u'Выберите файл'))
# uses for comparing with TmpFile key # uses for comparing with TmpFile key
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
model = forms.CharField(required=False, widget=forms.HiddenInput()) model = forms.CharField(required=False, widget=forms.HiddenInput())
@ -185,8 +185,8 @@ class PhotoForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s'%code] = forms.CharField(label='Имя файла',required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'})) self.fields['name_%s'%code] = forms.CharField(label=_(u'Имя файла'),required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'}))
self.fields['description_%s'%code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget()) self.fields['description_%s'%code] = forms.CharField(label=_(u'Описание'), required=False, widget=CKEditorWidget())
def save(self,request, obj=None): def save(self,request, obj=None):
""" """

@ -14,14 +14,14 @@ import os
FILE_TYPES = ('PDF', 'DOC', 'TXT', 'OTHER') FILE_TYPES = ('PDF', 'DOC', 'TXT', 'OTHER')
IMG_TYPES = ('JPG', 'BMP', 'PNG', 'GIF',) IMG_TYPES = ('JPG', 'BMP', 'PNG', 'GIF',)
PURPOSES = (('photo', 'Фото'), PURPOSES = (('photo', _(u'Фото')),
('flat', 'Флаг'), ('flat', _(u'Флаг')),
('logo','Лого'), ('logo',_(u'Лого')),
('map','Карта'), ('map',_(u'Карта')),
('scheme teritory','Схема територии'), ('scheme teritory',_(u'Схема територии')),
('diplom','Дипломы'), ('diplom',_(u'Дипломы')),
('preview','Превью'), ('preview',_(u'Превью')),
('preview2','Превью'), ('preview2',_(u'Превью')),
) )
class FileModel(TranslatableModel): class FileModel(TranslatableModel):

@ -8,6 +8,8 @@ from django.contrib.auth.decorators import login_required
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage
from django.db.models.deletion import ProtectedError from django.db.models.deletion import ProtectedError
from django.utils.translation import ugettext as _
#forms and models #forms and models
from file.forms import FileModelForm from file.forms import FileModelForm
from file.models import TmpFile from file.models import TmpFile
@ -214,7 +216,7 @@ def delete_object(request, Model, Form, url, prev_page,):
object.delete() object.delete()
return HttpResponseRedirect(prev_page) return HttpResponseRedirect(prev_page)
except ProtectedError: except ProtectedError:
msg = u'Удаления %s требует удаления связаных объектов'%object msg = _(u'Удаления %(object)s требует удаления связаных объектов') % {'object': object}
return render_to_response('delete.html', {'msg':msg, 'prev_page':prev_page}) return render_to_response('delete.html', {'msg':msg, 'prev_page':prev_page})
else: else:
@ -246,7 +248,7 @@ from webinar.models import Webinar
from company.models import Company from company.models import Company
from photoreport.models import Photoreport from photoreport.models import Photoreport
from django.utils.translation import ugettext as _
class ExpoMixin(object): class ExpoMixin(object):
def get_params(self): def get_params(self):
model_names = {Exposition: _(u'Выставки'), Conference: _(u'Конференции'), Seminar: _(u'Семинары'), model_names = {Exposition: _(u'Выставки'), Conference: _(u'Конференции'), Seminar: _(u'Семинары'),

@ -2,9 +2,10 @@
import unicodedata as ud import unicodedata as ud
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
import pytils, re import pytils, re
from django.utils.translation import ugettext as _
def is_positive_integer(data, def is_positive_integer(data,
msg='Введите правильное значение'): msg=_(u'Введите правильное значение')):
""" """
function checking if data positive integer function checking if data positive integer
""" """

@ -6,6 +6,7 @@ from functions.translate import fill_with_signal
import calendar as python_calendar import calendar as python_calendar
from service.models import Service from service.models import Service
from photologue.models import Gallery from photologue.models import Gallery
from django.utils.translation import ugettext as _
class ExpoMixin(object): class ExpoMixin(object):
@ -175,7 +176,7 @@ class EventMixin(object):
Model = type(self) Model = type(self)
try: try:
Model.objects.get(url=url) Model.objects.get(url=url)
return u'Событие с таким урлом уже существует' return _(u'Событие с таким урлом уже существует')
except Model.DoesNotExist: except Model.DoesNotExist:
pass pass

@ -11,6 +11,7 @@ from import_forms import ImportEventForm, ImportThemeForm, ImportTagForm, \
from export_forms import ExportEventForm, ExportThemeForm, ExportTagForm,\ from export_forms import ExportEventForm, ExportThemeForm, ExportTagForm,\
ExportUserForm, ExportCompanyForm, ExportPlaceConferenceForm, ExportPlaceExpositionForm, ExportBlogForm,\ ExportUserForm, ExportCompanyForm, ExportPlaceConferenceForm, ExportPlaceExpositionForm, ExportBlogForm,\
ExportCityForm ExportCityForm
from django.utils.translation import ugettext as _
def xls_to_response(xls, fname): def xls_to_response(xls, fname):
@ -47,7 +48,7 @@ class ExportView(FormView):
if workbook: if workbook:
f_name = form.get_fname() f_name = form.get_fname()
else: else:
messages.error(self.request, 'No objects found') messages.error(self.request, _('No objects found'))
return HttpResponseRedirect(self.success_url) return HttpResponseRedirect(self.success_url)
return xls_to_response(workbook, f_name) return xls_to_response(workbook, f_name)

@ -14,6 +14,7 @@ from place_conference.models import PlaceConference
from django.db.models.loading import get_model from django.db.models.loading import get_model
import xlwt import xlwt
from excel_settings import field_settings, event_export_sett from excel_settings import field_settings, event_export_sett
from django.utils.translation import ugettext as _
languages = [code for code in settings.LANGUAGES] languages = [code for code in settings.LANGUAGES]
@ -33,7 +34,7 @@ class ExportForm(forms.Form):
self.style.font = self.font self.style.font = self.font
model = None model = None
language = forms.ChoiceField(label='Выберите язык', choices=languages) language = forms.ChoiceField(label=_(u'Выберите язык'), choices=languages)
def get_objects(self, data): def get_objects(self, data):
return self.model.objects.language(data['language']).all() return self.model.objects.language(data['language']).all()
@ -166,15 +167,15 @@ class ExportCityForm(ExportForm):
class ExportEventForm(forms.Form): class ExportEventForm(forms.Form):
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition.Exposition', 'Выставка'), event = forms.ChoiceField(label=_(u'Выберите тип события'), choices=[('exposition.Exposition', _(u'Выставка')),
('conference.Conference', 'Конференция'), ('conference.Conference', _(u'Конференция')),
('seminar.Seminar', 'Семинар'), ('seminar.Seminar', _(u'Семинар')),
('webinar.Webinar', 'Вебинар')]) ('webinar.Webinar', _(u'Вебинар'))])
language = forms.ChoiceField(label='Выберите язык', choices=languages) language = forms.ChoiceField(label=_(u'Выберите язык'), choices=languages)
date_from = forms.DateField(label='С', input_formats=settings.CLIENT_DATE_FORMAT) date_from = forms.DateField(label=_(u'С'), input_formats=settings.CLIENT_DATE_FORMAT)
date_to = forms.DateField(label='До', input_formats=settings.CLIENT_DATE_FORMAT) date_to = forms.DateField(label=_(u'До'), input_formats=settings.CLIENT_DATE_FORMAT)
theme = forms.ModelMultipleChoiceField(label='Направление', queryset=Theme.objects.all(), required=False) theme = forms.ModelMultipleChoiceField(label=_(u'Направление'), queryset=Theme.objects.all(), required=False)
country = forms.ModelMultipleChoiceField(label='Страны', queryset=Country.objects.all(), required=False) country = forms.ModelMultipleChoiceField(label=_(u'Страны'), queryset=Country.objects.all(), required=False)
def export(self): def export(self):
data = self.cleaned_data data = self.cleaned_data

@ -14,6 +14,7 @@ from excel_settings import import_settings
from functions.form_check import translit_with_separator from functions.form_check import translit_with_separator
from excel_settings import place_exp_sett from excel_settings import place_exp_sett
from import_xls.excel_settings import event_sett from import_xls.excel_settings import event_sett
from django.utils.translation import ugettext as _
languages = [code for code in settings.LANGUAGES] languages = [code for code in settings.LANGUAGES]
@ -33,8 +34,8 @@ class ImportForm(forms.Form):
abstract form for importing models from excel file to database abstract form for importing models from excel file to database
""" """
model = None model = None
excel_file = forms.FileField(label='Выберите файл') excel_file = forms.FileField(label=_(u'Выберите файл'))
language = forms.ChoiceField(label='Выберите язык', choices=languages) language = forms.ChoiceField(label=_(u'Выберите язык'), choices=languages)
def save_file(self): def save_file(self):
data = self.cleaned_data data = self.cleaned_data
@ -340,7 +341,7 @@ class ImportPlaceExpositionForm(ImportForm):
if typical_errors.get(error): if typical_errors.get(error):
error = typical_errors[error] error = typical_errors[error]
if error.startswith('(1062, "Duplicate entry') and error.endswith('for key \'url\'")'): if error.startswith('(1062, "Duplicate entry') and error.endswith('for key \'url\'")'):
error = u'Место с таким названием или урлом уже существует' error = _(u'Место с таким названием или урлом уже существует')
errors.append([obj.name, error]) errors.append([obj.name, error])
continue continue
@ -367,10 +368,10 @@ class ImportEventForm(ImportForm):
extended form for importing one type of event extended form for importing one type of event
""" """
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition.Exposition', 'Выставка'), event = forms.ChoiceField(label=_(u'Выберите тип события'), choices=[('exposition.Exposition', _(u'Выставка')),
('conference.Conference', 'Конференция'), ('conference.Conference', _(u'Конференция')),
('seminar.Seminar', 'Семинар'), ('seminar.Seminar', _(u'Семинар')),
('webinar.Webinar', 'Вебинар')]) ('webinar.Webinar', _(u'Вебинар'))])
def save_file_debug(self): def save_file_debug(self):
data = self.cleaned_data data = self.cleaned_data
@ -477,7 +478,7 @@ class ImportEventForm(ImportForm):
error = typical_errors[error] error = typical_errors[error]
if error.startswith('(1062, "Duplicate entry') and error.endswith('for key \'url\'")'): if error.startswith('(1062, "Duplicate entry') and error.endswith('for key \'url\'")'):
error = u'Событие с таким названием или урлом уже существует' error = _(u'Событие с таким названием или урлом уже существует')
errors.append([obj.name, error]) errors.append([obj.name, error])
log_msg += error log_msg += error

@ -15,6 +15,7 @@ from theme.models import Theme, Tag
from functions.files import get_alternative_filename from functions.files import get_alternative_filename
from exposition.models import BIT_AUDIENCE from exposition.models import BIT_AUDIENCE
from accounts.models import User from accounts.models import User
from django.utils.translation import ugettext as _
def to_int(val): def to_int(val):
@ -91,11 +92,11 @@ def to_theme(obj, value):
theme_ids = value.split(',') theme_ids = value.split(',')
if theme_ids == ['']: if theme_ids == ['']:
return u'Неправильное значение' return _(u'Неправильное значение')
obj.theme.clear() obj.theme.clear()
obj.theme.add(*Theme.objects.filter(id__in=theme_ids)) obj.theme.add(*Theme.objects.filter(id__in=theme_ids))
if not Theme.objects.filter(id__in=theme_ids).exists(): if not Theme.objects.filter(id__in=theme_ids).exists():
return u'Нет совпадений' return _(u'Нет совпадений')
return None return None
@ -176,7 +177,7 @@ def save_logo(obj, path):
try: try:
alt_name = get_alternative_filename(full_path, file_name) alt_name = get_alternative_filename(full_path, file_name)
except UnicodeEncodeError: except UnicodeEncodeError:
return u'Некоректное название файла' return _(u'Некоректное название файла')
download_to = full_path+alt_name download_to = full_path+alt_name
@ -194,7 +195,7 @@ def save_logo(obj, path):
try: try:
response = urllib2.urlopen(url, timeout=5) response = urllib2.urlopen(url, timeout=5)
except: except:
return u'Превышено время ожидания' return _(u'Превышено время ожидания')
with open(download_to,'wb') as f: with open(download_to,'wb') as f:
try: try:
@ -202,20 +203,20 @@ def save_logo(obj, path):
f.close() f.close()
except: except:
# can be timeout # can be timeout
return u'Превышено время ожидания' return _(u'Превышено время ожидания')
try: try:
# check if image # check if image
im=Image.open(download_to) im=Image.open(download_to)
except IOError: except IOError:
os.remove(download_to) os.remove(download_to)
return u'Неправильный формат логотипа' return _(u'Неправильный формат логотипа')
obj.logo = logo_path + alt_name obj.logo = logo_path + alt_name
try: try:
obj.save() obj.save()
except: except:
print('logo exception. logo: %s'%obj.logo) print('logo exception. logo: %s'%obj.logo)
return u'Неизвестная ошибка' return _(u'Неизвестная ошибка')
def check_quality_label(obj, value, label): def check_quality_label(obj, value, label):

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -6,10 +6,11 @@ from functions.translate import fill_with_signal
from functions.admin_forms import AdminFilterForm from functions.admin_forms import AdminFilterForm
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
from hvad.forms import TranslatableModelForm from hvad.forms import TranslatableModelForm
from django.utils.translation import ugettext as _
class MetaForm(forms.Form): class MetaForm(forms.Form):
name = forms.CharField(label=u'Название страницы') name = forms.CharField(label=_(u'Название страницы'))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -23,13 +24,13 @@ class MetaForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['title_%s' % code] = forms.CharField(label=u'Title', required=required, self.fields['title_%s' % code] = forms.CharField(label=_(u'Title'), required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['description_%s' % code] = forms.CharField(label=u'Description', required=required, self.fields['description_%s' % code] = forms.CharField(label=_(u'Description'), required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label=u'Keywords', required=False, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Keywords'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['h1_%s' % code] = forms.CharField(label=u'H1', required=False, self.fields['h1_%s' % code] = forms.CharField(label=_(u'H1'), required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, obj=None): def save(self, obj=None):

@ -154,13 +154,13 @@ class SeoText(TranslatableModel):
""" """
store seo data for specified urls store seo data for specified urls
""" """
url = models.CharField(max_length=50, unique=True, verbose_name=u"URL: www.expomap.ru") url = models.CharField(max_length=50, unique=True, verbose_name=_(u"URL: www.expomap.ru"))
translations = TranslatedFields( translations = TranslatedFields(
title=models.CharField(max_length=255, verbose_name=u"Заголовок"), title=models.CharField(max_length=255, verbose_name=_(u"Заголовок")),
page_title=models.CharField(max_length=255, verbose_name=u"Тайтл страницы"), page_title=models.CharField(max_length=255, verbose_name=_(u"Тайтл страницы")),
description=models.CharField(max_length=1000, verbose_name=u"Дескрипшн"), description=models.CharField(max_length=1000, verbose_name=_(u"Дескрипшн")),
body=models.TextField(verbose_name=u"Текст") body=models.TextField(verbose_name=_(u"Текст"))
) )
objects = SeoTextManager() objects = SeoTextManager()

@ -5,6 +5,7 @@ from django.contrib.contenttypes.models import ContentType
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.utils.translation import ugettext as _
#models and forms #models and forms
from models import News, TYPES from models import News, TYPES
from theme.models import Theme from theme.models import Theme
@ -25,19 +26,19 @@ class NewsForm(forms.Form):
save function saves data in News object. If it doesnt exist create new object save function saves data in News object. If it doesnt exist create new object
""" """
date = forms.DateField(label='Дата') date = forms.DateField(label=_(u'Дата'))
type = forms.ChoiceField(label='Тип новости', choices=[(item, item) for item in TYPES]) type = forms.ChoiceField(label=_(u'Тип новости'), choices=[(item, item) for item in TYPES])
paid = forms.BooleanField(label='Платная', required=False) paid = forms.BooleanField(label=_(u'Платная'), required=False)
#relations #relations
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all()) theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all())
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
tag = forms.MultipleChoiceField(label='Теги', required=False) tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
user = forms.ModelChoiceField(label='Организатор', queryset=User.objects.exclude(organiser__isnull=True), user = forms.ModelChoiceField(label=_(u'Организатор'), queryset=User.objects.exclude(organiser__isnull=True),
empty_label=None) empty_label=None)
# #
event = forms.ChoiceField(label='Тип события', choices=[(None, ''), ('conference.Conference', 'Конференция'), event = forms.ChoiceField(label=_(u'Тип события'), choices=[(None, ''), ('conference.Conference', _(u'Конференция')),
('exposition.Exposition', 'Выставка')], required=False) ('exposition.Exposition', _(u'Выставка'))], required=False)
event_id = forms.ChoiceField(label='Событие', choices=[(None,'')], required=False) event_id = forms.ChoiceField(label=_(u'Событие'), choices=[(None,'')], required=False)
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
@ -53,16 +54,16 @@ class NewsForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required, self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['preview_%s' % code] = forms.CharField(label='Превью', required=required, widget=CKEditorWidget) self.fields['preview_%s' % code] = forms.CharField(label=_(u'Превью'), required=required, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=required, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=required, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, id=None): def save(self, id=None):
@ -124,7 +125,7 @@ class NewsForm(forms.Form):
except: except:
return main_title_ru return main_title_ru
raise ValidationError('Новость с таким названием уже существует') raise ValidationError(_(u'Новость с таким названием уже существует'))
def clean(self): def clean(self):
event_id = self.cleaned_data.get('event_id') event_id = self.cleaned_data.get('event_id')

@ -4,6 +4,8 @@ from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
import copy import copy
from django.utils.translation import ugettext as _
#functions #functions
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
@ -27,18 +29,18 @@ class News(TranslatableModel):
object = generic.GenericForeignKey(content_type, object_id) object = generic.GenericForeignKey(content_type, object_id)
url = models.SlugField(unique=True) url = models.SlugField(unique=True)
date = models.DateField(verbose_name='Дата') date = models.DateField(verbose_name=_(u'Дата'))
type = EnumField(values=TYPES) type = EnumField(values=TYPES)
theme = models.ManyToManyField('theme.Theme', verbose_name='Тема') theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тема'))
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True) tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'), blank=True, null=True)
user = models.ForeignKey('accounts.User', verbose_name='Организатор', blank=True, null=True, user = models.ForeignKey('accounts.User', verbose_name=_(u'Организатор'), blank=True, null=True,
on_delete=models.PROTECT) on_delete=models.PROTECT)
paid = models.BooleanField(default=0) paid = models.BooleanField(default=0)
translations = TranslatedFields( translations = TranslatedFields(
main_title = models.CharField(verbose_name='Заголовок', max_length=255), main_title = models.CharField(verbose_name=_(u'Заголовок'), max_length=255),
preview = models.TextField(verbose_name='Превью'), preview = models.TextField(verbose_name=_(u'Превью')),
description = models.TextField(verbose_name='Описание'), description = models.TextField(verbose_name=_(u'Описание')),
#---meta data #---meta data
title = models.CharField(max_length=250, blank=True), title = models.CharField(max_length=250, blank=True),
descriptions = models.CharField(max_length=250, blank=True), descriptions = models.CharField(max_length=250, blank=True),

@ -4,6 +4,7 @@ from django.conf import settings
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import URLValidator from django.core.validators import URLValidator
from django.utils.translation import ugettext as _
#models #models
from models import Organiser from models import Organiser
from country.models import Country from country.models import Country
@ -27,37 +28,37 @@ class OrganiserForm(forms.Form):
save function saves data in Organiser object. If it doesnt exist create new object save function saves data in Organiser object. If it doesnt exist create new object
""" """
url = forms.CharField(label='url', required=False) url = forms.CharField(label=_(u'url'), required=False)
#user = forms.ModelChoiceField(label='Пользователь', queryset=User.objects.all(), empty_label='',required=False) #user = forms.ModelChoiceField(label='Пользователь', queryset=User.objects.all(), empty_label='',required=False)
country = forms.ChoiceField(label='Страна', choices=[(item.id, item.name) for item in Country.objects.all()]) country = forms.ChoiceField(label=_(u'Страна'), choices=[(item.id, item.name) for item in Country.objects.all()])
city = forms.CharField(label='Город', widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
theme = forms.MultipleChoiceField(label='Тематики', choices=[(item.id, item.name) for item in Theme.objects.language().all()]) theme = forms.MultipleChoiceField(label=_(u'Тематики'), choices=[(item.id, item.name) for item in Theme.objects.language().all()])
place_exposition = forms.MultipleChoiceField(label='Места проведения выставок', required=False, place_exposition = forms.MultipleChoiceField(label=_(u'Места проведения выставок'), required=False,
choices=[(item.id, item.name) for item in PlaceExposition.objects.language().all()]) choices=[(item.id, item.name) for item in PlaceExposition.objects.language().all()])
place_conference = forms.MultipleChoiceField(label='Места проведения конференций', required=False, place_conference = forms.MultipleChoiceField(label=_(u'Места проведения конференций'), required=False,
choices=[(item.id, item.name) for item in PlaceConference.objects.all()]) choices=[(item.id, item.name) for item in PlaceConference.objects.all()])
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
tag = forms.CharField(label='Теги', widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
logo = forms.ImageField(label='Logo', required=False) logo = forms.ImageField(label=_(u'Logo'), required=False)
staff_number = forms.CharField(label='Количество сотрудников', required=False, staff_number = forms.CharField(label=_(u'Количество сотрудников'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество сотрудников'})) widget=forms.TextInput(attrs={'placeholder': _(u'Количество сотрудников')}))
#uses locationwidget #uses locationwidget
address = forms.CharField(label='Адрес', required=False, widget=LocationWidget) address = forms.CharField(label=_(u'Адрес'), required=False, widget=LocationWidget)
phone = forms.CharField(label='Телефон', required=False, phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label='Факс', required=False, fax = forms.CharField(label=_(u'Факс'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.CharField(label='Веб-сайт', required=False, web_page = forms.CharField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))
email = forms.EmailField(label='Email', required=False, email = forms.EmailField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))
events_number = forms.CharField(label='Количество мероприятий в год', required=False, events_number = forms.CharField(label=_(u'Количество мероприятий в год'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество'})) widget=forms.TextInput(attrs={'placeholder': _(u'Количество')}))
foundation = forms.CharField(label='Год основания', required=False, foundation = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'})) widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -71,20 +72,20 @@ class OrganiserForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['specialization_%s' % code] = forms.CharField(label='Специализация', required=False) self.fields['specialization_%s' % code] = forms.CharField(label=_(u'Специализация'), required=False)
self.fields['description_%s' % code] = forms.CharField(label='Описание', self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['representation_%s' % code] = forms.CharField(label='Представительства', required=False, max_length=255, self.fields['representation_%s' % code] = forms.CharField(label=_(u'Представительства'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['address_inf_%s' % code] = forms.CharField(label='Доп инф по адресу', self.fields['address_inf_%s' % code] = forms.CharField(label=_(u'Доп инф по адресу'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
@ -215,7 +216,7 @@ class OrganiserForm(forms.Form):
if phone.isdigit(): if phone.isdigit():
return phone return phone
else: else:
raise ValidationError('Введите правильный телефон') raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self): def clean_fax(self):
""" """
@ -234,7 +235,7 @@ class OrganiserForm(forms.Form):
if fax.isdigit(): if fax.isdigit():
return fax return fax
else: else:
raise ValidationError('Введите правильный факс') raise ValidationError(_(u'Введите правильный факс'))
class OrganiserFilterForm(AdminFilterForm): class OrganiserFilterForm(AdminFilterForm):

@ -34,39 +34,39 @@ class Organiser(TranslatableModel):
url = models.SlugField(verbose_name='URL', blank=True, max_length=255) url = models.SlugField(verbose_name='URL', blank=True, max_length=255)
#relations #relations
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True, country = models.ForeignKey('country.Country', verbose_name=_(u'Страна'), blank=True, null=True,
on_delete=models.PROTECT) on_delete=models.PROTECT)
city = models.ForeignKey('city.City', verbose_name='Город', blank=True, null=True, city = models.ForeignKey('city.City', verbose_name=_(u'Город'), blank=True, null=True,
on_delete=models.PROTECT,) on_delete=models.PROTECT,)
theme = models.ManyToManyField('theme.Theme', verbose_name='Отрасль', blank=True, null=True) theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Отрасль'), blank=True, null=True)
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True) tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'), blank=True, null=True)
#address. uses LocationField. saves data in json format #address. uses LocationField. saves data in json format
address = LocationField(verbose_name='Адресс', blank=True, null=True) address = LocationField(verbose_name=_(u'Адресс'), blank=True, null=True)
logo = models.ImageField(verbose_name='Logo', upload_to=logo_name, blank=True) logo = models.ImageField(verbose_name=_(u'Logo'), upload_to=logo_name, blank=True)
rating = models.IntegerField(default=0) rating = models.IntegerField(default=0)
phone = models.BigIntegerField(verbose_name='Телефон', blank=True, null=True) phone = models.BigIntegerField(verbose_name=_(u'Телефон'), blank=True, null=True)
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True) fax = models.BigIntegerField(verbose_name=_(u'Факс'), blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True) web_page = models.CharField(verbose_name=_(u'Веб-сайт'),max_length=255, blank=True)
email = models.EmailField(verbose_name='Email', blank=True) email = models.EmailField(verbose_name=_(u'Email'), blank=True)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True) facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True) twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True) linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True) vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
events_number = models.PositiveIntegerField(verbose_name='Количество мероприятий', blank=True, null=True) events_number = models.PositiveIntegerField(verbose_name=_(u'Количество мероприятий'), blank=True, null=True)
staff_number = models.PositiveIntegerField(verbose_name='Количество сотрудников', blank=True, null=True) staff_number = models.PositiveIntegerField(verbose_name=_(u'Количество сотрудников'), blank=True, null=True)
place_exposition = models.ManyToManyField('place_exposition.PlaceExposition', blank=True, null=True, place_exposition = models.ManyToManyField('place_exposition.PlaceExposition', blank=True, null=True,
related_name='organiser_place_exposition') related_name='organiser_place_exposition')
place_conference = models.ManyToManyField('place_conference.PlaceConference', blank=True, null=True, place_conference = models.ManyToManyField('place_conference.PlaceConference', blank=True, null=True,
related_name='organiser_place_conference') related_name='organiser_place_conference')
#translation fields #translation fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255, blank=True), name = models.CharField(verbose_name=_(u'Название'), max_length=255, blank=True),
specialization = models.CharField(verbose_name='Специализация', max_length=255, blank=True), specialization = models.CharField(verbose_name=_(u'Специализация'), max_length=255, blank=True),
description = models.TextField(verbose_name='Описание', blank=True), description = models.TextField(verbose_name=_(u'Описание'), blank=True),
representation = models.TextField(verbose_name='Представительства', blank=True), representation = models.TextField(verbose_name=_(u'Представительства'), blank=True),
address_inf = models.TextField(verbose_name='Доп инф по адресу', blank=True), address_inf = models.TextField(verbose_name=_(u'Доп инф по адресу'), blank=True),
#-----meta #-----meta
title = models.CharField(max_length=255, blank=True), title = models.CharField(max_length=255, blank=True),
descriptions = models.CharField(max_length=255, blank=True), descriptions = models.CharField(max_length=255, blank=True),

@ -1,3 +1,4 @@
{% load i18n %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html style="margin: 0; padding: 0; height: 100%;"> <html style="margin: 0; padding: 0; height: 100%;">
@ -16,15 +17,15 @@
<div class="logo"> <div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#"> <a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<img src="cid:logo" alt="Expomap.ru" /> <img src="cid:logo" alt="Expomap.ru" />
<b style="display: block; padding-left: 67px; margin-top: -5px;">Выставки, конференции, семинары</b> <b style="display: block; padding-left: 67px; margin-top: -5px;">{% trans "Выставки, конференции, семинары" %}</b>
</a> </a>
</div> </div>
</td> </td>
<td style="vertical-align: top; padding-top: 22px;"> <td style="vertical-align: top; padding-top: 22px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;"> <ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">СОБЫТИЯ</a></li> <li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "СОБЫТИЯ" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">МЕСТА</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">УЧАСТНИКИ</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "УЧАСТНИКИ" %}</a></li>
</ul> </ul>
<ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;"> <ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;">
@ -40,7 +41,7 @@
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;"> <table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr> <tr>
<td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >Воостановление пароля на портале <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td> <td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >{% trans "Воостановление пароля на портале" %} <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td>
</tr> </tr>
<tr> <tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;"> <td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -49,27 +50,27 @@
<tr valign="top"> <tr valign="top">
<td style="padding: 15px 0 36px 0;"> <td style="padding: 15px 0 36px 0;">
<p style="font-weight: bold;color: #003e79;margin: 0;">Добрый день, {{ user.first_name }}!</p> <p style="font-weight: bold;color: #003e79;margin: 0;">{% trans "Добрый день" %}, {{ user.first_name }}!</p>
</td> </td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
<td style="padding: 0 0 23px 0;"> <td style="padding: 0 0 23px 0;">
Вы или кто-то еще сделал запрос на сброс пароля на сайте <a href="{{ domain }}" style="text-decoration: none;border-bottom: 1px dashed #ee3824;color: #645a5a;">{{ domain }}</a> {% trans "Вы или кто-то еще сделал запрос на сброс пароля на сайте" %} <a href="{{ domain }}" style="text-decoration: none;border-bottom: 1px dashed #ee3824;color: #645a5a;">{{ domain }}</a>
</td> </td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
<td style="padding: 0 0 32px 0;"> <td style="padding: 0 0 32px 0;">
Вы можете восстановить доступ, нажав на кнопку ниже и указав новый пароль: {% trans "Вы можете восстановить доступ, нажав на кнопку ниже и указав новый пароль:" %}
</td> </td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
<td style="padding: 0 0 32px 0; text-align: center;"> <td style="padding: 0 0 32px 0; text-align: center;">
<a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 14px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="http{% if secure %}s{% endif %}://{{ site.domain }}{% url "password_reset_reset" token %}">востановить пароль</a> <a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 14px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="http{% if secure %}s{% endif %}://{{ site.domain }}{% url "password_reset_reset" token %}">{% trans "востановить пароль" %}</a>
</td> </td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
<td style="padding: 0 0 20px 0; text-align: left; "> <td style="padding: 0 0 20px 0; text-align: left; ">
Если вы не хотите сбрасывать пароль, просто <span style="border-bottom: 1px dashed #ee3824;">проигнорируйте</span> это сообщение {% blocktrans %}Если вы не хотите сбрасывать пароль, просто <span style="border-bottom: 1px dashed #ee3824;">проигнорируйте</span> это сообщение{% endblocktrans %}
</td> </td>
</tr> </tr>
@ -92,9 +93,9 @@
</td> </td>
<td style="vertical-align: top; padding: 25px 0 5px;"> <td style="vertical-align: top; padding: 25px 0 5px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 14px; line-height: 15px; font-weight: bold;"> <ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 14px; line-height: 15px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">СОБЫТИЯ</a></li> <li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "СОБЫТИЯ" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">МЕСТА</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">УЧАСТНИКИ</a></li> <li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "УЧАСТНИКИ" %}</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>

@ -3,6 +3,7 @@ from django import forms
from django.conf import settings from django.conf import settings
from functions.translate import fill_with_signal from functions.translate import fill_with_signal
from models import Gallery, Photo from models import Gallery, Photo
from django.utils.translation import ugettext as _
class GalleryForm(forms.Form): class GalleryForm(forms.Form):
@ -18,8 +19,8 @@ class GalleryForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['title_%s' % code] = forms.CharField(label='Заголовок', required=required) self.fields['title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=False) self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=False)
def save(self, obj=None): def save(self, obj=None):
data = self.cleaned_data data = self.cleaned_data
@ -34,8 +35,8 @@ class GalleryForm(forms.Form):
class PhotoForm(forms.Form): class PhotoForm(forms.Form):
image = forms.ImageField(label=u'Изображение', required=False) image = forms.ImageField(label=_(u'Изображение'), required=False)
sort = forms.IntegerField(label=u'Позиция', initial=10, required=False) sort = forms.IntegerField(label=_(u'Позиция'), initial=10, required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -49,8 +50,8 @@ class PhotoForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['title_%s' % code] = forms.CharField(label='Описание', required=False) self.fields['title_%s' % code] = forms.CharField(label=_(u'Описание'), required=False)
self.fields['caption_%s' % code] = forms.CharField(label='Заголовок', required=required) self.fields['caption_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required)
def save(self, obj=None): def save(self, obj=None):
data = self.cleaned_data data = self.cleaned_data

@ -1,4 +1,4 @@
# encoding: utf8 # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models, migrations from django.db import models, migrations

@ -9,6 +9,7 @@ from models import Photoreport
from functions.form_check import translit_with_separator from functions.form_check import translit_with_separator
from functions.translate import fill_with_signal from functions.translate import fill_with_signal
from functions.files import check_tmp_files from functions.files import check_tmp_files
from django.utils.translation import ugettext as _
class PhotoreportForm(forms.Form): class PhotoreportForm(forms.Form):
@ -31,16 +32,16 @@ class PhotoreportForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание', self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, id=None): def save(self, id=None):

@ -15,7 +15,7 @@ from functions.files import check_tmp_files
from functions.form_check import is_positive_integer, translit_with_separator from functions.form_check import is_positive_integer, translit_with_separator
from functions.custom_fields import LocationWidget from functions.custom_fields import LocationWidget
from functions.admin_forms import AdminFilterForm from functions.admin_forms import AdminFilterForm
from django.utils.translation import ugettext as _
class ConferenceForm(forms.Form): class ConferenceForm(forms.Form):
@ -27,45 +27,45 @@ class ConferenceForm(forms.Form):
save function saves data in PlaceConference object. If it doesnt exist create new object save function saves data in PlaceConference object. If it doesnt exist create new object
""" """
types = [(item1, item2) for item1, item2 in CONFERENCE_TYPE] types = [(item1, item2) for item1, item2 in CONFERENCE_TYPE]
type = forms.ChoiceField(label='Краткое описание', required=False, choices=types) type = forms.ChoiceField(label=_(u'Краткое описание'), required=False, choices=types)
logo = forms.ImageField(label='Logo', required=False, max_length=500) logo = forms.ImageField(label=_(u'Logo'), required=False, max_length=500)
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None) country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None)
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
city = forms.CharField(label='Город', widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
address = forms.CharField(label='Адресс', widget=LocationWidget, required=False) address = forms.CharField(label=_(u'Адресс'), widget=LocationWidget, required=False)
foundation_year = forms.CharField(label='Год основания', required=False, foundation_year = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'})) widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
phone = forms.CharField(label='Телефон', required=False, phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label='Факс', required=False, fax = forms.CharField(label=_(u'Факс'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.CharField(label='Веб-сайт', required=False, web_page = forms.CharField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))
email = forms.CharField(label='Email', required=False, email = forms.CharField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))
total_capacity = forms.CharField(label='Общая вместимость', required=False, total_capacity = forms.CharField(label=_(u'Общая вместимость'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Общая вместимость'})) widget=forms.TextInput(attrs={'placeholder': _(u'Общая вместимость')}))
amount_halls = forms.CharField(label='Количество залов', required=False, amount_halls = forms.CharField(label=_(u'Количество залов'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество залов'})) widget=forms.TextInput(attrs={'placeholder': _(u'Количество залов')}))
video_link = forms.CharField(label='Видео', required=False, video_link = forms.CharField(label=_(u'Видео'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите ссылку на видео'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите ссылку на видео')}))
#halls information #halls information
hall_name = forms.CharField(label='Название зала', required=False) hall_name = forms.CharField(label=_(u'Название зала'), required=False)
hall_number = forms.IntegerField(label='Номер зала', min_value=1, initial='1', required=False) hall_number = forms.IntegerField(label=_(u'Номер зала'), min_value=1, initial='1', required=False)
hall_capacity = forms.IntegerField(label='Вместимость зала', min_value='1', required=False) hall_capacity = forms.IntegerField(label=_(u'Вместимость зала'), min_value='1', required=False)
# #
exposition_hall = forms.BooleanField(label='Выставочный зал', required=False)#14 exposition_hall = forms.BooleanField(label=_(u'Выставочный зал'), required=False)#14
exp_hall_area = forms.CharField(label='Площадь выст. зала', required=False, exp_hall_area = forms.CharField(label=_(u'Площадь выст. зала'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Площадь выст. зала'}))#15 widget=forms.TextInput(attrs={'placeholder': _(u'Площадь выст. зала')}))#15
# #
wifi = forms.BooleanField(label='Wi-fi', required=False) wifi = forms.BooleanField(label='Wi-fi', required=False)
multimedia_equipment = forms.BooleanField(label='Мультимедийное оборудование', required=False) multimedia_equipment = forms.BooleanField(label=_(u'Мультимедийное оборудование'), required=False)
conference_call = forms.BooleanField(label='Конференц-связь', required=False) conference_call = forms.BooleanField(label=_(u'Конференц-связь'), required=False)
translate_equipment = forms.BooleanField(label='Оборудование для синхронного перевода', required=False) translate_equipment = forms.BooleanField(label=_(u'Оборудование для синхронного перевода'), required=False)
banquet_hall = forms.BooleanField(label='Банкетный зал', required=False) banquet_hall = forms.BooleanField(label=_(u'Банкетный зал'), required=False)
catering = forms.BooleanField(label='Кейтеринг', required=False) catering = forms.BooleanField(label=_(u'Кейтеринг'), required=False)
hotel = forms.BooleanField(label='Гостиница', required=False) hotel = forms.BooleanField(label=_(u'Гостиница'), required=False)
# #
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
# #
@ -83,20 +83,20 @@ class ConferenceForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) # self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required) #
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание', required=False, widget=CKEditorWidget) self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'), required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Полное описание', required=False, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Полное описание'), required=False, widget=CKEditorWidget)
self.fields['adress_%s' % code] = forms.CharField(label='Дополнительная инф по адресу', required=False, max_length=255, self.fields['adress_%s' % code] = forms.CharField(label=_(u'Дополнительная инф по адресу'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['total_year_action_%s' % code] = forms.CharField(label='Количество мероприятий в год', required=False, widget=CKEditorWidget) self.fields['total_year_action_%s' % code] = forms.CharField(label=_(u'Количество мероприятий в год'), required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['hall_capacity_%s' % code] = forms.CharField(label='Шаблон вместимости', self.fields['hall_capacity_%s' % code] = forms.CharField(label=_(u'Шаблон вместимости'),
widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False) widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False)
""" """
try: try:
@ -226,7 +226,7 @@ class ConferenceForm(forms.Form):
if phone.isdigit(): if phone.isdigit():
return phone return phone
else: else:
raise ValidationError('Введите правильный телефон') raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self): def clean_fax(self):
""" """
@ -245,7 +245,7 @@ class ConferenceForm(forms.Form):
if fax.isdigit(): if fax.isdigit():
return fax return fax
else: else:
raise ValidationError('Введите правильный факс') raise ValidationError(_(u'Введите правильный факс'))
def clean_total_capacity(self): def clean_total_capacity(self):
""" """

@ -15,6 +15,7 @@ from functions.files import check_tmp_files
from functions.form_check import is_positive_integer, translit_with_separator from functions.form_check import is_positive_integer, translit_with_separator
from functions.custom_fields import LocationWidget from functions.custom_fields import LocationWidget
from functions.admin_forms import AdminFilterForm from functions.admin_forms import AdminFilterForm
from django.utils.translation import ugettext as _
class ExpositionForm(forms.Form): class ExpositionForm(forms.Form):
@ -27,48 +28,48 @@ class ExpositionForm(forms.Form):
""" """
types = [(item1, item2) for item1, item2 in EXPOSITION_TYPE] types = [(item1, item2) for item1, item2 in EXPOSITION_TYPE]
type = forms.ChoiceField(required=False, choices=types) type = forms.ChoiceField(required=False, choices=types)
logo = forms.ImageField(label='Logo', required=False, max_length=500) logo = forms.ImageField(label=_(u'Logo'), required=False, max_length=500)
country = forms.ChoiceField(label='Страна', choices=[(c.id, c.name) for c in Country.objects.all()]) country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()])
# creates select input with empty choices cause it will be filled with ajax # creates select input with empty choices cause it will be filled with ajax
city = forms.CharField(label='Город', widget=forms.HiddenInput()) city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
address = forms.CharField(label='Адрес', widget=LocationWidget, required=False) address = forms.CharField(label=_(u'Адрес'), widget=LocationWidget, required=False)
phone = forms.CharField(label='Телефон', required=False, phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label='Факс', required=False, fax = forms.CharField(label=_(u'Факс'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'})) widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.URLField(label='Веб-сайт', required=False, web_page = forms.URLField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))# widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))#
email = forms.EmailField(label='Email', required=False, email = forms.EmailField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))# widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))#
# #
foundation_year = forms.CharField(label='Год основания', required=False, foundation_year = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'})) widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
total_area = forms.CharField(label='Общая выставочная площадь', required=False, total_area = forms.CharField(label='Общая выставочная площадь', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Общая выст. площадь'})) widget=forms.TextInput(attrs={'placeholder': _(u'Общая выст. площадь')}))
closed_area = forms.CharField(label='Закрытая выставочная площадь', required=False, closed_area = forms.CharField(label=_(u'Закрытая выставочная площадь'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Закр. выст. площадь'})) widget=forms.TextInput(attrs={'placeholder': _(u'Закр. выст. площадь')}))
open_area = forms.CharField(label='Открытая выставочная площадь', required=False, open_area = forms.CharField(label=_(u'Открытая выставочная площадь'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Откр. выст. площадь'})) widget=forms.TextInput(attrs={'placeholder': _(u'Откр. выст. площадь')}))
total_pavilions = forms.CharField(label='Количество павильонов', required=False, total_pavilions = forms.CharField(label=_(u'Количество павильонов'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество павильонов'})) widget=forms.TextInput(attrs={'placeholder': _(u'Количество павильонов')}))
total_halls = forms.CharField(label='Количество конференц залов', required=False, total_halls = forms.CharField(label=_(u'Количество конференц залов'), required=False,
widget=forms.TextInput(attrs={'placeholder': 'Конференц залы'})) widget=forms.TextInput(attrs={'placeholder': _(u'Конференц залы')}))
# #
wifi = forms.BooleanField(label='Wi-fi', required=False) wifi = forms.BooleanField(label='Wi-fi', required=False)
bank = forms.BooleanField(label='Банк/Банкоматы', required=False) bank = forms.BooleanField(label=_(u'Банк/Банкоматы'), required=False)
children_room = forms.BooleanField(label='Детская комната', required=False) children_room = forms.BooleanField(label=_(u'Детская комната'), required=False)
disabled_service = forms.BooleanField(label='Сервис для инвалидов', required=False) disabled_service = forms.BooleanField(label=_(u'Сервис для инвалидов'), required=False)
conference_centre = forms.BooleanField(label='Конгресс-центр', required=False) conference_centre = forms.BooleanField(label=_(u'Конгресс-центр'), required=False)
business_centre = forms.BooleanField(label='Бизнес-центр', required=False) business_centre = forms.BooleanField(label=_(u'Бизнес-центр'), required=False)
online_registration = forms.BooleanField(label='Онлайн регистрация', required=False) online_registration = forms.BooleanField(label=_(u'Онлайн регистрация'), required=False)
cafe = forms.BooleanField(label='Кафе', required=False) cafe = forms.BooleanField(label=_(u'Кафе'), required=False)
terminals = forms.BooleanField(label='Информационные терминалы', required=False) terminals = forms.BooleanField(label=_(u'Информационные терминалы'), required=False)
parking = forms.BooleanField(label='Парковка', required=False) parking = forms.BooleanField(label=_(u'Парковка'), required=False)
press_centre = forms.BooleanField(label='Пресс-центр', required=False) press_centre = forms.BooleanField(label=_(u'Пресс-центр'), required=False)
mobile_application = forms.BooleanField(label='Мобильное приложение', required=False) mobile_application = forms.BooleanField(label=_(u'Мобильное приложение'), required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -82,19 +83,19 @@ class ExpositionForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание', required=False, widget=CKEditorWidget)#5 self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'), required=False, widget=CKEditorWidget)#5
self.fields['description_%s' % code] = forms.CharField(label='Полное описание', required=False, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Полное описание'), required=False, widget=CKEditorWidget)
self.fields['adress_%s' % code] = forms.CharField(label='Дополнительная инф по адресу', required=False, max_length=255, self.fields['adress_%s' % code] = forms.CharField(label=_(u'Дополнительная инф по адресу'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
# #
self.fields['total_year_action_%s' % code] = forms.CharField(label='Количество мероприятий в год', required=False, widget=CKEditorWidget) self.fields['total_year_action_%s' % code] = forms.CharField(label=_(u'Количество мероприятий в год'), required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
@ -173,7 +174,7 @@ class ExpositionForm(forms.Form):
if phone.isdigit(): if phone.isdigit():
return phone return phone
else: else:
raise ValidationError('Введите правильный телефон') raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self): def clean_fax(self):
""" """
@ -192,7 +193,7 @@ class ExpositionForm(forms.Form):
if fax.isdigit(): if fax.isdigit():
return fax return fax
else: else:
raise ValidationError('Введите правильный факс') raise ValidationError(_(u'Введите правильный факс'))
@ -256,9 +257,9 @@ class PlaceExpositionFormDelete(forms.ModelForm):
class HallForm(forms.Form): class HallForm(forms.Form):
url = '/admin/place_exposition/add-hall/' url = '/admin/place_exposition/add-hall/'
number = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:30px'}),required=False, number = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:30px'}),required=False,
label='Номер') label=_(u'Номер'))
capacity = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:60px'}), required=False, capacity = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:60px'}), required=False,
label='Вместимость') label=_(u'Вместимость'))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
create dynamical translated fields fields create dynamical translated fields fields
@ -276,7 +277,7 @@ class HallForm(forms.Form):
def clean_capacity(self): def clean_capacity(self):
cleaned_data = super(HallForm, self).clean() cleaned_data = super(HallForm, self).clean()
capacity = cleaned_data.get('capacity').strip() capacity = cleaned_data.get('capacity').strip()
return is_positive_integer(capacity, 'Вместимость должна состоять из цифр') return is_positive_integer(capacity, _(u'Вместимость должна состоять из цифр'))
def save(self, place_exposition, id=None): def save(self, place_exposition, id=None):
if id: if id:
@ -292,7 +293,6 @@ class HallForm(forms.Form):
return hall return hall
class PlaceExpositionFilter(AdminFilterForm): class PlaceExpositionFilter(AdminFilterForm):
country = forms.MultipleChoiceField(choices=[(item.id, item.name) for item in list(Country.objects.all())], country = forms.MultipleChoiceField(choices=[(item.id, item.name) for item in list(Country.objects.all())],

@ -21,8 +21,8 @@ from exposition.models import Exposition
from place_conference.models import PlaceConference from place_conference.models import PlaceConference
from photologue.models import Gallery from photologue.models import Gallery
EXPOSITION_TYPE = (('Exposition complex', u'Выставочный комплекс'), ('Convention centre', u'Конгрессно-выставочный центр'), EXPOSITION_TYPE = (('Exposition complex', _(u'Выставочный комплекс')), ('Convention centre', _(u'Конгрессно-выставочный центр')),
('Exposition centre', u'Выставочный центр'),) ('Exposition centre', _(u'Выставочный центр')),)
dist=lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2 dist=lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2
@ -52,7 +52,7 @@ class PlaceExposition(TranslatableModel, ExpoMixin):
#type uses EnumField for creating Enum type field in Mysql database #type uses EnumField for creating Enum type field in Mysql database
type = EnumField(values = [item1 for item1, item2 in EXPOSITION_TYPE]) type = EnumField(values = [item1 for item1, item2 in EXPOSITION_TYPE])
#information #information
address = LocationField(verbose_name='Адресс') address = LocationField(verbose_name=_(u'Адресс'))
phone = models.BigIntegerField(blank=True, null=True) phone = models.BigIntegerField(blank=True, null=True)
fax = models.BigIntegerField(blank=True, null=True) fax = models.BigIntegerField(blank=True, null=True)
web_page = models.URLField(blank=True) web_page = models.URLField(blank=True)
@ -79,7 +79,7 @@ class PlaceExposition(TranslatableModel, ExpoMixin):
press_centre = models.NullBooleanField() press_centre = models.NullBooleanField()
mobile_application = models.NullBooleanField() mobile_application = models.NullBooleanField()
# #
logo = models.ImageField(verbose_name='Logo', upload_to=logo_name, blank=True, max_length=255) logo = models.ImageField(verbose_name=_(u'Logo'), upload_to=logo_name, blank=True, max_length=255)
rating = models.IntegerField(default=0) rating = models.IntegerField(default=0)
partner = models.NullBooleanField(default=0) partner = models.NullBooleanField(default=0)

@ -37,7 +37,7 @@ urlpatterns = required(
url(r'^translator_catalog/', include('specialist_catalog.admin_urls')), url(r'^translator_catalog/', include('specialist_catalog.admin_urls')),
url(r'^newsletters/', include('emencia.django.newsletter.admin_urls')), url(r'^newsletters/', include('emencia.django.newsletter.admin_urls')),
url(r'^stats/', include('stats_collector.admin_urls')), url(r'^stats/', include('stats_collector.admin_urls')),
# url(r'^rosetta/', include('rosetta.urls')), url(r'^rosetta/', include('rosetta.urls')),
url(r'^language/add/', 'directories.admin.language_add'), url(r'^language/add/', 'directories.admin.language_add'),
url(r'^currency/add/', 'directories.admin.currency_add'), url(r'^currency/add/', 'directories.admin.currency_add'),

@ -372,7 +372,7 @@ INSTALLED_APPS = (
'social.apps.django_app.default', # social auth 'social.apps.django_app.default', # social auth
'core', 'core',
'specialist_catalog', 'specialist_catalog',
# 'rosetta', 'rosetta',
# 'statsy', # 'statsy',
) )

@ -3,6 +3,7 @@ from django.db import models
from hvad.models import TranslatableModel, TranslatedFields from hvad.models import TranslatableModel, TranslatedFields
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.utils.translation import ugettext as _
@ -23,8 +24,8 @@ class Review(models.Model):
user = models.ForeignKey('accounts.User', blank=True, null=True, user = models.ForeignKey('accounts.User', blank=True, null=True,
on_delete=models.PROTECT, related_name='reviews') on_delete=models.PROTECT, related_name='reviews')
comment = models.TextField(verbose_name='Отзыв') comment = models.TextField(verbose_name=_(u'Отзыв'))
rating = models.SmallIntegerField(verbose_name='Оценка', blank=True, null=True) rating = models.SmallIntegerField(verbose_name=_(u'Оценка'), blank=True, null=True)
#field saves information about creating and changing model #field saves information about creating and changing model
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)

@ -5,6 +5,7 @@ from ckeditor.widgets import CKEditorWidget
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.core.validators import validate_email, URLValidator from django.core.validators import validate_email, URLValidator
from django.utils.translation import ugettext as _
#models #models
from models import Seminar, CURRENCY, Statistic from models import Seminar, CURRENCY, Statistic
from country.models import Country from country.models import Country
@ -33,33 +34,33 @@ class SeminarCreateForm(forms.Form):
""" """
currencies = [(item, item) for item in CURRENCY] currencies = [(item, item) for item in CURRENCY]
data_begin = forms.DateTimeField(label='Дата и время начала') data_begin = forms.DateTimeField(label=_(u'Дата и время начала'))
data_end = forms.DateTimeField(label='Дата и время оконочания') data_end = forms.DateTimeField(label=_(u'Дата и время оконочания'))
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None) country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None)
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all()) theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all())
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
city = forms.ChoiceField(label='Город', choices=[('','')]) city = forms.ChoiceField(label=_(u'Город'), choices=[('','')])
tag = forms.MultipleChoiceField(label='Теги', required=False) tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
address = forms.CharField(label='Адрес', required=False, widget=LocationWidget)#google maps api address = forms.CharField(label=_(u'Адрес'), required=False, widget=LocationWidget)#google maps api
web_page = forms.CharField(label='Веб страница', required=False) web_page = forms.CharField(label=_(u'Веб страница'), required=False)
link = forms.CharField(label='Линк на регистрацию', required=False) link = forms.CharField(label=_(u'Линк на регистрацию'), required=False)
foundation_year = forms.CharField(label='Год основания', required=False) foundation_year = forms.CharField(label=_(u'Год основания'), required=False)
members = forms.CharField(label='Посетители', required=False) members = forms.CharField(label=_(u'Посетители'), required=False)
visitors = forms.CharField(label='Участники', required=False) visitors = forms.CharField(label=_(u'Участники'), required=False)
discount = forms.CharField(label='Cкидка(%)', required=False) discount = forms.CharField(label=_(u'Cкидка(%)'), required=False)
quality_label = forms.MultipleChoiceField(label='Метки', required=False, quality_label = forms.MultipleChoiceField(label=_(u'Метки'), required=False,
choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')], choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')],
widget=forms.CheckboxSelectMultiple()) widget=forms.CheckboxSelectMultiple())
# #
currency = forms.ChoiceField(label='Валюта', choices=currencies, required=False) currency = forms.ChoiceField(label=_(u'Валюта'), choices=currencies, required=False)
tax = forms.BooleanField(label='Налог включен', initial=True, required=False) tax = forms.BooleanField(label=_(u'Налог включен'), initial=True, required=False)
min_price = forms.CharField(label='Минимальная цена', required=False) min_price = forms.CharField(label=_(u'Минимальная цена'), required=False)
max_price = forms.CharField(label='Максимальная цена', required=False) max_price = forms.CharField(label=_(u'Максимальная цена'), required=False)
expohit = forms.BooleanField(label='Expohit', required=False) expohit = forms.BooleanField(label=_(u'Expohit'), required=False)
canceled = forms.BooleanField(label='Отменена', required=False) canceled = forms.BooleanField(label=_(u'Отменена'), required=False)
moved = forms.BooleanField(label='Перенесена', required=False) moved = forms.BooleanField(label=_(u'Перенесена'), required=False)
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
# #
@ -78,19 +79,19 @@ class SeminarCreateForm(forms.Form):
# uses enumerate for detect iteration number # uses enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание', self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['programm_%s' % code] = forms.CharField(label='Описание', self.fields['programm_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
self.fields['discount_description_%s' % code] = forms.CharField(label='Условия и скидки', self.fields['discount_description_%s' % code] = forms.CharField(label=_(u'Условия и скидки'),
required=False, widget=CKEditorWidget) required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Дескрипшен'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Кейвордс'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
#creates select inputs ind fill it #creates select inputs ind fill it
#!service has bitfield. uncomment when country data will be filled #!service has bitfield. uncomment when country data will be filled
@ -168,7 +169,7 @@ class SeminarCreateForm(forms.Form):
seminar = Seminar.objects.filter(url=translit_with_separator(name_ru)) seminar = Seminar.objects.filter(url=translit_with_separator(name_ru))
if seminar and str(seminar[0].id) != id: if seminar and str(seminar[0].id) != id:
msg = 'Семинар с таким названием уже существует' msg = _(u'Семинар с таким названием уже существует')
self._errors['name_ru'] = ErrorList([msg]) self._errors['name_ru'] = ErrorList([msg])
del self.cleaned_data['name_ru'] del self.cleaned_data['name_ru']
@ -261,9 +262,9 @@ class SeminarChangeForm(SeminarCreateForm):
add some fields to SeminarCreateForm add some fields to SeminarCreateForm
""" """
organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False) organiser = forms.ModelMultipleChoiceField(label=_(u'Организаторы'), queryset=Organiser.objects.all(), required=False)
company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label=_(u'Компании'), queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) users = forms.ModelMultipleChoiceField(label=_(u'Пользователи'), queryset=User.objects.all(), required=False)
class SeminarDeleteForm(forms.ModelForm): class SeminarDeleteForm(forms.ModelForm):

@ -6,6 +6,7 @@ import copy
from bitfield import BitField from bitfield import BitField
from service.models import Service from service.models import Service
from functions.db import db_table_exists from functions.db import db_table_exists
from django.utils.translation import ugettext as _
# #
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
@ -33,34 +34,34 @@ class Seminar(TranslatableModel, EventMixin, ExpoMixin):
services = BitField(flags=flags) services = BitField(flags=flags)
url = models.SlugField(unique=True) url = models.SlugField(unique=True)
data_begin = models.DateTimeField(verbose_name='Дата начала') data_begin = models.DateTimeField(verbose_name=_(u'Дата начала'))
data_end = models.DateTimeField(verbose_name='Дата окончания') data_end = models.DateTimeField(verbose_name=_(u'Дата окончания'))
#relations #relations
country = models.ForeignKey('country.Country', verbose_name='Страна', on_delete=models.PROTECT) country = models.ForeignKey('country.Country', verbose_name=_(u'Страна'), on_delete=models.PROTECT)
city = models.ForeignKey('city.City', verbose_name='Город', on_delete=models.PROTECT) city = models.ForeignKey('city.City', verbose_name=_(u'Город'), on_delete=models.PROTECT)
address = LocationField(verbose_name='Адрес', blank=True) address = LocationField(verbose_name='Адрес', blank=True)
theme = models.ManyToManyField('theme.Theme', verbose_name='Тематики', theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики'),
related_name='seminar_themes') related_name='seminar_themes')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'),
blank=True, null=True, related_name='seminar_tags') blank=True, null=True, related_name='seminar_tags')
organiser = models.ManyToManyField('organiser.Organiser', verbose_name='Организатор', organiser = models.ManyToManyField('organiser.Organiser', verbose_name=_(u'Организатор'),
blank=True, null=True, related_name='seminar_organisers') blank=True, null=True, related_name='seminar_organisers')
company = models.ManyToManyField('company.Company', verbose_name='Компании', company = models.ManyToManyField('company.Company', verbose_name=_(u'Компании'),
blank=True, null=True, related_name='seminar_companies') blank=True, null=True, related_name='seminar_companies')
users = models.ManyToManyField('accounts.User', verbose_name='Посетители выставки', users = models.ManyToManyField('accounts.User', verbose_name=_(u'Посетители выставки'),
blank=True, null=True, related_name='seminar_users') blank=True, null=True, related_name='seminar_users')
#!service has bitfield uncomment when country data will be filled #!service has bitfield uncomment when country data will be filled
#service = models.ManyToManyField('service.Service', verbose_name='Услуги', blank=True, null=True) #service = models.ManyToManyField('service.Service', verbose_name='Услуги', blank=True, null=True)
#periodic = models.FloatField(verbose_name='Переодичность', blank=True, null=True) в семинаре под вопросом здесь #periodic = models.FloatField(verbose_name='Переодичность', blank=True, null=True) в семинаре под вопросом здесь
web_page = models.CharField(verbose_name='Вебсайт', max_length=255, blank=True) web_page = models.CharField(verbose_name=_(u'Вебсайт'), max_length=255, blank=True)
link = models.CharField(verbose_name='Линк на регистрацию', max_length=255, blank=True) link = models.CharField(verbose_name=_(u'Линк на регистрацию'), max_length=255, blank=True)
discount = models.PositiveIntegerField(verbose_name='Скидка', blank=True, null=True) discount = models.PositiveIntegerField(verbose_name=_(u'Скидка'), blank=True, null=True)
# #
currency = EnumField(values=CURRENCY, default='RUB') currency = EnumField(values=CURRENCY, default='RUB')
tax = models.BooleanField(verbose_name='Налог', default=1) tax = models.BooleanField(verbose_name=_(u'Налог'), default=1)
min_price = models.PositiveIntegerField(verbose_name='Минимальная цена', blank=True, null=True) min_price = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена'), blank=True, null=True)
max_price = models.PositiveIntegerField(verbose_name='Максимальная цена', blank=True, null=True) max_price = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена'), blank=True, null=True)
expohit = models.BooleanField(verbose_name='Expohit', default=0) expohit = models.BooleanField(verbose_name='Expohit', default=0)
#administrator can cancel seminar #administrator can cancel seminar
@ -74,15 +75,15 @@ class Seminar(TranslatableModel, EventMixin, ExpoMixin):
files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id') files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id')
# statistic # statistic
foundation_year = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation_year = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Посетитеил', blank=True, null=True) visitors = models.PositiveIntegerField(verbose_name=_(u'Посетитеил'), blank=True, null=True)
members = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True) members = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
#translated fields #translated fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255), name = models.CharField(verbose_name=_(u'Название'), max_length=255),
main_title = models.TextField(verbose_name='Краткое описание', blank=True), main_title = models.TextField(verbose_name=_(u'Краткое описание'), blank=True),
programm = models.TextField(verbose_name='Описание', blank=True), programm = models.TextField(verbose_name=_(u'Описание'), blank=True),
discount_description = models.TextField(verbose_name='Условия и Скидки', blank=True), discount_description = models.TextField(verbose_name=_(u'Условия и Скидки'), blank=True),
#-----meta data #-----meta data
title = models.CharField(max_length=250), title = models.CharField(max_length=250),
descriptions = models.CharField(max_length=250), descriptions = models.CharField(max_length=250),
@ -157,9 +158,9 @@ class Seminar(TranslatableModel, EventMixin, ExpoMixin):
class Statistic(models.Model): class Statistic(models.Model):
seminar = models.ForeignKey(Seminar, related_name='statistic') seminar = models.ForeignKey(Seminar, related_name='statistic')
year = models.PositiveIntegerField(verbose_name='Год') year = models.PositiveIntegerField(verbose_name=_(u'Год'))
members = models.PositiveIntegerField(verbose_name='Посетители') members = models.PositiveIntegerField(verbose_name=_(u'Посетители'))
visitors = models.PositiveIntegerField(verbose_name='Участники') visitors = models.PositiveIntegerField(verbose_name=_(u'Участники'))
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-

@ -5,6 +5,7 @@ from django.conf import settings
from django.forms.util import ErrorList from django.forms.util import ErrorList
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
from functions.translate import fill_with_signal from functions.translate import fill_with_signal
from django.utils.translation import ugettext as _
#models #models
from models import Service from models import Service
from country.models import Country, City from country.models import Country, City
@ -26,8 +27,8 @@ class ServiceForm(forms.Form):
# city = forms.MultipleChoiceField(required=False, choices="") # city = forms.MultipleChoiceField(required=False, choices="")
url = forms.CharField(label='url', required=False) url = forms.CharField(label='url', required=False)
price = forms.IntegerField(label='Цена', required=False, price = forms.IntegerField(label=_(u'Цена'), required=False,
widget=forms.TextInput(attrs={'placeholder':'Валюта'})) widget=forms.TextInput(attrs={'placeholder': _(u'Валюта')}))
#price = forms.CharField(label='Цена', required=False, #price = forms.CharField(label='Цена', required=False,
# widget=forms.TextInput(attrs={'placeholder':'Валюта'})) # widget=forms.TextInput(attrs={'placeholder':'Валюта'}))
@ -46,16 +47,16 @@ class ServiceForm(forms.Form):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields # first iteration is a default lang so it required fields
required = True if lid == 0 else False required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Названия', required=required) self.fields['name_%s' % code] = forms.CharField(label=_(u'Названия'), required=required)
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required, widget=CKEditorWidget) self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=required, widget=CKEditorWidget) self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=required, widget=CKEditorWidget)
self.fields['advantage_%s' % code] = forms.CharField(label='Преимущества', required=False, widget=CKEditorWidget) self.fields['advantage_%s' % code] = forms.CharField(label=_(u'Преимущества'), required=False, widget=CKEditorWidget)
#meta data #meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, self.fields['title_%s' % code] = forms.CharField(label=_(u'Тайтл'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Description', required=False, max_length=255, self.fields['keywords_%s' % code] = forms.CharField(label=_(u'Description'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Keywords', required=False, max_length=255, self.fields['descriptions_%s' % code] = forms.CharField(label=_(u'Keywords'), required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'})) widget=forms.TextInput(attrs={'style':'width: 550px'}))
@ -110,7 +111,7 @@ class ServiceForm(forms.Form):
service = Service.objects.filter(url=translit_with_separator(url)) service = Service.objects.filter(url=translit_with_separator(url))
if service and str(service[0].id) != id: if service and str(service[0].id) != id:
msg = 'Такой урл уже занят' msg = _(u'Такой урл уже занят')
self._errors['url'] = ErrorList([msg]) self._errors['url'] = ErrorList([msg])
del self.cleaned_data['url'] del self.cleaned_data['url']
@ -134,16 +135,16 @@ from django.db.models.query import EmptyQuerySet
class LinkedServiceForm(forms.ModelForm): class LinkedServiceForm(forms.ModelForm):
type = forms.MultipleChoiceField(label='Тип', choices = [(x, x) for x in list(Service.type)], widget = forms.CheckboxSelectMultiple, required=False) type = forms.MultipleChoiceField(label=_(u'Тип'), choices = [(x, x) for x in list(Service.type)], widget = forms.CheckboxSelectMultiple, required=False)
expositions = forms.CharField(label='Выставки', widget=forms.HiddenInput,required=False) expositions = forms.CharField(label=_(u'Выставки'), widget=forms.HiddenInput,required=False)
conferences = forms.CharField(label='Конференции', widget=forms.HiddenInput, required=False) conferences = forms.CharField(label=_(u'Конференции'), widget=forms.HiddenInput, required=False)
countries = forms.MultipleChoiceField(label='Страны', choices=[(c.id, c.name) for c in list(set(Country.objects.language()))]) countries = forms.MultipleChoiceField(label=_(u'Страны'), choices=[(c.id, c.name) for c in list(set(Country.objects.language()))])
class Meta: class Meta:
model = LinkedService model = LinkedService
fields = ['countries', 'exclude_countries', 'expositions', 'conferences'] fields = ['countries', 'exclude_countries', 'expositions', 'conferences']
help_text = { help_text = {
'exclude_countries': u'При отсутствии стран этот флаг значит ВСЕ страны!' 'exclude_countries': _(u'При отсутствии стран этот флаг значит ВСЕ страны!')
} }
def clean_countries(self): def clean_countries(self):

@ -4,6 +4,7 @@ from django.db import models
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
from bitfield import BitField from bitfield import BitField
from django.utils.translation import ugettext as _
CURENCIES = ('', 'USD', 'RUB', 'EUR') CURENCIES = ('', 'USD', 'RUB', 'EUR')
@ -130,10 +131,10 @@ class Visit(AbstractOrder):
excursion = models.BooleanField() excursion = models.BooleanField()
notes = models.TextField(blank=True) notes = models.TextField(blank=True)
ADVERTYSE_TYPES = ((u'Рекламировать участника', u'Рекламировать участника'), ADVERTYSE_TYPES = ((u'Рекламировать участника', _(u'Рекламировать участника')),
(u'Баннерная реклама', u'Баннерная реклама'), (u'Баннерная реклама', _(u'Баннерная реклама')),
(u'Приоритетное размещение событий в каталоге',u'Приоритетное размещение событий в каталоге'), (u'Приоритетное размещение событий в каталоге', _(u'Приоритетное размещение событий в каталоге')),
(u'Персональная визитка Вашей компании',u'Персональная визитка Вашей компании')) (u'Персональная визитка Вашей компании', _(u'Персональная визитка Вашей компании')))
class Advertising(AbstractOrder): class Advertising(AbstractOrder):
type = models.CharField(max_length=255, blank=True, null=True) type = models.CharField(max_length=255, blank=True, null=True)
@ -150,10 +151,10 @@ class CallBack(models.Model):
class LinkedService(models.Model): class LinkedService(models.Model):
service = models.ForeignKey(Service, blank=False) service = models.ForeignKey(Service, blank=False)
countries = models.ManyToManyField('country.Country', blank=True, verbose_name=u"Страны") countries = models.ManyToManyField('country.Country', blank=True, verbose_name=_(u"Страны"))
exclude_countries = models.BooleanField(default=False, verbose_name=u"Исключить страны") exclude_countries = models.BooleanField(default=False, verbose_name=_(u"Исключить страны"))
expositions = models.ManyToManyField('exposition.Exposition', blank=True, verbose_name= u"Выставки") expositions = models.ManyToManyField('exposition.Exposition', blank=True, verbose_name= _(u"Выставки"))
conferences = models.ManyToManyField('conference.Conference', blank=True, verbose_name=u'Конференции') conferences = models.ManyToManyField('conference.Conference', blank=True, verbose_name=_(u'Конференции'))
def update_countries_flag(self): def update_countries_flag(self):
from country.models import Country from country.models import Country

@ -5,6 +5,7 @@ from theme.models import Theme
from .models import Html, LandingComment, LandingParticipationComment from .models import Html, LandingComment, LandingParticipationComment
from article.models import Article from article.models import Article
from functions.forms import ExpoTranslatableModelForm, ExpoTranslatableModelForm_ from functions.forms import ExpoTranslatableModelForm, ExpoTranslatableModelForm_
from django.utils.translation import ugettext as _
class HtmlForm(ExpoTranslatableModelForm): class HtmlForm(ExpoTranslatableModelForm):
@ -21,7 +22,7 @@ class CommentForm(ExpoTranslatableModelForm_):
@property @property
def verbose(self): def verbose(self):
return u'Редактировать комментарий' if self.instance.pk else u'Создать комментарий' return _(u'Редактировать комментарий') if self.instance.pk else _(u'Создать комментарий')
class ParticipationCommentForm(CommentForm): class ParticipationCommentForm(CommentForm):
@ -47,7 +48,7 @@ class MainPageThemes(forms.Form):
class MainPageNews(forms.Form): class MainPageNews(forms.Form):
main_page_news = forms.CharField(label=u'Новости', widget=forms.HiddenInput(), required=False,) main_page_news = forms.CharField(label=_(u'Новости'), widget=forms.HiddenInput(), required=False,)
def save(self): def save(self):
data = self.cleaned_data data = self.cleaned_data

@ -7,6 +7,7 @@ from country.models import Country
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.utils.translation import get_language from django.utils.translation import get_language
import copy import copy
from django.utils.translation import ugettext as _
# types of catalog # types of catalog
_country = 1 _country = 1
@ -14,11 +15,11 @@ _city = 2
class Specialist(models.Model): class Specialist(models.Model):
name = models.CharField(max_length=255, verbose_name=u"Полное имя", blank=False) name = models.CharField(max_length=255, verbose_name=_(u"Полное имя"), blank=False)
languages = models.CharField(max_length=255, verbose_name=u"Языки") languages = models.CharField(max_length=255, verbose_name=_(u"Языки"))
city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=u"Город", blank=True) city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=_(u"Город"), blank=True)
country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=u"Страна") country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=_(u"Страна"))
photo = models.ImageField(verbose_name=u"Фото", upload_to="specialist_catalog/specialist_photo/", blank=True) photo = models.ImageField(verbose_name=_(u"Фото"), upload_to="specialist_catalog/specialist_photo/", blank=True)
def __unicode__(self): def __unicode__(self):
@ -28,22 +29,22 @@ class Specialist(models.Model):
class SpecialistCatalog(TranslatableModel): class SpecialistCatalog(TranslatableModel):
_country = 1 _country = 1
_city = 2 _city = 2
price = models.IntegerField(verbose_name=u"Цена", default=200) price = models.IntegerField(verbose_name=_(u"Цена"), default=200)
currency = models.CharField(max_length=255, verbose_name=u"Валюта", default=u"EUR") currency = models.CharField(max_length=255, verbose_name=_(u"Валюта"), default=u"EUR")
logo = models.ImageField(db_column= "logo_preview", verbose_name=u"Логотип", blank=True, upload_to='specialist_catalog/logo_preview/') logo = models.ImageField(db_column= "logo_preview", verbose_name=_(u"Логотип"), blank=True, upload_to='specialist_catalog/logo_preview/')
place_photo = models.ImageField(verbose_name=u"Фото для города", blank=True, upload_to='specialist_catalog/place_photo/') place_photo = models.ImageField(verbose_name=_(u"Фото для города"), blank=True, upload_to='specialist_catalog/place_photo/')
specialists = models.ManyToManyField(Specialist, verbose_name=u"Специалисты", blank=True) specialists = models.ManyToManyField(Specialist, verbose_name=_(u"Специалисты"), blank=True)
city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=u"Город", blank=True, null=True) city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=_(u"Город"), blank=True, null=True)
country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=u"Страна", blank=False) country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=_(u"Страна"), blank=False)
type = models.PositiveSmallIntegerField(verbose_name=u"Тип(Страна/Город)", default=2) type = models.PositiveSmallIntegerField(verbose_name=_(u"Тип(Страна/Город)"), default=2)
objects = TranslationManager() objects = TranslationManager()
translations = TranslatedFields( translations = TranslatedFields(
title=models.CharField(max_length=255, verbose_name=u"Заголовок"), title=models.CharField(max_length=255, verbose_name=_(u"Заголовок")),
main_descr=models.CharField(max_length=1000, verbose_name=u"Краткое описание"), main_descr=models.CharField(max_length=1000, verbose_name=_(u"Краткое описание")),
benefits=models.CharField(max_length=2000, verbose_name=u"Преимущества"), benefits=models.CharField(max_length=2000, verbose_name=_(u"Преимущества")),
big_cities=models.TextField(verbose_name=u"Крупные города", blank=True) big_cities=models.TextField(verbose_name=_(u"Крупные города"), blank=True)
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -98,11 +99,11 @@ class SpecialistCatalog(TranslatableModel):
class Feedback(models.Model): class Feedback(models.Model):
company = models.CharField(max_length=255, verbose_name=u"Название компании") company = models.CharField(max_length=255, verbose_name=_(u"Название компании"))
name = models.CharField(max_length=100, verbose_name=u"Имя") name = models.CharField(max_length=100, verbose_name=_(u"Имя"))
text = models.CharField(max_length=5000, verbose_name=u"Текст отзыва") text = models.CharField(max_length=5000, verbose_name=_(u"Текст отзыва"))
logo = models.ImageField(verbose_name=u"Логотип компании", upload_to='specialist_catalog/feedback_logo/', blank=True) logo = models.ImageField(verbose_name=_(u"Логотип компании"), upload_to='specialist_catalog/feedback_logo/', blank=True)
catalog = models.ForeignKey(SpecialistCatalog, verbose_name=u"Страница", blank=False) catalog = models.ForeignKey(SpecialistCatalog, verbose_name=_(u"Страница"), blank=False)
def __unicode__(self): def __unicode__(self):
return "Feedback from %s" % self.company return "Feedback from %s" % self.company

@ -1,4 +1,5 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %}
{% block body %} {% block body %}
@ -12,8 +13,8 @@
<thead> <thead>
<tr> <tr>
<th>Объект</th> <th>{% trans "Объект" %}</th>
<th>ссылка для отслеживания</th> <th>{% trans "ссылка для отслеживания" %}</th>
<th>&nbsp;</th> <th>&nbsp;</th>
<th>&nbsp;</th> <th>&nbsp;</th>
</tr> </tr>
@ -23,8 +24,8 @@
<tr> <tr>
<td>{{ item }}</td> <td>{{ item }}</td>
<td>{{request.get_host}}{{ item.get_click_link }}</td> <td>{{request.get_host}}{{ item.get_click_link }}</td>
<td><a href="{% url 'expobanner-update_link' item.id %}">Изменить</a> </td> <td><a href="{% url 'expobanner-update_link' item.id %}">{% trans "Изменить" %}</a> </td>
<td><a href="{% url 'expobanner_stat_link' item.id %}">Статистика</a> </td> <td><a href="{% url 'expobanner_stat_link' item.id %}">{% trans "Статистика" %}</a> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
@ -34,5 +35,5 @@
{# pagination #} {# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div> </div>
<a href="{% url 'expobanner-baneers_control' %}">Назад к управлению баннерами</a> <a href="{% url 'expobanner-baneers_control' %}">{% trans "Назад к управлению баннерами" %}</a>
{% endblock %} {% endblock %}

@ -49,6 +49,7 @@
<li><a href="{% url 'linked_service_all' %}">Управление услугами</a></li> <li><a href="{% url 'linked_service_all' %}">Управление услугами</a></li>
<li><a href="/admin/settings/main-page/">Главная страница</a></li> <li><a href="/admin/settings/main-page/">Главная страница</a></li>
<li><a href="/admin/meta/all/">Мета</a></li> <li><a href="/admin/meta/all/">Мета</a></li>
<li><a href="/admin/rosetta/">Перевод</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="/admin/import-theme">Импорт тематик</a></li> <li><a href="/admin/import-theme">Импорт тематик</a></li>

@ -1,17 +1,18 @@
{% extends 'base_catalog.html' %} {% extends 'base_catalog.html' %}
{% load i18n %}
{% block content_list %} {% block content_list %}
<div class="page-title"> <div class="page-title">
<h1>Запрашиваемая страница не найдена</h1> <h1>{% trans "Запрашиваемая страница не найдена" %}</h1>
</div> </div>
<div class="m-article error-404"> <div class="m-article error-404">
<span class="figure">404:</span> <span class="figure">404:</span>
<p class="title">Возможно у нее изменился адрес или же она была удалена.<br> Воспользуйтесь поиском по названию, расширенной формой поиска или каталогом событий.</p> <p class="title">{% trans "Возможно у нее изменился адрес или же она была удалена.<br> Воспользуйтесь поиском по названию, расширенной формой поиска или каталогом событий." %}</p>
<div class="clearfix"></div> <div class="clearfix"></div>
<hr/> <hr/>
<section> <section>
<h2>Каталог выставок</h2> <h2>{% trans "Каталог выставок" %}</h2>
<ul class="items-list"> <ul class="items-list">
{% for item in expo_themes %} {% for item in expo_themes %}
<li><i class="fa fa-circle"></i><a href="/expo/theme/{{ item.url }}/">{{ item.name }}&nbsp;({{ item.expo_count }})</a></li> <li><i class="fa fa-circle"></i><a href="/expo/theme/{{ item.url }}/">{{ item.name }}&nbsp;({{ item.expo_count }})</a></li>
@ -20,7 +21,7 @@
</section> </section>
<hr/> <hr/>
<section > <section >
<h2>Каталог конференций</h2> <h2>{% trans "Каталог конференций" %}</h2>
<ul class="items-list"> <ul class="items-list">
{% for item in conf_themes %} {% for item in conf_themes %}
<li><i class="fa fa-circle"></i><a href="/conference/theme/{{ item.url }}/">{{ item.name }}&nbsp;({{ item.conference_count }})</a></li> <li><i class="fa fa-circle"></i><a href="/conference/theme/{{ item.url }}/">{{ item.name }}&nbsp;({{ item.conference_count }})</a></li>

@ -31,7 +31,7 @@
</header> </header>
<div class="i-descr"> <div class="i-descr">
<p>Компания Serve Businesses Worldwide предлагает Вам возможность заказать услуги русскоговорящих переводчиков со знанием английского языка практически непосредственно в Великобритании.</p> <p>{% trans "Компания Serve Businesses Worldwide предлагает Вам возможность заказать услуги русскоговорящих переводчиков со знанием английского языка практически непосредственно в Великобритании." %}</p>
</div> </div>
</div> </div>

@ -28,8 +28,8 @@
</header> </header>
<div class="i-descr"> <div class="i-descr">
<p>Компания Serve Businesses Worldwide предлагает Вам возможность заказать услуги русскоговорящих переводчиков со знанием английского языка практически непосредственно в Великобритании.</p> <p>{% trans "Компания Serve Businesses Worldwide предлагает Вам возможность заказать услуги русскоговорящих переводчиков со знанием английского языка практически непосредственно в Великобритании." %}</p>
<p>Ниже приведен список наиболее часто востребованных территориальных направлений для оказания услуг перевода в Великобритании. Приведенный перечень не является исчерпывающим, поэтому, если Вы не нашли нужный Вам город, обратитесь к нашим консультантам. </p> <p>{% trans "Ниже приведен список наиболее часто востребованных территориальных направлений для оказания услуг перевода в Великобритании. Приведенный перечень не является исчерпывающим, поэтому, если Вы не нашли нужный Вам город, обратитесь к нашим консультантам." %} </p>
</div> </div>
<br> <br>
{% if object.latitude and object.longitude %} {% if object.latitude and object.longitude %}

@ -35,7 +35,7 @@
<h1>{{ object.get_full_name }}</h1> <h1>{{ object.get_full_name }}</h1>
<p><span class="icon1"></span><b>{{ object.translator.languages }}</b></p> <p><span class="icon1"></span><b>{{ object.translator.languages }}</b></p>
<p>{% ifequal object.translator.gender 'female' %}<span class="icon2"></span>{% endifequal %}{{ object.translator.birth|how_many_years }} лет{% if object.translator.car %}<span class="icon3"></span>Есть личный автомобиль</p>{% endif %} <p>{% ifequal object.translator.gender 'female' %}<span class="icon2"></span>{% endifequal %}{{ object.translator.birth|how_many_years }} лет{% if object.translator.car %}<span class="icon3"></span>{% trans "Есть личный автомобиль" %}</p>{% endif %}
</div> </div>
<div class="profile_top_right_1"> <div class="profile_top_right_1">
{% if object.profile.country %} {% if object.profile.country %}

@ -54,7 +54,7 @@
<a href="{{ blog.get_permanent_url }}" title="">{% include 'includes/show_logo.html' with obj=blog %}</a> <a href="{{ blog.get_permanent_url }}" title="">{% include 'includes/show_logo.html' with obj=blog %}</a>
<h3><a href="{{ blog.get_permanent_url }}" title="">{{ blog.main_title }}</a></h3> <h3><a href="{{ blog.get_permanent_url }}" title="">{{ blog.main_title }}</a></h3>
<p>{{ blog.preview }}</p> <p>{{ blog.preview }}</p>
<strong><span>{{ blog.publish_date|date:"d E Y" }}</span><a href="{{ blog.author.get_permanent_url }}" title=""><i>Евгения Булавина</i></a></strong> <strong><span>{{ blog.publish_date|date:"d E Y" }}</span><a href="{{ blog.author.get_permanent_url }}" title=""><i>{% trans "Евгения Булавина" %}</i></a></strong>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

@ -91,7 +91,7 @@
{% if object.description %} {% if object.description %}
<hr /> <hr />
<div class="i-services country_content"> <div class="i-services country_content">
<h2 class="sect-title">Описание</h2> <h2 class="sect-title">{% trans "Описание" %}</h2>
<div class="i-descr"> <div class="i-descr">
{{ object.description }} {{ object.description }}
</div> </div>
@ -100,7 +100,7 @@
{% if object.get_photos %} {% if object.get_photos %}
<div class="i-photo-slides i-photo-slides_1"> <div class="i-photo-slides i-photo-slides_1">
<h2 class="sect-title">Фотогалерея</h2> <h2 class="sect-title">{% trans "Фотогалерея" %}</h2>
<div id="ps-photo-gallery" class="ps-photo-gallery swiper-container"> <div id="ps-photo-gallery" class="ps-photo-gallery swiper-container">
<ul class="swiper-wrapper"> <ul class="swiper-wrapper">

@ -46,7 +46,7 @@
{% endif %} {% endif %}
{% if object.timezone %} {% if object.timezone %}
<li>{% trans 'Часовая зона' %}:<span>{{ object.timezone }}</span></li> <li>{% trans 'Часовая зона' %}:<span>{{ object.timezone }}</span></li>
<li>{% trans 'Часовые пояса' %}:<span>среднее время по Гринвичу</span></li> <li>{% trans 'Часовые пояса' %}:<span>{% trans "среднее время по Гринвичу" %}</span></li>
{% endif %} {% endif %}
</ul> </ul>
</td> </td>

@ -1,3 +1,4 @@
{% load i18n %}
<div class="m-article outer-profile"> <div class="m-article outer-profile">
<div class="item-wrap clearfix"> <div class="item-wrap clearfix">
<aside> <aside>
@ -9,8 +10,8 @@
<h1 class="i-title"></h1> <h1 class="i-title"></h1>
</header> </header>
<div class="i-additional"> <div class="i-additional">
<div class="ia-title">Страница заблокирована за нарушение правил</div> <div class="ia-title">{% trans "Страница заблокирована за нарушение правил" %}</div>
Если считаете, что Ваша страница была заблокирована по ошибке, напишите на info@expomap.ru {% trans "Если считаете, что Ваша страница была заблокирована по ошибке, напишите на info@expomap.ru" %}
</div> </div>
</div> </div>
</div> </div>

@ -51,8 +51,8 @@
</div> </div>
<div class="i-rating" title="{% trans 'Рейтинг' %}: {{ user.rating }}" id="profile-rating">{{ user.rating }}</div> <div class="i-rating" title="{% trans 'Рейтинг' %}: {{ user.rating }}" id="profile-rating">{{ user.rating }}</div>
<div class="reason_block"> <div class="reason_block">
<p>Заполните свой<br>профиль, чтобы<br>повысить рейтинг</p> {% blocktrans %}<p>Заполните свой<br>профиль, чтобы<br>повысить рейтинг</p>{% endblocktrans %}
<p>Чем выше<br>рейтинг —<br>тем больше<br>преимуществ!</p> {% blocktrans %}<p>Чем выше<br>рейтинг —<br>тем больше<br>преимуществ!</p>{% endblocktrans %}
</div> </div>
</aside> </aside>
{# END avatar #} {# END avatar #}

@ -1,3 +1,4 @@
{% load i18n %}
<div class="m-article outer-profile"> <div class="m-article outer-profile">
<div class="item-wrap clearfix"> <div class="item-wrap clearfix">
<aside> <aside>
@ -9,8 +10,8 @@
<h1 class="i-title"></h1> <h1 class="i-title"></h1>
</header> </header>
<div class="i-additional"> <div class="i-additional">
<div class="ia-title">Страница заблокирована за нарушение правил</div> <div class="ia-title">{% trans "Страница заблокирована за нарушение правил" %}</div>
Если считаете, что Ваша страница была заблокирована по ошибке, напишите на info@expomap.ru {% trans "Если считаете, что Ваша страница была заблокирована по ошибке, напишите на info@expomap.ru" %}
</div> </div>
</div> </div>
</div> </div>

@ -117,11 +117,11 @@
</div> </div>
<div class="ef-buttons"> <div class="ef-buttons">
<button type="submit" class="lnk icon-save">Сохранить</button> <button type="submit" class="lnk icon-save">{% trans "Сохранить" %}</button>
</div> </div>
</form> </form>
<a class="ef-close" href="javascript:void(0);">закрыть</a> <a class="ef-close" href="javascript:void(0);">{% trans "закрыть" %}</a>
</div> </div>
</div> </div>
</div> </div>
@ -149,11 +149,11 @@
</div> </div>
<div class="ef-buttons"> <div class="ef-buttons">
<button type="submit" class="lnk icon-save">Сохранить</button> <button type="submit" class="lnk icon-save">{% trans "Сохранить" %}</button>
</div> </div>
</form> </form>
<a class="ef-close" href="javascript:void(0);">закрыть</a> <a class="ef-close" href="javascript:void(0);">{% trans "закрыть" %}</a>
</div> </div>
</div> </div>
</div> </div>
@ -428,7 +428,7 @@
</div> </div>
<hr /> <hr />
<div class="i-additional"> <div class="i-additional">
<div class="ia-title">Дополнительная информация</div> <div class="ia-title">{% trans "Дополнительная информация" %}</div>
<dl class="add-info"> <dl class="add-info">
<div class="form-item-wrap"> <div class="form-item-wrap">
<dt><a class="e-btn fa fa-pencil-square-o" href="javascript:void(0);" title="">{% trans 'Добавить' %}</a>{% trans 'Год основания' %}:</dt> <dt><a class="e-btn fa fa-pencil-square-o" href="javascript:void(0);" title="">{% trans 'Добавить' %}</a>{% trans 'Год основания' %}:</dt>
@ -532,7 +532,7 @@
</div> </div>
</dl> </dl>
</div> </div>
<a rel="nofollow" id="profile-preview-btn" class="button profile-preview-btn" href="javascript:void(0);" target="_blank">Предварительный просмотр <i class="fa fa-eye"></i></a> <a rel="nofollow" id="profile-preview-btn" class="button profile-preview-btn" href="javascript:void(0);" target="_blank">{% trans "Предварительный просмотр" %} <i class="fa fa-eye"></i></a>
</div> </div>
</div> </div>
</div> </div>

@ -25,9 +25,9 @@
<div class="cli-top clearfix"> <div class="cli-top clearfix">
{% if user.is_staff %} {% if user.is_staff %}
{% if obj.is_published %} {% if obj.is_published %}
<div class="cli-status"><div class="status active">Активная</div></div> <div class="cli-status"><div class="status active">{% trans "Активная" %}</div></div>
{% else %} {% else %}
<div class="cli-status"><div class="status canceled">Неактивная</div></div> <div class="cli-status"><div class="status canceled">{% trans "Неактивная" %}</div></div>
{% endif %} {% endif %}
{% else %} {% else %}

@ -258,7 +258,7 @@
<header> <header>
<h2 class="im-title">{% trans 'Участники' %}</h2> <h2 class="im-title">{% trans 'Участники' %}</h2>
<p>{% trans 'Привлекайте целевых посетителей на стенд' %}</p> <p>{% trans 'Привлекайте целевых посетителей на стенд' %}</p>
<p><a href="#pw-advertise" class="button icon-up pw-open" >Рекламировать участника</a></p> <p><a href="#pw-advertise" class="button icon-up pw-open" >{% trans "Рекламировать участника" %}</a></p>
</header> </header>
{% endif %} {% endif %}
{% endwith %} {% endwith %}

@ -290,7 +290,7 @@
{% if exposition.area %} {% if exposition.area %}
{% else %} {% else %}
{% if exposition.members or exposition.visitors or exposition.foundation_year %} {% if exposition.members or exposition.visitors or exposition.foundation_year %}
<p class="title"> <i class="fa fa-bar-chart">&nbsp;</i>Статистика</p> <p class="title"> <i class="fa fa-bar-chart">&nbsp;</i>{% trans "Статистика" %}</p>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if exposition.members or exposition.visitors or exposition.foundation_year or exposition.area %} {% if exposition.members or exposition.visitors or exposition.foundation_year or exposition.area %}

@ -30,7 +30,7 @@
<div class="i-discount"> <div class="i-discount">
{% if exposition.discount %} {% if exposition.discount %}
<a class="discount-button" href="#">Скидка -{{ exposition.discount }}%</a> <a class="discount-button" href="#">{% trans "Скидка" %} -{{ exposition.discount }}%</a>
<div class="dsc-text">{{ exposition.discount_description|safe }}</div> <div class="dsc-text">{{ exposition.discount_description|safe }}</div>
{% endif %} {% endif %}
</div> </div>
@ -76,7 +76,7 @@
{% with days=exposition.get_timetables_days %} {% with days=exposition.get_timetables_days %}
{% if days %} {% if days %}
<div class="e-programm"> <div class="e-programm">
<h2 class="sect-title">Деловая программа</h2> <h2 class="sect-title">{% trans "Деловая программа" %}</h2>
<div class="ep-wrap"> <div class="ep-wrap">
@ -102,7 +102,7 @@
<div class="ep-title"><span>{{ pr.name }}</span></div> <div class="ep-title"><span>{{ pr.name }}</span></div>
</header> </header>
<div class="ep-body"> <div class="ep-body">
{{ pr.programe|safe }}<span class="ep-coord">Организатор: {{ pr.speaker }}</span> {{ pr.programe|safe }}<span class="ep-coord">{% trans "Организатор" %}: {{ pr.speaker }}</span>
</div> </div>
<footer class="clearfix"> <footer class="clearfix">
<div class="ap-area">{{ pr.place }}</div> <div class="ap-area">{{ pr.place }}</div>

@ -1,7 +1,8 @@
{% load i18n %}
<div class="p-filter clearfix"> <div class="p-filter clearfix">
<div class="pf-body"> <div class="pf-body">
<div class="pf-label">{% trans 'Период' %}:</div> <div class="pf-label">{% trans 'Период' %}:</div>
<a href="#">сентябрь 2013</a>, <a href="#">октябрь 2013</a>, <a href="#">ноябрь 2013</a>, <a href="#">декабрь 2013</a>, <a href="#">январь 2014</a>, <a href="#">февраль 2014</a> <a href="#">{% trans "сентябрь 2013" %}</a>, <a href="#">{% trans "октябрь 2013" %}</a>, <a href="#">{% trans "ноябрь 2013" %}</a>, <a href="#">{% trans "декабрь 2013" %}</a>, <a href="#">{% trans "январь 2014" %}</a>, <a href="#">{% trans "февраль 2014" %}</a>
</div> </div>
<div class="ch-dates-range"> <div class="ch-dates-range">

@ -13,17 +13,17 @@
<div class="i-address"> <div class="i-address">
<header> <header>
<div class="address"> <div class="address">
<p>Мы очень рады, что теперь каждую среду вместе с другими профессионалами бизнеса Вы будете получать анонсы из календаря событий Expomap. Важные выставки и конференции не останутся незамеченными!</p> <p>{% trans "Мы очень рады, что теперь каждую среду вместе с другими профессионалами бизнеса Вы будете получать анонсы из календаря событий Expomap. Важные выставки и конференции не останутся незамеченными!" %}</p>
<p>Вы всегда можете изменить параметры своей подписки:</p> <p>{% trans "Вы всегда можете изменить параметры своей подписки:" %}</p>
<ul style="list-style-type: none;"> <ul style="list-style-type: none;">
<li>- добавить или изменить тематики;</li> <li>{% trans "- добавить или изменить тематики;" %}</li>
<li>- применить гео-фильтры (например, получать выставки только в г. Москва);</li> <li>{% trans "- применить гео-фильтры (например, получать выставки только в г. Москва);" %}</li>
<li>- изменить периодичность получения писем;</li> <li>{% trans "- изменить периодичность получения писем;" %}</li>
<li>- отписаться! =(</li> <li>{% trans "- отписаться! =(" %}</li>
</ul> </ul>
<p>Мы будем рады любым Вашим пожелания по улучшению нашей рассылки - можете отправлять их на адрес evm@expomap.ru</p> <p>{% trans "Мы будем рады любым Вашим пожелания по улучшению нашей рассылки - можете отправлять их на адрес evm@expomap.ru" %}</p>
</div> </div>
</header> </header>

@ -1,3 +1,4 @@
{% load i18n %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html style="margin: 0; padding: 0; height: 100%;"> <html style="margin: 0; padding: 0; height: 100%;">
@ -16,15 +17,15 @@
<div class="logo"> <div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#"> <a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<img src="cid:logo" alt="Expomap.ru" /> <img src="cid:logo" alt="Expomap.ru" />
<b style="display: block; padding-left: 67px; margin-top: -5px;">Выставки, конференции, семинары</b> <b style="display: block; padding-left: 67px; margin-top: -5px;">{% trans "Выставки, конференции, семинары" %}</b>
</a> </a>
</div> </div>
</td> </td>
<td style="vertical-align: top; padding-top: 22px;"> <td style="vertical-align: top; padding-top: 22px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;"> <ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;">
<li style="display: inline-block;"><a target="_blank" style="text-decoration: none; color: #ff6600" href="http://expomap.ru/expo/">СОБЫТИЯ</a></li> <li style="display: inline-block;"><a target="_blank" style="text-decoration: none; color: #ff6600" href="http://expomap.ru/expo/">{% trans "СОБЫТИЯ" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a target="_blank" style="text-decoration: none; color: #ff6600" href="http://expomap.ru/places/">МЕСТА</a></li> <li style="display: inline-block; margin-left: 20px;"><a target="_blank" style="text-decoration: none; color: #ff6600" href="http://expomap.ru/places/">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a target="_blank" style="text-decoration: none; color: #ff6600" href="http://expomap.ru/members/">УЧАСТНИКИ</a></li> <li style="display: inline-block; margin-left: 20px;"><a target="_blank" style="text-decoration: none; color: #ff6600" href="http://expomap.ru/members/">{% trans "УЧАСТНИКИ" %}</a></li>
</ul> </ul>
<ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;"> <ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;">
@ -39,7 +40,7 @@
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;"> <table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr> <tr>
<td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >Ваша подписка на портале <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td> <td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >{% trans "Ваша подписка на портале" %} <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td>
</tr> </tr>
<tr> <tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;"> <td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -48,17 +49,17 @@
<tr valign="top"> <tr valign="top">
<td style="padding: 15px 0 36px 0;"> <td style="padding: 15px 0 36px 0;">
<p style="font-weight: bold;color: #003e79;margin: 0;">Добрый день, {{ user.first_name }}!</p> <p style="font-weight: bold;color: #003e79;margin: 0;">{% trans "Добрый день" %}, {{ user.first_name }}!</p>
</td> </td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
<td style="padding: 0 0 32px 0;"> <td style="padding: 0 0 32px 0;">
<p>Благодарим за подписку! Остался 1 шаг - подтвердить Ваш электронный адрес, нажав на кнопку:</p> <p>{% trans "Благодарим за подписку! Остался 1 шаг - подтвердить Ваш электронный адрес, нажав на кнопку:" %}</p>
</td> </td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
<td style="padding: 0 0 42px 0; text-align: center;"> <td style="padding: 0 0 42px 0; text-align: center;">
<a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 14px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="http://{{ site }}/newsletters/activate/{{ activation_key }}/">подтвердить подписку</a> <a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 14px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="http://{{ site }}/newsletters/activate/{{ activation_key }}/">{% trans "подтвердить подписку" %}</a>
</td> </td>
</tr> </tr>

@ -22,7 +22,7 @@
<form action="/organiser/add-event/" id="summary-form"> <form action="/organiser/add-event/" id="summary-form">
<hr/> <hr/>
<div class="mf-line afs-type event-type"> <div class="mf-line afs-type event-type">
<label>Тип события:</label> <label>{% trans "Тип события:" %}</label>
<div class="mf-field"> <div class="mf-field">
<label class="check"><input type="radio" name="nt"/> {% trans 'выставка' %}</label> <label class="check"><input type="radio" name="nt"/> {% trans 'выставка' %}</label>
<label class="check"><input type="radio" name="nt"/> {% trans 'конференция' %}</label> <label class="check"><input type="radio" name="nt"/> {% trans 'конференция' %}</label>
@ -248,7 +248,7 @@
<div class="set-sect-title clearfix"> <div class="set-sect-title clearfix">
<h3>{% trans 'Шаг 2. Добавление фото' %}</h3> <h3>{% trans 'Шаг 2. Добавление фото' %}</h3>
<div class="afh-right"> <div class="afh-right">
<div class="sst-info"><b>+ 1,2 балла</b> к рейтингу</div> <div class="sst-info">{% blocktrans %}<b>+ 1,2 балла</b> к рейтингу{% endblocktrans %}</div>
</div> </div>
</div> </div>
<div class="form-wrap"> <div class="form-wrap">
@ -257,21 +257,20 @@
<div class="mf-photos-list"> <div class="mf-photos-list">
<div class="mfpl-button-line"> <div class="mfpl-button-line">
<div class="mfpl-button"> <div class="mfpl-button">
<a class="button big icon-camera" href="#">выберите фотографии</a> <a class="button big icon-camera" href="#">{% trans "выберите фотографии" %}</a>
</div> </div>
<div class="mfpl-text"> <div class="mfpl-text">
<p>более полная информация повышает рейтинг вашего мероприятия и позволяет ранжировать его <p>{% trans "более полная информация повышает рейтинг вашего мероприятия и позволяет ранжировать его выше других" %}</p>
выше других</p>
</div> </div>
</div> </div>
</div> </div>
<hr> <hr>
<div class="a-bot-buttons-line clearfix"> <div class="a-bot-buttons-line clearfix">
<div class="abb-left"> <div class="abb-left">
<a class="button big grey a-more" href="#">пропустить этот шаг</a> <a class="button big grey a-more" href="#">{% trans "пропустить этот ша" %}г</a>
</div> </div>
<div class="abb-right"> <div class="abb-right">
<a class="button big orange a-more" href="#">далее</a> <a class="button big orange a-more" href="#">{% trans "далее" %}</a>
</div> </div>
</div> </div>
</form> </form>
@ -281,7 +280,7 @@
<div class="set-sect-title clearfix"> <div class="set-sect-title clearfix">
<h3>{% trans 'Шаг 3. Статистика и условия участия тест' %}</h3> <h3>{% trans 'Шаг 3. Статистика и условия участия тест' %}</h3>
<div class="afh-right"> <div class="afh-right">
<div class="sst-info"><b>+ 0,9 баллов</b> к рейтингу</div> <div class="sst-info">{% blocktrans %}<b>+ 0,9 баллов</b> к рейтингу{% endblocktrans %}</div>
</div> </div>
</div> </div>
<div class="form-wrap"> <div class="form-wrap">
@ -289,7 +288,7 @@
<hr> <hr>
<div class="mfs-additional mf-stat"> <div class="mfs-additional mf-stat">
<div class="mf-line mf-prod mf-short-input"> <div class="mf-line mf-prod mf-short-input">
<label>Год основания:</label> <label>{% trans "Год основания:" %}</label>
<div class="mf-field"> <div class="mf-field">
<input type="text" name="fyear" placeholder=""> <input type="text" name="fyear" placeholder="">
</div> </div>
@ -297,12 +296,12 @@
<div class="mf-stat-item"> <div class="mf-stat-item">
<hr> <hr>
<div class="mf-line mf-prod"> <div class="mf-line mf-prod">
<label class="h3">Статистика за</label> <label class="h3">{% trans "Статистика за" %}</label>
<div class="mf-field"> <div class="mf-field">
<div class="mf-year"> <div class="mf-year">
<div class="custom-select"> <div class="custom-select">
<select name="syear01" > <select name="syear01" >
<option value="">Выберите год</option> <option value="">{% trans "Выберите год" %}</option>
<option value="2010">2010</option> <option value="2010">2010</option>
<option value="2011">2011</option> <option value="2011">2011</option>
<option value="2012">2012</option> <option value="2012">2012</option>
@ -328,27 +327,27 @@
</div> </div>
</div> </div>
<div class="mf-line mf-prod mf-stat-countries"> <div class="mf-line mf-prod mf-stat-countries">
<label>Страны:</label> <label>{% trans "Страны:" %}</label>
<div class="mf-field"> <div class="mf-field">
<div class="c-select-box select"> <div class="c-select-box select">
<div class="csb-selected-items"> <div class="csb-selected-items">
<div class="csb-selected"> <div class="csb-selected">
<div class="csbs-text">Россия</div> <div class="csbs-text">{% trans "Россия" %}</div>
<a class="csbs-del" href="#">x</a></div> <a class="csbs-del" href="#">x</a></div>
<div class="csb-selected"> <div class="csb-selected">
<div class="csbs-text">Украина</div> <div class="csbs-text">{% trans "Украина" %}</div>
<a class="csbs-del" href="#">x</a></div> <a class="csbs-del" href="#">x</a></div>
<div class="csb-selected"> <div class="csb-selected">
<div class="csbs-text">Беларусь</div> <div class="csbs-text">{% trans "Беларусь" %}</div>
<a class="csbs-del" href="#">x</a></div> <a class="csbs-del" href="#">x</a></div>
<div class="csb-selected"> <div class="csb-selected">
<div class="csbs-text">Бельгия</div> <div class="csbs-text">{% trans "Бельгия" %}</div>
<a class="csbs-del" href="#">x</a></div> <a class="csbs-del" href="#">x</a></div>
<div class="csb-selected"> <div class="csb-selected">
<div class="csbs-text">Германия</div> <div class="csbs-text">{% trans "Германия" %}</div>
<a class="csbs-del" href="#">x</a></div> <a class="csbs-del" href="#">x</a></div>
<div class="csb-selected"> <div class="csb-selected">
<div class="csbs-text">Франция</div> <div class="csbs-text">{% trans "Франция" %}</div>
<a class="csbs-del" href="#">x</a></div> <a class="csbs-del" href="#">x</a></div>
</div> </div>
<div class="csb-menu-wrap" style=""> <div class="csb-menu-wrap" style="">
@ -363,32 +362,32 @@
<li><label class="custom-radio-check"><span <li><label class="custom-radio-check"><span
class="custom-checkbox"><input type="checkbox" class="custom-checkbox"><input type="checkbox"
name="country" name="country"
value="1"></span>Россия</label> value="1"></span>{% trans "Россия" %}</label>
</li> </li>
<li><label class="custom-radio-check"><span <li><label class="custom-radio-check"><span
class="custom-checkbox"><input type="checkbox" class="custom-checkbox"><input type="checkbox"
name="country" name="country"
value="2"></span>Украина</label> value="2"></span>{% trans "Украина" %}</label>
</li> </li>
<li><label class="custom-radio-check"><span <li><label class="custom-radio-check"><span
class="custom-checkbox"><input type="checkbox" class="custom-checkbox"><input type="checkbox"
name="country" name="country"
value="3"></span>Беларусь</label> value="3"></span>{% trans "Беларусь" %}</label>
</li> </li>
<li><label class="custom-radio-check"><span <li><label class="custom-radio-check"><span
class="custom-checkbox"><input type="checkbox" class="custom-checkbox"><input type="checkbox"
name="country" name="country"
value="4"></span>Бельгия</label> value="4"></span>{% trans "Бельгия" %}</label>
</li> </li>
<li><label class="custom-radio-check"><span <li><label class="custom-radio-check"><span
class="custom-checkbox"><input type="checkbox" class="custom-checkbox"><input type="checkbox"
name="country" name="country"
value="5"></span>Германия</label> value="5"></span>{% trans "Германия" %}</label>
</li> </li>
<li><label class="custom-radio-check"><span <li><label class="custom-radio-check"><span
class="custom-checkbox"><input type="checkbox" class="custom-checkbox"><input type="checkbox"
name="country" name="country"
value="6"></span>Франция</label> value="6"></span>{% trans "Франция" %}</label>
</li> </li>
</ul> </ul>
</div> </div>
@ -412,23 +411,23 @@
</div> </div>
</div> </div>
<div class="mf-stat-add-button"> <div class="mf-stat-add-button">
<a class="button big icon-add" href="#">добавить данные за другой период</a> <a class="button big icon-add" href="#">{% trans "добавить данные за другой период" %}</a>
</div> </div>
</div> </div>
<hr> <hr>
<h2>Стоимость посещения и участия</h2> <h2>{% trans "Стоимость посещения и участия" %}</h2>
<div class="e-price-wrap"> <div class="e-price-wrap">
<div class="epr-layout"> <div class="epr-layout">
<div class="eprl-col"> <div class="eprl-col">
<div class="eprl-col-wrap"> <div class="eprl-col-wrap">
<div class="epr-subtitle">Стоимость билетов</div> <div class="epr-subtitle">{% trans "Стоимость билетов" %}</div>
<div class="tp-wrap"> <div class="tp-wrap">
<ul class="pr-list"> <ul class="pr-list">
<li> <li>
<input type="text" name="oneDay1" placeholder="на один день"> <input type="text" name="oneDay1" placeholder="на один день">
<div class="custom-select"> <div class="custom-select">
<select name="oneDayCurrency1" > <select name="oneDayCurrency1" >
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
@ -438,14 +437,14 @@
<input type="text" name="allDays1" placeholder="на все дни"> <input type="text" name="allDays1" placeholder="на все дни">
<div class="custom-select"> <div class="custom-select">
<select name="allDaysCurrency1" > <select name="allDaysCurrency1" >
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
</div> </div>
</li> </li>
</ul> </ul>
<div class="tp-descr">Предварительная регистрация</div> <div class="tp-descr">{% trans "Предварительная регистрация" %}</div>
</div> </div>
<hr> <hr>
<div class="tp-wrap"> <div class="tp-wrap">
@ -454,7 +453,7 @@
<input type="text" name="oneDay2" placeholder="на один день"> <input type="text" name="oneDay2" placeholder="на один день">
<div class="custom-select"> <div class="custom-select">
<select name="oneDayCurrency2"> <select name="oneDayCurrency2">
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
@ -464,26 +463,26 @@
<input type="text" name="allDays2" placeholder="на все дни"> <input type="text" name="allDays2" placeholder="на все дни">
<div class="custom-select"> <div class="custom-select">
<select name="allDaysCurrency2" > <select name="allDaysCurrency2" >
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
</div> </div>
</li> </li>
</ul> </ul>
<div class="tp-descr grey">Регистрация на&nbsp;стойке</div> <div class="tp-descr grey">{% blocktrans %}Регистрация на&nbsp;стойке{% endblocktrans %}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="eprl-col"> <div class="eprl-col">
<div class="eprl-col-wrap"> <div class="eprl-col-wrap">
<div class="epr-subtitle">Стоимость аренды 1м²</div> <div class="epr-subtitle">{% trans "Стоимость аренды 1м²" %}</div>
<ul class="pr-list"> <ul class="pr-list">
<li> <li>
<input type="text" name="area1" placeholder="оборудованная площадь"> <input type="text" name="area1" placeholder="оборудованная площадь">
<div class="custom-select"> <div class="custom-select">
<select name="areaCurrency1"> <select name="areaCurrency1">
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
@ -493,7 +492,7 @@
<input type="text" name="area2" placeholder="необорудованная площадь"> <input type="text" name="area2" placeholder="необорудованная площадь">
<div class="custom-select"> <div class="custom-select">
<select name="areaCurrency2"> <select name="areaCurrency2">
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
@ -503,7 +502,7 @@
<input type="text" name="area3" placeholder="открытая площадь"> <input type="text" name="area3" placeholder="открытая площадь">
<div class="custom-select"> <div class="custom-select">
<select name="areaCurrency3"> <select name="areaCurrency3">
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
@ -512,7 +511,7 @@
</ul> </ul>
<hr> <hr>
<div class="mf-line mf-min-area"> <div class="mf-line mf-min-area">
<label>Минимальная площадь:</label> <label>{% trans "Минимальная площадь:" %}</label>
<div class="mf-field"> <div class="mf-field">
<input type="text" name="fyear" placeholder=""> <input type="text" name="fyear" placeholder="">
м² м²
@ -520,12 +519,12 @@
</div> </div>
<hr> <hr>
<div class="mf-line mf-reg-payment"> <div class="mf-line mf-reg-payment">
<label>Регистрационный взнос:</label> <label>{% trans "Регистрационный взнос:" %}</label>
<div class="mf-field"> <div class="mf-field">
<input type="text" name="area3" placeholder=""> <input type="text" name="area3" placeholder="">
<div class="custom-select"> <div class="custom-select">
<select name="areaCurrency3" > <select name="areaCurrency3" >
<option value="1">руб</option> <option value="1">{% trans "руб" %}</option>
<option value="2">usd</option> <option value="2">usd</option>
<option value="3">eur</option> <option value="3">eur</option>
</select> </select>
@ -534,7 +533,7 @@
</div> </div>
<hr> <hr>
<div class="mf-line mf-deadline"> <div class="mf-line mf-deadline">
<label>Крайний срок подачи заявки:</label> <label>{% trans "Крайний срок подачи заявки:" %}</label>
<div class="mf-field"> <div class="mf-field">
<div class="period"> <div class="period">
<div class="pwf-field"> <div class="pwf-field">
@ -554,16 +553,15 @@
<div class="abb-left"> <div class="abb-left">
<div class="mfpl-button-line"> <div class="mfpl-button-line">
<div class="mfpl-button"> <div class="mfpl-button">
<a class="button big grey a-more" href="#">пропустить этот шаг</a> <a class="button big grey a-more" href="#">{% trans "пропустить этот шаг" %}</a>
</div> </div>
<div class="mfpl-text"> <div class="mfpl-text">
<p>более полная информация повышает рейтинг вашего мероприятия и позволяет ранжировать <p>{% trans "более полная информация повышает рейтинг вашего мероприятия и позволяет ранжировать его выше других" %}</p>
его выше других</p>
</div> </div>
</div> </div>
</div> </div>
<div class="abb-right"> <div class="abb-right">
<a class="button big orange a-more" href="#">далее</a> <a class="button big orange a-more" href="#">{% trans "далее" %}</a>
</div> </div>
</div> </div>
</form> </form>

@ -3,7 +3,7 @@
{% load i18n %} {% load i18n %}
{% block content_bread_scrumbs %} {% block content_bread_scrumbs %}
<div class="bread-crumbs"> <div class="bread-crumbs">
<a href="/">Главная страница</a> <a href="/">{% trans "Главная страница" %}</a>
<a href="{{ object.get_catalog_url }}">{{ object.get_object_type }}</a> <a href="{{ object.get_catalog_url }}">{{ object.get_object_type }}</a>
<a href="{{ object.get_catalog_url }}/{{ object.url }}">{{ object.name }}</a> <a href="{{ object.get_catalog_url }}/{{ object.url }}">{{ object.name }}</a>
<strong>{% trans 'Фото' %}</strong> <strong>{% trans 'Фото' %}</strong>
@ -94,28 +94,28 @@
<div class="pgi-wrap scroll-container"> <div class="pgi-wrap scroll-container">
<div class="pg-photo-info"> <div class="pg-photo-info">
<div class="pg-photo-title">Выставочный стенд</div> <div class="pg-photo-title">{% trans "Выставочный стенд" %}</div>
<div class="pg-photo-text">Создание единой платформы для общения, обучения, продвижения и заключения бизнес соглашений между всеми участниками рынка интернет маркетинга.</div> <div class="pg-photo-text">{% trans "Создание единой платформы для общения, обучения, продвижения и заключения бизнес соглашений между всеми участниками рынка интернет маркетинга." %}</div>
<hr /> <hr />
<div class="pg-photo-descr"> <div class="pg-photo-descr">
<h3>На фотографии отмечены:</h3> <h3>{% trans "На фотографии отмечены:" %}</h3>
<p><a href="#">Анна Петрова</a>, <a href="#">Николай Довженко</a></p> <p><a href="#">{% trans "Анна Петрова" %}</a>, <a href="#">{% trans "Николай Довженко" %}</a></p>
</div> </div>
<hr /> <hr />
</div> </div>
<div class="pg-comments"> <div class="pg-comments">
<div class="pgc-title">Коментарии:</div> <div class="pgc-title">{% trans "Коментарии:" %}</div>
<div class="pgc-body"> <div class="pgc-body">
<ul> <ul>
<li> <li>
<div class="pgc-user">Анна Петрова:</div> <div class="pgc-user">{% trans "Анна Петрова:" %}</div>
<div class="pgc-text">Отлично ребята подготовились!</div> <div class="pgc-text">{% trans "Отлично ребята подготовились!" %}</div>
</li> </li>
<li> <li>
<div class="pgc-user">Алексей Звонцев:</div> <div class="pgc-user">{% trans "Алексей Звонцев:" %}</div>
<div class="pgc-text">Согласен!</div> <div class="pgc-text">{% trans "Согласен!" %}</div>
</li> </li>
</ul> </ul>
@ -126,12 +126,12 @@
<form class="pgc-form"> <form class="pgc-form">
<hr /> <hr />
<div class="pgc-field"> <div class="pgc-field">
<label for="comment">Оставьте свой комментарий:</label> <label for="comment">{% trans "Оставьте свой комментарий:" %}</label>
<textarea name="comment" id="comment" cols="30" rows="10"></textarea> <textarea name="comment" id="comment" cols="30" rows="10"></textarea>
</div> </div>
<div class="pgc-buttons"> <div class="pgc-buttons">
<button type="submit" class="icon-check">ок</button> <button type="submit" class="icon-check">{% trans "ок" %}</button>
<a class="button blue icon-tag" href="#">отметить человека</a> <a class="button blue icon-tag" href="#">{% trans "отметить человека" %}</a>
</div> </div>
</form> </form>
</div> </div>

@ -7,9 +7,7 @@
</header> </header>
<div class="pw-body clearfix"> <div class="pw-body clearfix">
<div class="label"> <div class="label">
<p> <p>{% trans "Оставьте свои контактные данные. В кратчайшие сроки мы с Вами свяжемся, чтобы подобрать наиболее подходящие рекламные инструменты!" %}</p>
Оставьте свои контактные данные. В кратчайшие сроки мы с Вами свяжемся, чтобы подобрать наиболее подходящие рекламные инструменты!
</p>
</div> </div>
<form class="pw-form simple-validate" method="post" id="advertise-form" action="/service/com_rek/"> <form class="pw-form simple-validate" method="post" id="advertise-form" action="/service/com_rek/">
{% csrf_token %} {% csrf_token %}

@ -7,7 +7,7 @@
</header> </header>
<div class="pw-body clearfix"> <div class="pw-body clearfix">
<div class="label"> <div class="label">
<p>Вам удобнее, чтобы мы Вам позвонили? Укажите контактный номер телефона и имя, и наши консультанты свяжутся с Вами.</p> <p>{% trans "Вам удобнее, чтобы мы Вам позвонили? Укажите контактный номер телефона и имя, и наши консультанты свяжутся с Вами." %}</p>
</div> </div>
<form class="pw-form simple-validate" method="get" id="callback-form" action="/callback/"> <form class="pw-form simple-validate" method="get" id="callback-form" action="/callback/">
<div class="pwf-line"> <div class="pwf-line">

@ -45,7 +45,7 @@
<div class="pwf-field"> <div class="pwf-field">
<button type="submit" class="icon-check">{% trans 'Зарегистрироваться' %}</button> <button type="submit" class="icon-check">{% trans 'Зарегистрироваться' %}</button>
</div> </div>
<div class="pwf-msg err-message-box pd-top-14 red"> Ошибка</div> <div class="pwf-msg err-message-box pd-top-14 red"> {% trans "Ошибка" %}</div>
</div> </div>
</form> </form>
</div> </div>

@ -12,10 +12,10 @@
<div class="pwf-line subj-checks" id="{{subjectTriggerWrapId}}"> <div class="pwf-line subj-checks" id="{{subjectTriggerWrapId}}">
<div class="pwf-field"> <div class="pwf-field">
<label class="check"><input type="checkbox" class="topicChecks" name="sType" value="exhb" id="{{ prefix }}exhibition-check"/>выставки</label> <label class="check"><input type="checkbox" class="topicChecks" name="sType" value="exhb" id="{{ prefix }}exhibition-check"/>{% trans "выставки" %}</label>
</div> </div>
<div class="pwf-field"> <div class="pwf-field">
<label class="check"><input type="checkbox" class="topicChecks" name="sType" value="conf" id="{{ prefix }}conference-check"/>конференции</label> <label class="check"><input type="checkbox" class="topicChecks" name="sType" value="conf" id="{{ prefix }}conference-check"/>{% trans "конференции" %}</label>
</div> </div>
{% comment %} {% comment %}
{# заморожено #} {# заморожено #}

@ -1,7 +1,7 @@
{% load i18n %}
<h2>{% trans "Search" %}</h2>
<h2>Search</h2>
<form method="get" action="."> <form method="get" action=".">
<table> <table>
@ -15,21 +15,21 @@
</table> </table>
{% if query %} {% if query %}
<h3>Results</h3> <h3>{% trans "Results" %}</h3>
{% for result in page.object_list %} {% for result in page.object_list %}
<p> <p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a> <a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a>
</p> </p>
{% empty %} {% empty %}
<p>No results found.</p> <p>{% trans "No results found." %}</p>
{% endfor %} {% endfor %}
{% if page.has_previous or page.has_next %} {% if page.has_previous or page.has_next %}
<div> <div>
{% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %} {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; {% trans "Previous" %}{% if page.has_previous %}</a>{% endif %}
| |
{% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %} {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}{% trans "Next" %} &raquo;{% if page.has_next %}</a>{% endif %}
</div> </div>
{% endif %} {% endif %}
{% else %} {% else %}

@ -233,10 +233,10 @@
</header> </header>
</div> </div>
<div class="sc-name">Волкова Елизавета </div> <div class="sc-name">{% trans "Волкова Елизавета" %} </div>
<div class="sc-text"> <div class="sc-text">
Хочу поблагодарить команду маркетологов Expomap за организацию нашего участия в выставке ТрансРоссия. Для нас это было чем-то новым, и благодаря опыту ребят мы избежали большого количества проблем и решали все возникающие вопросы очень оперативно. Если говорить о результатах работы на выставке, то мы собрали за 4 дня более 300 рабочих контактов и запросов, часть из которых выглядят очень перспективно. Мы сделали это вместе с Expomap и хотим сказать спасибо за их идеи, глубокое погружение в наши задачи, креативный подход и четкую помощь в реализации! Будем рады работать с вами и в других проектах! {% trans "Хочу поблагодарить команду маркетологов Expomap за организацию нашего участия в выставке ТрансРоссия. Для нас это было чем-то новым, и благодаря опыту ребят мы избежали большого количества проблем и решали все возникающие вопросы очень оперативно. Если говорить о результатах работы на выставке, то мы собрали за 4 дня более 300 рабочих контактов и запросов, часть из которых выглядят очень перспективно. Мы сделали это вместе с Expomap и хотим сказать спасибо за их идеи, глубокое погружение в наши задачи, креативный подход и четкую помощь в реализации! Будем рады работать с вами и в других проектах!" %}
</div> </div>
</div> </div>
@ -264,7 +264,7 @@
<div class="sc-name">Anatolios Spyrlidis</div> <div class="sc-name">Anatolios Spyrlidis</div>
<div class="sc-text"> <div class="sc-text">
Мы принимали участие со своим стендом в выставке Boot Duesseldorf в Германии в январе 2014. Выражаем благодарность сотрудникам Expomap, а также персональному консультанту Руслану Шапилову за оперативность, мы остались довольны качеством оказанных услуг! {% trans "Мы принимали участие со своим стендом в выставке Boot Duesseldorf в Германии в январе 2014. Выражаем благодарность сотрудникам Expomap, а также персональному консультанту Руслану Шапилову за оперативность, мы остались довольны качеством оказанных услуг!" %}
</div> </div>
</div> </div>

@ -220,7 +220,7 @@
<div class="sc-name">Акулова Ольга</div> <div class="sc-name">Акулова Ольга</div>
<div class="sc-text"> <div class="sc-text">
Остались очень довольны заочным посещением выставки Photokina — поехать сами не смогли, но получили визитки нужных компаний. Большое cпасибо сотрудникам за оперативность работы! {% trans "Остались очень довольны заочным посещением выставки Photokina — поехать сами не смогли, но получили визитки нужных компаний. Большое cпасибо сотрудникам за оперативность работы!" %}
</div> </div>
</div> </div>
@ -248,7 +248,7 @@
<div class="sc-name">Рязанцев Денис</div> <div class="sc-name">Рязанцев Денис</div>
<div class="sc-text"> <div class="sc-text">
Особой оценки достойна оперативность предоставления услуг и их качество. Хочу отметить профессионализм, организованность, добросовестность, вежливость, грамотность сотрудников компании! {% trans "Особой оценки достойна оперативность предоставления услуг и их качество. Хочу отметить профессионализм, организованность, добросовестность, вежливость, грамотность сотрудников компании!" %}
</div> </div>
</div> </div>

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

Loading…
Cancel
Save