Outro dia, esse tweet apareceu na minha linha do tempo do Twitter:
Meio extremo, mas eu entendi o ponto de vista dele, apesar de acreditar que as pessoas são livres para postar o que quiserem e no idioma que desejam. Como você pode ver, muitas pessoas responderam a esse tweet e ele se tornou um tópico interessante.
Às vezes, o que você deseja compartilhar é relevante para parte do seu público, outras vezes pode ser útil para várias culturas e, como o inglês é o idioma universal, acredito que devemos compartilhar o conteúdo em inglês.
"Mas eu não falo inglês, o que posso fazer?"
Acredite ou não, existe um site que pode traduzir o que você deseja para vários idiomas e é gratuito. Tudo o que você precisa fazer é acessar https://translate.google.com e selecionar os idiomas de origem e de destino, escrever o texto que deseja traduzir e pressionar a tecla Enter.
WOW!
História engraçada: meu amigo Rodrigo Kono viajou para o Japão e passou duas horas no aeroporto tentando obter ajuda para ir ao hotel. Ele me enviou um áudio dizendo esse "problema" e lembrei-o do aplicativo tradutor do Google, que possui um recurso em que você pode usar a câmera do seu telefone para traduzir um texto em tempo real. Ele conseguiu ir para o hotel e dias depois, retornar ao Brasil e o dia foi salvo graças ao seu antigo colega de quarto aqui.
Mas e se você não é um fã do Google ou se deseja incluir recursos de tradução em seus aplicativos? Você pode consumir modelos pré-treinados de IA por meio de APIs REST e obter o mesmo resultado.
Em 2016, enquanto eu morava na Nova Zelândia, conheci um cara que começou sua própria empresa depois que seu aplicativo foi apresentado no Tech Crunch. Basicamente, ele criou um aplicativo disruptivo de tradução de 1-N idiomas. Você pode ler o artigo completo aqui: https://techcrunch.com/2016/04/20/miss-d-is-a-dictionary-app-for-the-linguistically-curious/
Codificando seu próprio mecanismo de tradução usando o Cognitive Services + Azure Functions + Azure Storage
A primeira coisa que precisamos fazer é acessar o Portal do Azure e criar um novo "Texto do Tradutor" na sua Assinatura do Azure:
Em seguida, precisamos escolher a camada de preços e escolher um nome para o serviço:
Agora, vamos criar um projeto do Azure Functions usando o Visual Studio:
Depois disso, vamos especificar que nossa função será acionada sempre que um novo blob for carregado na nossa conta de armazenamento:
Em seguida, precisamos instalar um pacote nuget para simplificar a requisição http ao Serviço Cognitivo, que traduzirá o texto:
using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using CognitiveServices.Translator;
using CognitiveServices.Translator.Translate;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.Auth;
namespace MultiLanguageTranslator
{
public class Function1
{
[FunctionName("Function1")]
public static void Run([BlobTrigger("english/{name}", Connection = "StorageConnectionString")]Stream myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
var translateClient = new TranslateClient(new CognitiveServices.Translator.Configuration.CognitiveServicesConfig
{
Name = Environment.GetEnvironmentVariable("CognitiveServicesName"),
SubscriptionKey = Environment.GetEnvironmentVariable("CognitiveServicesKey"),
SubscriptionKeyAlternate = Environment.GetEnvironmentVariable("CognitiveServicesKey"),
});
using (var sr = new StreamReader(myBlob))
{
var fullContent = sr.ReadToEnd();
var desiredLanguages = new string[] { "de", "es", "fr", "pt", "it", "nl" };
var responses = translateClient.Translate(new RequestContent(fullContent), new RequestParameter
{
From = "en",
To = desiredLanguages,
IncludeAlignment = true
});
var storageAccountName = Environment.GetEnvironmentVariable("StorageAccountName");
var storageAccountKey = Environment.GetEnvironmentVariable("StorageAccountKey");
var storageAccountEndpoint = Environment.GetEnvironmentVariable("StorageEndpoint");
var storageCredentials = new StorageCredentials(accountName: storageAccountName, keyValue: storageAccountKey);
var blobClient = new CloudBlobClient(new Uri(storageAccountEndpoint), storageCredentials);
var container = blobClient.GetContainerReference("translations");
container.CreateIfNotExists();
foreach (var response in responses)
{
foreach(var translation in response.Translations)
{
var blob = container.GetBlockBlobReference($"{translation.To}.txt");
blob.UploadText(translation.Text);
}
}
}
}
}
}
Em resumo, o Azure Functions obterá o conteúdo do texto original que será carregado na Conta de Armazenamento definida por meio da string de conexão StorageConnectionString. O conteúdo pode ser acessado através da variável myBlob
.
Estamos lendo o conteúdo usando a classe StreamReader e, em seguida, criando um array de strings com os idiomas que queremos traduzir a partir do conteúdo original em inglês.
Em seguida, obtemos algumas variáveis de ambiente (definiremos no Portal do Azure quando criarmos a Azure Function) e finalmente, vamos acessar a conta de armazenamento mais uma vez para armazenar o texto traduzido.
Hospedando o código criado
Primeiro, vamos criar a conta de armazenamento:
Em seguida, vamos criar a Azure Function e obter o perfil de publicação para simplificar nosso processo de publicação:
Depois de pronto, podemos obter o perfil de publicação na aba Visão geral:
Agora, vamos usar nosso Visual Studio para publicar nosso código:
Por fim, vamos criar as variáveis de ambiente clicando no link de configuração também fica na aba Visão geral:
Vamos ver tudo em ação:
A lista completa de idiomas suportados pode ser encontrada aqui: https://docs.microsoft.com/en-us/azure/cognitive-services/translator/language-support