Sign in Join
Wiki copytemporary

Translations / i18n / localizations for programs/pt: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Visão Geral
22
33Este 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.
44
55## Resourcestrings
66
77Por exemplo
88
9-` resourcestring`\
10-`   Caption1 = 'Algum Texto';`\
11-`   HelloWorld1 = 'Olá Mundo';`
9+```text
10+ resourcestring
11+ Caption1 = 'Algum Texto';
12+ HelloWorld1 = 'Olá Mundo';
13+```
1214
1315Essas são como constantes normais de string, isso significa que você pode associa-lás para qualquer string. Por exemplo
1416
15-` Label1.Caption := HelloWorld1;`
17+``` pascal
18+ Label1.Caption := HelloWorld1;
19+```
1620
1721Quando fpc compila elas, ele cria para cada unit um arquivo **nomedaunit.rst**, contendo os dados da resourcestring (nome + conteúdo).
1822
1923## Arquivos .po
2024
2125Existem 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.
2226
2327Exemplo de como usar rstconv diretamente:
2428
25-` rstconv -i unit1.rst -o unit1.po`
29+```text
30+ rstconv -i unit1.rst -o unit1.po
31+```
2632
2733## Traduzindo
2834
2935Para 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.
3036
3137**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'.
3238
3339## Opções do IDE para atualização automática de arquivo .po
3440
3541- A unit que contém as resourcestrings deverão ser adicionadas para o pacote ou projeto.
3642- 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.
3743
3844## Traduzindo no inicio do programa
3945
4046Para todo arquivo .po, você deve chamar TranslateUnitResourceStrings da unit translations da LCL. Por exemplo:
4147
4248``` pascal
4349 {Primeiro de tudo: adicione as units "gettext" e "translations" na cláusula uses}
4450 procedure TForm1.FormCreate(Sender: TObject);
4551 var
4652 PODirectory, Lang, FallbackLang: String;
4753 begin
4854 PODirectory := '/caminho/para/lazarus/lcl/languages/';
4955 GetLanguageIDs(Lang, FallbackLang); // in unit gettext
5056 TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', Lang, FallbackLang);
5157 MessageDlg('Título', 'Texto', mtInformation, [mbOk, mbCancel, mbYes], 0);
5258 end;
5359```
5460
5561---
5662*From the Free Pascal wiki, page "Translations / i18n / localizations for programs/pt", as it stood on 2020-03-01 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history