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.save()
success['success'] = True
success['message'] = _(u'Пароль именен')
success['message'] = _(u'Пароль изменен')
return HttpResponse(json.dumps(success), content_type='application/json')
else:
errors = {'errors': [_(u'Не правильный пароль')]}

@ -30,7 +30,7 @@ class NameForm(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'}))
country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()],
required=False, widget=forms.Select(attrs={'class': 'select2'}))

@ -27,8 +27,8 @@ def clean_relation_field(inst, field_name, model):
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput(render_value=False))
password2 = forms.CharField(label='Повторите пароль', widget=forms.PasswordInput(render_value=False))
password1 = forms.CharField(label=_(u'Пароль'), widget=forms.PasswordInput(render_value=False))
password2 = forms.CharField(label=_(u'Повторите пароль'), widget=forms.PasswordInput(render_value=False))
class Meta:
model = User
@ -43,14 +43,14 @@ class UserCreationForm(forms.ModelForm):
User.objects.get(email=email)
except User.DoesNotExist:
return email
raise forms.ValidationError('Пользователь с таким email уже существует')
raise forms.ValidationError(_(u'Пользователь с таким email уже существует'))
def clean_password2(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if password1 and password2 and password1 != password2:
raise forms.ValidationError('Пароли не совпадают')
raise forms.ValidationError(_(u'Пароли не совпадают'))
return password2
def save(self, commit=True):
@ -65,10 +65,10 @@ class UserCreationForm(forms.ModelForm):
class UserForm(forms.ModelForm):
# 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)
city = forms.CharField(label='Город', widget=forms.HiddenInput(), required=False)
company = forms.ChoiceField(label='Компания',
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput(), required=False)
company = forms.ChoiceField(label=_(u'Компания'),
choices=[(item.id, item.name) for item in Company.objects.language().all()],
required=False)
@ -149,7 +149,7 @@ class UserForm(forms.ModelForm):
if phone.isdigit():
return phone
else:
raise forms.ValidationError('Введите правильный код страны')
raise forms.ValidationError(_(u'Введите правильный код страны'))
class ChangePasswordForm(forms.Form):
@ -201,9 +201,9 @@ class EmailAnnouncementForm(forms.Form):
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'}))
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(обязательно)')}))
# 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):
now = timezone.now()
if not email:
raise ValueError('Вы должни ввести электронную почту')
raise ValueError(_(u'Вы должни ввести электронную почту'))
user = self.model(
email=UserManager.normalize_email(email),
@ -38,7 +38,7 @@ class UserManager(BaseUserManager):
def create_superuser(self, username, first_name, last_name, password, **extra_fields):
if not username:
raise ValueError('Вы должни ввести электронную почту')
raise ValueError(_(u'Вы должни ввести электронную почту'))
username = UserManager.normalize_email(username)
@ -82,7 +82,7 @@ class User(AbstractBaseUser, PermissionsMixin, GetURLorPK):
#unique = 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)
last_name = models.CharField(verbose_name=_(u'Last name'), max_length=255)
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_modified = models.DateTimeField(verbose_name=_(u'Изменен'), auto_now=True)
#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,
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,
on_delete=models.PROTECT, related_name='user')
company = models.ForeignKey('company.Company', verbose_name=_(u'Компания'), blank=True, null=True,
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)
objects = UserManager()

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

@ -16,12 +16,12 @@ from conference.models import Conference
class _BlogForm(forms.Form):
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'}))
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)
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False)
logo = forms.ImageField(label=u'Лого', 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)
tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
logo = forms.ImageField(label=_(u'Лого'), required=False)
def __init__(self, *args, **kwargs):
"""
@ -35,15 +35,15 @@ class _BlogForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required)
self.fields['preview_%s' % code] = forms.CharField(label='Превью', required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget)
self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required)
self.fields['preview_%s' % code] = forms.CharField(label=_(u'Превью'), required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=False, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
def save(self, author, article=None, commit=True):
@ -107,9 +107,9 @@ class BlogForm(_BlogForm):
class NewsForm(_BlogForm):
type = Article.news
exposition = 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,
exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput(), required=False)
conference = forms.CharField(label=_(u'Конференция'), widget=forms.HiddenInput(), required=False)
theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all(), required=False,
widget=forms.SelectMultiple(attrs={'style':'width: 550px'}))
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
"""
#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())
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
tag = forms.MultipleChoiceField(label='Теги', required=False)
tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
article_id = forms.CharField(required=False, widget=forms.HiddenInput())
@ -172,15 +172,15 @@ class ArticleForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required)
self.fields['preview_%s' % code] = forms.CharField(label='Превью', required=required, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=required, widget=CKEditorWidget)
self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Заголовок'), required=required)
self.fields['preview_%s' % code] = forms.CharField(label=_(u'Превью'), required=required, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=required, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
def save(self, id=None):
@ -229,7 +229,7 @@ class ArticleForm(forms.Form):
article = Article.objects.filter(url=translit_with_separator(main_title_ru))
if article and str(article[0].id) != id:
msg = 'Статья с таким названием уже существует'
msg = _(u'Статья с таким названием уже существует')
self._errors['main_title_ru'] = ErrorList([msg])
del self.cleaned_data['main_title_ru']

@ -13,6 +13,7 @@ from file.forms import FileModelForm
#custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object
from functions.admin_views import AdminListView
from django.utils.translation import ugettext_lazy as _
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.files import check_tmp_files
from functions.admin_forms import AdminFilterForm
from django.utils.translation import ugettext_lazy as _
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
"""
country = forms.ModelChoiceField(label='Страна',
country = forms.ModelChoiceField(label=_(u'Страна'),
queryset=Country.objects.filter(translations__language_code=lang()).order_by('translations__name'),
empty_label=None)
population = forms.CharField(label='Население', required=False,
widget=forms.TextInput(attrs={'placeholder':'Население'}))
phone_code = forms.CharField(label='Код города', required=False,
widget=forms.TextInput(attrs={'placeholder':'Код города'}))
code_IATA = forms.ModelChoiceField(label='Код IATA', queryset=Iata.objects.all(), empty_label=None, required=False)
inflect = forms.CharField(label='Inflect', required=False)
logo = forms.ImageField(label='Logo', required=False)
population = forms.CharField(label=_(u'Население'), required=False,
widget=forms.TextInput(attrs={'placeholder':_(u'Население')}))
phone_code = forms.CharField(label=_(u'Код города'), required=False,
widget=forms.TextInput(attrs={'placeholder':_(u'Код города')}))
code_IATA = forms.ModelChoiceField(label=_(u'Код IATA'), queryset=Iata.objects.all(), empty_label=None, required=False)
inflect = forms.CharField(label=_(u'Inflect'), required=False)
logo = forms.ImageField(label=_(u'Logo'), required=False)
#field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput())
#
@ -53,20 +54,20 @@ class CityForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['region_%s' % code] = forms.CharField(label='Регион', required=False)
self.fields['description_%s' % code] = forms.CharField(label='Описание',
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['region_%s' % code] = forms.CharField(label=_(u'Регион'), required=False)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
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())
self.fields['shoping_%s' % code] = forms.CharField(label='Шопинг', required=False, widget=CKEditorWidget())
self.fields['transport_%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=_(u'Транспорт'), required=False, widget=CKEditorWidget())
#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'}))
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'}))
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'}))
@ -148,7 +149,7 @@ class CityForm(forms.Form):
if phone_code.isdigit():
return phone_code
else:
raise ValidationError('Введите правильный телефонный код')
raise ValidationError(_(u'Введите правильный телефонный код'))
def clean_population(self):
"""
@ -168,7 +169,7 @@ class CityDeleteForm(forms.ModelForm):
class CityFilterForm(AdminFilterForm):
country = forms.ChoiceField(choices=[('', '')]+[(item.id, item.name) for item in Country.objects.all()], required=False,
label='Страна')
label=_(u'Страна'))
model = City
def filter(self):

@ -28,7 +28,7 @@ class City(TranslatableModel):
catalog = '/city/'
services = BitField(flags=flags)
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)
# inflect name for russian language. example- в Москве
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
from models import Company
from theme.models import Tag
from django.utils.translation import ugettext_lazy as _
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
"""
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)
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all())
country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None)
theme = forms.ModelMultipleChoiceField(label=_(u'Тематики'), queryset=Theme.objects.all())
#creates select input with empty choices cause it will be filled with ajax
city = forms.ChoiceField(label='Город', choices=[('','')])
tag = forms.MultipleChoiceField(label='Теги', required=False)
city = forms.ChoiceField(label=_(u'Город'), choices=[('','')])
tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
staff_number = forms.CharField(label='Количество сотрудников', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество сотрудников'}))
staff_number = forms.CharField(label=_(u'Количество сотрудников'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Количество сотрудников')}))
#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,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'}))
phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label='Факс', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'}))
web_page = forms.CharField(label='Веб-сайт', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))
email = forms.CharField(label='Email', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))
social = forms.CharField(label='Социальные страници', required=False)
foundation = forms.CharField(label='Год основания', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'}))
widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.CharField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))
email = forms.CharField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))
social = forms.CharField(label=_(u'Социальные страници'), required=False)
foundation = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
#field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput())
#
@ -69,18 +69,18 @@ class CompanyForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание',
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget)
self.fields['specialization_%s' % code] = forms.CharField(label='Специализация', required=False)
self.fields['address_inf_%s' % code] = forms.CharField(label='Доп инф по адресу',
self.fields['specialization_%s' % code] = forms.CharField(label=_(u'Специализация'), required=False)
self.fields['address_inf_%s' % code] = forms.CharField(label=_(u'Доп инф по адресу'),
required=False, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
@ -139,7 +139,7 @@ class CompanyForm(forms.Form):
company = Company.objects.filter(url=translit_with_separator(url))
if company and str(company[0].id) != id:
msg = 'Такой урл уже занят'
msg = _(u'Такой урл уже занят')
self._errors['url'] = ErrorList([msg])
del self.cleaned_data['url']
@ -184,7 +184,7 @@ class CompanyForm(forms.Form):
if phone.isdigit():
return phone
else:
raise ValidationError('Введите правильный телефон')
raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self):
"""
@ -203,7 +203,8 @@ class CompanyForm(forms.Form):
if fax.isdigit():
return fax
else:
raise ValidationError('Введите правильный факс')
raise ValidationError(_(u'Введите правильный факс'))
class CompanyDeleteForm(forms.ModelForm):
id = forms.CharField(widget=forms.HiddenInput())
@ -212,6 +213,7 @@ class CompanyDeleteForm(forms.ModelForm):
model = Company
fields = ('id',)
class CompanyFormClient(forms.Form):
# translated fields
@ -224,18 +226,18 @@ class CompanyFormClient(forms.Form):
country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label=None)
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
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)
fax = forms.CharField(label='Факс', required=False)
web_page = forms.URLField(label='Веб-сайт', required=False)
email = forms.EmailField(label='Email', required=False)
phone = forms.CharField(label=_(u'Телефон'), required=False)
fax = forms.CharField(label=_(u'Факс'), required=False)
web_page = forms.URLField(label=_(u'Веб-сайт'), required=False)
email = forms.EmailField(label=_(u'Email'), required=False)
foundation = forms.IntegerField(label=_(u'Год основания'), required=False)
staff_number = forms.IntegerField(label=_(u'Количество сотрудников'), required=False)
vk = forms.URLField(label=_(u'в контакте'), required=False)
twitter = forms.URLField(label=u'Twitter', required=False)
facebook = forms.URLField(label=u'Facebook', required=False)
linkedin = forms.URLField(label=u'Linkedin', required=False)
twitter = forms.URLField(label=_(u'Twitter'), required=False)
facebook = forms.URLField(label=_(u'Facebook'), required=False)
linkedin = forms.URLField(label=_(u'Linkedin'), required=False)
def __init__(self, *args, **kwargs):
@ -279,7 +281,6 @@ class CreateCompanyForm(forms.Form):
return company
def clean_url(self):
url = self.cleaned_data['url']
url = url.replace('http://expomap.ru/members/', '')

@ -32,34 +32,34 @@ class Company(TranslatableModel, ExpoMixin, GetURLorPK):
url = models.SlugField(max_length=255)
#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)
theme = models.ManyToManyField('theme.Theme', verbose_name='Отрасль',
theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Отрасль'),
blank=True, null=True, related_name='companies')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True, related_name='companies')
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True,
tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'), blank=True, null=True, related_name='companies')
country = models.ForeignKey('country.Country', verbose_name=_(u'Страна'), blank=True, null=True,
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')
#address. uses LocationField. saves data in json format
address = LocationField(verbose_name='Адрес', blank=True)
staff_number = models.CharField(verbose_name='Количество сотрудников', max_length=50, blank=True)
phone = models.BigIntegerField(verbose_name='Телефон', blank=True, null=True)
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True)
email = models.EmailField(verbose_name='Email', blank=True)
staff_number = models.CharField(verbose_name=_(u'Количество сотрудников'), max_length=50, blank=True)
phone = models.BigIntegerField(verbose_name=_(u'Телефон'), blank=True, null=True)
fax = models.BigIntegerField(verbose_name=_(u'Факс'), blank=True, null=True)
web_page = models.CharField(verbose_name=_(u'Веб-сайт'),max_length=255, blank=True)
email = models.EmailField(verbose_name=_(u'Email'), blank=True)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), 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
translations = TranslatedFields(
name = models.CharField(verbose_name='Название компании', max_length=255),
specialization = models.CharField(verbose_name='Специализация', max_length=255, blank=True),
description = models.TextField(verbose_name='О компании', blank=True),
address_inf = models.TextField(verbose_name='Доп инф по адресу', blank=True),
name = models.CharField(verbose_name=_(u'Название компании'), max_length=255),
specialization = models.CharField(verbose_name=_(u'Специализация'), max_length=255, blank=True),
description = models.TextField(verbose_name=_(u'О компании'), blank=True),
address_inf = models.TextField(verbose_name=_(u'Доп инф по адресу'), blank=True),
#-----meta
title = 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 django.forms.util import ErrorList
from django.core.validators import validate_email, URLValidator
from django.utils.translation import ugettext as _
#models
from models import Conference, TimeTable, CURRENCY, Statistic, BIT_AUDIENCE
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
"""
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 года'),
(0.25, u'Раз в 4 года'), (0.2, u'Раз в 5 лет'))
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 года')),
(0.25, _(u'Раз в 4 года')), (0.2, _(u'Раз в 5 лет')))
public = [(item1, item2) for item1, item2 in BIT_AUDIENCE]
currencies = [(item, item) for item in CURRENCY]
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'])
logo = forms.ImageField(label='Logo', required=False)
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'])
logo = forms.ImageField(label=_(u'Logo'), required=False)
#organiser = forms.MultipleChoiceField(label=u'Организаторы', required=False,
# choices=[(item.id, item.name) for item in Organiser.objects.language().all()])
org = forms.CharField(required=False, label=u'Организатор')
country = forms.ChoiceField(label=u'Страна', choices=[(c.id, c.name) for c in Country.objects.all()])
theme = forms.MultipleChoiceField(label='Тематики',
org = forms.CharField(required=False, label=_(u'Организатор'))
country = forms.ChoiceField(label=_(u'Страна'), choices=[(c.id, c.name) for c in Country.objects.all()])
theme = forms.MultipleChoiceField(label=_(u'Тематики'),
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)
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
city = forms.CharField(label=u'Город', widget=forms.HiddenInput())
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False)
periodic = forms.ChoiceField(label=u'Периодичность', choices=PERIODIC, required=False)
audience = forms.MultipleChoiceField(label=u'Аудитория', choices=public, initial='', required=False)
web_page = forms.CharField(label='Веб страница', required=False)
link = forms.CharField(label='Линк на регистрацию', required=False)
foundation_year = forms.CharField(label='Год основания', required=False)
members = forms.CharField(label='Участники', required=False)
visitors = forms.CharField(label='Посетители', required=False)
discount = forms.CharField(label='Cкидка(%)', required=False)
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
periodic = forms.ChoiceField(label=_(u'Периодичность'), choices=PERIODIC, required=False)
audience = forms.MultipleChoiceField(label=_(u'Аудитория'), choices=public, initial='', required=False)
web_page = forms.CharField(label=_(u'Веб страница'), required=False)
link = forms.CharField(label=_(u'Линк на регистрацию'), required=False)
foundation_year = forms.CharField(label=_(u'Год основания'), required=False)
members = forms.CharField(label=_(u'Участники'), required=False)
visitors = forms.CharField(label=_(u'Посетители'), required=False)
discount = forms.CharField(label=_(u'Cкидка(%)'), required=False)
#
currency = forms.ChoiceField(label='Валюта', choices=currencies, required=False)
tax = forms.BooleanField(label='Налог включен', initial=True, required=False)
min_price = forms.CharField(label='Минимальная цена', required=False)
max_price = forms.CharField(label='Максимальная цена', required=False)
expohit = forms.BooleanField(label='Expohit', required=False)
canceled = forms.BooleanField(label='Отменена', required=False)
moved = forms.BooleanField(label='Перенесена', required=False)
quality_label = forms.MultipleChoiceField(label='Тип', required=False,
currency = forms.ChoiceField(label=_(u'Валюта'), choices=currencies, required=False)
tax = forms.BooleanField(label=_(u'Налог включен'), initial=True, required=False)
min_price = forms.CharField(label=_(u'Минимальная цена'), required=False)
max_price = forms.CharField(label=_(u'Максимальная цена'), required=False)
expohit = forms.BooleanField(label=_(u'Expohit'), required=False)
canceled = forms.BooleanField(label=_(u'Отменена'), required=False)
moved = forms.BooleanField(label=_(u'Перенесена'), required=False)
quality_label = forms.MultipleChoiceField(label=_(u'Тип'), required=False,
choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')],
widget=forms.CheckboxSelectMultiple())
@ -97,23 +98,23 @@ class ConferenceCreateForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание',
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'),
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)
self.fields['time_%s' % code] = forms.CharField(label='Время работы',
self.fields['time_%s' % code] = forms.CharField(label=_(u'Время работы'),
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)
self.fields['discount_description_%s' % code] = forms.CharField(label='Описание скидки',
self.fields['discount_description_%s' % code] = forms.CharField(label=_(u'Описание скидки'),
required=False, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
@ -313,9 +314,9 @@ class ConferenceChangeForm(ConferenceCreateForm):
add some fields to ConferenceCreateForm
"""
organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False)
company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False)
organiser = forms.ModelMultipleChoiceField(label=_(u'Организаторы'), queryset=Organiser.objects.all(), required=False)
company = forms.ModelMultipleChoiceField(label=_(u'Компании'), queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label=_(u'Пользователи'), queryset=User.objects.all(), required=False)
class ConferenceDeleteForm(forms.ModelForm):
@ -355,8 +356,8 @@ class TimeTableForm(forms.Form):
Create TimeTable form
day field must save automatically
"""
begin = forms.DateTimeField(label='Время начала')
end = forms.DateTimeField(label='Время окончания')
begin = forms.DateTimeField(label=_(u'Время начала'))
end = forms.DateTimeField(label=_(u'Время окончания'))
def __init__(self, *args, **kwargs):
"""
@ -378,7 +379,7 @@ class TimeTableForm(forms.Form):
class ConferenceFilterForm(AdminFilterForm):
created = forms.DateField(required=False, label='Дата создания')
created = forms.DateField(required=False, label=_(u'Дата создания'))
model = Conference
def filter(self):

@ -47,27 +47,27 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
url = models.SlugField(unique=True, max_length=255)
old_url = models.SlugField(unique=True, max_length=255)
data_begin = models.DateField(verbose_name='Дата начала')
data_end = models.DateField(verbose_name='Дата окончания')
data_begin = models.DateField(verbose_name=_(u'Дата начала'))
data_end = models.DateField(verbose_name=_(u'Дата окончания'))
services = BitField(flags=flags)
#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')
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')
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')
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')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги',
tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'),
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')
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')
users = models.ManyToManyField('accounts.User', verbose_name='Посетители выставки',
users = models.ManyToManyField('accounts.User', verbose_name=_(u'Посетители выставки'),
blank=True, null=True, related_name='conference_users')
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)
@ -75,17 +75,17 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
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])
web_page = models.CharField(verbose_name='Вебсайт', max_length=255, blank=True)
link = models.CharField(verbose_name='Линк на регистрацию', max_length=255, blank=True)
discount = models.PositiveIntegerField(verbose_name='Скидка', blank=True, null=True)
web_page = models.CharField(verbose_name=_(u'Вебсайт'), max_length=255, blank=True)
link = models.CharField(verbose_name=_(u'Линк на регистрацию'), max_length=255, blank=True)
discount = models.PositiveIntegerField(verbose_name=_(u'Скидка'), blank=True, null=True)
#
currency = EnumField(values=CURRENCY, default='USD')
tax = models.BooleanField(verbose_name='Налог', default=1)
min_price = models.PositiveIntegerField(verbose_name='Минимальная цена', blank=True, null=True)
max_price = models.PositiveIntegerField(verbose_name='Максимальная цена', blank=True, null=True)
tax = models.BooleanField(verbose_name=_(u'Налог'), default=1)
min_price = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена'), blank=True, null=True)
max_price = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена'), blank=True, null=True)
#administrator can cancel conference
expohit = models.BooleanField(verbose_name='Expohit', 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')
note = generic.GenericRelation('note.Note', content_type_field='content_type', object_id_field='object_id')
# statistic
foundation_year = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Посетитеил', blank=True, null=True)
members = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True)
foundation_year = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name=_(u'Посетитеил'), blank=True, null=True)
members = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
#translated fields
translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255),
main_title=models.TextField(verbose_name='Краткое описание', blank=True),
description=models.TextField(verbose_name='Описание', blank=True),
main_themes=models.TextField(verbose_name='Основные темы', blank=True),
time=models.TextField(verbose_name='Время работы', blank=True),
discount_description=models.TextField(verbose_name='Описание скидки', blank=True),
name = models.CharField(verbose_name=_(u'Название'), max_length=255),
main_title=models.TextField(verbose_name=_(u'Краткое описание'), blank=True),
description=models.TextField(verbose_name=_(u'Описание'), blank=True),
main_themes=models.TextField(verbose_name=_(u'Основные темы'), blank=True),
time=models.TextField(verbose_name=_(u'Время работы'), blank=True),
discount_description=models.TextField(verbose_name=_(u'Описание скидки'), blank=True),
#-----meta data
title=models.CharField(max_length=250),
descriptions=models.CharField(max_length=250),
@ -208,11 +208,11 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
class Statistic(TranslatableModel):
conference = models.ForeignKey(Conference, related_name='statistic')
year = models.PositiveIntegerField(verbose_name='Год')
members = models.PositiveIntegerField(verbose_name='Посетители', blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True)
area = models.PositiveIntegerField(verbose_name='Площадь', blank=True, null=True)
countries_number = models.PositiveIntegerField(verbose_name='Количество стран', blank=True, null=True)
year = models.PositiveIntegerField(verbose_name=_(u'Год'))
members = models.PositiveIntegerField(verbose_name=_(u'Посетители'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
area = models.PositiveIntegerField(verbose_name=_(u'Площадь'), blank=True, null=True)
countries_number = models.PositiveIntegerField(verbose_name=_(u'Количество стран'), blank=True, null=True)
translations = TranslatedFields(
countries = models.TextField(blank=True)
@ -228,8 +228,8 @@ class TimeTable(TranslatableModel):
"""
conference = models.ForeignKey(Conference, related_name='business_program')
begin = models.DateTimeField(verbose_name='Начало')
end = models.DateTimeField(verbose_name='Конец')
begin = models.DateTimeField(verbose_name=_(u'Начало'))
end = models.DateTimeField(verbose_name=_(u'Конец'))
timetable_organiser = models.ForeignKey('organiser.Organiser', null=True, blank=True,
related_name='conf_timetable')
#
@ -237,10 +237,10 @@ class TimeTable(TranslatableModel):
modified = models.DateTimeField(auto_now=True)
#translated fields
translations = TranslatedFields(
name = models.CharField(verbose_name='Название программы', max_length=255, blank=True),
programe = models.TextField(verbose_name='Программа'),
speaker = models.CharField(verbose_name='Спикеры', max_length=255, blank=True),
place = 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=_(u'Программа')),
speaker = models.CharField(verbose_name=_(u'Спикеры'), max_length=255, blank=True),
place = models.CharField(verbose_name=_(u'Место проведения'), max_length=255, blank=True)
)
def to_dict(self):

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

@ -2,6 +2,7 @@
from django import forms
from django.conf import settings
from django.core.mail import send_mail
from django.utils.translation import ugettext as _
from place_exposition.models import PlaceExposition
from place_conference.models import PlaceConference
from django.utils.translation import ugettext_lazy as _
@ -9,6 +10,7 @@ from haystack.query import SearchQuerySet, EmptySearchQuerySet
from hvad.forms import TranslatableModelForm
from models import Page
class PlaceSearchForm(forms.Form):
q = 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.shortcuts import get_object_or_404
from django.db import models
from django.utils.translation import ugettext as _
from exposition.models import Exposition
import copy
@ -18,9 +19,9 @@ EXPO_ON_PAGE = 10
# nearest expositions at all
class LatestExpositions(Feed):
title = u"Ближайшие выставки на expomap.ru"
title = _(u"Ближайшие выставки на expomap.ru")
link = '/rss/latest/'
description = u'Подписывайтесь на наш RSS-канал'
description = _(u'Подписывайтесь на наш RSS-канал')
def items(self):
return Exposition.enable.upcoming()[:EXPO_ON_PAGE]
@ -44,7 +45,7 @@ class CountryFeeds(Feed):
return get_object_or_404(Country, url=slug)
def title(self, obj):
return u"Ближайшие выставки %s:" % obj.inflect
return _(u"Ближайшие выставки %(obj)s:") % {'obj': obj.inflect}
def link(self,obj):
return obj.get_permanent_url()
@ -63,7 +64,7 @@ class CityFeeds(Feed):
return get_object_or_404(City, url=slug)
def title(self, obj):
return u"Ближайшие выставки в %s: " % obj.inflect
return _(u"Ближайшие выставки в %(obj)s: ") % {'obj': obj.inflect}
def link(self,obj):
return obj.get_permanent_url()
@ -82,7 +83,7 @@ class ThemeFeeds(Feed):
return get_object_or_404(Theme, url=slug)
def title(self, obj):
return u"Ближайшие выставки %s: " % obj.inflect
return _(u"Ближайшие выставки %(obj)s: ") % {'obj': obj.inflect}
def link(self,obj):
return obj.url

@ -4,7 +4,7 @@ from django.views.generic import TemplateView
from django.core.mail import EmailMessage
from django.http import HttpResponse
from django.conf import settings
from django.utils.translation import ugettext as _
class SeminarLendingView(TemplateView):
@ -14,30 +14,32 @@ class SeminarLendingView(TemplateView):
def send_to_organiser(request):
mail_send = 'expomap@mail.ru'
fname = request.POST.get('name')
lname = request.POST.get('surname')
email = request.POST.get('email', '')
company = request.POST.get('company', '')
office = request.POST.get('office', '')
phone = request.POST.get('phone', '')
data = {
'fname': request.POST.get('name'),
'lname': request.POST.get('surname'),
'email': request.POST.get('email', ''),
'company': request.POST.get('company', ''),
'office': request.POST.get('office', ''),
'phone': request.POST.get('phone', ''),
}
title = request.POST.get('type', '')
text = u"""Имя: %s;
Фамилия:%s;
Email: %s;
Телефон: %s;
компния:%s;
должность: %s"""%(fname, lname, email, phone, company, office)
text = _(u"""Имя: %(fname)s;
Фамилия:%(lname)s;
Email: %(email)s;
Телефон: %(phone)s;
компния: %(company)s;
должность: %(office)s""") % data
msg = EmailMessage(title, text, settings.DEFAULT_FROM_EMAIL, [mail_send])
msg.content_subtype = "html"
msg.send()
redirect_to = '/service/thanks/'
if title.endswith(u'семинар'):
message = u"""Мы получили Ваш запрос и очень рады, что Вам интересно участие в семинаре Expomap. Если места еще есть, мы пришлем Вам приглашение на указанную Вами электронную почту.
Увидимся на welcome-coffee """
message = _(u"""Мы получили Ваш запрос и очень рады, что Вам интересно участие в семинаре Expomap. Если места еще есть, мы пришлем Вам приглашение на указанную Вами электронную почту.
Увидимся на welcome-coffee """)
else:
message = u"""Благодарим за интерес к нашему семинару! За несколько дней до мероприятия мы пришлем Вам ссылку для подключения к онлайн-трансляции!"""
message = _(u"""Благодарим за интерес к нашему семинару! За несколько дней до мероприятия мы пришлем Вам ссылку для подключения к онлайн-трансляции!""")
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 django.core.exceptions import ValidationError
from django.forms.util import ErrorList
from django.utils.translation import ugettext as _
#models
from models import Country, City
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
"""
#
currency = forms.ModelMultipleChoiceField(label='Валюты', queryset=Currency.objects.all(), required=False)
language = forms.ModelMultipleChoiceField(label='Языки', queryset=Language.objects.all(), required=False)
currency = forms.ModelMultipleChoiceField(label=_(u'Валюты'), queryset=Currency.objects.all(), required=False)
language = forms.ModelMultipleChoiceField(label=_(u'Языки'), queryset=Language.objects.all(), required=False)
#
population = forms.CharField(label='Население(млн)', required=False,
widget=forms.TextInput(attrs={'placeholder':'Население(млн)'}))
population = forms.CharField(label=_(u'Население(млн)'), required=False,
widget=forms.TextInput(attrs={'placeholder':_(u'Население(млн)')}))
teritory = forms.CharField(label='Территория(км2)', required=False,
widget=forms.TextInput(attrs={'placeholder':'Територия(км2)'}))# km2
timezone = forms.ChoiceField(label='Часовые пояса', required=False, choices=tz, initial=99)
phone_code = forms.CharField(label='Код страны', required=False,
widget=forms.TextInput(attrs={'placeholder':'Код страны'}))
time_delivery = forms.CharField(label='Срок выдачи', required=False,
widget=forms.TextInput(attrs={'placeholder':'Срок выдачи'}))
widget=forms.TextInput(attrs={'placeholder':_(u'Територия(км2)')}))# km2
timezone = forms.ChoiceField(label=_(u'Часовые пояса'), required=False, choices=tz, initial=99)
phone_code = forms.CharField(label=_(u'Код страны'), required=False,
widget=forms.TextInput(attrs={'placeholder':_(u'Код страны')}))
time_delivery = forms.CharField(label=_(u'Срок выдачи'), required=False,
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=);
#field for comparing tmp files
@ -82,33 +84,33 @@ class CountryForm(forms.Form):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget)
self.fields['transport_%s' % code] = forms.CharField(label='Транспорт', required=False, widget=CKEditorWidget)
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=False, widget=CKEditorWidget)
self.fields['transport_%s' % code] = forms.CharField(label=_(u'Транспорт'), required=False, widget=CKEditorWidget)
#vis inf
self.fields['rules_%s' % code] = forms.CharField(label='Правила въезда', required=False, widget=CKEditorWidget())
self.fields['documents_%s' % code] = forms.CharField(label='Документы', required=False, widget=CKEditorWidget())
self.fields['consulate_%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=_(u'Документы'), required=False, widget=CKEditorWidget())
self.fields['consulate_%s' % code] = forms.CharField(label=_(u'Консульство'), required=False, widget=CKEditorWidget())
#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'}))
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'}))
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'}))
# check if exists cities connected with country
countries = City.objects.language().filter(country = country_id).order_by('name')
countries_list = [(item.id, item.name) for item in countries]
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}))
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}))
else:
self.fields['capital'] = forms.ChoiceField(label='Столица', choices=countries_list,
self.fields['capital'] = forms.ChoiceField(label=_(u'Столица'), choices=countries_list,
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)
def save(self, id=None):
@ -181,7 +183,7 @@ class CountryForm(forms.Form):
if phone_code.isdigit():
return phone_code
else:
raise ValidationError('Введите правильный код страны')
raise ValidationError(_(u'Введите правильный код страны'))
def clean_population(self):
@ -195,7 +197,7 @@ class CountryForm(forms.Form):
elif population.isdigit() and population > 0:
return int(population)
else:
raise ValidationError('Введите правильное население')
raise ValidationError(_(u'Введите правильное население'))
def clean_teritory(self):
"""

@ -90,7 +90,7 @@ class Country(TranslatableModel):
# inflect name for russian language. example- в Росии
inflect = models.CharField(verbose_name=_(u'Склонение'), max_length=255, blank=True)
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')
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)

@ -19,7 +19,7 @@ class MessageAdminForm(forms.ModelForm):
Custom AdminForm to enable messages to groups and all users.
"""
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):
super(MessageAdminForm, self).__init__(*args, **kwargs)

@ -9,7 +9,7 @@ from country.models import Country, Area
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,
label=_(u'Периодичность отправки'))
first_name = forms.CharField(label=_('first name'))
@ -65,8 +65,8 @@ import xlrd
from theme.models import Theme
class MailingListForm(forms.ModelForm):
excel_file = forms.FileField(label='Импортировать подписчиков', required=False)
theme_for_filter = forms.MultipleChoiceField(label=u'Тематики', required=False,
excel_file = forms.FileField(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()])
class Meta:
@ -92,7 +92,7 @@ class MailingListForm(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))
content = forms.CharField(label=_('content'), widget=CKEditorWidget(config_name='newsletters'))

@ -129,11 +129,11 @@ class ContactFilterForm(forms.Form):
label="Список рассылки",
required=False
)
created_from = forms.CharField(max_length=255, label="Создан с", required=False)
created_to = forms.CharField(max_length=255, label="Создан по", required=False)
not_active = forms.BooleanField(label="Не подтверждена подписка", required=False)
not_valid = forms.BooleanField(label="Неалидный Email", required=False)
not_subscriber = forms.BooleanField(label="Отписался", required=False)
created_from = forms.CharField(max_length=255, label=_(u"Создан с"), required=False)
created_to = forms.CharField(max_length=255, label=_(u"Создан по"), required=False)
not_active = forms.BooleanField(label=_(u"Не подтверждена подписка"), required=False)
not_valid = forms.BooleanField(label=_(u"Неалидный Email"), required=False)
not_subscriber = forms.BooleanField(label=_(u"Отписался"), required=False)
def filter(self):
title = 'contact list '
@ -181,14 +181,14 @@ class ContactFilterForm(forms.Form):
import xlrd
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):
excel_file = forms.FileField(label='Выберите файл')
activated = forms.BooleanField(label="Активные", required=False)
is_tester = forms.BooleanField(label="Тестовые", required=False)
country = forms.ChoiceField(label="Страна", choices=COUNTRY_CHOICES, required=False)
excel_file = forms.FileField(label=_(u'Выберите файл'))
activated = forms.BooleanField(label=_(u"Активные"), required=False)
is_tester = forms.BooleanField(label=_(u"Тестовые"), required=False)
country = forms.ChoiceField(label=_(u"Страна"), choices=COUNTRY_CHOICES, required=False)
def save(self):
data = self.cleaned_data
@ -375,7 +375,7 @@ class PopupCountFilter(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)
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;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%" bgcolor="#f4f2ee" style="font-family: Arial, sans-serif; background: #f4f2ee;">
<tr>
@ -9,15 +10,15 @@
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="/">
<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>
</div>
</td>
<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;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="/expo/">СОБЫТИЯ</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="/members/">УЧАСТНИКИ</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/">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/members/">{% trans "УЧАСТНИКИ" %}</a></li>
</ul>
<ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;">
@ -35,7 +36,7 @@
{% with events=events %}
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<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>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -65,7 +66,7 @@
</table>
<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>
</td>
@ -77,7 +78,7 @@
{% if news %}
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<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>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -109,7 +110,7 @@
</table>
<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>
</td>
@ -119,7 +120,7 @@
{% if blogs %}
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<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>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -162,9 +163,9 @@
</td>
<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;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="/expo/">СОБЫТИЯ</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="/members/">УЧАСТНИКИ</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/">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="/members/">{% trans "УЧАСТНИКИ" %}</a></li>
</ul>
</td>
</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">
<html xml:lang="{{ LANGUAGE_CODE }}" lang="{{ LANGUAGE_CODE }}" version="-//W3C//DTD XHTML 1.1//EN" xmlns="http://www.w3.org/1999/xhtml">
<head>
@ -5,10 +7,10 @@
<meta name="language" content="{{ LANGUAGE_CODE }}" />
<meta name="description" content="{% block meta-description %}Emencia Django Newsletter for sending newsletter.{% endblock %}" />
<meta name="author" content="Fantomas42" />
<title>Emencia Django Newsletter - {% block title %}{% endblock %}</title>
<title>{% trans "Emencia Django Newsletter" %} - {% block title %}{% endblock %}</title>
</head>
<body>
<h1>Emencia Django Newsletter</h1>
<h1>{% trans "Emencia Django Newsletter" %}</h1>
{% block content %}
{% endblock %}
</body>

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

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

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

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

@ -15,7 +15,7 @@ from theme.models import Tag, Theme
class UrlCreateForm(forms.ModelForm):
verbose = u'Создать урл'
verbose = _(u'Создать урл')
class Meta:
model = URL
@ -23,14 +23,14 @@ class UrlCreateForm(forms.ModelForm):
class BannerCreateGroupForm(forms.ModelForm):
verbose = u'Создать групу'
verbose = _(u'Создать групу')
class Meta:
model = BannerGroup
exclude = ['created_at', 'updated_at', 'speed']
class BannerGroupUpdateForm(BannerCreateGroupForm):
verbose = u'Изменить групу'
verbose = _(u'Изменить групу')
class Meta:
model = BannerGroup
@ -38,7 +38,7 @@ class BannerGroupUpdateForm(BannerCreateGroupForm):
class BannerCreateForm(forms.ModelForm):
verbose = u'Создать банер'
verbose = _(u'Создать банер')
text = forms.CharField(label=u'Текст', required=False, widget=CKEditorWidget)
class Meta:
model = Banner
@ -46,7 +46,7 @@ class BannerCreateForm(forms.ModelForm):
class BannerLinkCreateForm(forms.ModelForm):
verbose = u'Отслеживаемую ссылку'
verbose = _(u'Отслеживаемую ссылку')
class Meta:
model = Banner
@ -64,7 +64,7 @@ class BannerLinkCreateForm(forms.ModelForm):
class ClientStatForm(forms.Form):
stat_pswd = forms.CharField(label=u'Введите пароль:')
stat_pswd = forms.CharField(label=_(u'Введите пароль:'))
def check_pass(self, obj):
pswd = self.cleaned_data['stat_pswd']
@ -72,9 +72,9 @@ class ClientStatForm(forms.Form):
class BasePaidCreateForm(forms.ModelForm):
tickets = forms.URLField(label=u'Линк на билеты')
participation = forms.URLField(label=u'Линк на участие')
official = forms.URLField(label=u'Линк на официальный сайт')
tickets = forms.URLField(label=_(u'Линк на билеты'))
participation = forms.URLField(label=_(u'Линк на участие'))
official = forms.URLField(label=_(u'Линк на официальный сайт'))
class Meta:
model = Paid
@ -111,8 +111,8 @@ class BasePaidCreateForm(forms.ModelForm):
class PaidCreateForm(BasePaidCreateForm):
kind = 1
verbose = u'Создать проплаченую выставку'
exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput())
verbose = _(u'Создать проплаченую выставку')
exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput())
def get_target_obj(self):
return self.cleaned_data['exposition']
@ -122,14 +122,14 @@ class PaidCreateForm(BasePaidCreateForm):
try:
expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist:
raise forms.ValidationError(u'Такой выставки не существует')
raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo
class PaidConfCreateForm(BasePaidCreateForm):
kind = 2
verbose = u'Создать проплаченую конференцию'
conference = forms.CharField(label=u'Конференция', widget=forms.HiddenInput())
verbose = _(u'Создать проплаченую конференцию')
conference = forms.CharField(label=_(u'Конференция'), widget=forms.HiddenInput())
def get_target_obj(self):
return self.cleaned_data['conference']
@ -139,13 +139,13 @@ class PaidConfCreateForm(BasePaidCreateForm):
try:
expo = Conference.objects.get(id=conference_id)
except Conference.DoesNotExist:
raise forms.ValidationError(u'Такой конференции не существует')
raise forms.ValidationError(_(u'Такой конференции не существует'))
return expo
class MainCreateForm(forms.ModelForm):
verbose = u'Добавить выставку на главную'
exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput())
verbose = _(u'Добавить выставку на главную')
exposition = forms.CharField(label=_(u'Выставка'), widget=forms.HiddenInput())
class Meta:
model = MainPage
@ -169,13 +169,13 @@ class MainCreateForm(forms.ModelForm):
try:
expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist:
raise forms.ValidationError(u'Такой выставки не существует')
raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo
class MainConfCreateForm(forms.ModelForm):
verbose = u'Добавить конференцию на главную'
conf = forms.CharField(label=u'Конференция', widget=forms.HiddenInput())
verbose = _(u'Добавить конференцию на главную')
conf = forms.CharField(label=_(u'Конференция'), widget=forms.HiddenInput())
class Meta:
model = MainPage
@ -199,14 +199,14 @@ class MainConfCreateForm(forms.ModelForm):
try:
conf = Conference.objects.get(id=conf_id)
except Conference.DoesNotExist:
raise forms.ValidationError(u'Такой конференции не существует')
raise forms.ValidationError(_(u'Такой конференции не существует'))
return conf
class PaidUpdateForm(forms.ModelForm):
tickets = forms.URLField(label=u'Линк на билеты')
participation = forms.URLField(label=u'Линк на участие')
official = forms.URLField(label=u'Линк на официальный сайт')
tickets = forms.URLField(label=_(u'Линк на билеты'))
participation = forms.URLField(label=_(u'Линк на участие'))
official = forms.URLField(label=_(u'Линк на официальный сайт'))
class Meta:
model = Paid
@ -308,10 +308,10 @@ class TopMixinForm(forms.ModelForm, FieldsetMixin):
return top
class TopCreateForm(TopMixinForm):
verbose = u'Создать выставку в топе'
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)
theme = forms.MultipleChoiceField(label=u'Тематика', required=False,
verbose = _(u'Создать выставку в топе')
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)
theme = forms.MultipleChoiceField(label=_(u'Тематика'), required=False,
choices=[('', ' ')] + [(item.id, item.name) for item in Theme.objects.language().all()])
#excluded_cities = 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:
expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist:
raise forms.ValidationError(u'Такой выставки не существует')
raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo
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
"""
title = models.CharField(verbose_name=u'Заголовок', max_length=256)
url = models.CharField(verbose_name=u'URL or URL RegEx', max_length=2048)
regex = models.BooleanField(verbose_name=u'RegEx', default=False)
title = models.CharField(verbose_name=_(u'Заголовок'), max_length=256)
url = models.CharField(verbose_name=_(u'URL or URL RegEx'), max_length=2048)
regex = models.BooleanField(verbose_name=_(u'RegEx'), default=False)
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)
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
"""
name = models.CharField(verbose_name=u'Имя', max_length=255)
slug = models.SlugField(verbose_name=u'URL', unique=True)
width = models.PositiveSmallIntegerField(verbose_name=u'Ширина', default=0)
height = models.PositiveSmallIntegerField(verbose_name=u'Высота', default=0)
speed = models.PositiveSmallIntegerField(verbose_name=u'Скорость отображения', default=2000)
name = models.CharField(verbose_name=_(u'Имя'), max_length=255)
slug = models.SlugField(verbose_name=_(u'URL'), unique=True)
width = models.PositiveSmallIntegerField(verbose_name=_(u'Ширина'), default=0)
height = models.PositiveSmallIntegerField(verbose_name=_(u'Высота'), default=0)
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)
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True)
@ -85,19 +85,19 @@ class Banner(models.Model, StatMixin):
"""
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)
text = models.TextField(verbose_name=u'Текст', 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)
text = models.TextField(verbose_name=_(u'Текст'), 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)
fr = models.DateField(default=date.today())
to = models.DateField(blank=True, null=True)
theme = models.ManyToManyField(Theme, blank=True, null=True, verbose_name=u'Тематика')
country = models.ManyToManyField(Country, 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'Страна'))
sort = models.PositiveSmallIntegerField(verbose_name=u'Сорт', default=500)
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=u'Место', null=True, blank=True)
sort = models.PositiveSmallIntegerField(verbose_name=_(u'Сорт'), default=500)
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=_(u'Место'), null=True, blank=True)
often = models.PositiveSmallIntegerField(
verbose_name=_('Often'),
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
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)
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True)
# password for clients
@ -247,7 +247,7 @@ class Paid(models.Model, StatMixin):
catalog = models.ForeignKey(Banner, related_name='paid_catalog')
logo = models.ImageField(upload_to='expo-b/paid', 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)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
@ -291,17 +291,17 @@ class Top(models.Model, StatMixin):
)
link = models.ForeignKey(Banner)
catalog = models.CharField(max_length=16, 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'Тематики')
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'Страны')
catalog = models.CharField(max_length=16, 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'Тематики'))
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'Страны'))
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,)
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'Исключить города')
fr = models.DateField(default=date.today(), verbose_name=u'Начало')
to = models.DateField(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'Начало'))
to = models.DateField(blank=True, null=True, verbose_name=_(u'Конец'))
stat_pswd = models.CharField(max_length=16)
objects = models.Manager()
@ -335,8 +335,8 @@ class MainPage(models.Model, StatMixin):
events on main page info
"""
link = models.ForeignKey(Banner)
position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция')
public = models.BooleanField(default=True, verbose_name=u'Активная')
position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=_(u'Позиция'))
public = models.BooleanField(default=True, verbose_name=_(u'Активная'))
stat_pswd = models.CharField(max_length=16)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

@ -7,6 +7,7 @@ from django.conf import settings
from django.core.urlresolvers import reverse
from expobanner.models import Banner, Paid
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
return HttpResponseRedirect(self.get_success_url())
else:
form.errors['stat_pswd'] = ErrorList([u'Неправильный пароль'])
form.errors['stat_pswd'] = ErrorList([_(u'Неправильный пароль')])
return self.form_invalid(form)
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
"""
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 года'),
(0.25, u'Раз в 4 года'), (0.2, u'Раз в 5 лет'))
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 года')),
(0.25, _(u'Раз в 4 года')), (0.2, _(u'Раз в 5 лет')))
public = [(item1, item2) for item1, item2 in BIT_AUDIENCE]
currencies = [(item, item) for item in CURRENCY]
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'])
logo = forms.ImageField(label='Logo', required=False)
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'])
logo = forms.ImageField(label=_('Logo'), required=False)
#organiser = forms.MultipleChoiceField(label=u'Организаторы', required=False,
# 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,
# 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(
label='Тематики',
label=_(u'Тематики'),
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)
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
city = forms.CharField(label=u'Город', widget=forms.HiddenInput())
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False)
periodic = forms.ChoiceField(label=u'Периодичность', choices=PERIODIC, required=False)
audience = forms.MultipleChoiceField(label=u'Аудитория', choices=public, initial='', required=False)
web_page = forms.CharField(label=u'Веб страница', required=False)
registration_link = forms.CharField(label=u'Ссылка на регистрацию', required=False)
foundation_year = forms.CharField(label=u'Год основания', required=False)
members = forms.CharField(label=u'Участники', required=False)
visitors = forms.CharField(label=u'Посетители', required=False)
min_area = forms.CharField(label=u'Минимальная площадь', required=False)
discount = forms.CharField(label=u'Cкидка(%)', required=False)
area = forms.CharField(label=u'Площадь', required=False)
quality_label = forms.MultipleChoiceField(label=u'Метки', required=False,
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
periodic = forms.ChoiceField(label=_(u'Периодичность'), choices=PERIODIC, required=False)
audience = forms.MultipleChoiceField(label=_(u'Аудитория'), choices=public, initial='', required=False)
web_page = forms.CharField(label=_(u'Веб страница'), required=False)
registration_link = forms.CharField(label=_(u'Ссылка на регистрацию'), required=False)
foundation_year = forms.CharField(label=_(u'Год основания'), required=False)
members = forms.CharField(label=_(u'Участники'), required=False)
visitors = forms.CharField(label=_(u'Посетители'), required=False)
min_area = forms.CharField(label=_(u'Минимальная площадь'), required=False)
discount = forms.CharField(label=_(u'Cкидка(%)'), required=False)
area = forms.CharField(label=_(u'Площадь'), required=False)
quality_label = forms.MultipleChoiceField(label=_(u'Метки'), required=False,
choices=[('ufi', 'UFI'), ('rsva', 'РСВЯ'), ('exporating', 'ExpoRating')],
widget=forms.CheckboxSelectMultiple())
#
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)
min_stand_size = forms.CharField(label=u'Минимальный размер стенда', required=False)
price_catalog = forms.CharField(label=u'Цена за каталог', required=False)
tax = forms.BooleanField(label=u'Налог включен', initial=True, required=False)
min_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)
max_closed_equipped_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)
registration_payment = forms.CharField(label=u'Регистрационны взнос', required=False)
expohit = forms.BooleanField(label=u'Expohit', required=False)
canceled = forms.BooleanField(label=u'Отменена', required=False)
moved = forms.BooleanField(label=u'Перенесена', 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)
min_stand_size = forms.CharField(label=_(u'Минимальный размер стенда'), required=False)
price_catalog = forms.CharField(label=_(u'Цена за каталог'), required=False)
tax = forms.BooleanField(label=_(u'Налог включен'), initial=True, required=False)
min_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)
max_closed_equipped_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)
registration_payment = forms.CharField(label=_(u'Регистрационны взнос'), required=False)
expohit = forms.BooleanField(label=_(u'Expohit'), required=False)
canceled = forms.BooleanField(label=_(u'Отменена'), required=False)
moved = forms.BooleanField(label=_(u'Перенесена'), required=False)
#field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput())
#
@ -107,46 +107,46 @@ class ExpositionCreateForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
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'}))
self.fields['main_title_%s' % code] = forms.CharField(label=u'Краткое описание',
self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'),
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)
self.fields['time_%s' % code] = forms.CharField(label=u'Время работы',
self.fields['time_%s' % code] = forms.CharField(label=_(u'Время работы'),
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'}))
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'}))
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'}))
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'}))
self.fields['products_%s' % code] = forms.CharField(label=u'Экспонируемые продукты',
self.fields['products_%s' % code] = forms.CharField(label=_(u'Экспонируемые продукты'),
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)
self.fields['stat_countries_%s' % code] = forms.CharField(label=u'Участвующие страны',
self.fields['stat_countries_%s' % code] = forms.CharField(label=_(u'Участвующие страны'),
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'}))
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'}))
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'}))
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'}))
#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'}))
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'}))
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'}))
def save(self, obj=None):
@ -248,7 +248,7 @@ class ExpositionCreateForm(forms.Form):
exposition = Exposition.objects.filter(url=translit_with_separator(name_ru))
if exposition and str(exposition[0].id) != id:
msg = 'Выставка с таким названием уже существует'
msg = _(u'Выставка с таким названием уже существует')
self._errors['name_ru'] = ErrorList([msg])
del self.cleaned_data['name_ru']
@ -467,11 +467,11 @@ class ExpositionDeleteForm(forms.ModelForm):
class StatisticForm(forms.Form):
year = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), label='Год')
visitors = 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='Участники')
area = 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='Число стран')
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=_(u'Посетители'))
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=_(u'Площадь'))
countries_number = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:70px'}), required=False, label=_(u'Число стран'))
def __init__(self, *args, **kwargs):
"""
@ -485,7 +485,7 @@ class StatisticForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
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,
widget=forms.TextInput(attrs={'style':'width: 250px'}))
@ -532,11 +532,11 @@ class StatisticForm(forms.Form):
from functions.files import check_tmp_timetables
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'}))
end = forms.DateTimeField(label='Время окончания', input_formats=date_formats,
end = forms.DateTimeField(label=_(u'Время окончания'), input_formats=date_formats,
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()])
def __init__(self, *args, **kwargs):
@ -552,13 +552,13 @@ class TimeTableForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
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'}))
self.fields['programe_%s' % code] = forms.CharField(label='Программа', required=False,
self.fields['programe_%s' % code] = forms.CharField(label=_(u'Программа'), required=False,
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'}))
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'}))
def save(self,exposition=None):
@ -591,11 +591,11 @@ monthes = [('', ''),
class ExpositionFilterForm(AdminFilterForm):
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)
#city = forms.CharField(label=u'Город', widget=forms.HiddenInput(), 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)
year = forms.CharField(label=_(u'Год'), required=False)
month = forms.ChoiceField(label=_(u'Месяц'),choices=[(item[0], item[1]) for item in monthes], required=False)
def filter(self):

@ -55,39 +55,39 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
url = models.SlugField(unique=True, max_length=255)
old_url = models.SlugField(unique=True, max_length=255)
data_begin = models.DateField(verbose_name='Дата начала')
data_end = models.DateField(verbose_name='Дата окончания')
data_begin = models.DateField(verbose_name=_(u'Дата начала'))
data_end = models.DateField(verbose_name=_(u'Дата окончания'))
services = BitField(flags=flags)
# 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)
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')
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')
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')
theme = models.ManyToManyField('theme.Theme', verbose_name='Тематики',
theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики'),
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')
organiser = models.ManyToManyField('organiser.Organiser', verbose_name='Организатор',
organiser = models.ManyToManyField('organiser.Organiser', verbose_name=_(u'Организатор'),
blank=True, null=True, related_name='exposition_organisers')
org = 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')
users = models.ManyToManyField('accounts.User', verbose_name='Посетители выставки',
users = models.ManyToManyField('accounts.User', verbose_name=_(u'Посетители выставки'),
blank=True, null=True, related_name='exposition_users')
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)
rating = models.IntegerField(default=0) # добавить индекс в базе
quality_label = BitField(flags=['ufi', 'rsva', 'exporating'])
visitors = models.PositiveIntegerField(verbose_name='Посетители', blank=True, null=True)
members = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True)
discount = models.PositiveIntegerField(verbose_name='Скидка', blank=True, null=True)
expohit = models.BooleanField(verbose_name='Expohit', default=0)
visitors = models.PositiveIntegerField(verbose_name=_(u'Посетители'), blank=True, null=True)
members = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
discount = models.PositiveIntegerField(verbose_name=_(u'Скидка'), blank=True, null=True)
expohit = models.BooleanField(verbose_name=_(u'Expohit'), default=0)
# administrator can cancel exposition
canceled_by_administrator = models.BooleanField(default=0)
#can publish not immediately
@ -103,22 +103,22 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
views = models.PositiveIntegerField(default=0)
translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255),
main_title = models.TextField(verbose_name='Краткое описание', blank=True),
description = models.TextField(verbose_name='Описание', blank=True),
products = models.TextField(verbose_name='Экспонируемые продукты', blank=True),
discount_description = models.TextField(verbose_name='Описание скидки', blank=True),
time = models.TextField(verbose_name='Время работы', blank=True),
name = models.CharField(verbose_name=_(u'Название'), max_length=255),
main_title = models.TextField(verbose_name=_(u'Краткое описание'), blank=True),
description = models.TextField(verbose_name=_(u'Описание'), blank=True),
products = models.TextField(verbose_name=_(u'Экспонируемые продукты'), blank=True),
discount_description = models.TextField(verbose_name=_(u'Описание скидки'), blank=True),
time = models.TextField(verbose_name=_(u'Время работы'), blank=True),
# visit and particaption data
price_day = models.CharField(verbose_name='Стоимость билета 1 день', max_length=255, blank=True),
price_all = models.CharField(verbose_name='Стоимость билета все дни', max_length=255, blank=True),
price_day_bar = models.CharField(verbose_name='Стоимость на стойке 1 день', max_length=255, blank=True),
price_all_bar = models.CharField(verbose_name='Стоимость на стойке все дни', max_length=255, blank=True),
stat_countries = models.TextField(verbose_name='Участвующие страны', blank=True),
pre_condition = models.CharField(verbose_name='Условия предварительной регистрации', max_length=255, blank=True),
stand_condition = models.CharField(verbose_name='Условия регистрации на стойке', max_length=255, blank=True),
visit_note = models.CharField(verbose_name='Примечание по посещению', max_length=255, blank=True),
participation_note = models.TextField(verbose_name='Примечание по участии', blank=True),
price_day = models.CharField(verbose_name=_(u'Стоимость билета 1 день'), max_length=255, blank=True),
price_all = models.CharField(verbose_name=_(u'Стоимость билета все дни'), 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=_(u'Стоимость на стойке все дни'), max_length=255, blank=True),
stat_countries = models.TextField(verbose_name=_(u'Участвующие страны'), blank=True),
pre_condition = models.CharField(verbose_name=_(u'Условия предварительной регистрации'), max_length=255, blank=True),
stand_condition = models.CharField(verbose_name=_(u'Условия регистрации на стойке'), max_length=255, blank=True),
visit_note = models.CharField(verbose_name=_(u'Примечание по посещению'), max_length=255, blank=True),
participation_note = models.TextField(verbose_name=_(u'Примечание по участии'), blank=True),
#-----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')
#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])
web_page = models.CharField(verbose_name='Вебсайт', max_length=255, blank=True)
foundation_year = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True)
area = models.PositiveIntegerField(verbose_name='Площадь', blank=True, null=True)
web_page = models.CharField(verbose_name=_(u'Вебсайт'), max_length=255, blank=True)
foundation_year = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
area = models.PositiveIntegerField(verbose_name=_(u'Площадь'), blank=True, null=True)
# conditions of Participation
registration_link = models.URLField(verbose_name='Ссылка на регистрацию', max_length=255, blank=True)
min_area = models.PositiveIntegerField(verbose_name='Минимальная площадь', blank=True, null=True)
registration_link = models.URLField(verbose_name=_(u'Ссылка на регистрацию'), max_length=255, blank=True)
min_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная площадь'), blank=True, null=True)
currency = EnumField(values=CURRENCY, default='USD')
application_deadline = models.DateField(verbose_name='Срок подачи заявки', null=True)
min_stand_size = models.PositiveIntegerField(verbose_name='Минимальный размер стэнда', blank=True, null=True)
price_catalog = models.PositiveIntegerField(verbose_name='Стоимость каталога', blank=True, null=True)
tax = models.BooleanField(verbose_name='Налог', default=1)
min_closed_area = models.PositiveIntegerField(verbose_name='Минимальная цена закрытой НЕ оборудованной площади',
application_deadline = models.DateField(verbose_name=_(u'Срок подачи заявки'), null=True)
min_stand_size = models.PositiveIntegerField(verbose_name=_(u'Минимальный размер стэнда'), blank=True, null=True)
price_catalog = models.PositiveIntegerField(verbose_name=_(u'Стоимость каталога'), blank=True, null=True)
tax = models.BooleanField(verbose_name=_(u'Налог'), default=1)
min_closed_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена закрытой НЕ оборудованной площади'),
blank=True, null=True)
max_closed_area = models.PositiveIntegerField(verbose_name='Максимальная цена закрытой НЕ оборудованной площади',
max_closed_area = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена закрытой НЕ оборудованной площади'),
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)
max_closed_equipped_area = models.PositiveIntegerField(verbose_name='Максимальная цена закрытой оборудованной площади',
max_closed_equipped_area = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена закрытой оборудованной площади'),
blank=True, null=True)
min_open_area = models.PositiveIntegerField(verbose_name='Минимальная цена открытой площади',
min_open_area = models.PositiveIntegerField(verbose_name=_(u'Минимальная цена открытой площади'),
blank=True, null=True)
max_open_area = models.PositiveIntegerField(verbose_name='Максимальная цена открытой площади',
max_open_area = models.PositiveIntegerField(verbose_name=_(u'Максимальная цена открытой площади'),
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)
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):
exposition = models.ForeignKey(Exposition, related_name='statistic')
year = models.PositiveIntegerField(verbose_name='Год')
members = models.PositiveIntegerField(verbose_name='Посетители', blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name='Участники', blank=True, null=True)
area = models.PositiveIntegerField(verbose_name='Площадь', blank=True, null=True)
countries_number = models.PositiveIntegerField(verbose_name='Количество стран', blank=True, null=True)
year = models.PositiveIntegerField(verbose_name=_(u'Год'))
members = models.PositiveIntegerField(verbose_name=_(u'Посетители'), blank=True, null=True)
visitors = models.PositiveIntegerField(verbose_name=_(u'Участники'), blank=True, null=True)
area = models.PositiveIntegerField(verbose_name=_(u'Площадь'), blank=True, null=True)
countries_number = models.PositiveIntegerField(verbose_name=_(u'Количество стран'), blank=True, null=True)
translations = TranslatedFields(
countries = models.TextField(blank=True)
@ -316,18 +316,18 @@ class TimeTable(TranslatableModel):
"""
exposition = models.ForeignKey(Exposition, related_name='business_program')
begin = models.DateTimeField(verbose_name='Начало')
end = models.DateTimeField(verbose_name='Конец')
begin = models.DateTimeField(verbose_name=_(u'Начало'))
end = models.DateTimeField(verbose_name=_(u'Конец'))
timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True)
#
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
#translated fields
translations = TranslatedFields(
name = models.CharField(verbose_name='Название программы', max_length=255, blank=True),
programe = models.TextField(verbose_name='Программа', blank=True),
speaker = models.CharField(verbose_name='Организатор', max_length=255, blank=True),
place = 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=_(u'Программа'), blank=True),
speaker = models.CharField(verbose_name=_(u'Организатор'), max_length=255, blank=True),
place = models.CharField(verbose_name=_(u'Место проведения'), max_length=255, blank=True)
)
def to_dict(self):
@ -336,8 +336,8 @@ class TimeTable(TranslatableModel):
class TmpTimeTable(TranslatableModel):
exposition = models.ForeignKey(Exposition, null=True, blank=True)
begin = models.DateTimeField(verbose_name='Начало')
end = models.DateTimeField(verbose_name='Конец')
begin = models.DateTimeField(verbose_name=_(u'Начало'))
end = models.DateTimeField(verbose_name=_(u'Конец'))
timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True)
# key uses for checking keys from new objects.
key = models.CharField(max_length=255, blank=True)
@ -346,10 +346,10 @@ class TmpTimeTable(TranslatableModel):
modified = models.DateTimeField(auto_now=True)
#translated fields
translations = TranslatedFields(
name = models.CharField(verbose_name='Название программы', max_length=255, blank=True),
programe = models.TextField(verbose_name='Программа'),
speaker = models.CharField(verbose_name='Спикеры', max_length=255, blank=True),
place = 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=_(u'Программа')),
speaker = models.CharField(verbose_name=_(u'Спикеры'), 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):
exposition = get_object_or_404(Exposition, url=slug)
mail_send = 'evm@expomap.ru'
name = request.POST.get('person_inf')
email = request.POST.get('person')
phone = request.POST.get('phone', '')
question = request.POST.get('question', '')
text = u"выставка: %s\n Контактное лицо:%s\nEmail: %s\nтелефон:%s\n вопрос:%s"%(exposition.name, name, email,
phone, question)
msg = EmailMessage(u'Проплаченная выставка', text, settings.DEFAULT_FROM_EMAIL, [mail_send])
data = {
'expo_name': exposition.name,
'name': request.POST.get('person_inf'),
'email': request.POST.get('person'),
'phone': request.POST.get('phone', ''),
'question': request.POST.get('question', ''),
}
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.send()
redirect_to = '%sservice/thanks/'%exposition.get_permanent_url()

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

@ -14,14 +14,14 @@ import os
FILE_TYPES = ('PDF', 'DOC', 'TXT', 'OTHER')
IMG_TYPES = ('JPG', 'BMP', 'PNG', 'GIF',)
PURPOSES = (('photo', 'Фото'),
('flat', 'Флаг'),
('logo','Лого'),
('map','Карта'),
('scheme teritory','Схема територии'),
('diplom','Дипломы'),
('preview','Превью'),
('preview2','Превью'),
PURPOSES = (('photo', _(u'Фото')),
('flat', _(u'Флаг')),
('logo',_(u'Лого')),
('map',_(u'Карта')),
('scheme teritory',_(u'Схема територии')),
('diplom',_(u'Дипломы')),
('preview',_(u'Превью')),
('preview2',_(u'Превью')),
)
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.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage
from django.db.models.deletion import ProtectedError
from django.utils.translation import ugettext as _
#forms and models
from file.forms import FileModelForm
from file.models import TmpFile
@ -214,7 +216,7 @@ def delete_object(request, Model, Form, url, prev_page,):
object.delete()
return HttpResponseRedirect(prev_page)
except ProtectedError:
msg = u'Удаления %s требует удаления связаных объектов'%object
msg = _(u'Удаления %(object)s требует удаления связаных объектов') % {'object': object}
return render_to_response('delete.html', {'msg':msg, 'prev_page':prev_page})
else:
@ -246,7 +248,7 @@ from webinar.models import Webinar
from company.models import Company
from photoreport.models import Photoreport
from django.utils.translation import ugettext as _
class ExpoMixin(object):
def get_params(self):
model_names = {Exposition: _(u'Выставки'), Conference: _(u'Конференции'), Seminar: _(u'Семинары'),

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

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

@ -11,6 +11,7 @@ from import_forms import ImportEventForm, ImportThemeForm, ImportTagForm, \
from export_forms import ExportEventForm, ExportThemeForm, ExportTagForm,\
ExportUserForm, ExportCompanyForm, ExportPlaceConferenceForm, ExportPlaceExpositionForm, ExportBlogForm,\
ExportCityForm
from django.utils.translation import ugettext as _
def xls_to_response(xls, fname):
@ -47,7 +48,7 @@ class ExportView(FormView):
if workbook:
f_name = form.get_fname()
else:
messages.error(self.request, 'No objects found')
messages.error(self.request, _('No objects found'))
return HttpResponseRedirect(self.success_url)
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
import xlwt
from excel_settings import field_settings, event_export_sett
from django.utils.translation import ugettext as _
languages = [code for code in settings.LANGUAGES]
@ -33,7 +34,7 @@ class ExportForm(forms.Form):
self.style.font = self.font
model = None
language = forms.ChoiceField(label='Выберите язык', choices=languages)
language = forms.ChoiceField(label=_(u'Выберите язык'), choices=languages)
def get_objects(self, data):
return self.model.objects.language(data['language']).all()
@ -166,15 +167,15 @@ class ExportCityForm(ExportForm):
class ExportEventForm(forms.Form):
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition.Exposition', 'Выставка'),
('conference.Conference', 'Конференция'),
('seminar.Seminar', 'Семинар'),
('webinar.Webinar', 'Вебинар')])
language = forms.ChoiceField(label='Выберите язык', choices=languages)
date_from = forms.DateField(label='С', input_formats=settings.CLIENT_DATE_FORMAT)
date_to = forms.DateField(label='До', input_formats=settings.CLIENT_DATE_FORMAT)
theme = forms.ModelMultipleChoiceField(label='Направление', queryset=Theme.objects.all(), required=False)
country = forms.ModelMultipleChoiceField(label='Страны', queryset=Country.objects.all(), required=False)
event = forms.ChoiceField(label=_(u'Выберите тип события'), choices=[('exposition.Exposition', _(u'Выставка')),
('conference.Conference', _(u'Конференция')),
('seminar.Seminar', _(u'Семинар')),
('webinar.Webinar', _(u'Вебинар'))])
language = forms.ChoiceField(label=_(u'Выберите язык'), choices=languages)
date_from = forms.DateField(label=_(u'С'), input_formats=settings.CLIENT_DATE_FORMAT)
date_to = forms.DateField(label=_(u'До'), input_formats=settings.CLIENT_DATE_FORMAT)
theme = forms.ModelMultipleChoiceField(label=_(u'Направление'), queryset=Theme.objects.all(), required=False)
country = forms.ModelMultipleChoiceField(label=_(u'Страны'), queryset=Country.objects.all(), required=False)
def export(self):
data = self.cleaned_data

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

@ -15,6 +15,7 @@ from theme.models import Theme, Tag
from functions.files import get_alternative_filename
from exposition.models import BIT_AUDIENCE
from accounts.models import User
from django.utils.translation import ugettext as _
def to_int(val):
@ -91,11 +92,11 @@ def to_theme(obj, value):
theme_ids = value.split(',')
if theme_ids == ['']:
return u'Неправильное значение'
return _(u'Неправильное значение')
obj.theme.clear()
obj.theme.add(*Theme.objects.filter(id__in=theme_ids))
if not Theme.objects.filter(id__in=theme_ids).exists():
return u'Нет совпадений'
return _(u'Нет совпадений')
return None
@ -176,7 +177,7 @@ def save_logo(obj, path):
try:
alt_name = get_alternative_filename(full_path, file_name)
except UnicodeEncodeError:
return u'Некоректное название файла'
return _(u'Некоректное название файла')
download_to = full_path+alt_name
@ -194,7 +195,7 @@ def save_logo(obj, path):
try:
response = urllib2.urlopen(url, timeout=5)
except:
return u'Превышено время ожидания'
return _(u'Превышено время ожидания')
with open(download_to,'wb') as f:
try:
@ -202,20 +203,20 @@ def save_logo(obj, path):
f.close()
except:
# can be timeout
return u'Превышено время ожидания'
return _(u'Превышено время ожидания')
try:
# check if image
im=Image.open(download_to)
except IOError:
os.remove(download_to)
return u'Неправильный формат логотипа'
return _(u'Неправильный формат логотипа')
obj.logo = logo_path + alt_name
try:
obj.save()
except:
print('logo exception. logo: %s'%obj.logo)
return u'Неизвестная ошибка'
return _(u'Неизвестная ошибка')
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 ckeditor.widgets import CKEditorWidget
from hvad.forms import TranslatableModelForm
from django.utils.translation import ugettext as _
class MetaForm(forms.Form):
name = forms.CharField(label=u'Название страницы')
name = forms.CharField(label=_(u'Название страницы'))
def __init__(self, *args, **kwargs):
"""
@ -23,13 +24,13 @@ class MetaForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
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'}))
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'}))
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'}))
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'}))
def save(self, obj=None):

@ -154,13 +154,13 @@ class SeoText(TranslatableModel):
"""
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(
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"Дескрипшн"),
body=models.TextField(verbose_name=u"Текст")
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"Дескрипшн")),
body=models.TextField(verbose_name=_(u"Текст"))
)
objects = SeoTextManager()

@ -5,6 +5,7 @@ from django.contrib.contenttypes.models import ContentType
from ckeditor.widgets import CKEditorWidget
from django.core.exceptions import ValidationError
from django.forms.util import ErrorList
from django.utils.translation import ugettext as _
#models and forms
from models import News, TYPES
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
"""
date = forms.DateField(label='Дата')
type = forms.ChoiceField(label='Тип новости', choices=[(item, item) for item in TYPES])
paid = forms.BooleanField(label='Платная', required=False)
date = forms.DateField(label=_(u'Дата'))
type = forms.ChoiceField(label=_(u'Тип новости'), choices=[(item, item) for item in TYPES])
paid = forms.BooleanField(label=_(u'Платная'), required=False)
#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
tag = forms.MultipleChoiceField(label='Теги', required=False)
user = forms.ModelChoiceField(label='Организатор', queryset=User.objects.exclude(organiser__isnull=True),
tag = forms.MultipleChoiceField(label=_(u'Теги'), required=False)
user = forms.ModelChoiceField(label=_(u'Организатор'), queryset=User.objects.exclude(organiser__isnull=True),
empty_label=None)
#
event = forms.ChoiceField(label='Тип события', choices=[(None, ''), ('conference.Conference', 'Конференция'),
('exposition.Exposition', 'Выставка')], required=False)
event_id = forms.ChoiceField(label='Событие', choices=[(None,'')], required=False)
event = forms.ChoiceField(label=_(u'Тип события'), choices=[(None, ''), ('conference.Conference', _(u'Конференция')),
('exposition.Exposition', _(u'Выставка'))], required=False)
event_id = forms.ChoiceField(label=_(u'Событие'), choices=[(None,'')], required=False)
#field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput())
@ -53,16 +54,16 @@ class NewsForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
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'}))
self.fields['preview_%s' % code] = forms.CharField(label='Превью', required=required, widget=CKEditorWidget)
self.fields['description_%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=_(u'Описание'), required=required, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
def save(self, id=None):
@ -124,7 +125,7 @@ class NewsForm(forms.Form):
except:
return main_title_ru
raise ValidationError('Новость с таким названием уже существует')
raise ValidationError(_(u'Новость с таким названием уже существует'))
def clean(self):
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 import generic
import copy
from django.utils.translation import ugettext as _
#functions
from functions.custom_fields import EnumField
@ -27,18 +29,18 @@ class News(TranslatableModel):
object = generic.GenericForeignKey(content_type, object_id)
url = models.SlugField(unique=True)
date = models.DateField(verbose_name='Дата')
date = models.DateField(verbose_name=_(u'Дата'))
type = EnumField(values=TYPES)
theme = models.ManyToManyField('theme.Theme', verbose_name='Тема')
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True)
user = models.ForeignKey('accounts.User', verbose_name='Организатор', blank=True, null=True,
theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тема'))
tag = models.ManyToManyField('theme.Tag', verbose_name=_(u'Теги'), blank=True, null=True)
user = models.ForeignKey('accounts.User', verbose_name=_(u'Организатор'), blank=True, null=True,
on_delete=models.PROTECT)
paid = models.BooleanField(default=0)
translations = TranslatedFields(
main_title = models.CharField(verbose_name='Заголовок', max_length=255),
preview = models.TextField(verbose_name='Превью'),
description = models.TextField(verbose_name='Описание'),
main_title = models.CharField(verbose_name=_(u'Заголовок'), max_length=255),
preview = models.TextField(verbose_name=_(u'Превью')),
description = models.TextField(verbose_name=_(u'Описание')),
#---meta data
title = 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 django.core.exceptions import ValidationError
from django.core.validators import URLValidator
from django.utils.translation import ugettext as _
#models
from models import Organiser
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
"""
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)
country = forms.ChoiceField(label='Страна', choices=[(item.id, item.name) for item in Country.objects.all()])
city = forms.CharField(label='Город', widget=forms.HiddenInput())
theme = forms.MultipleChoiceField(label='Тематики', choices=[(item.id, item.name) for item in Theme.objects.language().all()])
place_exposition = forms.MultipleChoiceField(label='Места проведения выставок', required=False,
country = forms.ChoiceField(label=_(u'Страна'), choices=[(item.id, item.name) for item in Country.objects.all()])
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
theme = forms.MultipleChoiceField(label=_(u'Тематики'), choices=[(item.id, item.name) for item in Theme.objects.language().all()])
place_exposition = forms.MultipleChoiceField(label=_(u'Места проведения выставок'), required=False,
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()])
#creates select input with empty choices cause it will be filled with ajax
tag = forms.CharField(label='Теги', widget=forms.HiddenInput(), required=False)
logo = forms.ImageField(label='Logo', required=False)
tag = forms.CharField(label=_(u'Теги'), widget=forms.HiddenInput(), required=False)
logo = forms.ImageField(label=_(u'Logo'), required=False)
staff_number = forms.CharField(label='Количество сотрудников', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество сотрудников'}))
staff_number = forms.CharField(label=_(u'Количество сотрудников'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Количество сотрудников')}))
#uses locationwidget
address = forms.CharField(label='Адрес', required=False, widget=LocationWidget)
phone = forms.CharField(label='Телефон', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'}))
fax = forms.CharField(label='Факс', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'}))
web_page = forms.CharField(label='Веб-сайт', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))
email = forms.EmailField(label='Email', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))
events_number = forms.CharField(label='Количество мероприятий в год', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество'}))
foundation = forms.CharField(label='Год основания', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'}))
address = forms.CharField(label=_(u'Адрес'), required=False, widget=LocationWidget)
phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label=_(u'Факс'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.CharField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))
email = forms.EmailField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))
events_number = forms.CharField(label=_(u'Количество мероприятий в год'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Количество')}))
foundation = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
def __init__(self, *args, **kwargs):
"""
@ -71,20 +72,20 @@ class OrganiserForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['specialization_%s' % code] = forms.CharField(label='Специализация', required=False)
self.fields['description_%s' % code] = forms.CharField(label='Описание',
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['specialization_%s' % code] = forms.CharField(label=_(u'Специализация'), required=False)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
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'}))
self.fields['address_inf_%s' % code] = forms.CharField(label='Доп инф по адресу',
self.fields['address_inf_%s' % code] = forms.CharField(label=_(u'Доп инф по адресу'),
required=False, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
@ -215,7 +216,7 @@ class OrganiserForm(forms.Form):
if phone.isdigit():
return phone
else:
raise ValidationError('Введите правильный телефон')
raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self):
"""
@ -234,7 +235,7 @@ class OrganiserForm(forms.Form):
if fax.isdigit():
return fax
else:
raise ValidationError('Введите правильный факс')
raise ValidationError(_(u'Введите правильный факс'))
class OrganiserFilterForm(AdminFilterForm):

@ -34,39 +34,39 @@ class Organiser(TranslatableModel):
url = models.SlugField(verbose_name='URL', blank=True, max_length=255)
#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)
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,)
theme = models.ManyToManyField('theme.Theme', verbose_name='Отрасль', blank=True, null=True)
tag = models.ManyToManyField('theme.Tag', 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=_(u'Теги'), blank=True, null=True)
#address. uses LocationField. saves data in json format
address = LocationField(verbose_name='Адресс', blank=True, null=True)
logo = models.ImageField(verbose_name='Logo', upload_to=logo_name, blank=True)
address = LocationField(verbose_name=_(u'Адресс'), blank=True, null=True)
logo = models.ImageField(verbose_name=_(u'Logo'), upload_to=logo_name, blank=True)
rating = models.IntegerField(default=0)
phone = models.BigIntegerField(verbose_name='Телефон', blank=True, null=True)
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True)
email = models.EmailField(verbose_name='Email', blank=True)
phone = models.BigIntegerField(verbose_name=_(u'Телефон'), blank=True, null=True)
fax = models.BigIntegerField(verbose_name=_(u'Факс'), blank=True, null=True)
web_page = models.CharField(verbose_name=_(u'Веб-сайт'),max_length=255, blank=True)
email = models.EmailField(verbose_name=_(u'Email'), blank=True)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True)
events_number = models.PositiveIntegerField(verbose_name='Количество мероприятий', blank=True, null=True)
staff_number = models.PositiveIntegerField(verbose_name='Количество сотрудников', blank=True, null=True)
foundation = models.PositiveIntegerField(verbose_name=_(u'Год основания'), blank=True, null=True)
events_number = models.PositiveIntegerField(verbose_name=_(u'Количество мероприятий'), 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,
related_name='organiser_place_exposition')
place_conference = models.ManyToManyField('place_conference.PlaceConference', blank=True, null=True,
related_name='organiser_place_conference')
#translation fields
translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255, blank=True),
specialization = models.CharField(verbose_name='Специализация', max_length=255, blank=True),
description = models.TextField(verbose_name='Описание', blank=True),
representation = models.TextField(verbose_name='Представительства', blank=True),
address_inf = models.TextField(verbose_name='Доп инф по адресу', blank=True),
name = models.CharField(verbose_name=_(u'Название'), max_length=255, blank=True),
specialization = models.CharField(verbose_name=_(u'Специализация'), max_length=255, blank=True),
description = models.TextField(verbose_name=_(u'Описание'), blank=True),
representation = models.TextField(verbose_name=_(u'Представительства'), blank=True),
address_inf = models.TextField(verbose_name=_(u'Доп инф по адресу'), blank=True),
#-----meta
title = 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"
"http://www.w3.org/TR/html4/loose.dtd">
<html style="margin: 0; padding: 0; height: 100%;">
@ -16,15 +17,15 @@
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<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>
</div>
</td>
<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;">
<li style="display: inline-block;"><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="#">МЕСТА</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;"><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="#">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "УЧАСТНИКИ" %}</a></li>
</ul>
<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;">
<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>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -49,27 +50,27 @@
<tr valign="top">
<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>
</tr>
<tr valign="top">
<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>
</tr>
<tr valign="top">
<td style="padding: 0 0 32px 0;">
Вы можете восстановить доступ, нажав на кнопку ниже и указав новый пароль:
{% trans "Вы можете восстановить доступ, нажав на кнопку ниже и указав новый пароль:" %}
</td>
</tr>
<tr valign="top">
<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>
</tr>
<tr valign="top">
<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>
</tr>
@ -92,9 +93,9 @@
</td>
<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;">
<li style="display: inline-block;"><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="#">МЕСТА</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;"><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="#">{% trans "МЕСТА" %}</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">{% trans "УЧАСТНИКИ" %}</a></li>
</ul>
</td>
</tr>

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

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

@ -9,6 +9,7 @@ from models import Photoreport
from functions.form_check import translit_with_separator
from functions.translate import fill_with_signal
from functions.files import check_tmp_files
from django.utils.translation import ugettext as _
class PhotoreportForm(forms.Form):
@ -31,16 +32,16 @@ class PhotoreportForm(forms.Form):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['description_%s' % code] = forms.CharField(label='Описание',
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'),
required=False, widget=CKEditorWidget)
#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'}))
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'}))
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'}))
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.custom_fields import LocationWidget
from functions.admin_forms import AdminFilterForm
from django.utils.translation import ugettext as _
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
"""
types = [(item1, item2) for item1, item2 in CONFERENCE_TYPE]
type = forms.ChoiceField(label='Краткое описание', required=False, choices=types)
logo = forms.ImageField(label='Logo', required=False, max_length=500)
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None)
type = forms.ChoiceField(label=_(u'Краткое описание'), required=False, choices=types)
logo = forms.ImageField(label=_(u'Logo'), required=False, max_length=500)
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
city = forms.CharField(label='Город', widget=forms.HiddenInput())
address = forms.CharField(label='Адресс', widget=LocationWidget, required=False)
foundation_year = forms.CharField(label='Год основания', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'}))
phone = forms.CharField(label='Телефон', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'}))
fax = forms.CharField(label='Факс', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'}))
web_page = forms.CharField(label='Веб-сайт', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))
email = forms.CharField(label='Email', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))
total_capacity = forms.CharField(label='Общая вместимость', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Общая вместимость'}))
amount_halls = forms.CharField(label='Количество залов', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество залов'}))
video_link = forms.CharField(label='Видео', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите ссылку на видео'}))
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
address = forms.CharField(label=_(u'Адресс'), widget=LocationWidget, required=False)
foundation_year = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label=_(u'Факс'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.CharField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))
email = forms.CharField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))
total_capacity = forms.CharField(label=_(u'Общая вместимость'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Общая вместимость')}))
amount_halls = forms.CharField(label=_(u'Количество залов'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Количество залов')}))
video_link = forms.CharField(label=_(u'Видео'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите ссылку на видео')}))
#halls information
hall_name = forms.CharField(label='Название зала', required=False)
hall_number = forms.IntegerField(label='Номер зала', min_value=1, initial='1', required=False)
hall_capacity = forms.IntegerField(label='Вместимость зала', min_value='1', required=False)
hall_name = forms.CharField(label=_(u'Название зала'), required=False)
hall_number = forms.IntegerField(label=_(u'Номер зала'), min_value=1, initial='1', required=False)
hall_capacity = forms.IntegerField(label=_(u'Вместимость зала'), min_value='1', required=False)
#
exposition_hall = forms.BooleanField(label='Выставочный зал', required=False)#14
exp_hall_area = forms.CharField(label='Площадь выст. зала', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Площадь выст. зала'}))#15
exposition_hall = forms.BooleanField(label=_(u'Выставочный зал'), required=False)#14
exp_hall_area = forms.CharField(label=_(u'Площадь выст. зала'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Площадь выст. зала')}))#15
#
wifi = forms.BooleanField(label='Wi-fi', required=False)
multimedia_equipment = forms.BooleanField(label='Мультимедийное оборудование', required=False)
conference_call = forms.BooleanField(label='Конференц-связь', required=False)
translate_equipment = forms.BooleanField(label='Оборудование для синхронного перевода', required=False)
banquet_hall = forms.BooleanField(label='Банкетный зал', required=False)
catering = forms.BooleanField(label='Кейтеринг', required=False)
hotel = forms.BooleanField(label='Гостиница', required=False)
multimedia_equipment = forms.BooleanField(label=_(u'Мультимедийное оборудование'), required=False)
conference_call = forms.BooleanField(label=_(u'Конференц-связь'), required=False)
translate_equipment = forms.BooleanField(label=_(u'Оборудование для синхронного перевода'), required=False)
banquet_hall = forms.BooleanField(label=_(u'Банкетный зал'), required=False)
catering = forms.BooleanField(label=_(u'Кейтеринг'), required=False)
hotel = forms.BooleanField(label=_(u'Гостиница'), required=False)
#
key = forms.CharField(required=False, widget=forms.HiddenInput())
#
@ -83,20 +83,20 @@ class ConferenceForm(forms.Form):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) #
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание', required=False, widget=CKEditorWidget)
self.fields['description_%s' % code] = forms.CharField(label='Полное описание', required=False, widget=CKEditorWidget)
self.fields['adress_%s' % code] = forms.CharField(label='Дополнительная инф по адресу', required=False, max_length=255,
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required) #
self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'), 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=_(u'Дополнительная инф по адресу'), required=False, max_length=255,
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
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'}))
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'}))
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'}))
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)
"""
try:
@ -226,7 +226,7 @@ class ConferenceForm(forms.Form):
if phone.isdigit():
return phone
else:
raise ValidationError('Введите правильный телефон')
raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self):
"""
@ -245,7 +245,7 @@ class ConferenceForm(forms.Form):
if fax.isdigit():
return fax
else:
raise ValidationError('Введите правильный факс')
raise ValidationError(_(u'Введите правильный факс'))
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.custom_fields import LocationWidget
from functions.admin_forms import AdminFilterForm
from django.utils.translation import ugettext as _
class ExpositionForm(forms.Form):
@ -27,48 +28,48 @@ class ExpositionForm(forms.Form):
"""
types = [(item1, item2) for item1, item2 in EXPOSITION_TYPE]
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
city = forms.CharField(label='Город', widget=forms.HiddenInput())
address = forms.CharField(label='Адрес', widget=LocationWidget, required=False)
phone = forms.CharField(label='Телефон', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'}))
fax = forms.CharField(label='Факс', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите факс'}))
web_page = forms.URLField(label='Веб-сайт', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))#
email = forms.EmailField(label='Email', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))#
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput())
address = forms.CharField(label=_(u'Адрес'), widget=LocationWidget, required=False)
phone = forms.CharField(label=_(u'Телефон'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите телефон')}))
fax = forms.CharField(label=_(u'Факс'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите факс')}))
web_page = forms.URLField(label=_(u'Веб-сайт'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите адрес сайта')}))#
email = forms.EmailField(label=_(u'Email'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Введите email')}))#
#
foundation_year = forms.CharField(label='Год основания', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'}))
foundation_year = forms.CharField(label=_(u'Год основания'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Год основания')}))
total_area = forms.CharField(label='Общая выставочная площадь', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Общая выст. площадь'}))
closed_area = forms.CharField(label='Закрытая выставочная площадь', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Закр. выст. площадь'}))
open_area = forms.CharField(label='Открытая выставочная площадь', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Откр. выст. площадь'}))
total_pavilions = forms.CharField(label='Количество павильонов', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Количество павильонов'}))
total_halls = forms.CharField(label='Количество конференц залов', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Конференц залы'}))
widget=forms.TextInput(attrs={'placeholder': _(u'Общая выст. площадь')}))
closed_area = forms.CharField(label=_(u'Закрытая выставочная площадь'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Закр. выст. площадь')}))
open_area = forms.CharField(label=_(u'Открытая выставочная площадь'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Откр. выст. площадь')}))
total_pavilions = forms.CharField(label=_(u'Количество павильонов'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Количество павильонов')}))
total_halls = forms.CharField(label=_(u'Количество конференц залов'), required=False,
widget=forms.TextInput(attrs={'placeholder': _(u'Конференц залы')}))
#
wifi = forms.BooleanField(label='Wi-fi', required=False)
bank = forms.BooleanField(label='Банк/Банкоматы', required=False)
children_room = forms.BooleanField(label='Детская комната', required=False)
disabled_service = forms.BooleanField(label='Сервис для инвалидов', required=False)
conference_centre = forms.BooleanField(label='Конгресс-центр', required=False)
business_centre = forms.BooleanField(label='Бизнес-центр', required=False)
online_registration = forms.BooleanField(label='Онлайн регистрация', required=False)
cafe = forms.BooleanField(label='Кафе', required=False)
terminals = forms.BooleanField(label='Информационные терминалы', required=False)
parking = forms.BooleanField(label='Парковка', required=False)
press_centre = forms.BooleanField(label='Пресс-центр', required=False)
mobile_application = forms.BooleanField(label='Мобильное приложение', required=False)
bank = forms.BooleanField(label=_(u'Банк/Банкоматы'), required=False)
children_room = forms.BooleanField(label=_(u'Детская комната'), required=False)
disabled_service = forms.BooleanField(label=_(u'Сервис для инвалидов'), required=False)
conference_centre = forms.BooleanField(label=_(u'Конгресс-центр'), required=False)
business_centre = forms.BooleanField(label=_(u'Бизнес-центр'), required=False)
online_registration = forms.BooleanField(label=_(u'Онлайн регистрация'), required=False)
cafe = forms.BooleanField(label=_(u'Кафе'), required=False)
terminals = forms.BooleanField(label=_(u'Информационные терминалы'), required=False)
parking = forms.BooleanField(label=_(u'Парковка'), required=False)
press_centre = forms.BooleanField(label=_(u'Пресс-центр'), required=False)
mobile_application = forms.BooleanField(label=_(u'Мобильное приложение'), required=False)
def __init__(self, *args, **kwargs):
"""
@ -82,19 +83,19 @@ class ExpositionForm(forms.Form):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
self.fields['main_title_%s' % code] = forms.CharField(label='Краткое описание', required=False, widget=CKEditorWidget)#5
self.fields['description_%s' % code] = forms.CharField(label='Полное описание', required=False, widget=CKEditorWidget)
self.fields['adress_%s' % code] = forms.CharField(label='Дополнительная инф по адресу', required=False, max_length=255,
self.fields['name_%s' % code] = forms.CharField(label=_(u'Название'), required=required)
self.fields['main_title_%s' % code] = forms.CharField(label=_(u'Краткое описание'), required=False, widget=CKEditorWidget)#5
self.fields['description_%s' % code] = forms.CharField(label=_(u'Полное описание'), required=False, widget=CKEditorWidget)
self.fields['adress_%s' % code] = forms.CharField(label=_(u'Дополнительная инф по адресу'), required=False, max_length=255,
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
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'}))
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'}))
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'}))
@ -173,7 +174,7 @@ class ExpositionForm(forms.Form):
if phone.isdigit():
return phone
else:
raise ValidationError('Введите правильный телефон')
raise ValidationError(_(u'Введите правильный телефон'))
def clean_fax(self):
"""
@ -192,7 +193,7 @@ class ExpositionForm(forms.Form):
if fax.isdigit():
return fax
else:
raise ValidationError('Введите правильный факс')
raise ValidationError(_(u'Введите правильный факс'))
@ -256,9 +257,9 @@ class PlaceExpositionFormDelete(forms.ModelForm):
class HallForm(forms.Form):
url = '/admin/place_exposition/add-hall/'
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,
label='Вместимость')
label=_(u'Вместимость'))
def __init__(self, *args, **kwargs):
"""
create dynamical translated fields fields
@ -276,7 +277,7 @@ class HallForm(forms.Form):
def clean_capacity(self):
cleaned_data = super(HallForm, self).clean()
capacity = cleaned_data.get('capacity').strip()
return is_positive_integer(capacity, 'Вместимость должна состоять из цифр')
return is_positive_integer(capacity, _(u'Вместимость должна состоять из цифр'))
def save(self, place_exposition, id=None):
if id:
@ -292,7 +293,6 @@ class HallForm(forms.Form):
return hall
class PlaceExpositionFilter(AdminFilterForm):
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 photologue.models import Gallery
EXPOSITION_TYPE = (('Exposition complex', u'Выставочный комплекс'), ('Convention centre', u'Конгрессно-выставочный центр'),
('Exposition centre', u'Выставочный центр'),)
EXPOSITION_TYPE = (('Exposition complex', _(u'Выставочный комплекс')), ('Convention centre', _(u'Конгрессно-выставочный центр')),
('Exposition centre', _(u'Выставочный центр')),)
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 = EnumField(values = [item1 for item1, item2 in EXPOSITION_TYPE])
#information
address = LocationField(verbose_name='Адресс')
address = LocationField(verbose_name=_(u'Адресс'))
phone = models.BigIntegerField(blank=True, null=True)
fax = models.BigIntegerField(blank=True, null=True)
web_page = models.URLField(blank=True)
@ -79,7 +79,7 @@ class PlaceExposition(TranslatableModel, ExpoMixin):
press_centre = 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)
partner = models.NullBooleanField(default=0)

@ -37,7 +37,7 @@ urlpatterns = required(
url(r'^translator_catalog/', include('specialist_catalog.admin_urls')),
url(r'^newsletters/', include('emencia.django.newsletter.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'^currency/add/', 'directories.admin.currency_add'),

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

@ -3,6 +3,7 @@ from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from django.contrib.contenttypes.models import ContentType
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,
on_delete=models.PROTECT, related_name='reviews')
comment = models.TextField(verbose_name='Отзыв')
rating = models.SmallIntegerField(verbose_name='Оценка', blank=True, null=True)
comment = models.TextField(verbose_name=_(u'Отзыв'))
rating = models.SmallIntegerField(verbose_name=_(u'Оценка'), blank=True, null=True)
#field saves information about creating and changing model
created = models.DateTimeField(auto_now_add=True)

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

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

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

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

@ -5,6 +5,7 @@ from theme.models import Theme
from .models import Html, LandingComment, LandingParticipationComment
from article.models import Article
from functions.forms import ExpoTranslatableModelForm, ExpoTranslatableModelForm_
from django.utils.translation import ugettext as _
class HtmlForm(ExpoTranslatableModelForm):
@ -21,7 +22,7 @@ class CommentForm(ExpoTranslatableModelForm_):
@property
def verbose(self):
return u'Редактировать комментарий' if self.instance.pk else u'Создать комментарий'
return _(u'Редактировать комментарий') if self.instance.pk else _(u'Создать комментарий')
class ParticipationCommentForm(CommentForm):
@ -47,7 +48,7 @@ class MainPageThemes(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):
data = self.cleaned_data

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

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

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

@ -1,17 +1,18 @@
{% extends 'base_catalog.html' %}
{% load i18n %}
{% block content_list %}
<div class="page-title">
<h1>Запрашиваемая страница не найдена</h1>
<h1>{% trans "Запрашиваемая страница не найдена" %}</h1>
</div>
<div class="m-article error-404">
<span class="figure">404:</span>
<p class="title">Возможно у нее изменился адрес или же она была удалена.<br> Воспользуйтесь поиском по названию, расширенной формой поиска или каталогом событий.</p>
<p class="title">{% trans "Возможно у нее изменился адрес или же она была удалена.<br> Воспользуйтесь поиском по названию, расширенной формой поиска или каталогом событий." %}</p>
<div class="clearfix"></div>
<hr/>
<section>
<h2>Каталог выставок</h2>
<h2>{% trans "Каталог выставок" %}</h2>
<ul class="items-list">
{% 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>
@ -20,7 +21,7 @@
</section>
<hr/>
<section >
<h2>Каталог конференций</h2>
<h2>{% trans "Каталог конференций" %}</h2>
<ul class="items-list">
{% 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>

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

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

@ -35,7 +35,7 @@
<h1>{{ object.get_full_name }}</h1>
<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 class="profile_top_right_1">
{% if object.profile.country %}

@ -54,7 +54,7 @@
<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>
<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>
{% endfor %}

@ -91,7 +91,7 @@
{% if object.description %}
<hr />
<div class="i-services country_content">
<h2 class="sect-title">Описание</h2>
<h2 class="sect-title">{% trans "Описание" %}</h2>
<div class="i-descr">
{{ object.description }}
</div>
@ -100,7 +100,7 @@
{% if object.get_photos %}
<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">
<ul class="swiper-wrapper">

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

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

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

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

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

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

@ -258,7 +258,7 @@
<header>
<h2 class="im-title">{% trans 'Участники' %}</h2>
<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>
{% endif %}
{% endwith %}

@ -290,7 +290,7 @@
{% if exposition.area %}
{% else %}
{% 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 %}
{% if exposition.members or exposition.visitors or exposition.foundation_year or exposition.area %}

@ -30,7 +30,7 @@
<div class="i-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>
{% endif %}
</div>
@ -76,7 +76,7 @@
{% with days=exposition.get_timetables_days %}
{% if days %}
<div class="e-programm">
<h2 class="sect-title">Деловая программа</h2>
<h2 class="sect-title">{% trans "Деловая программа" %}</h2>
<div class="ep-wrap">
@ -102,7 +102,7 @@
<div class="ep-title"><span>{{ pr.name }}</span></div>
</header>
<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>
<footer class="clearfix">
<div class="ap-area">{{ pr.place }}</div>

@ -1,7 +1,8 @@
{% load i18n %}
<div class="p-filter clearfix">
<div class="pf-body">
<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 class="ch-dates-range">

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

@ -1,3 +1,4 @@
{% load i18n %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html style="margin: 0; padding: 0; height: 100%;">
@ -16,15 +17,15 @@
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<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>
</div>
</td>
<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;">
<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; 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/members/">УЧАСТНИКИ</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/">{% 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/">{% trans "УЧАСТНИКИ" %}</a></li>
</ul>
<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;">
<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>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
@ -48,17 +49,17 @@
<tr valign="top">
<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>
</tr>
<tr valign="top">
<td style="padding: 0 0 32px 0;">
<p>Благодарим за подписку! Остался 1 шаг - подтвердить Ваш электронный адрес, нажав на кнопку:</p>
<p>{% trans "Благодарим за подписку! Остался 1 шаг - подтвердить Ваш электронный адрес, нажав на кнопку:" %}</p>
</td>
</tr>
<tr valign="top">
<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>
</tr>

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

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

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

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

@ -45,7 +45,7 @@
<div class="pwf-field">
<button type="submit" class="icon-check">{% trans 'Зарегистрироваться' %}</button>
</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>
</form>
</div>

@ -12,10 +12,10 @@
<div class="pwf-line subj-checks" id="{{subjectTriggerWrapId}}">
<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 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>
{% comment %}
{# заморожено #}

@ -1,7 +1,7 @@
{% load i18n %}
<h2>Search</h2>
<h2>{% trans "Search" %}</h2>
<form method="get" action=".">
<table>
@ -15,21 +15,21 @@
</table>
{% if query %}
<h3>Results</h3>
<h3>{% trans "Results" %}</h3>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a>
</p>
{% empty %}
<p>No results found.</p>
<p>{% trans "No results found." %}</p>
{% endfor %}
{% if page.has_previous or page.has_next %}
<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>
{% endif %}
{% else %}

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

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

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

Loading…
Cancel
Save