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:
>>>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
>>>
Agora vamos ver essa mesma saída utilizando L10n:
Código:
>>> 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
>>>
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:
>>> 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
>>>
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:
>>> 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]
>>> 
>>>
>>> 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
Como diria o Zen of Python: "Better simple then complex"!

Até mais...

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



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L