Tradução Automática

A página de Administrador de Localização pode traduzir automaticamente um arquivo JSON de localização para um ou mais idiomas em uma única passagem. Ele é construído sobre uma abstração independente do provedor — Azure AI Translator, DeepL e Google Cloud Translation, cada nave — e reutiliza uma memória de tradução suportada pelo Dataverse, então você paga para traduzir cada string apenas uma vez. Resultados sendo transferidos por idioma ou como um único zip, cada um anotado com quantas strings foram traduzidas recentemente versus reutilizadas da memória.

Traduzindo um arquivo

Uma vez configurada a funcionalidade (veja Configuração, abaixo), um painel de tradução aparece na página de Administração de Localização do framework:

  1. Faça upload de um arquivo — arraste e solte ou navegue até um arquivo JSON de localização, como app.en.json.
  2. Confirme o idioma de origem — ele é detectado automaticamente pelo segmento de cultura do nome do arquivo (app.en.json) e permanece editável.
  3. Escolha idiomas-alvo — toda cultura que seu portal suporta e que o provedor pode traduzir é oferecida; Culturas que o provedor não consegue traduzir são mostradas como desativadas.
  4. Traduzir — as strings são enviadas em lotes que respeitam os limites por requisição do provedor, e os idiomas escolhidos são traduzidos simultaneamente.
  5. Baixe — baixe cada idioma individualmente ou todos eles em um código postal. Cada linha informa quantas cadeias foram traduzidas versus reutilizadas da memória.

Memória de tradução

Cada string que o provedor traduz é armazenada no Dataverse, codificada pelo texto de origem, idioma de origem e idioma de destino. Da próxima vez que essa mesma sequência aparece — em outro arquivo, em outra execução ou em uma edição que a deixa intacta — ela é servida de memória em vez de ser reenviada. Como os provedores cobram por caractere, isso mantém as repetições e as retraduções incrementais praticamente gratuitas, e o resultado por idioma mostra a divisão para que você possa ver exatamente o que era novo.

Configuração

O painel de tradução aparece apenas quando ambas as peças abaixo estão no lugar; caso contrário, a página de administração omite (ou mostra um aviso de uma linha explicando o que está faltando).

1. Instalar a solução de memória de tradução

A memória de tradução está em duas tabelas Dataverse provisionadas pela PowerPortalsProLocalization solução gerenciada. Baixe a solução gerenciada mais recente das versões do GitHub e importe-a para o seu ambiente. A página de administração detecta a solução pelo nome único e só oferece tradução quando ela está presente.

2. Registre um provedor de tradução

Três provedores são prontos para uso — Azure AI Translator, DeepL e Google Cloud Translation — cada um em seu próprio pacote NuGet, de modo que o framework central não envolve dependência do fornecedor de tradução. Adicione o pacote do serviço para o qual você tem uma chave e registre-o ao lado de AddPowerPortalsProWebServer(). Para Azure, crie um recurso Azure AI Translator gratuito (F0) ou pago, e depois registre-o com sua chave e região:

Para DeepL, adicione o PowerPortalsPro.Web.Server.Translation.DeepL pacote e registre-o com sua chave de autenticação (chaves do nível livre terminando automaticamente no :fx caminho para o endpoint gratuito):

Para o Google Cloud Translation, adicione o PowerPortalsPro.Web.Server.Translation.Google pacote e registre-o com uma chave de API que tenha a API de Cloud Translation ativada:

Nota

Deixar a chave em branco é seguro: o provedor simplesmente não está registrado e o painel de tradução permanece oculto, então a mesma build roda com ou sem tradução configurada.

Traga seu próprio provedor

A tradução é independente do provedor. Os provedores embutidos Azure, DeepL e Google são cada um uma implementação de ITranslationProvider, fornecidos em seus próprios PowerPortalsPro.Web.Server.Translation.* pacotes, então o framework central não carrega dependência do fornecedor de tradução. Para usar um serviço diferente — Amazon Translate, um modelo on-prem, um LLM — implemente ITranslationProvider e registre no lugar dos embutidos. Tudo acima dele (a interface de administrador, memória de tradução, lote e as contagens traduzido vs. reutilizado) permanece igual.

Blazor e React

O painel de tradução é um componente autônomo em ambas as pilhas, então você pode hospedar na sua própria página de administração em vez da do framework. Cada um carrega seus próprios dados de disponibilidade e não renderiza nada até que a tradução seja configurada:

React
Blazor

Nota

As execuções de tradução são limitadas automaticamente: as requisições são divididas para permanecer abaixo dos limites de tamanho por requisição do provedor, linguagens de destino executam concorrência limitada, e respostas com redução de limites (HTTP 429) são retentadas com recuo exponencial — de modo que um grande trabalho multilíngue permanece dentro dos limites de taxa em qualquer nível de provedor sem configuração extra.