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()