Helpers

useLocaleSelector

Referencia de API del hook useLocaleSelector

Descripción general

Este hook devuelve el locale actual, la lista de locales, el hook useSetLocale y una función para obtener las propiedades del locale. Está pensado para facilitar su uso al crear tu propio componente de selector de idioma.

Si no quieres implementar el tuyo propio, puedes usar el componente <LocaleSelector>.

Referencias

Devuelve

Un objeto que contiene el locale actual, la lista de locales, el hook useSetLocale y una función para obtener las propiedades del locale.


Ejemplos

<LocaleSelector>

Este es el ejemplo de implementación del componente <LocaleSelector>.

export default function LocaleSelector({
  locales: _locales,
  ...props
}: {
  locales?: string[];
  [key: string]: any;
}): React.JSX.Element | null {
  // Obtener las propiedades del selector de idioma
  const { locale, locales, setLocale, getLocaleProperties } = useLocaleSelector(
    _locales ? _locales : undefined
  );

  // Obtener el nombre para mostrar
  const getDisplayName = (locale: string) => {
    return capitalizeLanguageName(
      getLocaleProperties(locale).nativeNameWithRegionCode
    );
  };

  // Si no se devuelven locales, no renderizar nada o manejarlo de forma adecuada
  if (!locales || locales.length === 0 || !setLocale) {
    return null;
  }

  return (
    <select
      {...props}
      // Usar una cadena vacía como contenido de respaldo predeterminado si currentLocale no está definido
      value={locale || ''}
      onChange={(e) => setLocale(e.target.value)}
    >
      {/* Contenido de respaldo opcional cuando no se ha establecido ningún locale */}
      {!locale && <option value='' />}

      {locales.map((locale) => (
        <option key={locale} value={locale} suppressHydrationWarning>
          {getDisplayName(locale)}
        </option>
      ))}
    </select>
  );
}

Notas

  • Este hook funciona únicamente en el lado del cliente.
  • Más información sobre los códigos de configuración regional aquí.

Próximos pasos

¿Qué te parece esta guía?