Cultura & Roteamento de URL
Em um portal multilíngue, onde a linguagem ativa está na URL — e como a troca de idioma se comporta — é configurável com uma única opção, UrlCultureStrategy. Ele governa toda a stack de forma consistente: o roteamento de requisições do servidor, as tags base href e SEO do documento Blazor, e <LanguageDropdown /> tanto o Blazor quanto o React concordam sobre onde a linguagem pertence. Portais de um único idioma não são afetados — não há nada a negociar, então toda estratégia se comporta de forma idêntica.
Como a linguagem aparece na URL
Três estratégias estão disponíveis. O padrão preserva o comportamento que foi enviado antes da opção existir, então portais existentes não precisam de alterações.
PathPrefix (padrão)
A linguagem padrão é servida em URLs simples e em todas as outras linguagens sob um /{culture} prefixo de caminho:
/contacts— a língua padrão, sem prefixo./fr/contacts— qualquer língua não padrão, sob seu prefixo cultural.- Uma URL prefixada no idioma padrão (
/en/contacts) redireciona permanentemente para a forma nua, e um visitante pela primeira vez cujo navegadorAccept-Languagecorresponde a uma linguagem não padrão suportada é redirecionado para a URL prefixada desse idioma — assim, cada página tem um endereço canônico e rastreável por idioma.
PathPrefixAll
Cada linguagem tem prefixo, incluindo o padrão — /en/contacts, /fr/contacts — para uma única forma de URL simétrica, sem padrão especial sem prefixo. Uma URL de página vazia redireciona para o prefixo da linguagem resolvida (retirado do cookie de cultura ou Accept-Language, voltando ao idioma padrão).
CookieOnly
O idioma nunca aparece na URL. É resolvido a partir do .AspNetCore.Culture cookie (voltando para Accept-Language) e aplicado no local — sem redirecionamentos, sem reescrita de caminhos. Ideal para portais no estilo SPA que mudam de idioma sem precisar navegar.
Escolhendo uma estratégia
Defina a estratégia de LocalizationOptions onde você configura a localização no seu host. Ele define por padrão , PathPrefixentão este é o opt-in:
builder.Services
.Configure<LocalizationOptions>(options =>
{
// O padrão é PathPrefix; PathPrefixAll prefixa todos os idiomas, CookieOnly mantém isso fora da URL
options.UrlCultureStrategy = UrlCultureStrategy.PathPrefixAll;
});
Essa é a única fiação necessária — a mesma opção alimenta os hosts Blazor e React (ambos configurados LocalizationOptions da mesma forma), e tudo abaixo decorre disso.
Base href, canonical & hreflang — cuidando para você
Qualquer que seja a estratégia escolhida, o framework mantém a marcação de identidade de URL de cada página sincronizada com ela, então os mecanismos de busca e o circuito Blazor sempre concordam sobre onde uma linguagem está localizada:
- Base href — o documento
<base href>rastreia a base do caminho da solicitação, então a página pré-renderizada e o circuito do Blazor Server resolvem a mesma raiz da aplicação sob qualquer prefixo. - URL canônica — cada página anuncia seu endereço canônico na língua ativa, com prefixo ou sem prefixo conforme a estratégia.
- hreflang alterna — um link alternativo por idioma suportado mais
x-default, cada um apontando para a URL daquele idioma para a página atual.
Dois componentes do framework emitem essa marcação — <CultureBaseHref /> para o href base e <CultureAlternateLinks /> para as tags de localização canônica, hreflang e Open Graph. Ambos vivem e PowerPortalsPro.Web.Blazor.Components são conscientes da estratégia desde o início; a demonstração os integra em seu App.razor componente principal de SEO:
@using PowerPortalsPro.Web.Blazor.Components
<head>
<CultureBaseHref />
...
</head>
<CultureAlternateLinks />
Troca de linguagem
O <LanguageDropdown /> on both stacks lista as linguagens configuradas do portal e troca a ativa quando o usuário escolhe. Ele segue automaticamente a estratégia configurada:
// Mesmo componente, mesmo comportamento, na pilha React
import { LanguageDropdown } from '@powerportalspro/react-fluent';
<LanguageDropdown /><LanguageDropdown />Sob uma estratégia de prefixo, o switch navega até a URL do idioma escolhido, de modo que a página recarrega em seu endereço canônico, com prefixo correto. Por baixo CookieOnly , ele muda de posição via o cookie de cultura, sem navegação. De qualquer forma, o cookie está definido, então qualquer outra superfície da mesma origem permanece sincronizada.
Lendo a estratégia na interface personalizada
Construindo seu próprio switcher ou links que conheçam a língua? Leia a estratégia ativa diretamente — do lado do servidor em LocalizationOptions Blazor, ou do manifesto de localização no React, onde buildLocalePath() ela se transforma na URL de um idioma para a página atual:
// O cliente React lê a estratégia do manifesto de localização;
// buildLocalePath() o transforma na URL de destino para uma determinada linguagem.
import { useUrlCultureStrategy, useDefaultLocale, buildLocalePath } from '@powerportalspro/react';
const strategy = useUrlCultureStrategy();
const defaultLocale = useDefaultLocale();@inject IOptions<LocalizationOptions> Options
@code {
// A estratégia configurada, em qualquer lugar onde você possa injetar opções
private UrlCultureStrategy Strategy => Options.Value.UrlCultureStrategy;
}Nota
Tudo acima só entra em vigor quando um portal suporta mais de uma cultura de interface. Um site de cultura única atende todas as páginas em sua URL vazia, independentemente da estratégia, então não há redirecionamento ou sobrecarga de prefixo para pagar por idiomas que você não exporta.
