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
Maintainers
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-translateDé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 --webpackLe script dev du site de référence utilise déjà next dev --webpack.
Licence
MIT
