A preparação para tradução dos programas da linha Microsiga Protheus é realizada através dos header´s (CH)  de programa. Por padrão os header´s de tradução devem ter o mesmo nome do programa, exemplo: MATA410.PRX o header de tradução deste programa será o MATA410.CH

 

// TranslateStructureSample.prw

#INCLUDE "MATA410.CH"

 

Function Mata410()

Return

O desenvolvedor deve localizar as STRING´s do programa e substituí-las pelo DEFINE/Constante STRxxxx, onde xxxx é um numerador sequencial. Para manter a facilidade de leitura do código-fonte, recomenda-se que a string original seja adicionada como comentário ao final da linha de código, conforme exemplo abaixo:

 

// TranslateStructureSaySample.prw

@ nGetLin, aPosGet[1,1] Say If(M->C5_TIPO$"DB", STR0008, STR0009) Size 020, 09 Pixel          //"Fornec.:"###"Cliente: "

A grande maioria das STRING´s são traduzíveis, porém há string´s que referem-se a códigos internos do sistema e não devem receber tradução.

As STRING´s utilizadas em combos ou listas devem possuir o código numérico, em vez de letras. Exemplo: em vez de S-Sim;N-Não, utilize 1-Sim;2-Não.

O arquivo de header deve ser incluído na ferramenta AtuSx. Ela é a responsável pelo controle de tradução de idiomas, sendo proibida a inclusão de header de tradução na ferramenta de controle de fontes.

Seguem algumas práticas de preparação de string´s para tradução.

As string´s podem conter palavras ou frases, porém o ideal é utilizar frases inteiras na montagem das string´s, mesmo que existam partes móveis.

Para ilustrar esta situação, observe a frase: “A casa de João é amarela”, agora imagine que a palavra João e amarela são obtidas do banco de dados da aplicação. Neste caso uma das maneiras de montar a frase no código fonte seria: “A casa de “+cNome+” é “+”cCor”. Agora vamos ver como esta frase ficaria após a tradução para o idioma inglês. “The house of João is amarela”. É fato que cNome e cCor não são traduzidos uma vez que fazem parte do banco de dados e não da aplicação, porém a frase foi montada sem seguir o padrão Norte-Americano de montagem. O correto seria: “João´s house is amarela”.

Para permitir este tipo de construção na montagem das frases, deve-se utilizar a função I18N. Esta função permite a substituição das partes móveis e a instrução do que seria a parte móvel, veja: I18N("A casa de #1[nome de pessoa]# é #2[cor]#",{cNome,cCor}). Agora a tradução passaria a ser: “João´s house is amarela”.

Não se deve incluir formatação de números e datas na tradução. Se for necessário, retire  esta formação da Picture do dicionário de dados.

Não se deve inferir nenhuma tradução diretamente no código fonte. A tradução deve levar em consideração a diferença dos países. No idioma português, no Brasil é utilizada a palavra monitor (dispositivo de um computador pessoal) e em Portugal, utiliza-se ecrã.

Não se deve incluir textos em imagens. Elas dificultam o processo de tradução.

Outro elemento de tradução é o dicionário de dados. Por isto, recomenda-se que o dado apresentado em tela, proveniente do dicionário de dados seja obtido dele, utilizando as funções:

  • RetTitle()
  • SixDescricao()
  • XADescric ( )
  • XBDescri()
  • X1Pergunt ( )
  • X2Nome ( )
  • X3Titulo()
  • X3Descric()
  • X3CBox()
  • X5Descri()
  • RetExtMnu ( )
  • RetExtHlp ( )
  • RetAdminName ( )
  • RetExtHls ( )
  • XGDescri()
  • Sem rótulos