Destaques
O foura.ai agora está disponível em seis idiomas. O site, a interface do Dashboard e as nove páginas de marketing foram extraídos, traduzidos e reestruturados para servir a localidade correta com base na URL. Abra o sitemap em um navegador e ele será renderizado como uma tabela estilizada em vez de XML bruto.
Novidades
O site fala seis idiomas
Inglês, búlgaro, alemão, polonês, vietnamita e chinês. O roteamento por prefixo de URL significa que cada localidade reside em seu próprio caminho: /de/, /pl/, /zh/ e assim por diante. O caminho base serve inglês, e /en/ redireciona para ele para que haja apenas uma URL canônica por página em inglês. Um globo no menu superior permite alternar, e sua escolha persiste entre as páginas.
O server-side rendering faz o trabalho pesado para o SEO. Cada página agora é enviada com um atributo lang correto, um conjunto completo de hreflang, metadados Open Graph específicos de localidade e um <title> e <meta description> localizados. O sitemap expõe cada URL em todas as localidades. Os mecanismos de busca que preferem uma localidade em detrimento de outra (o Baidu quer chinês, a edição polonesa de um mecanismo de busca quer polonês) agora obtêm a página correta no primeiro rastreamento.
Os plurais ICU funcionam como esperado. "1 API key" permanece no singular, "2 API keys" vai para o plural, e a regra muda por idioma. O polonês tem três formas de plural, o inglês tem duas, o chinês tem uma. O resolvedor de runtime usa Intl.PluralRules, uma API nativa do navegador, de modo que nada extra é enviado para o seu bundle.
E se você lê em inglês, nada muda visivelmente. Suas URLs permanecem onde estavam.
A UI do Playground está localizada
Aproximadamente 80 strings na ferramenta Playground (rótulos, dicas, placeholders, tooltips) agora seguem a localidade que você selecionou. O conteúdo técnico permanece em inglês de propósito: nomes de métodos HTTP, exemplos de código, chaves JSON, nomes de headers, códigos de status e os valores que você colaria em uma request são lidos da mesma forma em todas as localidades. A UI ao redor deles fala o seu idioma; a transmissão permanece em inglês.
Essa separação é importante. Qualquer pessoa depurando uma request em uma equipe que não compartilha o mesmo idioma nativo ainda pode copiar o corpo da request e compará-lo com a documentação sem desvios de tradução.
Sitemap renderiza como uma tabela
Acesse https://foura.ai/sitemap.xml em uma aba do navegador e você verá uma tabela estilizada no tema escuro do FourA em vez de XML bruto. Adicionamos uma folha de estilo XSLT que lida tanto com sitemaps individuais quanto com o índice de sitemaps.
O motivo pelo qual precisamos disso: os navegadores pararam de renderizar sitemaps localizados como sua árvore estilizada integrada assim que as entradas de localidade alternativa <xhtml:link> aparecem. A escolha era enviar um sitemap sem alternativas (e perder o sinal de SEO que vincula as localidades) ou renderizar nossa própria estilização. Então escolhemos a segunda opção. Os crawlers ignoram a folha de estilo e analisam o XML como antes, então nada muda para eles.
Um sitemap é uma página real em um site real. Ele deve se parecer com uma.
Por Trás dos Panos
As traduções vêm de uma pipeline automatizada. Nós apenas fazemos o commit das strings de origem em inglês; no merge para a main, a pipeline gera todas as outras localidades e faz o commit do resultado. Uma edição de texto ocorre em um único lugar e se propaga por seis idiomas.
Uma correção de bug que vale a pena destacar. O primeiro deploy localizado enviou brevemente placeholders de tradução brutos para a produção (você veria home.h1a onde o título deveria estar) porque a etapa de build não continha o diretório de localidades. Corrigimos o problema e fizemos o build ler o diretório de localidades antes de gerar o bundle, para que isso não ocorra novamente.
Um site disponível em seis idiomas é, estruturalmente, seis sites diferentes. Mecanismos de busca, leitores de tela e um cliente em Varsóvia que pesquisa no Google em polonês se beneficiam quando a localidade correta chega à URL correta com os metadados corretos. A transmissão permanece a mesma; a superfície encontra cada leitor onde ele estiver.