;After installing the extension, adjust it to your needs by clicking its icon in the extensions menu to access the options page. This is because features other than infinite scroll are disabled by default.
Dopo aver installato l'estensione, adattala alle tue esigenze facendo clic sulla sua icona nel menu delle estensioni per accedere alla pagina delle opzioni. Le funzionalità diverse dallo scorrimento infinito sono disabilitate per impostazione predefinita.

;You can see a list of all the enhancements here: https://gerrit.avm99963.com/plugins/gitiles/infinitegforums/+/HEAD/docs/features.md
Puoi vedere un elenco delle funzioni qui: https://gerrit.avm99963.com/plugins/gitiles/infinitegforums/+/HEAD/docs/features.md

;New additions in future updates will be disabled by default, and can be manually enabled in the options page. Join https://groups.google.com/g/twpowertools-discuss to receive updates about new functionality.
Le nuove aggiunte negli aggiornamenti futuri saranno disabilitate per impostazione predefinita e possono essere abilitate manualmente nella pagina delle opzioni. Unisciti a https://groups.google.com/g/twpowertools-discuss per ricevere aggiornamenti sulle nuove funzionalità.

;The source code is available here: https://gerrit.avm99963.com/plugins/gitiles/infinitegforums. Contributions are welcome!
Il codice sorgente è disponibile qui: https://gerrit.avm99963.com/plugins/gitiles/infinitegforums. Dei contributi sono i benvenuti!

;Help translate the extension to your native language! Visit https://avm99963-pontoon.herokuapp.com/projects/tw-power-tools/
Aiutaci a tradurre l'estensione nella tua lingua madre! Visita: https://avm99963-pontoon.herokuapp.com/projects/tw-power-tools/
