Exemple #1
0
    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
Exemple #2
0
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)
Exemple #3
0
    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
Exemple #4
0
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}