Criar e usar arquivos de tradução

Concluído

O Business Central é habilitado para vários idiomas, o que significa que você pode exibir a interface de usuário (UI) em diferentes idiomas. No Business Central, isso é feito usando arquivos XLIFF, que é um formato padronizado usado para traduções baseadas em computador.

Também é possível usar Dynamics 365 Translation Service para ter traduções nos idiomas de destino. Para obter mais informações, consulte Traduzir arquivos da interface do usuário.

Para obter uma visão geral de como as traduções são aplicadas, consulte Visão geral das traduções.

Gerar o arquivo XLIFF

Para adicionar um novo idioma à extensão que você criou, primeiro, você deve habilitar a geração de arquivos XLIFF. A extensão do arquivo XLIFF é .xlf. O arquivo XLIFF gerado contém as strings especificadas em propriedades como Caption, CaptionML e Tooltip.

Para enviar um app ao AppSource, use arquivos de tradução XLIFF. No arquivo app.json da sua extensão, adicione a seguinte linha:

al-languageCopy

"features": [ "TranslationFile" ]

Se a configuração de compilação incremental estiver habilitada na configuração de extensão de idioma AL, todas as traduções serão ignoradas, mesmo se a configuração "features": [ "TranslationFile" ] estiver definida no arquivo app.json. Para obter mais informações, consulte Configuração da extensão de idioma AL. O mesmo acontece quando se usa a publicação RAD, todas as traduções também são ignoradas. Para obter mais informações, consulte Trabalhar com desenvolvimento rápido de aplicativos.

Agora, quando você executa o comando de compilação (Ctrl+Shift+B) no Visual Studio Code, uma pasta \Translations é gerada, com o arquivo .xlf que contém todos os rótulos, propriedades de rótulos e rótulos de relatório usados na extensão. O arquivo .xlf gerado agora pode ser traduzido.

As versões ML (multilíngues) das propriedades não estão incluídas no arquivo .xlf:

O tipo de dados TextConst também não está no arquivo .xlf.

Certifique-se de renomear o arquivo de tradução antes de criar a extensão na próxima vez, pois ele será substituído.

Ao definir o sinalizador GenerateCaptions no arquivo app.json, você especifica que deseja gerar legendas com base no nome do objeto para páginas, tabelas, relatórios, XMLports e páginas de solicitação. Se o objeto já tiver uma propriedade Caption definida, esse valor será usado. Para os campos de tabela, a OptionCaption é usada. A sintaxe é a seguinte:

al-languageCopy

"features": [ "TranslationFile", "GenerateCaptions" ]

GenerateLockedTranslations

Ao definir o sinalizador GenerateLockedTranslations no arquivo app.json, você especifica que deseja gerar elementos <trans-unit> para rótulos bloqueados no arquivo XLIFF. O comportamento padrão é que esses elementos não são gerados. Para obter mais informações, veja Arquivos JSON.

al-languageCopy "features": [ "GenerateLockedTranslations" ]

Sintaxe do rótulo

A sintaxe do rótulo é mostrada no exemplo abaixo para a propriedade Caption:

al-languageCopy

Caption = 'Developer translation for %1', Comment = '%1 is extension name', locked = false, MaxLength=999;

Os atributos comment, locked e maxLength são opcionais e a ordem não é imposta. Para obter mais informações, consulte Tipo de dados de rótulo.

Use a mesma sintaxe para rótulos de relatório:

al-languageCopy

labels { LabelName = 'Label Text', Comment='Foo', MaxLength=999, Locked=true; } E a seguir está a sintaxe para tipos de dados Label:

al-languageCopy

var     a : Label 'Label Text', Comment='Foo', MaxLength=999, Locked=true;

O arquivo XLIFF

No arquivo .xlf gerado, você pode ver um elemento <source> para cada rótulo. Para a tradução, agora você terá que adicionar o idioma de destino e um elemento <target> por rótulo. O idioma de destino deve ser especificado no formato "<language code>-<country code>", por exemplo, "da-DK", "es-ES" ou "de-DE". O atributo <trans-unit id> corresponde à ID do objeto na extensão. Confira isso no exemplo abaixo.

al-languageCopy

<?xml version="1.0" encoding="utf-8"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd"> <file datatype="xml" source-language="en-US" target-language="da-DK" original="ALProject16"> <body> <group id="body"> <trans-unit id="PageExtension 50110" maxWidth="999" size-unit="char" translate="yes" xml:space="preserve"> <source>Developer translation for %1</source> <target>Udvikleroversættelse for %1</target> <note from="Developer" annotates="general" priority="2">%1 is extension name</note> <note from="Xliff Generator" annotates="general" priority="3">PageExtension - PageExtension</note> </trans-unit> </group> </body> </file> </xliff>

Você pode ter apenas um arquivo .xlf por idioma. Se você traduzir sua extensão para vários idiomas, deverá ter um arquivo de tradução por idioma. O nome do arquivo não é imposto, mas recomendamos nomeá-lo usando este
formato: <extensionname>.<language>.xlf.

Após a compilação e publicação da extensão, você poderá alterar o idioma do Dynamics 365 Business Central para visualizar a interface no idioma traduzido.

Traduzir outras extensões

Para traduzir outras extensões, por exemplo, ao adicionar traduções ao aplicativo base, você deve fazer referência ao projeto a ser traduzido usando a seção de dependências no arquivo app.json. Para obter mais informações, veja Arquivos JSON. Quando as dependências são definidas, você pode adicionar arquivos xliff em seu projeto atual que traduz as legendas de objeto da extensão referenciada. Crie um diretório chamado Translations na raiz da extensão e coloque o arquivo xliff traduzido nela. Após a compilação e publicação da extensão, altere o idioma do Dynamics 365 Business Central para visualizar a interface no idioma traduzido.

Ao traduzir outras extensões, confira se o atributo original no elemento <file> do arquivo xliff não está definido como o nome do app atual. Caso contrário, as traduções serão usadas apenas para traduzir rótulos no mesmo aplicativo.

Para aplicativos em que as traduções se destinam a traduzir o aplicativo atual, o arquivo xliff gerado terá o valor correto do nome do aplicativo.

Use a <trans-unit id> do rótulo quando ela estiver definida

Para traduzir outros aplicativos, você deve usar a <trans-unit id> da propriedade original, não a de um objeto de extensão, pois pode ter havido modificações.

Se MyPage for definido como:

al-languageCopy

page 50000 MyPage { Caption = 'Base Page' }

e tiver <trans-unit id> para a página correspondente a Page 2931038265 - Property 2879900210.

E se a seguinte extensão de página de MyPage chamada MyPageExtension:

al-languageCopy

pageextension 50000 MyPageExtension extends MyPage { Caption = 'Extension Page'; }

tiver <trans-unit id> para a extensão de página correspondente a PageExtension 1716690578 - Property 2879900210, então, se você quiser alterar a legenda na página, deverá usar a ID Page 2931038265 - Property 2879900210, que é a <trans-unit id> da propriedade original.