Translations / i18n / localizations for programs/pt: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | ## Visão Geral | |
| 2 | 2 | ||
| 3 | 3 | 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. | |
| 4 | 4 | ||
| 5 | 5 | ## Resourcestrings | |
| 6 | 6 | ||
| 7 | 7 | Por exemplo | |
| 8 | 8 | ||
| 9 | - | ||
| 10 | - | ||
| 11 | - | ||
| 9 | + | ```text | |
| 10 | + | resourcestring | |
| 11 | + | Caption1 = 'Algum Texto'; | |
| 12 | + | HelloWorld1 = 'Olá Mundo'; | |
| 13 | + | ``` | |
| 12 | 14 | ||
| 13 | 15 | Essas são como constantes normais de string, isso significa que você pode associa-lás para qualquer string. Por exemplo | |
| 14 | 16 | ||
| 15 | - | ||
| 17 | + | ``` pascal | |
| 18 | + | Label1.Caption := HelloWorld1; | |
| 19 | + | ``` | |
| 16 | 20 | ||
| 17 | 21 | Quando fpc compila elas, ele cria para cada unit um arquivo **nomedaunit.rst**, contendo os dados da resourcestring (nome + conteúdo). | |
| 18 | 22 | ||
| 19 | 23 | ## Arquivos .po | |
| 20 | 24 | ||
| 21 | 25 | 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. | |
| 22 | 26 | ||
| 23 | 27 | Exemplo de como usar rstconv diretamente: | |
| 24 | 28 | ||
| 25 | - | ||
| 29 | + | ```text | |
| 30 | + | rstconv -i unit1.rst -o unit1.po | |
| 31 | + | ``` | |
| 26 | 32 | ||
| 27 | 33 | ## Traduzindo | |
| 28 | 34 | ||
| 29 | 35 | 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. | |
| 30 | 36 | ||
| 31 | 37 | **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'. | |
| 32 | 38 | ||
| 33 | 39 | ## Opções do IDE para atualização automática de arquivo .po | |
| 34 | 40 | ||
| 35 | 41 | - A unit que contém as resourcestrings deverão ser adicionadas para o pacote ou projeto. | |
| 36 | 42 | - 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. | |
| 37 | 43 | ||
| 38 | 44 | ## Traduzindo no inicio do programa | |
| 39 | 45 | ||
| 40 | 46 | Para todo arquivo .po, você deve chamar TranslateUnitResourceStrings da unit translations da LCL. Por exemplo: | |
| 41 | 47 | ||
| 42 | 48 | ``` pascal | |
| 43 | 49 | {Primeiro de tudo: adicione as units "gettext" e "translations" na cláusula uses} | |
| 44 | 50 | procedure TForm1.FormCreate(Sender: TObject); | |
| 45 | 51 | var | |
| 46 | 52 | PODirectory, Lang, FallbackLang: String; | |
| 47 | 53 | begin | |
| 48 | 54 | PODirectory := '/caminho/para/lazarus/lcl/languages/'; | |
| 49 | 55 | GetLanguageIDs(Lang, FallbackLang); // in unit gettext | |
| 50 | 56 | TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', Lang, FallbackLang); | |
| 51 | 57 | MessageDlg('Título', 'Texto', mtInformation, [mbOk, mbCancel, mbYes], 0); | |
| 52 | 58 | end; | |
| 53 | 59 | ``` | |
| 54 | 60 | ||
| 55 | 61 | --- | |
| 56 | 62 | *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).* |
