diff --git a/base/forms.py b/base/forms.py index b5ce250ea..c0905a944 100644 --- a/base/forms.py +++ b/base/forms.py @@ -2,6 +2,7 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Fieldset, Layout from django import forms from django.forms import ModelForm +from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin from crispy_layout_mixin import form_actions @@ -47,7 +48,7 @@ class CasaLegislativaTabelaAuxForm(ModelForm): attrs={'class': 'selector'})) informacao_geral = forms.CharField(widget=forms.Textarea, - label='Informação Geral', + label=_('Informação Geral'), required=False) telefone = forms.CharField(label='Telefone', @@ -121,7 +122,7 @@ class CasaLegislativaTabelaAuxForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Dados Básicos', + _('Dados Básicos'), row1, row2, row3, diff --git a/comissoes/forms.py b/comissoes/forms.py index c2239332f..feb4b1fd3 100644 --- a/comissoes/forms.py +++ b/comissoes/forms.py @@ -79,14 +79,14 @@ class CadastrarComissaoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Cadastrar Comissão', + _('Cadastrar Comissão'), Fieldset( - 'Dados Básicos', + _('Dados Básicos'), row1, row2 ), Fieldset( - 'Dados Complementares', + _('Dados Complementares'), row3, row4, row5, @@ -165,7 +165,7 @@ class ParticipacaoCadastroForm(ModelForm): self.helper.layout = Layout( Fieldset( - 'Formulário de Cadastro', + _('Formulário de Cadastro'), row1, row2, row3, row4 ), form_actions() diff --git a/comissoes/views.py b/comissoes/views.py index b39f3a8f9..2b14b214a 100644 --- a/comissoes/views.py +++ b/comissoes/views.py @@ -59,7 +59,7 @@ class ComposicaoView(FormMixin, GenericView): msg = '' else: composicao_id = 0 - msg = 'Ainda não há uma composição formada!' + msg = _('Ainda não há uma composição formada!') messages.add_message(request, messages.INFO, msg) return self.render_to_response({ @@ -114,7 +114,7 @@ class ComissaoParlamentarIncluirView(FormMixin, GenericView): if cargo.nome == 'Presidente': for p in Participacao.objects.filter(composicao=composicao): if p.cargo.nome == 'Presidente': - msg = 'Esse cargo já está sendo ocupado!' + msg = _('Esse cargo já está sendo ocupado!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'form': form, diff --git a/compilacao/models.py b/compilacao/models.py index 0f197e071..eaa0a52c4 100644 --- a/compilacao/models.py +++ b/compilacao/models.py @@ -658,7 +658,7 @@ class Dispositivo(BaseModel, TimestampedMixin): elif irmaos_mesmo_tipo.count() == 1: self.transform_in_next() self.transform_in_next() - r += 'Transformar %s em %s%s e criar %s1%s' % ( + r += _('Transformar %s em %s%s e criar %s1%s') % ( prefixo[1].strip(), prefixo[0], self.get_nomenclatura_completa(), @@ -686,7 +686,7 @@ class Dispositivo(BaseModel, TimestampedMixin): ordem__gt=self.ordem, ordem__lt=irmaos_mesmo_tipo[0].ordem).exists(): self.dispositivo0 = 2 - r += 'Transformar %s em %s%s e criar %s1%s' % ( + r += _('Transformar %s em %s%s e criar %s1%s') % ( prefixo[1].strip(), prefixo[0], self.get_nomenclatura_completa(), @@ -695,7 +695,7 @@ class Dispositivo(BaseModel, TimestampedMixin): self.tipo_dispositivo.rotulo_ordinal >= 0 else '',) else: - r += 'Transformar %s em %s%s e criar %s 2%s' % ( + r += _('Transformar %s em %s%s e criar %s 2%s') % ( prefixo[1].strip(), prefixo[0], self.get_nomenclatura_completa(), @@ -893,7 +893,7 @@ class Dispositivo(BaseModel, TimestampedMixin): Max('ordem')) if ordem_max['ordem__max'] is None: raise Exception( - 'Não existem registros base neste Texto Articulado') + _('Não existem registros base neste Texto Articulado')) ordem = ordem_max['ordem__max'] + Dispositivo.INTERVALO_ORDEM return ordem diff --git a/compilacao/templatetags/compilacao_filters.py b/compilacao/templatetags/compilacao_filters.py index 544223d60..f5be36dac 100644 --- a/compilacao/templatetags/compilacao_filters.py +++ b/compilacao/templatetags/compilacao_filters.py @@ -40,13 +40,13 @@ def nota_automatica(dispositivo, ta_pub_list): if dispositivo.ta_publicado is not None: d = dispositivo.dispositivo_atualizador.dispositivo_pai if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO: - return 'Revogado pelo %s - %s.' % ( + return _('Revogado pelo %s - %s.') % ( d, ta_pub_list[dispositivo.ta_publicado_id]) elif not dispositivo.dispositivo_substituido_id: - return 'Inclusão feita pelo %s - %s.' % ( + return _('Inclusão feita pelo %s - %s.') % ( d, ta_pub_list[dispositivo.ta_publicado_id]) else: - return 'Alteração feita pelo %s - %s.' % ( + return _('Alteração feita pelo %s - %s.') % ( d, ta_pub_list[dispositivo.ta_publicado_id]) return '' diff --git a/compilacao/utils.py b/compilacao/utils.py index ca00f66b4..022d1389e 100644 --- a/compilacao/utils.py +++ b/compilacao/utils.py @@ -4,7 +4,7 @@ def int_to_roman(int_value): # if isinstance(int_value, type(1)): # raise TypeError("expected integer, got %s" % type(int_value)) if not 0 < int_value < 4000: - raise ValueError("Argument must be between 1 and 3999") + raise ValueError(_("Argument must be between 1 and 3999")) ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) nums = ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I') diff --git a/compilacao/views.py b/compilacao/views.py index 127d8a1ca..d572c30b0 100644 --- a/compilacao/views.py +++ b/compilacao/views.py @@ -74,12 +74,12 @@ class IntegracaoTaView(TemplateView): if hasattr(item, 'ementa') and item.ementa: ta.ementa = item.ementa else: - ta.ementa = 'Integração com %s sem ementa.' % item + ta.ementa = _('Integração com %s sem ementa.') % item if hasattr(item, 'observacao') and item.observacao: ta.observacao = item.observacao else: - ta.observacao = 'Integração com %s sem observacao.' % item + ta.observacao = _('Integração com %s sem observacao.') % item if hasattr(item, 'numero') and item.numero: ta.numero = item.numero @@ -338,12 +338,12 @@ class TextView(ListView, CompMixin): if hasattr(item, 'ementa') and item.ementa: ta.ementa = item.ementa else: - ta.ementa = 'Integração com %s sem ementa.' % item + ta.ementa = _('Integração com %s sem ementa.') % item if hasattr(item, 'observacao') and item.observacao: ta.observacao = item.observacao else: - ta.observacao = 'Integração com %s sem observacao.' % item + ta.observacao = _('Integração com %s sem observacao.') % item if hasattr(item, 'numero') and item.numero: ta.numero = item.numero @@ -800,15 +800,15 @@ class DispositivoEditView(TextEditView): else: prox_possivel = None - result = [{'tipo_insert': 'Inserir Depois', + result = [{'tipo_insert': _('Inserir Depois'), 'icone': '↷ ', 'action': 'add_next', 'itens': []}, - {'tipo_insert': 'Inserir Dentro', + {'tipo_insert': _('Inserir Dentro'), 'icone': '⇲ ', 'action': 'add_in', 'itens': []}, - {'tipo_insert': 'Inserir Antes', + {'tipo_insert': _('Inserir Antes'), 'icone': '↶ ', 'action': 'add_prior', 'itens': []} diff --git a/materia/forms.py b/materia/forms.py index 4217dd49b..283516a68 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -5,6 +5,7 @@ from crispy_forms.layout import Column, Fieldset, Layout from django import forms from django.forms import ModelForm from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin from crispy_layout_mixin import form_actions @@ -26,16 +27,16 @@ def get_range_anos(): def get_regimes_tramitacao(): return [('1', 'Normal'), ('3', 'Urgência'), - ('4', 'Urgência Especial')] + ('4', _('Urgência Especial'))] def get_local_origem(): - return [('E', 'Poder Executivo'), - ('L', 'Poder Legislativo')] + return [('E', _('Poder Executivo')), + ('L', _('Poder Legislativo'))] def em_tramitacao(): - return [('', 'Tanto Faz'), + return [('', _('Tanto Faz')), (True, 'Sim'), (False, 'Não')] @@ -58,7 +59,7 @@ class ProposicaoForm(ModelForm): widget=forms.Textarea()) tipo_materia = forms.ModelChoiceField( - label='Matéria Vinculada', + label=_('Matéria Vinculada'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', @@ -103,7 +104,7 @@ class ProposicaoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Incluir Proposição', + Fieldset(_('Incluir Proposição'), row1, row2, row3, row4) ) super(ProposicaoForm, self).__init__( @@ -127,7 +128,7 @@ class AcompanhamentoMateriaForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Acompanhamento de Matéria por e-mail', row1 + _('Acompanhamento de Matéria por e-mail'), row1 ) ) super(AcompanhamentoMateriaForm, self).__init__(*args, **kwargs) @@ -181,7 +182,7 @@ class DocumentoAcessorioForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Incluir Documento Acessório', + _('Incluir Documento Acessório'), row1, row2, row3, form_actions() ) @@ -273,7 +274,7 @@ class TramitacaoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Incluir Tramitação', + Fieldset(_('Incluir Tramitação'), row1, row2, row3, row4, row5, ), form_actions() @@ -285,7 +286,7 @@ class TramitacaoForm(ModelForm): class LegislacaoCitadaForm(ModelForm): tipo = forms.ModelChoiceField( - label='Tipo Norma', + label=_('Tipo Norma'), required=True, queryset=TipoNormaJuridica.objects.all(), empty_label='Selecione', @@ -366,7 +367,7 @@ class LegislacaoCitadaForm(ModelForm): self.helper.form_class = 'form-horizontal' self.helper.layout = Layout( Fieldset( - 'Incluir Legislação Citada', + _('Incluir Legislação Citada'), row1, row2, row3, row4, form_actions() ) @@ -377,7 +378,7 @@ class LegislacaoCitadaForm(ModelForm): class NumeracaoForm(ModelForm): tipo_materia = forms.ModelChoiceField( - label='Tipo de Matéria', + label=_('Tipo de Matéria'), required=True, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', @@ -417,7 +418,7 @@ class NumeracaoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Incluir Numeração', + _('Incluir Numeração'), row1, row2, form_actions() ) @@ -435,7 +436,7 @@ class DespachoInicialForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Adicionar Despacho Inicial', + _('Adicionar Despacho Inicial'), 'comissao', form_actions() ) @@ -456,13 +457,13 @@ class MateriaAnexadaForm(ModelForm): ano = forms.CharField(label='Ano', required=True) - data_anexacao = forms.DateField(label='Data Anexação', + data_anexacao = forms.DateField(label=_('Data Anexação'), required=True, input_formats=['%d/%m/%Y'], widget=forms.TextInput( attrs={'class': 'dateinput'})) - data_desanexacao = forms.DateField(label='Data Desanexação', + data_desanexacao = forms.DateField(label=_('Data Desanexação'), required=False, input_formats=['%d/%m/%Y'], widget=forms.TextInput( @@ -485,7 +486,7 @@ class MateriaAnexadaForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Anexar Matéria', + _('Anexar Matéria'), row1, row2, form_actions() ) @@ -537,9 +538,9 @@ class FormularioSimplificadoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Formulário Simplificado', + _('Formulário Simplificado'), Fieldset( - 'Identificação Básica', + _('Identificação Básica'), row1, row2, row3, row4 ), form_actions() @@ -581,9 +582,9 @@ class FormularioCadastroForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Formulário de Cadastro', + _('Formulário de Cadastro'), Fieldset( - 'Identificação Básica', + _('Identificação Básica'), 'tipo', 'numero', 'ano', @@ -593,7 +594,7 @@ class FormularioCadastroForm(ModelForm): 'texto_original' ), Fieldset( - 'Outras Informações', + _('Outras Informações'), 'apelido', 'dias_prazo', 'polemica', @@ -605,7 +606,7 @@ class FormularioCadastroForm(ModelForm): 'complementar' ), Fieldset( - 'Origem Externa', + _('Origem Externa'), 'tipo_origem_externa', 'numero_origem_externa', 'ano_origem_externa', @@ -613,7 +614,7 @@ class FormularioCadastroForm(ModelForm): 'data_origem_externa' ), Fieldset( - 'Dados Textuais', + _('Dados Textuais'), 'ementa', 'indexacao', 'observacao' @@ -629,7 +630,7 @@ class AutoriaForm(forms.Form): nome_autor = forms.CharField() primeiro_autor = forms.CharField() partido_autor = forms.ModelChoiceField( - label='Partido (Autor)', + label=_('Partido (Autor)'), required=False, queryset=Partido.objects.all(), empty_label='Selecione') @@ -653,7 +654,7 @@ class MateriaLegislativaPesquisaForm(forms.Form): ) tipo = forms.ModelChoiceField( - label='Tipo de Matéria', + label=_('Tipo de Matéria'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', @@ -685,7 +686,7 @@ class MateriaLegislativaPesquisaForm(forms.Form): attrs={'class': 'selector'})) localizacao = forms.ModelChoiceField( - label='Localização Atual', + label=_('Localização Atual'), required=False, queryset=UnidadeTramitacao.objects.all(), empty_label='Selecione', @@ -705,20 +706,20 @@ class MateriaLegislativaPesquisaForm(forms.Form): attrs={'class': 'selector'})) tipo_autor = forms.ModelChoiceField( - label='Tipo Autor', + label=_('Tipo Autor'), required=False, queryset=TipoAutor.objects.all(), empty_label='Selecione', ) partido_autor = forms.ModelChoiceField( - label='Partido (Autor)', + label=_('Partido (Autor)'), required=False, queryset=Partido.objects.all(), empty_label='Selecione') local_origem_externa = forms.ModelChoiceField( - label='Localização de Origem', + label=_('Localização de Origem'), required=False, queryset=Origem.objects.all(), empty_label='Selecione') @@ -758,7 +759,7 @@ class MateriaLegislativaPesquisaForm(forms.Form): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Pesquisa Básica', + Fieldset(_('Pesquisa Básica'), row1, row2, row3, row4, row5, row6, row7, row8), form_actions(save_label='Pesquisar') ) diff --git a/materia/models.py b/materia/models.py index c41f8c623..70282b719 100644 --- a/materia/models.py +++ b/materia/models.py @@ -325,7 +325,7 @@ class Orgao(models.Model): sigla = models.CharField(max_length=10, verbose_name=_('Sigla')) unidade_deliberativa = models.BooleanField( choices=YES_NO_CHOICES, - verbose_name=('Unidade Deliberativa')) + verbose_name=(_('Unidade Deliberativa'))) endereco = models.CharField( max_length=100, blank=True, verbose_name=_('Endereço')) telefone = models.CharField( diff --git a/materia/views.py b/materia/views.py index dc914f349..de30173ee 100644 --- a/materia/views.py +++ b/materia/views.py @@ -226,8 +226,8 @@ class MateriaAnexadaEditView(FormMixin, GenericView): if mat_principal.tipo == mat_anexada.tipo: - msg = 'A matéria a ser anexada não pode ser do mesmo \ - tipo da matéria principal.' + msg = _('A matéria a ser anexada não pode ser do mesmo \ + tipo da matéria principal.') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'form': form, @@ -245,8 +245,8 @@ class MateriaAnexadaEditView(FormMixin, GenericView): return self.form_valid(form) except ObjectDoesNotExist: - msg = 'A matéria a ser anexada não existe no cadastro \ - de matérias legislativas.' + msg = _('A matéria a ser anexada não existe no cadastro \ + de matérias legislativas.') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'form': form, @@ -364,7 +364,7 @@ class LegislacaoCitadaView(FormMixin, GenericView): numero=form.cleaned_data['numero'], ano=form.cleaned_data['ano']) except ObjectDoesNotExist: - msg = 'Norma Juridica não existe.' + msg = _('Norma Juridica não existe.') messages.add_message(request, messages.INFO, msg) return self.render_to_response({'form': form, 'object': materia, @@ -430,7 +430,7 @@ class LegislacaoCitadaEditView(FormMixin, GenericView): numero=form.cleaned_data['numero'], ano=form.cleaned_data['ano']) except ObjectDoesNotExist: - msg = 'Norma Juridica não existe.' + msg = _('Norma Juridica não existe.') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'form': form, @@ -735,7 +735,7 @@ class RelatoriaView(FormMixin, GenericView): materia = MateriaLegislativa.objects.get(id=kwargs['pk']) if not materia.tramitacao_set.all(): - msg = 'Adicione alguma Tramitação antes de adicionar uma Comissão!' + msg = _('Adicione alguma Tramitação antes de adicionar uma Comissão!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -762,7 +762,7 @@ class RelatoriaView(FormMixin, GenericView): try: composicao = Composicao.objects.get(comissao=comissao) except ObjectDoesNotExist: - msg = 'Não há composição nesta Comissão!' + msg = _('Não há composição nesta Comissão!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -790,7 +790,7 @@ class RelatoriaView(FormMixin, GenericView): materia=materia).last() if not materia.tramitacao_set.all(): - msg = 'Adicione alguma Tramitação antes de adicionar uma Comissão!' + msg = _('Adicione alguma Tramitação antes de adicionar uma Comissão!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -805,7 +805,7 @@ class RelatoriaView(FormMixin, GenericView): composicao = Composicao.objects.filter( comissao=comissao).last() if not composicao: - msg = 'Não há composição nesta Comissão!' + msg = _('Não há composição nesta Comissão!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -814,7 +814,7 @@ class RelatoriaView(FormMixin, GenericView): 'comissao': comissao}) parlamentares = composicao.participacao_set.all() except ObjectDoesNotExist: - msg = 'O local atual deve ser uma Comissão!' + msg = _('O local atual deve ser uma Comissão!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -853,6 +853,7 @@ def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): if not materia: raise ValueError("Matéria é obrigatória") + # FIXME i18n casa_nome = (casa_legislativa.nome + ' de ' + casa_legislativa.municipio + '-' + casa_legislativa.uf) @@ -888,6 +889,7 @@ def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): if not materia: raise ValueError("Matéria é obrigatória") + # FIXME i18n casa_nome = (casa_legislativa.nome + ' de ' + casa_legislativa.municipio + '-' + casa_legislativa.uf) @@ -972,6 +974,7 @@ def do_envia_email_confirmacao(request, materia, email): casa = CasaLegislativa.objects.first() sender = 'sapl-test@interlegis.leg.br' + # FIXME i18n subject = "[SAPL] " + str(materia) + " - Ative o Acompanhamento da Materia" messages = [] recipients = [] @@ -1001,6 +1004,7 @@ def do_envia_email_tramitacao(request, materia): casa = CasaLegislativa.objects.first() sender = 'sapl-test@interlegis.leg.br' + # FIXME i18n subject = "[SAPL] " + str(materia) + \ " - Acompanhamento de Materia Legislativa" messages = [] @@ -1053,8 +1057,8 @@ class TramitacaoView(FormMixin, GenericView): tramitacao.materia = materia tramitacao.save() else: - msg = 'A origem da nova tramitação \ - deve ser igual ao destino da última adicionada!' + msg = _('A origem da nova tramitação \ + deve ser igual ao destino da última adicionada!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'form': form, @@ -1102,8 +1106,7 @@ class TramitacaoEditView(FormMixin, GenericView): tramitacao.delete() return self.form_valid(form) else: - msg = 'Somente a útlima tramitação pode ser\ - deletada!' + msg = _('Somente a útlima tramitação pode ser deletada!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -1198,7 +1201,7 @@ class AutoriaView(GenericView): 'autores': Autor.objects.all(), 'tipo_autor_id': int(form.data['tipo_autor'])}) else: - msg = 'Essa autoria já foi adicionada!' + msg = _('Essa autoria já foi adicionada!') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'object': materia, @@ -1325,7 +1328,7 @@ class MateriaLegislativaPesquisaView(FormMixin, GenericView): try: int(request.POST['numero']) except ValueError: - mensagem = "Insira um número inteiro em matéria!" + mensagem = _("Insira um número inteiro em matéria!") messages.add_message(request, messages.INFO, mensagem) return self.render_to_response( {'form': form}) @@ -1336,7 +1339,7 @@ class MateriaLegislativaPesquisaView(FormMixin, GenericView): try: int(request.POST['ano']) except ValueError: - mensagem = "Insira uma data válida em Ano da Matéria!" + mensagem = _("Insira uma data válida em Ano da Matéria!") messages.add_message(request, messages.INFO, mensagem) return self.render_to_response( {'form': form}) @@ -1347,7 +1350,7 @@ class MateriaLegislativaPesquisaView(FormMixin, GenericView): try: int(request.POST['numero_protocolo']) except ValueError: - mensagem = "Insira um Número de Protocolo válido!" + mensagem = _("Insira um Número de Protocolo válido!") messages.add_message(request, messages.INFO, mensagem) return self.render_to_response( {'form': form}) @@ -1360,7 +1363,7 @@ class MateriaLegislativaPesquisaView(FormMixin, GenericView): request.POST['data_apresentacao'], '%d/%m/%Y').strftime('%Y-%m-%d') except ValueError: - mensagem = "Insira uma Data de Apresentação válida!" + mensagem = _("Insira uma Data de Apresentação válida!") messages.add_message(request, messages.INFO, mensagem) return self.render_to_response( {'form': form}) @@ -1375,7 +1378,7 @@ class MateriaLegislativaPesquisaView(FormMixin, GenericView): request.POST['data_publicacao'], '%d/%m/%Y').strftime('%Y-%m-%d') except ValueError: - mensagem = "Insira uma Data de Publicação válida!" + mensagem = _("Insira uma Data de Publicação válida!") messages.add_message(request, messages.INFO, mensagem) return self.render_to_response( {'form': form}) @@ -1512,7 +1515,7 @@ class ProposicaoView(FormMixin, GenericView): ano=int(form.data['ano_materia']), numero=int(form.data['numero_materia'])) except ObjectDoesNotExist: - msg = 'Matéria adicionada não existe!' + msg = _('Matéria adicionada não existe!') messages.add_message(request, messages.INFO, msg) return self.render_to_response({'form': form}) else: @@ -1585,8 +1588,8 @@ class AcompanhamentoMateriaView(materia_legislativa_crud.CrudDetailView): return self.render_to_response( {'form': form, 'materia': materia, - 'error': 'Essa matéria já está\ - sendo acompanhada por este e-mail.'}) + 'error': _('Essa matéria já está\ + sendo acompanhada por este e-mail.')}) return self.form_valid(form) else: return self.render_to_response( diff --git a/norma/forms.py b/norma/forms.py index 290d08571..87e19e529 100644 --- a/norma/forms.py +++ b/norma/forms.py @@ -3,6 +3,7 @@ from crispy_forms.layout import Fieldset, Layout from django import forms from django.forms import ModelForm from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin from crispy_layout_mixin import form_actions @@ -26,7 +27,7 @@ class HorizontalRadioRenderer(forms.RadioSelect.renderer): class NormaJuridicaForm(ModelForm): tipo_materia = forms.ModelChoiceField( - label='Matéria Legislativa', + label=_('Matéria Legislativa'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione' @@ -93,8 +94,8 @@ class NormaJuridicaForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Cadastro de Norma Jurídica', - Fieldset('Identificação Básica', + Fieldset(_('Cadastro de Norma Jurídica'), + Fieldset(_('Identificação Básica'), row1, row2, row3, row4, row5, row6, row7, row8), form_actions() ) diff --git a/norma/models.py b/norma/models.py index a8b95431a..724a0ca75 100644 --- a/norma/models.py +++ b/norma/models.py @@ -164,13 +164,13 @@ class LegislacaoCitada(models.Model): class VinculoNormaJuridica(models.Model): TIPO_VINCULO_CHOICES = ( - ('A', 'Altera a norma'), - ('R', 'Revoga a norma'), - ('P', 'Revoga parcialmente a norma'), - ('T', 'Revoga por consolidação a norma'), - ('C', 'Norma correlata'), - ('I', 'Suspende a execução da norma'), - ('G', 'Regulamenta a norma'), + ('A', _('Altera a norma')), + ('R', _('Revoga a norma')), + ('P', _('Revoga parcialmente a norma')), + ('T', _('Revoga por consolidação a norma')), + ('C', _('Norma correlata')), + ('I', _('Suspende a execução da norma')), + ('G', _('Regulamenta a norma')), ) # TODO M2M ??? diff --git a/norma/views.py b/norma/views.py index 873bda1a4..113358ac7 100644 --- a/norma/views.py +++ b/norma/views.py @@ -48,7 +48,7 @@ class NormaIncluirView(FormMixin, GenericView): except ObjectDoesNotExist: return self.render_to_response( {'form': form, - 'error': 'Matéria adicionada não existe!'}) + 'error': _('Matéria adicionada não existe!')}) else: norma.materia = materia diff --git a/painel/models.py b/painel/models.py index a98dd4e15..222dd3bae 100644 --- a/painel/models.py +++ b/painel/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils.translation import ugettext_lazy as _ class Painel(models.Model): @@ -9,8 +10,8 @@ class Painel(models.Model): ('M', 'Mensagem'), ) - aberto = models.BooleanField(verbose_name='Abrir painel', default=False) - data_painel = models.DateField(verbose_name='Data painel') + aberto = models.BooleanField(verbose_name=_('Abrir painel'), default=False) + data_painel = models.DateField(verbose_name=_('Data painel')) mostrar = models.CharField(max_length=1, choices=PAINEL_TYPES, default='C') @@ -20,9 +21,9 @@ class Painel(models.Model): class Cronometro(models.Model): CRONOMETRO_TYPES = ( - ('A', 'Aparte'), - ('D', 'Discurso'), - ('O', 'Ordem do dia') + ('A', _('Aparte')), + ('D', _('Discurso')), + ('O', _('Ordem do dia')) ) CRONOMETRO_STATUS = ( @@ -33,9 +34,10 @@ class Cronometro(models.Model): status = models.CharField( max_length=1, - verbose_name='Status do cronômetro', + verbose_name=_('Status do cronômetro'), choices=CRONOMETRO_STATUS, default='S') - data_cronometro = models.DateField(verbose_name='Data do cronômetro') + data_cronometro = models.DateField(verbose_name=_('Data do cronômetro')) tipo = models.CharField( - max_length=1, choices=CRONOMETRO_TYPES, verbose_name='Tipo Cronômetro') + max_length=1, choices=CRONOMETRO_TYPES, + verbose_name=_('Tipo Cronômetro')) diff --git a/painel/views.py b/painel/views.py index c5b6448e8..b47945658 100644 --- a/painel/views.py +++ b/painel/views.py @@ -38,7 +38,7 @@ def controlador_painel(request): def painel_view(request, pk): - context = {'head_title': 'Painel Plenário', 'sessao_id': pk} + context = {'head_title': _('Painel Plenário'), 'sessao_id': pk} return render(request, 'painel/index.html', context) @@ -113,7 +113,7 @@ def get_presentes(pk, response, materia): presentes_ordem_dia.append( {'id': p.id, 'nome': nome_parlamentar, - 'partido': 'Sem Registro', + 'partido': _('Sem Registro'), }) else: presentes_ordem_dia.append( @@ -136,7 +136,7 @@ def get_presentes(pk, response, materia): 'presentes_sessao_plenaria': presentes_sessao_plenaria, 'num_presentes_sessao_plenaria': num_presentes_sessao_plen, 'status_painel': 'ABERTO', - 'msg_painel': 'Votação aberta!', + 'msg_painel': _('Votação aberta!'), 'numero_votos_sim': 0, 'numero_votos_nao': 0, 'numero_abstencoes': 0, @@ -193,7 +193,7 @@ def get_presentes_expediente(pk, response, materia): presentes_expediente.append( {'id': p.id, 'nome': nome_parlamentar, - 'partido': 'Sem Registro', + 'partido': _('Sem Registro'), }) else: presentes_expediente.append( @@ -215,8 +215,8 @@ def get_presentes_expediente(pk, response, materia): 'num_presentes_expediente': num_presentes_expediente, 'presentes_sessao_plenaria': presentes_sessao_plenaria, 'num_presentes_sessao_plenaria': num_presentes_sessao_plen, - 'status_painel': 'ABERTO', - 'msg_painel': 'Votação aberta!', + 'status_painel': _('ABERTO'), + 'msg_painel': _('Votação aberta!'), 'numero_votos_sim': 0, 'numero_votos_nao': 0, 'numero_abstencoes': 0, @@ -231,7 +231,7 @@ def get_presentes_expediente(pk, response, materia): def response_null_materia(response): response.update({ 'status_painel': 'FECHADO', - 'msg_painel': 'Nenhuma matéria disponivel para votação.' + 'msg_painel': _('Nenhuma matéria disponivel para votação.') }) return JsonResponse(response) @@ -291,7 +291,7 @@ def get_votos_nominal(response, materia): votos.update({v.parlamentar.id: { 'parlamentar': v.parlamentar.nome_parlamentar, 'voto': str(v.voto), - 'partido': 'Sem Registro' + 'partido': _('Sem Registro') }}) else: votos.update({v.parlamentar.id: { diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 75a2db0a7..b5b496633 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -3,6 +3,7 @@ from crispy_forms.layout import HTML, Fieldset, Layout, Submit from django import forms from django.forms import ModelForm from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin from crispy_layout_mixin import form_actions @@ -39,7 +40,7 @@ class ParlamentaresForm (ModelForm): widget=forms.TextInput( attrs={'class': 'rg'})) - titulo_eleitor = forms.CharField(label='Título de Eleitor', + titulo_eleitor = forms.CharField(label=_('Título de Eleitor'), required=False, widget=forms.TextInput( attrs={'class': 'titulo_eleitor'})) @@ -156,7 +157,7 @@ class ParlamentaresForm (ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Cadastro do Parlamentar', + Fieldset(_('Cadastro do Parlamentar'), row1, row2, row3, row4, row5, row6, row7, row8, row9, row10, row11, row12, row13, @@ -217,7 +218,7 @@ class MandatoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Adicionar Mandato', row1, row2, row3, + Fieldset(_('Adicionar Mandato'), row1, row2, row3, form_actions()) ) @@ -266,7 +267,7 @@ class DependenteForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Cadastro de Dependentes', + Fieldset(_('Cadastro de Dependentes'), row1, row2, row3, form_actions()) @@ -304,7 +305,7 @@ class FiliacaoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Adicionar Filiação', row1, + Fieldset(_('Adicionar Filiação'), row1, form_actions()) ) diff --git a/parlamentares/models.py b/parlamentares/models.py index 71aea7feb..cfa74758b 100644 --- a/parlamentares/models.py +++ b/parlamentares/models.py @@ -98,8 +98,8 @@ class ComposicaoColigacao(models.Model): coligacao = models.ForeignKey(Coligacao) class Meta: - verbose_name = ('Composição Coligação') - verbose_name_plural = ('Composição Coligações') + verbose_name = (_('Composição Coligação')) + verbose_name_plural = (_('Composição Coligações')) def __str__(self): return _('%(partido)s - %(coligacao)s') % { diff --git a/parlamentares/views.py b/parlamentares/views.py index 4ad11d9c3..8eeb9e474 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -1,8 +1,11 @@ import os +from io import BytesIO from re import sub from django.contrib import messages +from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse +from django.forms.fields import ImageField from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ from django.views.generic.edit import FormMixin @@ -63,7 +66,7 @@ class ParlamentaresView(GenericView): if m.parlamentar.filiacao_set.last(): partido = m.parlamentar.filiacao_set.last().partido.sigla else: - partido = 'Sem Registro' + partido = _('Sem Registro') dict_parlamentar = { 'id': m.parlamentar.id, @@ -91,7 +94,7 @@ class ParlamentaresView(GenericView): if m.parlamentar.filiacao_set.last(): partido = m.parlamentar.filiacao_set.last().partido.sigla else: - partido = 'Sem Registro' + partido = _('Sem Registro') dict_parlamentar = { 'id': m.parlamentar.id, @@ -167,7 +170,6 @@ class ParlamentaresEditarView(FormMixin, GenericView): parlamentar = form.save(commit=False) if 'fotografia' in request.FILES: parlamentar.fotografia = request.FILES['fotografia'] - parlamentar.biografia = sub(' ', ' ', strip_tags(form.data['biografia'])) @@ -280,9 +282,9 @@ class MesaDiretoraView(FormMixin, GenericView): # Essa função avisa quando se pode compor uma Mesa Legislativa) def validation(self, request): - mensagem = "Não há nenhuma Sessão Legislativa cadastrada.\ - Só é possível compor uma Mesa Diretora quando há uma Sessão\ - Legislativa cadastrada." + mensagem = _("Não há nenhuma Sessão Legislativa cadastrada. \ + Só é possível compor uma Mesa Diretora quando há uma Sessão \ + Legislativa cadastrada.") messages.add_message(request, messages.INFO, mensagem) return self.render_to_response( @@ -447,16 +449,16 @@ class FiliacaoView(FormMixin, GenericView): else: # Dá erro caso não tenha se desfiliado do anterior if candidato_nao_desfiliou: - mensagem = "Você não pode se filiar a algum partido\ - sem antes se desfiliar do partido anterior" + mensagem = _("Você não pode se filiar a algum partido \ + sem antes se desfiliar do partido anterior") return self.error_message( parlamentar, form, mensagem, request) # Dá erro caso a data de desfiliação seja anterior a de # filiação if data_desfiliacao and data_desfiliacao < data_filiacao: - mensagem = "A data de filiação não pode ser\ - anterior à data de desfiliação" + mensagem = _("A data de filiação não pode ser \ + anterior à data de desfiliação") return self.error_message( parlamentar, form, mensagem, request) @@ -467,9 +469,9 @@ class FiliacaoView(FormMixin, GenericView): data_init = todas_filiacoes[i].data data_fim = todas_filiacoes[i].data_desfiliacao if data_filiacao >= data_init and data_filiacao < data_fim: - mensagem = "A data de filiação e\ - desfiliação não podem estar no intervalo\ - de outro período de filiação" + mensagem = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") return self.error_message( parlamentar, form, mensagem, request) @@ -477,18 +479,18 @@ class FiliacaoView(FormMixin, GenericView): data_desfiliacao < data_fim and data_desfiliacao > data_init): - mensagem = "A data de filiação e\ - desfiliação não podem estar no intervalo\ - de outro período de filiação" + mensagem = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") return self.error_message( parlamentar, form, mensagem, request) if (data_desfiliacao and data_filiacao <= data_init and data_desfiliacao >= data_fim): - mensagem = "A data de filiação e\ - desfiliação não podem estar no intervalo\ - de outro período de filiação" + mensagem = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") return self.error_message( parlamentar, form, mensagem, request) @@ -563,8 +565,8 @@ class FiliacaoEditView(FormMixin, GenericView): # Dá erro caso a data de desfiliação seja anterior a de # filiação if data_desfiliacao and data_desfiliacao < data_filiacao: - mensagem = "A data de filiação não pode\ - anterior à data de desfiliação" + mensagem = _("A data de filiação não pode \ + anterior à data de desfiliação") return self.error_message( parlamentar, form, mensagem, request) @@ -579,9 +581,9 @@ class FiliacaoEditView(FormMixin, GenericView): if (data_filiacao >= data_init and data_filiacao < data_fim): - mensagem = "A data de filiação e\ - desfiliação não podem estar no intervalo\ - de outro período de filiação" + mensagem = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") return self.error_message(parlamentar, form, mensagem, @@ -591,9 +593,9 @@ class FiliacaoEditView(FormMixin, GenericView): data_desfiliacao < data_fim and data_desfiliacao > data_init): - mensagem = "A data de filiação e\ - desfiliação não podem estar no intervalo\ - de outro período de filiação" + mensagem = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") return self.error_message(parlamentar, form, mensagem, @@ -601,9 +603,9 @@ class FiliacaoEditView(FormMixin, GenericView): if (data_desfiliacao and data_filiacao <= data_init and data_desfiliacao >= data_fim): - mensagem = "A data de filiação e\ - desfiliação não podem estar no intervalo\ - de outro período de filiação" + mensagem = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") return self.error_message(parlamentar, form, mensagem, diff --git a/protocoloadm/forms.py b/protocoloadm/forms.py index ab148af6c..35b018941 100644 --- a/protocoloadm/forms.py +++ b/protocoloadm/forms.py @@ -5,6 +5,7 @@ from crispy_forms.layout import HTML, Field, Fieldset, Layout, Submit from django import forms from django.forms import ModelForm from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin from crispy_layout_mixin import form_actions @@ -42,30 +43,30 @@ class ProtocoloForm(forms.Form): YEARS = get_range_anos() tipo_protocolo = forms.ChoiceField(required=False, - label='Tipo de Protocolo', + label=_('Tipo de Protocolo'), choices=TIPOS_PROTOCOLO, widget=forms.Select( attrs={'class': 'selector'})) numero_protocolo = forms.CharField( - label='Número de Protocolo', required=False) + label=_('Número de Protocolo'), required=False) ano = forms.ChoiceField(required=False, label='Ano', choices=YEARS, widget=forms.Select( attrs={'class': 'selector'})) - inicial = forms.DateField(label='Data Inicial', + inicial = forms.DateField(label=_('Data Inicial'), required=False, widget=forms.TextInput( attrs={'class': 'dateinput'})) - final = forms.DateField(label='Data Final', required=False, + final = forms.DateField(label=_('Data Final'), required=False, widget=forms.TextInput( attrs={'class': 'dateinput'})) natureza_processo = forms.ChoiceField(required=False, - label='Natureza Processo', + label=_('Natureza Processo'), choices=[ ('0', 'Administrativo'), ('1', 'Legislativo'), @@ -76,7 +77,7 @@ class ProtocoloForm(forms.Form): ) tipo_documento = forms.ModelChoiceField( - label='Tipo de Documento', + label=_('Tipo de Documento'), required=False, queryset=TipoDocumentoAdministrativo.objects.all(), empty_label='Selecione', @@ -85,7 +86,7 @@ class ProtocoloForm(forms.Form): interessado = forms.CharField(label='Interessado', required=False) tipo_materia = forms.ModelChoiceField( - label='Tipo de Matéria', + label=_('Tipo de Matéria'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', @@ -136,7 +137,7 @@ class AnularProcoloAdmForm(forms.Form): YEARS = get_range_anos() numero_protocolo = forms.CharField( - label='Número de Protocolo', required=True) + label=_('Número de Protocolo'), required=True) ano_protocolo = forms.ChoiceField(required=False, label='Ano', choices=YEARS, @@ -155,7 +156,7 @@ class AnularProcoloAdmForm(forms.Form): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Identificação do Protocolo', + Fieldset(_('Identificação do Protocolo'), row1, row2, HTML(" "), @@ -168,8 +169,8 @@ class AnularProcoloAdmForm(forms.Form): class ProtocoloDocumentForm(forms.Form): - NUMERACAO_CHOICES = [('1', 'Sequencial por Ano'), - ('2', 'Sequencial Único')] + NUMERACAO_CHOICES = [('1', _('Sequencial por Ano')), + ('2', _('Sequencial Único'))] numeracao = forms.ChoiceField(required=True, choices=NUMERACAO_CHOICES, @@ -178,19 +179,19 @@ class ProtocoloDocumentForm(forms.Form): label='') tipo_protocolo = forms.ChoiceField(required=True, - label='Tipo de Protocolo', + label=_('Tipo de Protocolo'), choices=TIPOS_PROTOCOLO[1:], widget=forms.RadioSelect( renderer=HorizontalRadioRenderer)) tipo_documento = forms.ModelChoiceField( - label='Tipo de Documento', + label=_('Tipo de Documento'), required=False, queryset=TipoDocumentoAdministrativo.objects.all(), empty_label='Selecione', ) - num_paginas = forms.CharField(label='Núm. Páginas', required=True) + num_paginas = forms.CharField(label=_('Núm. Páginas'), required=True) assunto = forms.CharField( widget=forms.Textarea, label='Assunto', required=True) @@ -218,15 +219,15 @@ class ProtocoloDocumentForm(forms.Form): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Protocolo - Opção de Numeração', row1), - Fieldset('Identificação de Documento', + Fieldset(_('Protocolo - Opção de Numeração'), row1), + Fieldset(_('Identificação de Documento'), row2, row3, row4, row5, row6, HTML(" "), - form_actions(save_label='Protocolar Documento') + form_actions(save_label=_('Protocolar Documento')) ) ) super(ProtocoloDocumentForm, self).__init__( @@ -235,8 +236,8 @@ class ProtocoloDocumentForm(forms.Form): class ProtocoloMateriaForm(forms.Form): - NUMERACAO_CHOICES = [('1', 'Sequencial por Ano'), - ('2', 'Sequencial Único')] + NUMERACAO_CHOICES = [('1', _('Sequencial por Ano')), + ('2', _('Sequencial Único'))] numeracao = forms.ChoiceField(required=True, choices=NUMERACAO_CHOICES, @@ -245,19 +246,19 @@ class ProtocoloMateriaForm(forms.Form): label='') tipo_protocolo = forms.ChoiceField(required=True, - label='Tipo de Protocolo', + label=_('Tipo de Protocolo'), choices=TIPOS_PROTOCOLO[1:], widget=forms.RadioSelect( renderer=HorizontalRadioRenderer)) tipo_materia = forms.ModelChoiceField( - label='Tipo de Matéria', + label=_('Tipo de Matéria'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', ) - num_paginas = forms.CharField(label='Núm. Páginas', required=True) + num_paginas = forms.CharField(label=_('Núm. Páginas'), required=True) ementa = forms.CharField( widget=forms.Textarea, label='Ementa', required=True) @@ -288,14 +289,14 @@ class ProtocoloMateriaForm(forms.Form): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Protocolo - Opção de Numeração', row1), - Fieldset('Identificação da Matéria', + Fieldset(_('Protocolo - Opção de Numeração'), row1), + Fieldset(_('Identificação da Matéria'), row2, row3, row4, row5, HTML(" "), - form_actions(save_label='Protocolar Matéria') + form_actions(save_label=_('Protocolar Matéria')) ) ) super(ProtocoloMateriaForm, self).__init__( @@ -310,11 +311,11 @@ class ProposicaoSimpleForm(forms.Form): materia = forms.CharField(label='Matéria', widget=forms.TextInput( attrs={'readonly': 'readonly'})) - data_envio = forms.DateField(label='Data Envio', + data_envio = forms.DateField(label=_('Data Envio'), widget=forms.DateInput( format='%d/%m/%Y', attrs={'readonly': 'readonly'})) - data_recebimento = forms.DateField(label='Data Recebimento', + data_recebimento = forms.DateField(label=_('Data Recebimento'), widget=forms.DateInput( format='%d/%m/%Y', attrs={'readonly': 'readonly'})) @@ -366,7 +367,7 @@ class DocumentoAcessorioAdministrativoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Incluir Documento Acessório', + _('Incluir Documento Acessório'), row1, row2, row3, row4, form_actions(more=more) ) @@ -413,7 +414,7 @@ class TramitacaoAdmForm(ModelForm): def __init__(self, *args, **kwargs): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Incluir Tramitação', + Fieldset(_('Incluir Tramitação'), 'data_tramitacao', 'unidade_tramitacao_local', 'status', @@ -471,9 +472,9 @@ class DocumentoAdministrativoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( - Fieldset('Identificação Básica', + Fieldset(_('Identificação Básica'), row1, row2, row3, row4, row5), - Fieldset('Outras Informações', + Fieldset(_('Outras Informações'), row6, row7), form_actions(more=[Submit('Excluir', 'Excluir')]), ) diff --git a/protocoloadm/views.py b/protocoloadm/views.py index 9db7316f7..3df141b1c 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -175,7 +175,7 @@ class AnularProtocoloAdmView(FormMixin, GenericView): errors = form._errors.setdefault( forms.forms.NON_FIELD_ERRORS, forms.util.ErrorList()) - errors.append("Procolo %s/%s já encontra-se anulado" + errors.append(_("Procolo %s/%s já está anulado") % (numero, ano)) return self.form_invalid(form) @@ -189,7 +189,7 @@ class AnularProtocoloAdmView(FormMixin, GenericView): except ObjectDoesNotExist: errors = form._errors.setdefault( forms.forms.NON_FIELD_ERRORS, forms.util.ErrorList()) - errors.append("Procolo %s/%s não existe" % (numero, ano)) + errors.append(_("Procolo %s/%s não existe") % (numero, ano)) return self.form_invalid(form) else: return self.form_invalid(form) @@ -301,7 +301,7 @@ class ComprovanteProtocoloView(TemplateView): base64_data = create_barcode(numero.zfill(6)) barcode = 'data:image/png;base64,{0}'.format(base64_data) - autenticacao = "** NULO **" + autenticacao = _("** NULO **") if not protocolo.anulado: autenticacao = str(protocolo.tipo_processo) + \ @@ -480,7 +480,7 @@ class PesquisarDocumentoAdministrativo(TemplateView): if len(doc) == 0: return self.render_to_response( - {'error': 'Nenhum resultado encontrado!', + {'error': _('Nenhum resultado encontrado!'), "tipos_doc": TipoDocumentoAdministrativo.objects.all()} ) else: @@ -587,8 +587,8 @@ class DocumentoAcessorioAdministrativoView(FormMixin, GenericView): doc_acessorio = DocumentoAcessorioAdministrativo.objects.filter( documento_id=kwargs['pk']) if not doc_acessorio: - doc_ace_null = 'Nenhum documento acessório \ - cadastrado para este processo.' + doc_ace_null = _('Nenhum documento acessório \ + cadastrado para este processo.') return self.render_to_response({'pk': kwargs['pk'], 'doc': doc, diff --git a/relatorios/views.py b/relatorios/views.py index 896bf05f0..6a79732aa 100644 --- a/relatorios/views.py +++ b/relatorios/views.py @@ -2,6 +2,7 @@ from datetime import datetime from bs4 import BeautifulSoup from django.http import HttpResponse +from django.utils.translation import ugettext_lazy as _ from base.forms import ESTADOS from base.models import CasaLegislativa @@ -40,6 +41,7 @@ def get_cabecalho(casa): cabecalho = {} cabecalho["nom_casa"] = casa.nome + # FIXME i18n cabecalho["nom_estado"] = "Estado de " + ESTADOS[casa.uf.upper()] return cabecalho @@ -72,7 +74,7 @@ def get_rodape(casa): linha1 = linha1 + " - " + casa.municipio + " " + casa.uf if casa.telefone: - linha1 = linha1 + " Tel.: " + casa.telefone + linha1 = linha1 + _(" Tel.: ") + casa.telefone if casa.endereco_web: linha2 = casa.endereco_web @@ -82,7 +84,7 @@ def get_rodape(casa): if casa.email: if casa.endereco_web: linha2 = linha2 + " - " - linha2 = linha2 + "E-mail: " + casa.email + linha2 = linha2 + _("E-mail: ") + casa.email data_emissao = datetime.today().strftime("%d/%m/%Y") @@ -243,9 +245,9 @@ def get_capa_processo(prot): for materia_num in MateriaLegislativa.objects.filter( numero_protocolo=p.numero, ano=p.ano): for numera in Numeracao.objects.filter(materia=materia_num): + # FIXME i18n dic['numeracao'] = 'PROCESSO N° ' + \ str(numera.numero) + '/' + str(numera.ano) - dic['anulado'] = '' if p.anulado == 1: dic['anulado'] = 'Nulo' @@ -475,8 +477,8 @@ def get_espelho(mats): dic['ultima_acao'] = txt_tramitacao dic['data_ultima_acao'] = data_ultima_acao - dic['norma_juridica_vinculada'] = 'Não há nenhuma\ - norma jurídica vinculada' + dic['norma_juridica_vinculada'] = _('Não há nenhuma \ + norma jurídica vinculada') # TODO # for norma in context.zsql.materia_buscar_norma_juridica_zsql( # cod_materia=materia.cod_materia): @@ -566,13 +568,13 @@ def get_sessao_plenaria(sessao, casa): materia=materia).first() if tram is not None: if tram.turno != '': - for turno in [("P", "Primeiro"), - ("S", "Segundo"), - ("U", "Único"), - ("L", "Suplementar"), - ("A", "Votação Única em Regime de Urgência"), - ("B", "1ª Votação"), - ("C", "2ª e 3ª Votações"), + for turno in [("P", _("Primeiro")), + ("S", _("Segundo")), + ("U", _("Único")), + ("L", _("Suplementar")), + ("A", _("Votação Única em Regime de Urgência")), + ("B", _("1ª Votação")), + ("C", _("2ª e 3ª Votações")), ("F", "Final")]: if tram.turno == turno[0]: dic_expediente_materia["des_turno"] = turno[1] @@ -614,8 +616,8 @@ def get_sessao_plenaria(sessao, casa): dic_expediente_materia["votacao_observacao"] = ( expediente_materia.observacao) else: - dic_expediente_materia["nom_resultado"] = "Matéria não votada" - dic_expediente_materia["votacao_observacao"] = "Vazio" + dic_expediente_materia["nom_resultado"] = _("Matéria não votada") + dic_expediente_materia["votacao_observacao"] = _("Vazio") lst_expediente_materia.append(dic_expediente_materia) # Lista dos oradores do Expediente @@ -678,14 +680,14 @@ def get_sessao_plenaria(sessao, casa): materia=materia).first() if tramitacao is not None: if not tramitacao.turno: - for turno in [("P", "Primeiro"), - ("S", "Segundo"), - ("U", "Único"), - ("L", "Suplementar"), - ("F", "Final"), - ("A", "Votação Única em Regime de Urgência"), - ("B", "1ª Votação"), - ("C", "2ª e 3ª Votações")]: + for turno in [("P", _("Primeiro")), + ("S", _("Segundo")), + ("U", _("Único")), + ("L", _("Suplementar")), + ("F", _("Final")), + ("A", _("Votação Única em Regime de Urgência")), + ("B", _("1ª Votação")), + ("C", _("2ª e 3ª Votações"))]: if tramitacao.turno == turno[0]: dic_votacao["des_turno"] = turno[1] @@ -723,8 +725,8 @@ def get_sessao_plenaria(sessao, casa): if votacao.observacao: dic_votacao["votacao_observacao"] = votacao.observacao else: - dic_votacao["nom_resultado"] = "Matéria não votada" - dic_votacao["votacao_observacao"] = "Vazio" + dic_votacao["nom_resultado"] = _("Matéria não votada") + dic_votacao["votacao_observacao"] = _("Vazio") lst_votacao.append(dic_votacao) # Lista dos oradores nas Explicações Pessoais @@ -1060,14 +1062,14 @@ def get_pauta_sessao(sessao, casa): tramitacao = tramitacao.first() if tramitacao.turno != '': - for turno in [("P", "Primeiro"), - ("S", "Segundo"), - ("U", "Único"), - ("F", "Final"), - ("L", "Suplementar"), - ("A", "Votação Única em Regime de Urgência"), - ("B", "1ª Votação"), - ("C", "2ª e 3ª Votações")]: + for turno in [("P", _("Primeiro")), + ("S", _("Segundo")), + ("U", _("Único")), + ("F", _("Final")), + ("L", _("Suplementar")), + ("A", _("Votação Única em Regime de Urgência")), + ("B", _("1ª Votação")), + ("C", _("2ª e 3ª Votações"))]: if tramitacao.turno == turno.first(): dic_expediente_materia["des_turno"] = turno.first() @@ -1123,13 +1125,13 @@ def get_pauta_sessao(sessao, casa): if tramitacao is not None: tramitacao = tramitacao.first() if tramitacao.turno != '': - for turno in [("P", "Primeiro"), - ("S", "Segundo"), - ("U", "Único"), - ("L", "Suplementar"), - ("A", "Votação Única em Regime de Urgência"), - ("B", "1ª Votação"), - ("C", "2ª e 3ª Votações")]: + for turno in [("P", _("Primeiro")), + ("S", _("Segundo")), + ("U", _("Único")), + ("L", _("Suplementar")), + ("A", _("Votação Única em Regime de Urgência")), + ("B", _("1ª Votação")), + ("C", _("2ª e 3ª Votações"))]: if tramitacao.turno == turno.first(): dic_votacao["des_turno"] = turno.first() diff --git a/sapl/context_processors.py b/sapl/context_processors.py index d21d67d50..ee0fe992d 100644 --- a/sapl/context_processors.py +++ b/sapl/context_processors.py @@ -5,11 +5,11 @@ from base.views import get_casalegislativa def parliament_info(request): context = { - 'state': 'Estado', - 'state_abbr': 'UF', - 'city': 'Cidade', - 'parliament_type': 'Câmara Municipal', - 'address': 'Rua Lorem Ipsum de Amet, Casa X', + 'state': _('Estado'), + 'state_abbr': _('UF'), + 'city': _('Cidade'), + 'parliament_type': _('Câmara Municipal'), + 'address': _('Rua Lorem Ipsum de Amet, Casa X'), 'postal_code': '70000-000', 'phone_number': '00 0000-0000', 'url_portal': '#', diff --git a/scripts/redbaron.py b/scripts/redbaron.py new file mode 100644 index 000000000..ba6f8c14d --- /dev/null +++ b/scripts/redbaron.py @@ -0,0 +1,86 @@ +import os +import re + +from redbaron import RedBaron + +root = '/home/mazza/work/sapl' + + +def ignorado(path, name): + for pattern in [ + 'legacy.*', + 'relatorios/templates.*', + '.*/migrations', + ]: + if re.match(os.path.join(root, pattern), path): + return True + return name.startswith('ipython_log.py') or name == 'manage.py' + + +filenames = [os.path.join(path, name) + for path, subdirs, files in os.walk(root) + for name in files + if name.endswith('.py') and not ignorado(path, name)] + + +def build_reds(): + for filename in filenames: + with open(filename, "r") as source_code: + red = RedBaron(source_code.read()) + if red.data: + red.__filename__ = filename + yield red + +reds = list(build_reds()) +reds_without_tests = [r for r in reds + if not re.match('.*/test_.*\.py', r.__filename__)] + + +def write(node): + red = node.root + with open(red.__filename__, "w") as source_code: + source_code.write(red.dumps()) + + +############################################################################## +# verificacoes ad-hoc + +def flat(ll): + return [i for l in ll for i in l] + + +def inter(n): + 'Se a string n está dentro de uma chamada de tradução' + try: + assert not n.next or n.next.type == 'string' + assert n.parent_find('call').parent.value[0].value == '_' + return True + except: + return False + + +def frase(n): + return ' ' in n.value + + +def get(r): + return [s for s in r('string') + if not inter(s) + # and frase(s) + and not s.value in ok] + + +def mark(n): + ok |= {n.value} + + +def fix(n): + n.value = '_(%s)' % n.value + write(n) + + +def local(node): + res = '%s:%s' % (node.root.__filename__, + node.absolute_bounding_box.top_left.line) + os.system("echo '%s' | xclip -selection c" % res) + return res diff --git a/sessao/forms.py b/sessao/forms.py index 2fb088415..253f533d9 100644 --- a/sessao/forms.py +++ b/sessao/forms.py @@ -2,6 +2,7 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import Fieldset, Layout from django import forms from django.forms import ModelForm +from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin from crispy_layout_mixin import form_actions @@ -23,21 +24,22 @@ class ListMateriaForm(forms.Form): class MateriaOrdemDiaForm(forms.Form): - data_sessao = forms.CharField(required=True, label='Data da Sessão') - numero_ordem = forms.IntegerField(required=True, label='Número Ordem') - tipo_votacao = forms.IntegerField(required=True, label='Tipo Votação') - tipo_sessao = forms.IntegerField(required=True, label='Tipo da Sessão') - ano_materia = forms.IntegerField(required=True, label='Ano Matéria') - numero_materia = forms.IntegerField(required=True, label='Número Matéria') - tipo_materia = forms.IntegerField(required=True, label='Tipo Matéria') - observacao = forms.CharField(required=False, label='Ementa') - error_message = forms.CharField(required=False, label='Matéria') + data_sessao = forms.CharField(required=True, label=_('Data da Sessão')) + numero_ordem = forms.IntegerField(required=True, label=_('Número Ordem')) + tipo_votacao = forms.IntegerField(required=True, label=_('Tipo Votação')) + tipo_sessao = forms.IntegerField(required=True, label=_('Tipo da Sessão')) + ano_materia = forms.IntegerField(required=True, label=_('Ano Matéria')) + numero_materia = forms.IntegerField(required=True, + label=_('Número Matéria')) + tipo_materia = forms.IntegerField(required=True, label=_('Tipo Matéria')) + observacao = forms.CharField(required=False, label=_('Ementa')) + error_message = forms.CharField(required=False, label=_('Matéria')) class OradorForm(forms.Form): numero_ordem = forms.IntegerField( required=True, - label='Ordem de pronunciamento') + label=_('Ordem de pronunciamento')) parlamentar = forms.CharField(required=False, max_length=20) url_discurso = forms.CharField(required=False, max_length=100) @@ -68,15 +70,15 @@ class VotacaoEditForm(forms.Form): class SessaoForm(ModelForm): - hora_inicio = forms.CharField(label='Horário Inicio', + hora_inicio = forms.CharField(label=_('Horário Inicio'), required=True, widget=forms.TextInput( - attrs={'class': 'hora'})) + attrs={'class': 'hora'})) - hora_fim = forms.CharField(label='Horário Fim', + hora_fim = forms.CharField(label=_('Horário Fim'), required=True, widget=forms.TextInput( - attrs={'class': 'hora'})) + attrs={'class': 'hora'})) class Meta: model = SessaoPlenaria @@ -124,7 +126,7 @@ class SessaoForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset( - 'Dados Básicos', + _('Dados Básicos'), row1, row2, row3, diff --git a/sessao/views.py b/sessao/views.py index 93563ab68..8d3051ff9 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -470,7 +470,7 @@ class EditMateriaOrdemDiaView(sessao_crud.CrudDetailView): ano=request.POST['ano_materia']) except ObjectDoesNotExist: context.update( - {'error_message': "Matéria inexistente!"}) + {'error_message': _("Matéria inexistente!")}) return self.form_invalid(form) ordemdia.materia_id = materia.id @@ -649,7 +649,7 @@ class EditExpedienteOrdemDiaView(sessao_crud.CrudDetailView): ano=request.POST['ano_materia']) except ObjectDoesNotExist: context.update( - {'error_message': "Matéria inexistente!"}) + {'error_message': _("Matéria inexistente!")}) return self.form_invalid(form) ordemdia.materia_id = materia.id @@ -661,7 +661,7 @@ class EditExpedienteOrdemDiaView(sessao_crud.CrudDetailView): return self.form_valid(form) else: context.update( - {'error_message': "Não foi possível salvar formulário!"}) + {'error_message': _("Não foi possível salvar formulário!")}) return self.form_invalid(form) elif 'delete-ordemdia' in request.POST: ordemdia.delete() @@ -934,23 +934,23 @@ class ResumoView(sessao_crud.CrudDetailView): abertura = self.object.data_inicio.strftime('%d/%m/%Y') encerramento = self.object.data_fim.strftime('%d/%m/%Y') - context.update({'basica': ['Tipo de Sessão: ' + str(self.object.tipo), - 'Abertura: ' + abertura, - 'Encerramento: ' + encerramento, + context.update({'basica': [_('Tipo de Sessão: ') + str(self.object.tipo), + _('Abertura: ') + abertura, + _('Encerramento: ') + encerramento, ]}) # ===================================================================== # Conteúdo Multimídia if self.object.url_audio: context.update({'multimidia_audio': - 'Audio: ' + str(self.object.url_audio)}) + _('Audio: ') + str(self.object.url_audio)}) else: - context.update({'multimidia_audio': 'Audio: Indisponivel'}) + context.update({'multimidia_audio': _('Audio: Indisponivel')}) if self.object.url_video: context.update({'multimidia_video': - 'Video: ' + str(self.object.url_video)}) + _('Video: ') + str(self.object.url_video)}) else: - context.update({'multimidia_video': 'Video: Indisponivel'}) + context.update({'multimidia_video': _('Video: Indisponivel')}) # ===================================================================== # Mesa Diretora @@ -1013,7 +1013,7 @@ class ResumoView(sessao_crud.CrudDetailView): if m.resultado: resultado = m.resultado else: - resultado = 'Matéria não votada' + resultado = _('Matéria não votada') autoria = Autoria.objects.filter(materia_id=m.materia_id) autor = [str(x.autor) for x in autoria] @@ -1074,7 +1074,7 @@ class ResumoView(sessao_crud.CrudDetailView): if o.resultado: resultado = o.resultado else: - resultado = 'Matéria não votada' + resultado = _('Matéria não votada') autoria = Autoria.objects.filter( materia_id=o.materia_id) @@ -1347,11 +1347,11 @@ class VotacaoEditView(sessao_crud.CrudDetailView): url = request.get_full_path() if "votsimb" in url: - titulo = "Votação Simbólica" + titulo = _("Votação Simbólica") elif "votsec" in url: - titulo = "Votação Secreta" + titulo = _("Votação Secreta") else: - titulo = "Não definida" + titulo = _("Não definida") materia_id = kwargs['oid'] ordem_id = kwargs['mid'] @@ -1398,11 +1398,11 @@ class VotacaoView(sessao_crud.CrudDetailView): # TODO: HACK, VERIFICAR MELHOR FORMA DE FAZER ISSO if "votsimb" in url: - titulo = "Votação Simbólica" + titulo = _("Votação Simbólica") elif "votsec" in url: - titulo = "Votação Secreta" + titulo = _("Votação Secreta") else: - titulo = "Não definida" + titulo = _("Não definida") ordem_id = kwargs['mid'] ordem = OrdemDia.objects.get(id=ordem_id) @@ -1424,11 +1424,11 @@ class VotacaoView(sessao_crud.CrudDetailView): # ==================================================== if "votsimb" in url: - titulo = "Votação Simbólica" + titulo = _("Votação Simbólica") elif "votsec" in url: - titulo = "Votação Secreta" + titulo = _("Votação Secreta") else: - titulo = "Não definida" + titulo = _("Não definida") ordem_id = kwargs['mid'] ordem = OrdemDia.objects.get(id=ordem_id) @@ -1582,13 +1582,13 @@ class VotacaoNominalView(sessao_crud.CrudDetailView): voto_parlamentar = VotoParlamentar() if voto == 'sim': - voto_parlamentar.voto = 'Sim' + voto_parlamentar.voto = _('Sim') elif voto == 'nao': - voto_parlamentar.voto = 'Não' + voto_parlamentar.voto = _('Não') elif voto == 'abstencao': - voto_parlamentar.voto = 'Abstenção' + voto_parlamentar.voto = _('Abstenção') elif voto == 'nao_votou': - voto_parlamentar.voto = 'Não Votou' + voto_parlamentar.voto = _('Não Votou') voto_parlamentar.parlamentar_id = parlamentar_id voto_parlamentar.votacao_id = votacao.id voto_parlamentar.save() @@ -1784,13 +1784,13 @@ class VotacaoNominalExpedienteView(sessao_crud.CrudDetailView): voto_parlamentar = VotoParlamentar() if(voto == 'sim'): - voto_parlamentar.voto = 'Sim' + voto_parlamentar.voto = _('Sim') elif(voto == 'nao'): - voto_parlamentar.voto = 'Não' + voto_parlamentar.voto = _('Não') elif(voto == 'abstencao'): - voto_parlamentar.voto = 'Abstenção' + voto_parlamentar.voto = _('Abstenção') elif(voto == 'nao_votou'): - voto_parlamentar.voto = 'Não Votou' + voto_parlamentar.voto = _('Não Votou') voto_parlamentar.parlamentar_id = parlamentar_id voto_parlamentar.votacao_id = votacao.id voto_parlamentar.save() @@ -1922,11 +1922,11 @@ class VotacaoExpedienteView(sessao_crud.CrudDetailView): # TODO: HACK, VERIFICAR MELHOR FORMA DE FAZER ISSO if "votsimb" in url: - titulo = "Votação Simbólica" + titulo = _("Votação Simbólica") elif "votsec" in url: - titulo = "Votação Secreta" + titulo = _("Votação Secreta") else: - titulo = "Não definida" + titulo = _("Não definida") expediente_id = kwargs['mid'] expediente = ExpedienteMateria.objects.get(id=expediente_id) @@ -1949,11 +1949,11 @@ class VotacaoExpedienteView(sessao_crud.CrudDetailView): # ==================================================== if "votsimb" in url: - titulo = "Votação Simbólica" + titulo = _("Votação Simbólica") elif "votsec" in url: - titulo = "Votação Secreta" + titulo = _("Votação Secreta") else: - titulo = "Não definida" + titulo = _("Não definida") expediente_id = kwargs['mid'] expediente = ExpedienteMateria.objects.get(id=expediente_id) @@ -2054,11 +2054,11 @@ class VotacaoExpedienteEditView(sessao_crud.CrudDetailView): url = request.get_full_path() if "votsimb" in url: - titulo = "Votação Simbólica" + titulo = _("Votação Simbólica") elif "votsec" in url: - titulo = "Votação Secreta" + titulo = _("Votação Secreta") else: - titulo = "Não definida" + titulo = _("Não definida") materia_id = kwargs['oid'] expediente_id = kwargs['mid'] @@ -2142,9 +2142,9 @@ class PautaSessaoDetailView(sessao_crud.CrudDetailView): else: encerramento = "" - context.update({'basica': ['Tipo de Sessão: ' + str(self.object.tipo), - 'Abertura: ' + abertura, - 'Encerramento: ' + encerramento, + context.update({'basica': [_('Tipo de Sessão: ') + str(self.object.tipo), + _('Abertura: ') + abertura, + _('Encerramento: ') + encerramento, ]}) # ===================================================================== # Matérias Expediente @@ -2160,7 +2160,7 @@ class PautaSessaoDetailView(sessao_crud.CrudDetailView): if m.resultado: resultado = m.resultado else: - resultado = 'Matéria não votada' + resultado = _('Matéria não votada') autoria = Autoria.objects.filter(materia_id=m.materia_id) autor = [str(x.autor) for x in autoria] @@ -2206,7 +2206,7 @@ class PautaSessaoDetailView(sessao_crud.CrudDetailView): if o.resultado: resultado = o.resultado else: - resultado = 'Matéria não votada' + resultado = _('Matéria não votada') autoria = Autoria.objects.filter( materia_id=o.materia_id)