Ver Feed RSS

root@blog:/# chmod o+r *

[Python] "Localização" e mais sobre "internacionalização"

Avalie este Post de Blog
Quando comecei a desenvolver para a comunidade GNU/Linux eu desenvolvia tudo em inglês e pensava: "Assim está bom, inglês se tornou uma linguagem universal". Eu tinha essa atitude por dois motivos, eu era iniciante e achava que "internacionalizar" uma aplicação era algo muito difícil.

Quando começei a utilizar os stock icons da biblioteca GTK começaram a ocorer algumas bagunças na interface. Partes estavam traduzidas (por utilizar os stock icons) e o restante estava em inglês (texto estático do código fonte). A partir daí comecei a perceber o problema que eu estava gerando e resolvi então estudar sobre "internacionalização", com isso criei dois posts aqui na under:



Fiz isso porque a internacionalização é algo muito mais simples que eu imaginava, mas quando falei sobre internacionalização esqueci de citar como esse processo geralmente é chamada: i18n. Isso é um acrónimo para a palavra inglesa Internacionalization, mais informações aqui.

Eu só esqueci de um detalhe, não é só a i18n que é importante, mas também a "localização". "Localização" é uma tradução pobre para Localization ou L10n, uma melhor adaptação seria "regionalização". Qual a diferença entre as duas?! Uma trata da tradução de textos propriamente (i10n) enquanto o outro trata da formatação de números, datas, horas e moedas. Ok, vamos a alguns exemplo para entendermos melhor como isso funciona!

O seguinte exemplo em python mostra a data, um número e um valor em moeda:
Código :
[FONT=Courier New][COLOR=DimGray]>>>import time
>>>
>>> numero = 154623.56
>>> valor = 1123.5
>>> print numero
154623.56
>>> print valor
1123.5
>>> print time.strftime(\"%a, %d %b %Y\")
Tue, 01 Sep 2009
>>>[/COLOR][/FONT]

Agora vamos ver essa mesma saída utilizando L10n:
Código :
[FONT=Courier New][COLOR=DimGray]>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'Portuguese_Brazil.1252'
>>> numero = 154623.56
>>> valor = 1123.5
>>>
>>> print locale.format('%.2f', numero, True)
154.623,56
>>> print locale.currency(numero, grouping=True)
R$ 154.623,56
>>> print time.strftime(\"%a, %d %b %Y\")
ter, 01 set 2009
>>>[/COLOR][/FONT]

Pronto, a saída está formatada de acordo com o padrão da região configurada no meu SO. agora vamos ver como seriam essas saídas em um SO de um americano e de um alemão :
Código :
[FONT=Courier New][COLOR=DimGray]>>> import locale
>>>
>>> numero = 154623.56
>>> valor = 1123.5
>>>
>>> locale.setlocale(locale.LC_ALL, 'en')
'English_United States.1252'
>>> print locale.format('%.2f', numero, True)
154,623.56
>>> print locale.currency(numero, grouping=True)
$154,623.56
>>> print time.strftime(\"%a, %d %b %Y\")
Tue, 01 Sep 2009
>>>
>>>
>>> locale.setlocale(locale.LC_ALL, 'deu_deu')
'German_Germany.1252'
>>> print locale.format('%.2f', numero, True)
154.623,56
>>> print locale.currency(numero, grouping=True)
154.623,56 Ç
>>> print time.strftime(\"%a, %d %b %Y\")
Di, 01 Sep 2009
>>>[/COLOR][/FONT]
Estou fazendo esses exemplo no Windows do meu trabalho, no Linux isso tem algumas diferenças e também alguns problemas. De acordo com o que eu pesquisei, no Linux os arquivos de "locale" do Brasil no Linux foram feitos por um dinamarquês (Keld Simonsen) e pelo visto ele cometeu alguns erros como ausência de separador da casa de milhar. Para contorná-los estou fazendo o seguinte:
Código :
[FONT=Courier New][COLOR=DimGray]>>> import locale
>>> 
>>> lang_code = locale.setlocale(locale.LC_ALL, '')
>>> if 'pt_BR' in lang_code:
>>>      locale._override_localeconv['thousands_sep'] = '.'
>>>      locale._override_localeconv['grouping'] = [3,3,0]
>>> 
>>>
[/COLOR][/FONT][FONT=Courier New][COLOR=DimGray]>>> numero = 154623.56
>>> valor = 1123.5
>>>
[/COLOR][/FONT][FONT=Courier New][COLOR=DimGray] >>> print locale.format('%.2f', numero, True)
154.623,56
>>> print locale.currency(numero, grouping=True)
R$ 154.623,56
>>> print time.strftime(\"%a, %d %b %Y\")
Ter, 01 Set 2009[/COLOR][/FONT]
Como diria o Zen of Python: "Better simple then complex"!

Até mais...

Atualizado 11-01-2010 em 15:08 por Magnun

Categorias
Dicas , Python , Projetos , USBManager

Comentários

  1. Avatar de josir
    Valeu Magnum. Muito boa dica!
  2. Avatar de summ3r
    Para projetos de localização, eu recomendo esta plataforma online de tradução do softwares – https://poeditor.com/
  3. Avatar de summ3r
    .

+ Enviar Comentário