Veremos como dar suporte a tradução de um software escrito em python com GNUGetText.
Explicação sobre o Gettext e requerimentos
O GNUGettext, é uma biblioteca disponível em várias linguagens que
permite a tradução de programas a partir de arquivos binários. Sua
utilização é muito simples e ao longo deste artigo, criaremos um script
para tradução com a Google Translate API, agilizando a tradução.
Para maiores informações sobre o Gettext, visite a página do projeto:
Requerimentos:
- gettext – (isso pode variar de acordo com a linguagem, no python vem por padrão)
- pygettext – (um utilitário para vasculhar o código Python e encontrar as strings isoladas)
- msgfmt – (converte os arquivos gerados pelo pygettext para binários)
Com tudo certo, vamos ao código
Isolando strings no código:
Para que o gettext funcione, é preciso isolar as strings no código python:
#!/usr/bin/python
# importing the gettext library
import gettext
# Defining the translate file
SOURCE_FILE_TRADUCTION='messages'
# Defining the translate directory
LOCALE_DIR='locale'
# Start gettext
language = gettext.translation(SOURCE_FILE_TRADUCTION,LOCALE_DIR,languages=["pt-br"])
language.install()
# Alias the underscore to translate
_ = language.gettext
# Code
print _("Hello World")
Aqui isolamos as strings com _(), e agora iremos gerar o arquivo .po com o pygettext:
user@localhost:~> pygettext -o test.po test.py
Eis o arquivo de tradução:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR , YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSIONn"
"POT-Creation-Date: 2011-05-10 09:18+BRTn"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONEn"
"Last-Translator: FULL NAME n"
"Language-Team: LANGUAGE n"
"MIME-Version: 1.0n"
"Content-Type: text/plain; charset=CHARSETn"
"Content-Transfer-Encoding: ENCODINGn"
"Generated-By: pygettext.py 1.5n"
#: test.py:10
msgid "Hello World"
msgstr ""
Obs.: É essencial preencher o cabeçalho, pois a frente teremos problemas na conversão para binário.
Enfim, agora podemos traduzir, mas porque não usar o Google?.
Google Translate API + Gettext
Agora creio que é a parte mais legal, automatizar a tradução.
Sinceramente, confesso que o script pode conter alguns erros,
principalmente se a string isolada contem caracteres especiais, como %,<,>, entre outros.Esse script funcionou bem para traduções de texto puro.
Aceito sugestões de melhorias 🙂
#!/bin/bash
#############
# Author: Ramon Medeiros @ Viva o Linux
##############
# Line break
ORI_IFS=$IFS
IFS=