def clean(self): cleaned_data = super(ProjectForm, self).clean() if not cleaned_data.get('pofile'): return None project_type = cleaned_data.get('project_type') data_processor = data_processors.get_data_processor(project_type.name) pofile = cleaned_data.get('pofile').read() try: translations_data = data_processor.parse_file(pofile) except data_processors.DataParsingError: if project_type.description: error = 'Error in file, %s' % project_type.description else: error = 'Error in file' raise forms.ValidationError(error) cleaned_data['pofile'] = pofile for entry in translations_data: if len(entry['msgid']) > 100: raise forms.ValidationError(_('Too long msgid')) if len(entry['msgstr']) > 4000: raise forms.ValidationError(_('Too long msgid')) return cleaned_data
def import_po_file(message_file, project_id, lang_id): ProjectLanguage.objects.get_or_create( lang=Language.objects.get(id=lang_id), project=Project.objects.get(id=project_id)) project = Project.objects.filter(id=project_id)[0] data_processor = data_processors.get_data_processor(project.project_type.name) translations_data = data_processor.parse_file(message_file) if int(lang_id) == int(project.lang_id): _create_new_set(project, lang_id, translations_data) else: _import_new_lang(project, lang_id, translations_data)
def clean(self): cleaned_data = super(PoFileForm, self).clean() lang_id = cleaned_data.get('lang') project_id = int(cleaned_data.get('project')) project = Project.objects.get(id=project_id) if lang_id and project_id: lang_id = lang_id.id data_processor = data_processors.get_data_processor(project.project_type.name) if cleaned_data.get('pofile'): pofile = cleaned_data.get('pofile').read() else: error = _('File not found') raise forms.ValidationError(error) try: translations_data = data_processor.parse_file(pofile) except data_processors.DataParsingError: if project.project_type.description: error = 'Error in file, %s' % project.project_type.description else: error = 'Error in file' raise forms.ValidationError(error) cleaned_data['pofile'] = pofile project_language = Project.objects.get(id=project_id).lang if lang_id in [x['lang'] for x in ProjectLanguage.objects.filter(project_id=project_id).values('lang').exclude(lang=project_language)]: raise forms.ValidationError(_('File with messages for this language already exist')) if lang_id == project.lang_id: last_set = Set.objects.filter(project=project_id).order_by('-id') last_set = next(iter(last_set), None) all_messages = last_set and SetList.objects.filter(message_set=last_set) or [] if set(i.msgid for i in all_messages) == set(i['msgid'] for i in translations_data): raise forms.ValidationError(_('File with messages was not changed')) for entry in translations_data: if len(entry['msgid']) > 100: raise forms.ValidationError(_('Too long msgid')) if len(entry['msgstr']) > 4000: raise forms.ValidationError(_('Too long msgid')) return cleaned_data
def export(request, project, lang_id=None): if request.method == 'POST': lang_id = int(request.POST['lang']) cur_proj = project.id if lang_id and ProjectLanguage.objects.filter(lang=lang_id, project_id=cur_proj).exists(): dataset = get_message_list(cur_proj, lang_id) for row in dataset: if not row['is_translated']: row['msg_target'] = row['msg_source'] processor = data_processors.get_data_processor(project.project_type.name) export_data = processor.export_file(dataset) response = HttpResponse(export_data, content_type='text/plain') response['Content-Disposition'] = 'attachment; filename="django.po"' return response errors = _('Set does not exist for this language') return {'errors': errors, 'show_export': True}