⭕️ Dicas Multi-language Outsystems
Oi seus lindos 👋🏻 ultimamente temos trabalhado bastante com soluções para mais de uma lingua.
O que tem sido um desafio, o legal que no time temos pessoas que falam inglês e espanhol o que tem facilitado bastante.
Contudo enfrentamos alguns problemas com esse cenários e tiramos lições para próximos projetos, pois é isso que significa continuous growth.
As vezes subir um pico a parti de uma vale é desafiador, porém quando você está em cima que olha para baixo, consegue entender que existe outros caminhos que são mais rápidos para alcançar seus objetivos.
# Tip 1 (Kick Start)
Nunca deixe para fazer tradução por ultimo, isso é um famoso tiro no pé. Sabe quando você é um bebê e a vida é só comer e dormi ? Fácil né ? Agora vamos comparar com a vida adulta, que é um junção de coisas como: acordar cedo , ir trabalhar, pegar ônibus, pagar contas. Enfim aquela canseira do dia dia. Mesma coisa é quando você decide fazer isso por ultimo.
Ao adicionar um novo modulo adicione logo em seguida o Multilingual Locales, que está na aba Data. Para isso basta clicar na pasta com botão direito e clicar em Add Locale.
Em seguida na aba Logic adicione o evento de sistema, chamado : On Application Ready que é o local correto para adicionar um locale padrão cujo não seja o default que é inglês.
Ao adicionar , no flow da action coloque o a client action SetCurrentLocale com o acrônimo do locale que no nosso exemplo é pt-BR.
Tradução inicial User Modules
Como você acabou de criar o modulo e já adicionou o Multi-language antes de começar de fato desenvolver você terá pouco a fazer o que é o X da questão dessa primeira dica. Para módulos Users, voltei na aba Data e clique em edit translation no locale a qual está trabalhado.
Em seguida selecione no Dropdown Behavior selecione a opção Translate , que ira exibir uma lista de itens que já foram traduzido, mas que na verdade não foram que o Outsystems já trás como padrão que é justamente a tela de Login e a de Permissões. Preencha esses itens e vamos para o próximo caso.
Template :
A próxima coisa a fazer é no Dropdown Behavior selecione a opção to Define. Aqui devemos preencher apenas os itens da cujo a coluna Location esteja preenchida com Multilanguage.
Em seguida selecionamos todos os itens e clicamos em no botão Translate. Para efetuar a tradução de fato.
Após efetuar esse procedimento selecione novamente a opção Translate no dropdown e vera que a lista aumentou.
Agora selecione novamente a opção To Define e selecione todos (Ctrl + A ou Comand + A) os itens restante e clique no botão Don’t translate . Isso por que todos esse itens são referências de css e atributos que não precisam ser traduzidos. Isso vai facilitar nossa vida no sentido que a medida que o desenvolvimento for acontecendo apenas coisas novas serão atribuídas como to Define agilizando o processo.
Template :
Tradução inicial Core / Library Modules
Aqui é a parte easy do rolê para esse tipo de módulo você precisa apenas criar a opção Multilanguage.
Após adicionar, clique em edit translation e você ira notar que existe poucos itens a se traduzirem e todos estão como a opção To Define, isso por que módulos de Core e Library geralmente são criados para não ter UI. Porém como o contexto da TIP 1 é após criação do módulo selecione tudo (Ctrl + A ou Comand + A) e clique no botão Don’t translate.
Por que aqui não iremos ter apenas mensagem de alerta e talvez tabelas estáticas para traduzir, o restante é o modulo de Users.
# Tip 2 (Date)
Essa tip é um pulo do gato (🐈) . Pois graça a deus temos cliente exigentes que fazem questão de nos tornar cada vez mais excelentes naquilo que fazemos. Primeiro para que possamos traduzir qualquer coisa dentro do Outsystems, temos como premissa criar algo fixo que possamos traduzir. No caso de Datas, basta usar qualquer função que possibilite passar um mascara / pattern de formatação, como por exemplo a client action FormatDateTime.
O formato abaixo é o padrão americano que é Ano-Dia-Mês :
Como digitamos “yyyy-dd-MM” agora podemos traduzir para mascara no formato pt-BR que seria : “dd/MM/yyyy” traduzindo assim a data de forma simples e fácil.
# Tip 3 (Static Tables)
Sim seu lindo, da para traduzir Static Tables ou Static Entities como queira chamar. Isso pelo simples fato de elas serem estáticas. É como a lei da gravidade, tudo que sobe desce, então se tem algo fixo logo eu consigo traduzir.
No exemplo abaixo eu tenho uma tabela com três registro com suas descrições em inglês fixas. Qual meu alvo aqui ? O Campo ou atributo Label cujo o valor é usado por nós #lowcodelovers
Aqui é acessar a locale na aba Data, clicar em edit translation e em seguida fazer a mágica da tradução.
E ai que acharam, legal né ? Porém já adiantando sua dúvida, não infelizmente isso não rola para tabelas normais. Isso por que é premissa que só podemos traduzir coisas que são fixas. Se você tiver algo dinâmico dentro de tabelas normais, I’m sorry você terá que implementar um outra solução para isso my friend.
# Tipo 4 (Data Action / Aggregation)
Agora você me pergunta, acaba-se de falar que não dava para fazer traduções com tabela normais no Outsystems. Então o que tem haver Data Action e Aggregation ? calma jovem gafanhoto (🦗) .
Essa tip é complemento da tip de cima, aqui é simples. Traduções provenientes de entidades estáticas são processadas em Data Action e em Aggregation, então toda vez que isso acontecer , teremos que fazer um refresh nos dados, para que não fique metade da tela traduzia e a outra não.
# Tip 5 ( Dinamic Texts)
Eu sei eu sei, lá vem eu de novo com historia de dinâmico. Calma, respiraaaa, como diria Adele : Easy On Me. Essa é aquela situação quando eu tenho uma mensagem que é composta por um texto dinâmico seguido de um texto estático. Exemplo : “Olá “ + (Nome do Usuário) + “ seja bem vindo !!”.
Aqui o truque é sobre os espaços , que geralmente fica no texto estático que as vezes da problema fazendo que o exemplo de cima de comporte assim : “OláDiógenesseja bem vindo !!”.
Para resolver essa questão aqui está outro pulo do gato (🐈) :
Como vocês podem ver o texto estático que representa “ “ não é aparece para tradução e mesmo que aparece-se era só colocar Don’t translate.
# Tip 6 ( Boolean )
Acredite se quiser, também tive problema com isso, o que levou a mais uma US no nosso backlog. Assim como a tip de cima, essa é bem tranquila e precisa ser trata de forma correta, nesse caso basta apenas criar um condicional (IF) verificando o estado true ou false e atribuindo um texto fixo de “yes” ou “no” que pode ser traduzido.
# Tip 7 ( Team )
Estabeleça com o seu time um acordo, que cada um irá traduzir o seu desenvolvimento. Isso vai torna o processo muito mais tranquilo, porém lembre-se que isso é um hábito que ainda não foi instalado em alguns deles então algumas coisas vão passar.
# Tip 8 ( Parallel )
Colocar todo mundo para traduzir ao mesmo tempo, não é uma boa ideia. Mesmo que sejam telas separadas. Eu sei que que eu falei que se cada um fizer sua tradução durante o desenvolvimento ira ajudar bastante, mas para aquela contexto são quando o desenvolvimento é algo novo que não afeta a nível de paralelismo.
Então escolha duas pessoas e vá validando tela por tela em quanto uma traduz a outra verifica e o restante do time, ira fazer outra coisa , como teste cruzado e verificar se está tudo funcional.
# Tip 9 ( Not Empty )
Sempre traduza mesmo que não precise traduzir. Exemplo : Login é a mesma coisa no português, porém devemos traduzir para que quando formos revisar as traduções ter a certeza que tudo que está preenchida está de fato traduzido.
# Tip 10 ( CTRL + C / CTRL + V )
CUIDADOOOOO com isso, se você copia e cola textos que já estão traduzidos ele já caem no Multi-language traduzidos e quando você pensa que não você vai está visualizando um texto diferente e vai pensar que está errado. Por exemplo :
# Conclusão
Nunca subestime algo simples só por que parece ser simples, tudo no processo de desenvolvimento é importante e contar com certo cuidado nos liberta de problemas que podem ser evitados.
Então, aqui eu agradeço especialmente aquela pessoas do meu time que fizeram isso com maestria mesmo sendo um SACO fazer, porém na Review com o cliente quando demonstrando o funcionamento e validamos todas as traduções, sem sombra de dúvida foi um momento incrível.
Eiiiii me ajuda ai vai !? deixa uma palminhaaaa 👋🏻 e clica em seguir para mais conteúdos legais.