45.2. Para o programador

45.2.1. Mecânica

Esta seção descreve como implementar suporte a idioma nativo em um programa ou biblioteca que faça parte da distribuição do PostgreSQL. Atualmente somente se aplica a programas C.

Adicionar suporte a idioma nativo ao programa

  1. O código abaixo deve ser inserido na seqüência de inicialização do programa:

    #ifdef ENABLE_NLS
    #include <locale.h>
    #endif
    
    ...
    
    #ifdef ENABLE_NLS
    setlocale(LC_ALL, "");
    bindtextdomain("nome_do_programa", LOCALEDIR);
    textdomain("nome_do_programa");
    #endif
    

    (Na verdade o nome_do_programa pode ser escolhido livremente)

  2. Sempre que for encontrada uma mensagem candidata a ser traduzida deve ser inserida uma chamada a gettext(). Por exemplo,

    fprintf(stderr, "panic level %d\n", lvl);
    

    deve ser alterada para

    fprintf(stderr, gettext("panic level %d\n"), lvl);
    

    (gettext é definida como nenhuma operação se não for configurado suporte a idioma nativo)

    Isto tende a tornar o código confuso. Uma forma abreviada comum é:

    #define _(x) gettext(x)
    

    Quando o programa faz grande parte da sua comunicação através de uma ou de poucas funções, tal como ereport() no servidor, existe uma outra solução possível. Neste caso faz-se a função chamar gettext internamente para todas as cadeias de caracteres.

  3. O arquivo nls.mk deve ser adicionado ao diretório com os fontes do programa. Este arquivo é lido como um Makefile. Devem ser feitas as seguintes atribuições de variáveis:

    CATALOG_NAME

    O nome do programa, conforme fornecido na chamada a textdomain().

    AVAIL_LANGUAGES

    Lista das traduções existentes — inicialmente vazia.

    GETTEXT_FILES

    Lista dos arquivos que contêm cadeias de caracteres traduzíveis, ou seja, àquelas marcadas com gettext ou por uma solução alternativa. No final esta lista acaba incluindo praticamente todos os arquivos fonte do programa. Se esta lista ficar muito longa, pode ser feito com que o primeiro "arquivo" seja um +, e a segunda palavra seja um arquivo que contém um nome de arquivo por linha.

    GETTEXT_TRIGGERS

    As ferramentas que geram catálogos de mensagem para os tradutores trabalharem precisam saber que chamadas de função contêm cadeias de caracteres traduzíveis. Por padrão, só são conhecidas as chamadas a gettext(). Se for utilizado _ ou outros identificadores estes devem ser listados aqui. Se a cadeia de caracteres traduzível não for o primeiro argumento, o item deve estar na forma func:2 (para o segundo argumento).

O sistema de construção toma conta automaticamente da construção e da instalação dos catálogos de mensagem.

45.2.2. Guia para escrever mensagens

Abaixo estão algumas diretrizes para escrever mensagens facilmente traduzíveis.

SourceForge.net Logo CSS válido!