npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

fgfprod-google-translate

v0.1.1

Published

Widget Google Translate (Next.js / React) : sélecteur de langue, bandeau sticky, rescan du contenu dynamique

Downloads

249

Readme

fgfprod-google-translate

Widget Google Translate pour applications Next.js (App Router) et React : sélecteur de langue personnalisable (Radix Dropdown), gestion du bandeau sticky via la variable CSS --google-translate-banner-height, et helpers pour re-scanner le DOM après contenu injecté côté client (pagination, filtres, menus en portail).

Dépôt : github.com/fgfprod/fgfprod-google-translate-nextjs

Installation

npm install fgfprod-google-translate

Dépendances peer (à avoir dans le projet consommateur) :

  • react, react-dom (18+ ou 19+)
  • radix-ui (paquet unifié Radix Primitives, v1.4+)

Le package dépend aussi de clsx et tailwind-merge (installés avec le paquet).

Feuille de styles

Import global (par ex. dans app/layout.tsx) avant votre globals.css si vous surchargez des tokens :

import "fgfprod-google-translate/styles.css";

Cette feuille définit notamment :

  • :root { --google-translate-banner-height: 0px; } (mise à jour par le widget)
  • styles de l’indicateur « Traduction… » du rescan (.gt-rescan-indicator__spinner)

Votre layout peut combiner le décalage du header avec cette variable, par exemple :

style={{
  "--site-header-sticky-offset": `calc(3rem + var(--google-translate-banner-height, 0px))`,
} as React.CSSProperties}

Widget : langue de page et langues affichées

pageLanguage est le code ISO attendu par Google (ex. fr, en).
Le tableau languages doit lister toutes les entrées du menu, y compris la langue d’origine :

import {
  GoogleTranslateWidget,
  type GoogleTranslateLanguage,
} from "fgfprod-google-translate";

const languages: GoogleTranslateLanguage[] = [
  { code: "fr", shortLabel: "fr", ariaLabel: "Français (version originale)" },
  { code: "en", shortLabel: "en", ariaLabel: "English" },
  // …
];

export function HeaderBar() {
  return (
    <header className="sticky top-[var(--google-translate-banner-height,0px)]">
      {/* … */}
      <GoogleTranslateWidget pageLanguage="fr" languages={languages} />
    </header>
  );
}

Personnalisation des classes (optionnel)

<GoogleTranslateWidget
  pageLanguage="fr"
  languages={languages}
  classNames={{
    trigger: "…",
    menuContent: "…",
    menuItem: "…",
  }}
/>

Le widget repose sur les utilitaires Tailwind habituels (bg-popover, text-white, etc.) : votre thème Tailwind doit exposer ces tokens (comme avec shadcn).

Alignement du header sous le bandeau Google

Le bandeau Google Translate injecte une iframe en haut de page. Le widget mesure sa hauteur et met à jour --google-translate-banner-height. Utilisez cette variable sur un header sticky :

top: var(--google-translate-banner-height, 0px);

Rescan après contenu dynamique

Lorsqu’une traduction est active (cookie googtrans), le moteur Google ne re-traduit pas toujours le HTML injecté après coup. Appelez :

import {
  requestGoogleTranslateRescan,
  requestGoogleTranslateRescanStaggered,
  isGoogleTranslationActive,
} from "fgfprod-google-translate";

// Après pagination, ouverture d’un panneau, etc. (composant client)
if (isGoogleTranslationActive()) {
  requestGoogleTranslateRescan();
}
  • requestGoogleTranslateRescan : une salve de « nudges » (reflow / resize) + secours combo.
  • requestGoogleTranslateRescanStaggered : délais plus espacés si le DOM met du temps à se stabiliser.

Les deux fonctions acceptent un paramètre optionnel pageLanguageOverride si la langue de page ne peut pas être lue depuis le widget (cas rare).

Le widget enregistre la langue de page via setGoogleTranslatePageLanguage au montage ; les helpers utilisent cette valeur pour savoir si une traduction est active.

Publication npm

npm run build
npm publish --access public

(Compte npm et nom de paquet fgfprod-google-translate requis.)

Développement local avec file:

Dans le package.json du consommateur :

"fgfprod-google-translate": "file:../fgfprod-google-translate-nextjs"

Sous Next.js 16, le build par défaut peut utiliser Turbopack, qui ne résout pas toujours les paquets file:. En cas d’erreur « Module not found », lancez :

next build --webpack

Le script dev du site de référence utilise déjà next dev --webpack.

Licence

MIT