Translations / i18n / localizations for programs/pt

From Free Pascal wiki
Revision as of 11:30, 1 March 2020 by Trev (talk | contribs) (Fixed syntax highlighting; deleted category included in page template)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) polski (pl) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

Visão Geral

Este documento discute sobre como você pode usar diferentes strings para vários idiomas como inglês, chinês, alemão, finlandês, italiano, ... . Basicamente funciona assim: Adicione uma resourcestring para cada caption, compile e ganhará os arquivos .rst e/ou .po (o IDE pode fazer isso automaticamente), crie um arquivo .po traduzido para cada idioma (há ferramentas gráficas livres) e use as funções da unit translations da LCL para carregar corretamente no ínicio do programa.

Resourcestrings

Por exemplo

 resourcestring
   Caption1 = 'Algum Texto';
   HelloWorld1 = 'Olá Mundo';

Essas são como constantes normais de string, isso significa que você pode associa-lás para qualquer string. Por exemplo

 Label1.Caption := HelloWorld1;

Quando fpc compila elas, ele cria para cada unit um arquivo nomedaunit.rst, contendo os dados da resourcestring (nome + conteúdo).

Arquivos .po

Existem muitas ferramentas livres para editar arquivos .po, que são textos simples como os arquivos .rst, mas com algumas opções, como um cabeçalho fornecendo campos para autor, códificação, idioma e data. Toda instalação do fpc fornece a ferramenta rstconv (windows: rstconv.exe). Essa ferramenta pode ser usada para converter um arquivo .rst em um arquivo .po. O IDE pode fazer isso automaticamente. Exemplos de ferramentas livres: kbabel, poedit.

Exemplo de como usar rstconv diretamente:

 rstconv -i unit1.rst -o unit1.po

Traduzindo

Para todo idioma um arquivo .po deve ser copiado e traduzido. A unit translation da LCL usa a codificação comum de idioma (en=english (inglês), de=german (alemão), it=italian (italiano), ...) para procurar. Por exemplo, a tradução alemã de unit1.po deverá ser unit1.de.po. Com isso em mente, copie o arquivo unit1.po para unit1.de.po, unit1.it.po, e independente do idioma que você deseja suportar e então assim os tradutores poderão editar seu respectivo arquivo .po.

Nota para brasileiros/portugueses:: Lazarus IDE e LCL têm somente a tradução do português brasileiro e esses arquivos têm extensão 'pb.po' e não 'pt.po'.

Opções do IDE para atualização automática de arquivo .po

  • A unit que contém as resourcestrings deverão ser adicionadas para o pacote ou projeto.
  • Você deve fornecer um caminho .po, isso significa um diretório separado. Por exemplo: crie um sub-diretório language no diretório do pacote/projeto. Para projetos, vá para Project > Project Options. Para pacote, vá para Options > IDE Integration.

Traduzindo no inicio do programa

Para todo arquivo .po, você deve chamar TranslateUnitResourceStrings da unit translations da LCL. Por exemplo:

    {Primeiro de tudo: adicione as units "gettext" e "translations" na cláusula uses}
    procedure TForm1.FormCreate(Sender: TObject);
    var
      PODirectory, Lang, FallbackLang: String;
    begin
      PODirectory := '/caminho/para/lazarus/lcl/languages/';
      GetLanguageIDs(Lang, FallbackLang); // in unit gettext
      TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', Lang, FallbackLang);
      MessageDlg('Título', 'Texto', mtInformation, [mbOk, mbCancel, mbYes], 0);
    end;