Cultura y enrutamiento de URLs
En un portal multilingüe, donde el idioma activo está en la URL — y cómo se comporta el cambio de idioma — se puede configurar con una sola opción, UrlCultureStrategy. Regula toda la pila de forma consistente: el enrutamiento de solicitudes del servidor, las etiquetas base href y SEO del documento Blazor, y tanto <LanguageDropdown /> Blazor como React coinciden en dónde pertenece el lenguaje. Los portales monolingües no se ven afectados: no hay nada que negociar, así que cada estrategia se comporta de forma idéntica.
Cómo aparece el idioma en la URL
Hay tres estrategias disponibles. El predeterminado conserva el comportamiento que se envió antes de que existiera la opción, por lo que los portales existentes no necesitan cambios.
PathPrefix (por defecto)
El lenguaje predeterminado se sirve en URLs desnudas y en todos los demás idiomas bajo un /{culture} prefijo de ruta:
/contacts— el idioma por defecto, sin prefijo./fr/contacts— cualquier lengua no predeterminada, bajo su prefijo de cultura.- Una URL prefijada en el idioma predeterminado (
/en/contacts) redirige permanentemente al formulario básico, y un visitante primerizo cuyo navegadorAccept-Languagecoincide con un idioma no predeterminado compatible es redirigido a la URL prefijada de ese idioma — de modo que cada página tiene una dirección canónica y rastreable por idioma.
PathPrefixAll
Cada lenguaje tiene prefijo, incluido el predeterminado — /en/contacts, /fr/contacts — para una única forma de URL simétrica sin prefijo especial y sin prefijo. Una URL de página sin usar redirige al prefijo del idioma resuelto (tomado de la cookie de cultura o Accept-Language, volviendo al idioma por defecto).
CookieOnly
El idioma nunca aparece en la URL. Se resuelve a partir de la .AspNetCore.Culture cookie (volviendo a Accept-Language) y se aplica en su lugar — sin redirecciones, sin reescritura de rutas. Ideal para portales tipo SPA que cambian de idioma sin necesidad de navegar.
Elegir una estrategia
Establece la estrategia para LocalizationOptions configurar la localización en tu host. Por defecto se asigna PathPrefixa , así que esto es opt-in:
builder.Services
.Configure<LocalizationOptions>(options =>
{
// El predeterminado es PathPrefix; PathPrefixAll prefija todos los idiomas, CookieOnly lo mantiene fuera de la URL
options.UrlCultureStrategy = UrlCultureStrategy.PathPrefixAll;
});
Ese es el único cableado necesario: la misma opción controla los hosts Blazor y React (ambos configurados LocalizationOptions de forma idéntica), y todo lo que hay a continuación se deduce de ella.
Href base, canónico y hreflang — manejados por ti
Sea cual sea la estrategia que elijas, el framework mantiene sincronizada la marca de identidad de URL de cada página, por lo que los motores de búsqueda y el circuito Blazor siempre coinciden en dónde se encuentra un lenguaje:
- Base href — el documento
<base href>rastrea la base de ruta de la solicitud, por lo que la página prerenderizada y el circuito Blazor Server resuelven la misma raíz de aplicación bajo cualquier prefijo. - URL canónica — cada página anuncia su dirección canónica en el idioma activo, con prefijo o sin prefijo según la estrategia.
- hreflang alterna — un enlace alternativo por idioma soportado más
x-default, cada uno apuntando a la URL de ese idioma para la página actual.
Dos componentes del framework emiten este marcado — <CultureBaseHref /> para la base href y <CultureAlternateLinks /> para las etiquetas de localidad canónica, hreflang y Open Graph. Ambos están presentes PowerPortalsPro.Web.Blazor.Components y son conscientes de la estrategia desde el principio; la demo los integra en su App.razor componente principal de SEO:
@using PowerPortalsPro.Web.Blazor.Components
<head>
<CultureBaseHref />
...
</head>
<CultureAlternateLinks />
Cambio de lenguaje
En <LanguageDropdown /> ambas pilas lista los idiomas configurados del portal y cambia el idioma activo cuando el usuario lo elige. Sigue automáticamente la estrategia configurada:
// Mismo componente, mismo comportamiento, en la pila React
import { LanguageDropdown } from '@powerportalspro/react-fluent';
<LanguageDropdown /><LanguageDropdown />Bajo una estrategia de prefijo, el switch navega hasta la URL del idioma elegido, de modo que la página se recarga en su dirección canónica, correctamente prefijada. Debajo CookieOnly cambia de lugar mediante la galleta de cultivo, sin navegación. De cualquier forma, la cookie está configurada, así que cualquier otra superficie del mismo origen permanece sincronizada.
Leyendo la estrategia en una interfaz personalizada
¿Estás construyendo tu propio switcher o enlaces que conozcan el idioma? Lee la estrategia activa directamente — lado servidor desde LocalizationOptions Blazor, o desde el manifiesto de localización en React, donde buildLocalePath() se convierte en la URL de un idioma para la página actual:
// El cliente React lee la estrategia desde el manifiesto de localización;
// buildLocalePath() lo convierte en la URL de destino para un idioma dado.
import { useUrlCultureStrategy, useDefaultLocale, buildLocalePath } from '@powerportalspro/react';
const strategy = useUrlCultureStrategy();
const defaultLocale = useDefaultLocale();@inject IOptions<LocalizationOptions> Options
@code {
// La estrategia configurada, en cualquier sitio donde puedas inyectar opciones
private UrlCultureStrategy Strategy => Options.Value.UrlCultureStrategy;
}Nota
Todo lo anterior solo entra en vigor cuando un portal soporta más de una cultura de interfaz. Un sitio de una sola cultura sirve cada página en su URL sin importancia, independientemente de la estrategia, así que no hay redirección ni prefijo que pagar por idiomas que no se distribuyen.
