Registro delle modifiche

Cosa è stato rilasciato e cosa verrà dopo.

Prossimamente Roadmap

  • Screenshot in revisione

    Vedi dove appare una stringa nell'app mentre ne rivedi la traduzione.

  1. v0.33.4

    11 novembre 2026

    Astro: testo nelle costanti frontmatter e icone omesse dal testo del pulsante

    • Astro: il testo mantenuto nelle costanti frontmatter, come i metadati di una pagina o un elenco di schede (const items = [{ title, description }]), diventa t() dove è scritto. Vengono inclusi elenchi interni ad altri elenchi e template literal con valori. Una costante che il frontmatter legge per il suo testo viene lasciata così com'è
    • Un'icona prima o dopo il testo di un pulsante, come un chevron <svg>, rimane fuori dal messaggio, in modo che il testo venga tradotto da solo invece che in un <Trans> con l'icona all'interno
  2. v0.33.3

    11 novembre 2026

    Un server MCP ospitato, con accesso OAuth

    • Un server MCP ospitato su https://uselocalize.dev/api/mcp, per agent che non possono eseguire npx. Ha gli stessi strumenti. Ogni chiamata trasporta i file di cui lo strumento ha bisogno e restituisce i file da scrivere; vengono conservati in una cartella temporanea per quella chiamata e cancellati quando risponde
    • I client che supportano l'accesso MCP si connettono con OAuth: approvi la connessione su localize.dev e scegli l'area di lavoro. La connessione appare sotto Chiavi API e l'eliminazione della chiave la disconnette. Altri inviano una chiave API come token bearer o in un header x-api-key
    • La pagina MCP ha la configurazione per Lovable, Bolt e v0, e il server è anche nel Registro MCP come server remoto
    • Il pacchetto esporta handleRemoteMessage e REMOTE_TOOLS, gli strumenti del server ospitato, per eseguire lo stesso server altrove
  3. v0.33.2

    10 novembre 2026

    Plugin per Claude Code e Cursor, e la presenza nel Registro MCP

    • Un plugin di Claude Code aggiunge il server MCP e un'abilità che dice a Claude quando localizzare. Installalo con claude plugin marketplace add ufortstephen/localize-dev, quindi claude plugin install localize-dev@uselocalize
    • Lo stesso plugin funziona in Cursor, con una regola per le app che hanno un localize.config.json
    • Il server MCP è elencato nel Registro MCP come io.github.ufortstephen/localize-dev, in modo che i client che leggono il registro possano trovarlo e installarlo
  4. v0.33.1

    10 novembre 2026

    Progetti Create React App, Compose Multiplatform e XcodeGen

    • I progetti React, React Native e Solid che mantengono JSX nei file .js, come fa Create React App, fanno scansionare anche quei file. In precedenza, venivano scansionati solo i file .tsx e .jsx, a meno che include non elencasse .js
    • check segnala le traduzioni mancanti in String Catalogs, strings.xml e file ARB quando il progetto non ha un file sorgente JSON. Prima lo faceva solo per i cataloghi .po di Django e diceva che tutto il resto era tradotto
    • I progetti che generano il loro progetto Xcode con XcodeGen (project.yml) o Tuist (Project.swift) vengono rilevati come app iOS
    • Le stringhe Compose Multiplatform in composeResources/values/ vengono trovate e tradotte nello stesso modo di quelle di Android res/values/
    • I file nelle cartelle __tests__ e __mocks__ vengono ignorati per impostazione predefinita, come i file .test e .spec
  5. v0.33.0

    10 novembre 2026

    localize-dev seo, Remix e lingue caricate sul server

    • localize-dev seo <url> controlla cosa vedono i motori di ricerca di ogni lingua su un sito live o una build locale: la sitemap, i link hreflang che puntano indietro e includono x-default, <html lang>, l'indirizzo canonico e og:locale
    • Le app Remix 2 con v3_routeConfig ottengono un indirizzo per lingua, nello stesso modo delle app React Router.
    • Le app React Router e Remix con più di tre lingue caricano ogni lingua nel loader della route, quindi il server renderizza /fr/about in francese anche quando il francese non è nel bundle. Gli indirizzi hreflang completi provengono dalla richiesta, quindi siteUrl non è necessario.
    • Senza siteUrl, l'indirizzo del sito proviene da un file CNAME o dalla homepage in package.json, e su Netlify, Render e Railway dall'indirizzo che l'host fornisce alla build, come già accadeva su Vercel.
    • Le pagine Qwik City ottengono <html lang> e dir per la lingua del loro indirizzo, impostati in entry.ssr.tsx.
    • Quando le lingue vengono caricate su richiesta, il menu delle lingue le elenca tutte, non solo quelle caricate finora.
    • check non segnala più nomi di classe o chiavi all'interno di esempi di codice scritti come stringhe, elementi centrati (left-1/2 con -translate-x-1/2) come problemi da destra a sinistra, o font i cui sottoinsiemi coprono lo script.
  6. v0.32.1

    10 novembre 2026

    Django, ERB e Blade: tag di template tra attributi

    • Un tag di modello tra gli attributi di un tag, come un blocco if che aggiunge aria-current, non fa più sì che il controllo segnali il resto del tag come testo. Un titolo o un'etichetta aria-label all'interno del blocco viene trovato e tradotto
    • Un collegamento si unisce al messaggio di una frase solo quando le parole si trovano proprio accanto ad esso. In precedenza, un separatore come · o testo altrove nel blocco trasformava un collegamento solitario in un messaggio
    • Le opzioni senza un attributo di valore vengono lasciate sole, poiché il loro testo è ciò che il modulo invia
    • controlla i report di voci vuote e imprecise nei cataloghi .po di un progetto Django quando non ha un catalogo inglese, che è come la maggior parte dei progetti Django sono configurati. Prima, diceva che tutto era tradotto
    • doNotTranslate in localize.config.json elenca nomi e abbreviazioni da mantenere così come sono scritti, come Metron o TPB. Il testo composto solo da essi, numeri e simboli non viene estratto né segnalato dal controllo
  7. v0.32.0

    10 novembre 2026

    Un indirizzo per lingua in React Router

    • Le app React Router (modalità framework) ottengono un indirizzo per lingua (/es/about). routes.ts passa le sue route tramite withLanguageRoutes, che aggiunge una copia di ciascuna sotto ogni lingua, quindi nessun file di route cambia
    • Il server renderizza ogni pagina nella lingua del suo indirizzo, con link hreflang, un indirizzo canonico e og:locale. Il menu della lingua apre la stessa pagina nella nuova lingua e i link senza lingua mantengono la lingua della pagina
    • Una route sitemap.xml creata dalle route dell'app, in modo che le nuove pagine vengano elencate senza esecuzione, e una route robots.txt, quando l'app non ne ha nessuna
    • Il modulo i18n va in app/ e viene importato da app/root.tsx. In precedenza, la configurazione non riusciva a trovare il file di ingresso di un'app React Router
    • il controllo non si interrompe più con un errore su un elenco di classi che ha una variante senza una classe dopo, come cn(active && 'hover:', 'ml-2')
  8. v0.31.0

    10 novembre 2026

    SvelteKit 3, Qwik City e ogni lingua sui siti statici SvelteKit

    • SvelteKit 3 funziona: non ha $lib, quindi i file generati importano da #lib quando l'app lo dichiara. È anche configurato un layout principale con props tipizzati, come scritto da npx sv create.
    • In SvelteKit, i link alle pagine dell'app mantengono la lingua della pagina su cui si trovano, quindi /es/about linka a /es/ invece che a /.
    • Le build statiche di SvelteKit (adapter-static) scrivono le pagine di ogni lingua: la build viene eseguita all'indirizzo in siteUrl, quindi le trova tramite i link hreflang.
    • Le app Qwik City ottengono un componente LanguageHead in root.tsx con link hreflang e og:locale, una route sitemap.xml e una route robots.txt quando l'app non ne ha nessuna.
    • La sitemap di Astro utilizza gli stessi indirizzi delle pagine (/about/ in una build statica), quindi corrisponde ai loro link canonici.
  9. v0.30.0

    10 novembre 2026

    Una sitemap per siti statici

    • I siti HTML statici con htmlPages e siteUrl ottengono un sitemap.xml che elenca ogni pagina, quelle tradotte in ogni lingua con link hreflang tra di esse. Viene riscritto ad ogni esecuzione, ma un sitemap che il sito ha già viene mantenuto così com'è
    • Un robots.txt che punta alla sitemap, quando il sito non ne ha
    • Due formulazioni sul sito tedesco, da una revisione delle sue traduzioni
  10. v0.29.0

    10 novembre 2026

    Ogni lingua nei risultati di ricerca, per Astro e SvelteKit

    • Le app SvelteKit ottengono un indirizzo per lingua (/es/about) tramite un hook di reindirizzamento, quindi le route non necessitano di una cartella [lang]. Ogni pagina ottiene link hreflang, un indirizzo canonico e og:locale, e il menu della lingua va alla stessa pagina nella nuova lingua. Ciò richiede SvelteKit 2.3 o versioni successive
    • I layout di Astro ottengono un componente I18nHead nella loro <head>, con link hreflang, un indirizzo canonico e og:locale per la pagina
    • Entrambi ottengono un sitemap.xml che elenca ogni pagina in ogni lingua. Viene creato dalla cartella delle pagine o dei percorsi, in modo che le nuove pagine vengano visualizzate senza eseguire localize di nuovo. Viene aggiunto un robots.txt quando l'app non ne ha nessuno
  11. v0.28.0

    10 novembre 2026

    Ogni lingua nei risultati di ricerca

    • Le app Next.js App Router ottengono un indirizzo canonico e og:locale per l'URL di ogni lingua, aggiunti tramite generateMetadata nel layout principale. I metadati propri di un layout vengono mantenuti e i loro valori prevalgono
    • Un sitemap.ts che elenca ogni pagina con un indirizzo fisso in ogni lingua, con alternative hreflang, e un robots.ts che punta ad esso. Vengono scritti solo quando l'app non ha nessuno dei due e sono tuoi da modificare
    • I motori di ricerca necessitano di indirizzi completi: provengono da siteUrl in localize.config.json, o da VERCEL_PROJECT_PRODUCTION_URL su Vercel
    • Le app configurate in precedenza ottengono tutto questo alla loro prossima esecuzione
  12. v0.27.0

    9 novembre 2026

    Localizza mentre scrivi

    • init --agent imposta gli agenti di codifica: il server MCP per Claude Code e Cursor, un hook post-modifica che indica a Claude Code quale testo ha lasciato non tradotto nel file appena modificato, e istruzioni in AGENTS.md e una regola Cursor.
    • check e run accettano --files, --changed e --staged, quindi controllare i file che hai toccato richiede circa un secondo; init --agent --pre-commit aggiunge quel controllo all'hook git.
    • Il server MCP chiede agli agenti di localizzare i file che modificano e il suo strumento di controllo accetta i percorsi.
    • La pagina di utilizzo mostra dove sono state tradotte le stringhe: durante la scrittura, in CI o dalla CLI.
  13. v0.26.6

    9 novembre 2026

    Le correzioni fatte nella pull request restano

    • Quando il branch di base va avanti e la pull request viene ricostruita, le modifiche fatte al suo interno vengono mantenute. I file di lingua vengono uniti chiave per chiave, e una traduzione cambiata da entrambe le parti mantiene la versione della persona
    • Un file che anche la nuova proposta ha cambiato prende la versione della proposta, e l'esecuzione indica quei file così che la modifica possa essere rifatta
    • Il sito scrive numeri e prezzi come fa ogni lingua: 10.000 in tedesco, 10 000 in francese
  14. v0.26.5

    4 novembre 2026

    Da destra a sinistra dalla prima visualizzazione nelle app Next.js

    • Le app Next.js ricevono <html dir> dalla lingua, così arabo, ebraico e persiano sono impaginati da destra a sinistra fin dal primo rendering; le app configurate prima lo ricevono alla prossima esecuzione
    • Una lingua il cui codice è anche una parola subito dopo un elenco (it, no) viene comunque aggiunta, e la parola resta com'è
  15. v0.26.4

    4 novembre 2026

    Lingue il cui codice è anche una parola

    • Una nuova lingua entra in ogni elenco generato che non la contiene, anche quando il suo codice è una parola altrove nel file (it per l'italiano, no per il norvegese)
    • Il sito: l'arabo si legge da destra a sinistra fin dal primo caricamento, e l'intestazione e i suoi menu seguono la direzione di lettura
  16. v0.26.3

    4 novembre 2026

    Nuove lingue raggiungono il menu delle lingue dell'app

    • Una lingua aggiunta dopo la configurazione si unisce alle liste generate da localize.dev: il menu delle lingue, il routing, le tabelle di importazione e switcher, con il proprio nome, bandiera e direzione
    • Astro e Qwik ottengono la copia di ogni pagina per la nuova lingua, e Django il suo file .po
  17. v0.26.2

    4 novembre 2026

    Scegli le lingue quando esegui

    • Esegui ora chiede in quali lingue tradurre: una che aggiungi si unisce al progetto, viene tradotta in quella esecuzione e aggiunta a localize.config.json nella sua pull request
    • Ogni esecuzione dell'azione si traduce nelle lingue del progetto sulla dashboard, quindi una lingua aggiunta lì non richiede più modifiche al flusso di lavoro
  18. v0.26.1

    3 novembre 2026

    Lingue di destinazione conteggiate nell'account

    • Il conteggio delle lingue di destinazione di un piano in tutti i suoi spazi di lavoro: qualsiasi lingua tradotta negli ultimi 30 giorni o impostata su un progetto. Un'esecuzione che supererebbe il limite si interrompe prima di scrivere qualsiasi cosa e indica le lingue in uso
    • localize-dev whoami mostra quante delle lingue di destinazione del piano sono in uso e quali
  19. v0.26.0

    3 novembre 2026

    Un server MCP per agenti di codifica e traduzioni riviste sulla pull request

    • localize-dev mcp: un server MCP per agenti di codifica come Claude Code, Cursor, Codex e GitHub Copilot, con gli strumenti check, localize, translate, add_language e config
    • Lo strumento di configurazione include il glossario del progetto quando viene impostata una chiave API, in modo che l'agente mantenga nomi e termini come deciso dal team
    • Le pull request ricevono un commento con una tabella delle nuove traduzioni, pubblicato dall'App GitHub, o dall'Action quando il repository non utilizza l'App
    • Le traduzioni modificate nella pull request prima della sua unione vengono apprese per le esecuzioni successive, in ogni formato di locale e per i plurali, e contrassegnate come Modificate su GitHub nella revisione
  20. v0.25.0

    3 novembre 2026

    Selettori di lingua per ogni framework

    • Setup aggiunge un menu lingua e useLanguage() alle app Vue, Nuxt, Svelte, Solid, Qwik, Angular, Astro, Lit ed Ember, accanto al modulo i18n che genera
    • Rails, Django e Laravel ottengono un menu lingua per i loro template che ricorda la scelta; Flutter, iOS, Android e React Native ne ottengono uno nativo
    • localize-dev/switcher: il menu come elemento personalizzato, stilizzato con le stesse variabili CSS di quello React
    • La configurazione automatica non scarica più il repository, quindi termina su grandi monorepo
  21. v0.24.6

    3 novembre 2026

    Configurazione automatica e l'Action, per app in un monorepo

    • Setup trova automaticamente l'app in un monorepo (la cartella con localize.config.json) ed esegue il workflow lì con working_directory
    • Alla root di un monorepo, l'Action nomina la working_directory da impostare per ogni app, invece dei comandi cd
  22. v0.24.5

    3 novembre 2026

    Pull request aperte dall'app GitHub localize.dev e file ignorati lasciati indisturbati

    • L'App GitHub localize.dev apre le pull request dell'Action sui repository connessi: nessuna impostazione workflow-permissions da spuntare, e le verifiche delle pull request vengono eseguite
    • La copia in un modulo che la configurazione ignora rimane com'è scritta, anche quando un componente la legge
  23. v0.24.4

    3 novembre 2026

    Un'app in un monorepo: la working_directory dell'Action

    • Monorepo: working_directory dell'Action localizza un'app (apps/web) e la sua pull request modifica i file sul posto
    • mode: check in una directory di lavoro annota ogni problema nel suo percorso dalla root del repository, così appare nel diff
  24. v0.24.3

    31 ottobre 2026

    Un pacchetto più facile da controllare: nessun codice valutato, file leggibili e installazioni che non eseguono script

    • Le forme plurali di gettext vengono lette da un piccolo parser della propria grammatica invece di essere valutate come codice
    • Il pacchetto npm non è minificato: ciò che viene pubblicato si legge come il sorgente
    • I compilatori di template sono dipendenze peer opzionali; installati al primo utilizzo senza eseguire script del pacchetto, o per niente con LOCALIZE_DEV_NO_INSTALL=1
  25. v0.24.2

    31 ottobre 2026

    Aggiornamenti che rimangono verdi: vecchie voci di blocco Vue, repository solo file di localizzazione, blocchi monorepo e pull request di traduzione più chiare

    • Aggiornamento: i plurali delle pipe di Vue e Nuxt in un file di blocco creato da 0.23.0 vengono considerati aggiornati, quindi check rimane verde e nessuna pull request riscrive il file di blocco
    • check (CLI e Azione) in un repository con solo file di localizzazione verifica le loro traduzioni invece di fallire per l'assenza della cartella src/
    • Monorepos: la prima esecuzione --workspaces registra i messaggi delle librerie condivise nel file di blocco di ogni app, quindi la seconda esecuzione non cambia nulla
    • Una richiesta di pull che riempie solo le traduzioni è intitolata come tale (compila 3 traduzione(i)) e elenca i messaggi per lingua
    • translate chiede un'altra volta quando un plurale ritorna senza le sue forme, invece di lasciare la lingua per la successiva esecuzione
  26. v0.24.1

    31 ottobre 2026

    Correzioni di Action da CI: Astro, progetti alla radice del repository e siti statici aprono la loro pull request, un'esecuzione non può bloccarsi e i plurali di Vue pipe vengono compilati

    • React: i18next viene configurato anche quando l'esecuzione lo importa per date e numeri, così l'app mostra il testo invece delle chiavi
    • Monorepos: check e prune contano le chiavi utilizzate dalle librerie dello spazio di lavoro di un'app, e prune --workspaces copre ogni app e libreria
    • Azione: i progetti con il codice alla radice del repository aprono la loro pull request (i percorsi non hanno ./), le pagine Astro vengono riscritte (il compilatore WASM è incluso nell'Azione), e un sito statico senza configurazione viene scansionato alla radice, come fa il CLI
    • Azione: una esecuzione si ferma e fallisce dopo timeout_minutes (30 di default) invece di rimanere bloccata, e un file che il parser non riesce a caricare fa fallire l'esecuzione invece di essere saltato
    • Vue: run riempie i plurali delle pipe (solo {count} copia rimasta | …) con tutte le forme necessarie del linguaggio, e run, translate e check concordano su ciò che manca o è obsoleto
  27. v0.24.0

    29 ottobre 2026

    Esecuzioni secondarie che non cambiano nulla, nessuna richiesta senza nuovo testo e un controllo per i flussi di lavoro offline

    • Un secondo avvio rileva solo le nuove copie: gli ordinamenti e le date degli script Vue seguono la lingua dell'app al primo avvio, i messaggi del Catalogo Stringhe %@ non bloccano più un'esecuzione iOS, e le pagine statiche pseudo-localizzate non vengono più riesaminate
    • Nessuna richiesta di traduzione senza qualcosa da tradurre: le stringhe che hanno la loro chiave e tutte le traduzioni vengono saltate, e le esecuzioni offline indicano che creano solo chiavi
    • Il titolo e il sommario della pull request indicano cosa cambia, come date e numeri che ora seguono la lingua dell'app, senza tabelle vuote
    • Verifica e rimuovi il conteggio del titolo e della descrizione della pagina impostati come usati dal modulo i18n generato, in ogni framework
    • Azione: check_only: verifica solo le stringhe hardcoded, per flussi di lavoro che localizzano offline
    • Flutter: n == 0 ? 'Nulla da annaffiare' : '$n piante hanno bisogno d'acqua' diventa un messaggio plurale con =0, e il testo costruito con + viene elencato e fallisce il controllo invece di essere saltato
    • Le traduzioni vengono controllate come le legge la libreria i18n dell'app prima di essere scritte: stessi segnaposto, nessuna parentesi sbagliata, tutte le forme plurali, ICU che le analizza. Quella che fallisce viene richiesta di nuovo, poi esclusa e segnalata
    • Il controllo ignora le chiamate t() nei commenti in tutte le lingue, e i file generati non mostrano più esempi a forma di chiave; i nuovi cataloghi gettext ricevono l'intestazione standard
  28. v0.23.0

    29 ottobre 2026

    Rails, Django e Laravel: frasi con link rimangono integre, e le librerie monorepo si costruiscono con pnpm

    • Rails: un'espressione spostata in t() riceve le parentesi necessarie a Ruby (link_to(book.title, book_path(book.id))), quindi le viste vengono compilate
    • Rails: un messaggio che interpolazione un link o altro markup riceve una chiave _html, quindi il link viene visualizzato invece di essere escapato
    • Un link all'interno di una frase rimane nel messaggio: link_to in Rails, un blocco translate in Django (un {% url %} catturato per primo), {!! __() !!} con valori escapati in Laravel
    • Monorepos: una libreria di componenti dichiara cosa il suo codice riscritto importa (react-i18next) come dipendenze peer e di sviluppo, e i suoi file diventano componenti client quando un'app Next.js li rende
    • Ember: @glimmer/tracking e @ember/test-helpers, necessari a ember-intl senza dichiararli, vengono aggiunti quando un'app manca di essi
  29. v0.22.0

    29 ottobre 2026

    App che si costruiscono dopo la localizzazione: link Svelte mantenuti integri, moduli Angular con il pipe corretto, codice SvelteKit che verifica i tipi

    • I template Svelte e Vue vengono ora analizzati, in modo che un segnaposto ${ … } all'interno di un attributo non venga mai scambiato per un prezzo, e agli attributi URL (href, src, action) non ne venga mai assegnato uno
    • Angular: NgModules e componenti standalone importano il pipe di traduzione fornito da ngx-translate installato (TranslatePipe da versione 16 in poi), e un modulo TranslateModule lasciato da una precedente esecuzione con ngx-translate 18 viene riparato
    • SvelteKit: il codice generato viene controllato per i tipi; le date accettano $locale ?? undefined, I18nT.svelte ha prop di tipo definito, e il layout principale segue la lingua dopo la navigazione senza avvisi
    • package.json mantiene la sua struttura: le nuove dipendenze adottano lo stile delle righe circostanti invece che il file venga riscritto interamente
  30. v0.21.0

    29 ottobre 2026

    Ogni richiesta SvelteKit nella sua lingua, frasi Astro mantenute integre, e numeri di versione come valori

    • SvelteKit renderizza e traduce ogni richiesta nella propria lingua: l'hook la registra su event.locals, i messaggi del server la ricevono e nulla sul server legge la locale condivisa di svelte-i18n
    • Le frasi di Astro attorno a link e testo in grassetto rimangono un unico messaggio, renderizzato con gli elementi propri della pagina
    • I numeri di versione e build nel testo sono valori, Versione {version} (build {build}), quindi una release non lascia ogni traduzione obsoleta
    • check elenca ciò che l'esecuzione non riesce a tradurre una volta, sotto un unico avviso
  31. v0.20.0

    29 ottobre 2026

    Messaggi dal codice, descrizioni delle pagine e messaggi del server tradotti ovunque, e niente saltato senza parola

    • L'esecuzione della copia non traducibile è sempre elencata e fallisce il controllo: il testo di un helper in un modulo semplice, elenchi di frasi ed elementi esterni ai componenti in Solid e Qwik
    • alert, confirm, document.title e toast sono tradotti in Lit, Angular, Ember, React Native (Alert.alert e i suoi pulsanti), Java di Android e gli script propri di un sito statico
    • Le descrizioni delle pagine e i titoli social in <meta> sono tradotti accanto al titolo della pagina in ogni framework, così come useHead e useSeoMeta di Nuxt
    • I messaggi da fail() e error() di SvelteKit e da useActionState di Next sono tradotti
    • Le ricerche Angular tramite computed(), i valori iniziali di @state di Lit e la copia letta per indice (quotes[i].text) sono tradotte
    • il controllo trova testo e stili left/right in css`` di Lit e styled-components
  32. v0.19.0

    29 ottobre 2026

    Intestazioni delle rotte Qwik, costanti passate ad altri componenti, e un controllo che cattura ciò che l'esecuzione salta

    • Le intestazioni di route di Qwik City vengono tradotte: export const head diventa una funzione dell'URL della pagina, con il suo titolo e descrizione nella lingua di quella pagina
    • Le costanti di copia passate intere (useState(TASKS), data={TASKS}) sono costruite con t() nell'unico componente che le legge, mantenendo il loro tipo
    • Le costanti che non possono essere spostate, perché confrontate nel codice, dipendenza di un effetto o lette da due componenti, vengono segnalate con il motivo
    • il controllo fallisce durante l'esecuzione della copia, è stato necessario saltare, con il motivo dell'esecuzione; la sintassi del modello e altri salti intenzionali passano ancora
    • Gli elenchi di classi con utility di parole semplici (border border-outline), percorsi di file ed elenchi indicizzati per codice lingua non vengono più conteggiati come copia
  33. v0.18.0

    29 ottobre 2026

    Testo in qualsiasi campo renderizzato da un componente, titoli delle pagine tramite helper, e un URL per lingua accanto al tuo proxy

    • Copia in qualsiasi campo che un componente renderizza conteggi, non solo etichetta e titolo (ROWS.map(({ task, manual }) => …)); id, link e slug mai
    • Anche le liste lette con length, findIndex, some o includes vengono ancora seguite, purché tali letture non tocchino la loro copia
    • Anche i titoli delle pagine impostati tramite un helper, export const metadata = pageMetadata({ title: … }), vengono tradotti
    • Gli elementi mantenuti al di fuori dei componenti nei file client vengono tradotti con <Trans>, che non necessita di hook
    • Le app con un proprio proxy.ts ottengono i18n-proxy.ts: una chiamata lì fornisce a ogni pagina un URL per lingua
    • Gli elenchi di classi Tailwind non vengono più segnalati come copia non tradotta
  34. v0.17.0

    29 ottobre 2026

    Pagine Astro trovate complete, blocchi di template lasciati intatti, e verifica su un monorepo

    • Astro: viene trovato il testo dopo una lettera accentata o una virgoletta riccia, così come ogni pagina il cui <head> ha un <title>
    • I layout di Astro importano il modulo i18n una sola volta, con t e la lingua della pagina da una sola riga
    • I blocchi comment, verbatim e blocktranslate di Django, e i blocchi @verbatim e @php di Blade, rimangono così come sono scritti, quindi una seconda esecuzione non cambia nulla
    • Gli elementi Vue con v-pre rimangono così come sono scritti
    • check non segnala più il testo tradotto dove si trova: un titolo index.html, testo SwiftUI nel Catalogo Stringhe e blocktranslate di Django
    • check --workspaces (e la modalità dell'Azione: check con workspaces: true) controlla ogni app in un monorepo
    • I pacchetti Monorepo senza interfaccia utente, come un server API o un pacchetto di utilità, vengono saltati
  35. v0.16.0

    29 ottobre 2026

    Componenti server trovati tramite importazioni, e le copie già in un'altra lingua lasciate intatte

    • Next.js: i componenti al di fuori di app/ si rendono come fanno i loro importatori; quelli server-only attendono il traduttore, e quelli importati da entrambi i lati diventano componenti client
    • Le app Next.js che installano anche Svelte o Vue vengono rilevate come React, e con i Cache Components il layout principale si rende per richiesta
    • Il codice inline <code> rimane all'interno della frase, quindi la frase è un unico messaggio che i traduttori possono riordinare
    • Testo contrassegnato con lang="…" in un'altra lingua, e liste con un elemento per lingua, rimangono come scritti
    • <Trans> fornisce ai tuoi componenti un figlio sostitutivo tipizzato, in modo che i componenti con figli richiesti vengano controllati
    • Viene seguita la copia importata tramite alias tsconfig come @/lib/nav
    • translate mantiene `inline code` così com'è scritto, riempie le forme plurali che un'esecuzione precedente ha lasciato vuote e segnala quando una lingua restituisce un risultato vuoto
    • Le chiavi non terminano mai come una forma plurale e il controllo segnala le forme plurali mancanti in una lingua
  36. v0.15.0

    28 ottobre 2026

    Il testo che prima sfuggiva, i titoli delle pagine e cosa succede dopo il merge

    • Le lingue regionali vengono scelte dal browser e Accept-Language: pt-PT raggiunge il pt-BR dell'app, zh-cn il suo zh-CN
    • I metadati di Next.js diventano generateMetadata con il traduttore della richiesta; il titolo e la descrizione di index.html di una SPA seguono la lingua
    • Monorepo: le librerie di componenti vengono tradotte con le app che le utilizzano, i loro messaggi uniti ai file di localizzazione di tali app
    • pluralize(word, count) dal pacchetto pluralize è un plurale; elenchi separati da virgole e "a, b e c" diventano Intl.ListFormat
    • il controllo fallisce sulle chiavi mancanti nel file di localizzazione e riporta il testo in CSS e i valori memorizzati così come sono
    • valore ARIA, testo di ruolo e descrizione, titoli SVG in HTML statico e layout da destra a sinistra di React Native
    • Testo che prima sfuggiva: props del componente come heading e description, tabelle di lookup, funzioni di aiuto e testo importato da moduli come nav.ts
    • Le date da date-fns, dayjs e moment seguono la lingua dell'app, così come localeCompare e maiuscolo/minuscolo
    • Dopo il merge: i test caricano i18n nel loro file di setup, le app React multilingua caricano i file di localizzazione su richiesta e i file di localizzazione si fondono chiave per chiave
    • Remix e React Router si idratano senza discrepanze; il controllo segnala i font che mancano delle lettere di una lingua di destinazione
  37. v0.14.0

    28 ottobre 2026

    Plurali in ogni framework, da Angular a iOS

    • Plurali in Angular (una pipe pluralForm generata), Django (pluralize to blocktranslate count), Laravel (trans_choice), Android (<plurals>) e iOS (variazioni di String Catalog)
    • Due conteggi in una frase e ordinali in Vue, Svelte, Astro, Lit, Ember e Angular; due conteggi in Flutter, Rails, Laravel e Android
    • Vue e Svelte: ciò che i valori e le funzioni calcolate restituiscono viene tradotto, e gli elenchi passati ai componenti figli vengono tradotti
    • Componenti di classe: il testo prima del return in render(), i costruttori e i metodi statici vengono tradotti
    • Pug: i tag inline all'interno di tag inline diventano messaggi nidificati
    • La GitHub Action scansiona la cartella specifica di ogni framework (app/views, resources/views…) invece di src/ in modo fisso
  38. v0.13.0

    28 ottobre 2026

    iOS, documentazione Markdown, testo modificato ritradotto e il testo che prima sfuggiva

    • iOS e macOS: il testo di SwiftUI e UIKit va in Localizable.xcstrings con ogni lingua; le assegnazioni UIKit diventano String(localized:)
    • Il codice Android View in Kotlin e Java (setText, label.text =) usa le risorse stringa, come layout e Compose
    • Il contenuto di localize-dev traduce documenti Markdown e MDX in una copia per lingua, mantenendo codice, link e MDX come scritti
    • Il testo modificato viene ritradotto: localize.lock.json ricorda ogni messaggio sorgente e il controllo fallisce sulle traduzioni non aggiornate
    • Le chiavi inutilizzate vengono segnalate e localize-dev prune le rimuove
    • Vengono estratti il testo nelle costanti lette dai componenti, le stringhe unite, i messaggi di setter, toast e alert, e i messaggi di validazione zod/yup
    • Le frasi di genere diventano un unico messaggio con una variante per genere
    • Lingue da destra a sinistra: controlla gli stili sinistro/destro dei report e localize-dev rtl --fix scambia quelli sicuri con quelli logici
    • Date, numeri e prezzi seguono la lingua dell'app anche nei componenti Vue e Svelte; più simboli di valuta e un'impostazione di valuta per un semplice $
    • I componenti di classe React vengono tradotti tramite withTranslation(), e il titolo di un link rimane all'interno della sua frase
    • Le anteprime delle pull request coprono ogni app in un monorepo e lasciano intatti i file Git LFS
    • I template Vue scritti in Pug sono tradotti: testo di tag, piped e block, e attributi
    • Angular prima della versione 14 mantiene intere anche le frasi attorno ai link, e i componenti NgModule ottengono la direttiva translate tramite il loro modulo
    • Una frase con due conteggi ottiene un plurale per ogni frase contata, e gli ordinali (1°, 2°, 3°) diventano plurali ordinali nelle forme proprie di ciascuna lingua
    • Vue e Svelte: le costanti mostrate dal template (un titolo, un elenco di schede in v-for o #each) diventano chiavi, lette tramite o $_()
    • Ogni componente di classe React è tradotto: <Translation> attorno a render() quando non è l'esportazione predefinita
    • Un link il cui titolo è impostato dal codice rimane all'interno della sua frase; i #[inline tags] e #{values} di Pug vengono tradotti
  39. v0.12.0

    28 ottobre 2026

    Anteprima sul tuo repository, un controllo CI, pseudo-localizzazione e date e valute

    • Anteprima pull request: collega un repository e localize.dev localizza il suo branch predefinito sul server (fino a 200 stringhe) e apre una pull request, senza workflow, chiave o checkout
    • Controllo localize-dev (e la modalità dell'Action: check) fallisce la CI quando il testo è hardcoded o mancano le traduzioni, con annotazioni sulla pull request
    • --pseudo scrive una pseudo-lingua en-XA (o ar-XB, da destra a sinistra) per trovare testo tagliato e hardcoded prima di tradurre; gratuito, anche nel playground
    • Date, numeri e prezzi impostati su una sola località (toLocaleDateString('en-US'), formattatori Intl, `$${price}`) seguono la lingua dell’app in React, React Native e Solid
    • Il modello segnala le traduzioni di cui non è sicuro, con il relativo motivo; la scheda Revisione si apre su di esse e Approva il resto le lascia a una persona
    • Un URL per lingua per i motori di ricerca: Next.js ottiene un proxy che serve /es/... con link hreflang, Nuxt prefix_except_default con useLocaleHead
    • Un calcolatore di prezzi contro le agenzie di traduzione
  40. v0.11.0

    28 ottobre 2026

    Svelte e Angular precedenti, formattazione nidificata e contesto del codice in revisione

    • Svelte 3 e 4 e Angular 14+ mantengono intere anche le frasi attorno ai link, tramite componenti generati che non necessitano di nuove funzionalità
    • La formattazione all'interno di un link (testo in grassetto in un link, fino a tre livelli di profondità) diventa un messaggio nidificato in Vue, Svelte, Angular ed Ember
    • Scheda Revisione: Nel codice mostra le righe attorno a dove ogni stringa viene utilizzata, lette dalla pull request dell'esecuzione
    • Il playground mostra il componente generato attraverso cui un file localizzato renderizza le sue frasi
    • I messaggi Ember dal playground e dalle guide usano segnaposto ICU, come la CLI
    • Phrase e Lokalise appaiono con i loro loghi
  41. v0.10.0

    28 ottobre 2026

    Le frasi con link rimangono intere ovunque e le rotte dinamiche di Astro

    • Svelte 5, Angular 17+, Ember, Solid e Qwik mantengono una frase intorno a un link o testo in grassetto come un messaggio, renderizzato da un componente generato (o rich() in Solid e Qwik), così i traduttori possono spostare il link
    • Rails: un link_to all’interno di una frase diventa un messaggio _html con il link interpolato; testo di link_to, button_to, submit e label viene tradotto
    • Astro: le rotte dinamiche ottengono anche una copia per lingua, mantenendo getStaticPaths e props
    • Laravel: un middleware SetLocale sceglie la lingua (?locale=, un cookie di lingua, poi Accept-Language), registrato in bootstrap/app.php o nel kernel HTTP
    • Django: vengono trovati i pacchetti di impostazioni (settings/base.py), e LocaleMiddleware viene aggiunto anche senza SessionMiddleware
    • Il playground prende file Rails, Django, Laravel e Android, e mostra i file di localizzazione di ciascuno
    • Le stringhe mancanti di una lingua (o forme plurali) vengono richieste di nuovo prima di ricorrere al fallback
    • Richiede Node.js 22 o superiore; i progetti senza package.json (Rails, Django, Laravel, Android, Flutter) lo eseguono tramite npx
  42. v0.9.0

    28 ottobre 2026

    Rails, Django, Laravel, Android, Astro, Qwik, Lit, Ember e revisione della traduzione

    • Astro: i template .astro diventano chiamate t() leggendo la lingua dall'URL, con una copia di ogni pagina statica per lingua e <html lang dir> impostato nei layout
    • Le isole Astro (React, Vue, Svelte) sono localizzate con le loro pagine, ognuna seguendo la lingua della pagina
    • Qwik: useTranslation() legge la lingua dall'URL, con una rotta per lingua; Lit: template html`` a t() con un controller che si aggiorna al cambio di lingua
    • Ember: template Glimmer (.hbs, .gjs/.gts) a {{t}} di ember-intl, con plurali da {{if (eq n 1) …}} e una rotta applicativa che sceglie la lingua
    • Scheda Revisione su ogni progetto: approva o modifica le traduzioni automatiche, inclusi i plurali; le modifiche alimentano la memoria di traduzione e possono essere inviate come pull request
    • Note di revisione per il prossimo revisore, chi ha approvato cosa e quando, e suggerimenti dal glossario dalle correzioni che continui a fare
    • Testo ricco annidato: frasi intorno a link con testo in grassetto e simili rimangono un messaggio
    • Più schemi di plurale: n > 1, Intl.PluralRules select(), e helper plural(n, one, other)
    • Sincronizzazione Lokalise e Transifex; Azione GitHub: tms_pull porta le traduzioni revisionate nel pull request, tms_push carica i file sorgente dal ramo predefinito
    • Il playground supporta file Astro
    • Rails: le viste ERB diventano chiamate a t() con YAML in config/locales e supporto per i plurali; sono disponibili le lingue e un selettore di lingua
    • Django: le template ottengono i tag translate e blocktranslate, i cataloghi .po vengono compilati e viene attivato il LocaleMiddleware
    • Laravel: le viste Blade diventano chiamate a __() con file lang/<locale>.json indicizzati per testo
    • Android: le layout e Jetpack Compose si spostano in strings.xml (risorse di stringa, placeholder %1$s), con lista delle lingue per app
    • Vue: le frasi intorno ai link e al testo in grassetto rimangono un unico messaggio, tramite <i18n-t>
    • Qwik: anche le rotte dinamiche ottengono una copia per lingua
    • I comandi CLI (pr e pr --translate) raggiungono la scheda Review, come le Azioni
    • Riveditori per lingua, emailati una volta per esecuzione quando arrivano le traduzioni; ogni riga nella scheda Review collega al file sorgente
    • Installazione più leggera: i compilatori di Vue, Svelte, Angular, Astro e Ember vengono scaricati la prima volta che un progetto li richiede
    • Guide per framework, con output reale prima e dopo
  43. v0.8.0

    27 ottobre 2026

    Angular, Flutter, Solid e sincronizzazione Crowdin e Phrase

    • Angular: i template e i template inline diventano la pipe ngx-translate, con gestione del flusso di controllo, dei binding e degli attributi aria; provideI18n() e TranslatePipe sono collegati
    • Flutter: gli argomenti Text() e hintText-style diventano lookup di AppLocalizations con file ARB, plurali ICU e metadati dei placeholder; const viene rimosso dove necessario e gen-l10n viene configurato
    • Solid: JSX con useTranslation() da un modulo i18next generato la cui lingua è un segnale
    • localize-dev sync push e pull: file sorgente su Crowdin o Phrase, traduzioni nei file di localizzazione
    • Il playground accetta template Angular (.component.html) e file Dart
  44. v0.7.0

    27 ottobre 2026

    Vue, Svelte, HTML statico, React Native e file di localizzazione esistenti

    • localize-dev translate (e la modalità dell'Azione: translate) riempie le traduzioni mancanti nei file di localizzazione esistenti: JSON, Rails YAML, gettext .po, Flutter .arb, Android strings.xml, Apple .xcstrings e .strings, extension messages.json
    • translate mantiene le corrispondenze ICU =0 e i rami select, e crea nuove lingue gettext con le proprie regole plurali
    • Componenti Vue single-file: testo e attributi del template diventano chiamate , con vue-i18n configurato e installato
    • Svelte e SvelteKit: il markup diventa chiamate $_() con svelte-i18n, inizializzato da +layout o main
    • Siti HTML statici: marcatori data-i18n e un i18n.js generato che carica i file di localizzazione, con un menu lingua opzionale
    • React Native ed Expo: etichette di accessibilità tradotte e configurazione i18n che funziona senza API del browser
    • Il framework viene rilevato automaticamente; sovrascrivilo con "framework" in localize.config.json
    • Plurali in Vue (formato pipe con le regole di ogni lingua) e Svelte (ICU); messaggi visualizzati da script, come toast e avvisi
    • Le pagine SvelteKit vengono renderizzate nella lingua dell'utente sul server; Nuxt ottiene @nuxtjs/i18n; le configurazioni esistenti di vue-i18n e svelte-i18n rimangono invariate
    • HTML: frasi con link e testo in grassetto rimangono intatte, le pagine funzionano da disco e htmlPages genera una copia tradotta per lingua per i motori di ricerca
    • Le lingue da destra a sinistra impostano l'attributo dir su <html> ovunque; il testo degli engine di template e PHP rimangono invariati
    • Monorepos: --workspaces localizza ogni app (l'Azione aggiorna il file di lock principale)
  45. v0.6.0

    27 ottobre 2026

    Un menu lingua appropriato e useLanguage()

    • localize-dev/react: un menu di lingua accessibile a tastiera e lettore di schermo, con bandiere e nomi nativi
    • Personalizza l'elenco, i nomi, le bandiere, la disposizione e gli stili, oppure sostituisci le parti con render props
    • useLanguage() restituisce la lingua corrente, la sua bandiera, nome e direzione, l'elenco e setLanguage()
    • Le lingue da destra a sinistra impostano l'attributo dir su <html>; i selettori <select> generati sono aggiornati automaticamente
  46. v0.5.0

    27 ottobre 2026

    Cambia lingua

    • Un <LanguageSwitcher /> generato elenca ogni lingua bundle con il suo nome proprio
    • Ricorda la scelta (localStorage o la cookie 'lang' in Next.js per seguire i componenti server)
    • I progetti configurati con una versione precedente lo ottengono nella loro prossima esecuzione, tramite una pull request dedicata
  47. v0.4.0

    27 ottobre 2026

    Plurali, testo ricco, componenti server Next.js, team

    • Messaggi plurali: una sola chiave con le forme CLDR esatte richieste da ogni lingua
    • Il testo intorno ai link e alle formattazioni diventa un unico messaggio <Trans> che i traduttori possono riordinare
    • Next.js App Router: i componenti server usano un traduttore in attesa; i componenti client condividono la lingua della richiesta
    • Glossario del progetto: termini da non tradurre, traduzioni preferite e una nota stilistica
    • Spazi di lavoro per team con inviti e un selettore di spazio di lavoro
    • Fatturazione con Stripe e email di utilizzo al 80% e al 100%
  48. v0.3.0

    26 ottobre 2026

    Statistiche di progetto e cronologia delle esecuzioni

    • Le pagine del progetto mostrano le stringhe tradotte e sostituite, le esecuzioni e le traduzioni per lingua
    • L'Azione GitHub riporta ogni esecuzione: richiesta pull, stringhe sostituite, traduzioni o l'errore
    • L'utilizzo è attribuito al repository di provenienza
    • Configurazione passo-passo della chiave API e delle autorizzazioni per la richiesta pull, collegata alle impostazioni del repository
  49. v0.2.0

    26 ottobre 2026

    Funziona su app senza i18n

    • Aggiunge i18next e react-i18next se mancanti, aggiornando il file di blocco nell'Azione
    • Crea src/i18n.ts che carica tutti i file di locale e li importa dal tuo file di ingresso
    • Abilita resolveJsonModule in tsconfig.json e corrisponde allo stile delle tue virgolette
    • Lascia intatte le configurazioni esistenti di i18next
  50. v0.1.0

    26 ottobre 2026

    Prima versione pubblica

    • Scanner AST per il testo JSX, attributi autorizzati e template literals resi in JSX
    • Trasformatore a minima differenza che aggiunge useTranslation una volta per componente
    • Modello di traduzione ospitato su tutti i piani, con chiavi API, limiti mensili e una versione gratuita
    • Nomi di chiavi semantiche e traduzione in un unico passaggio, con verifica dei placeholder prima di scrivere qualcosa
    • CLI: comandi init, login, chi (whoami), scan, run e pr, oltre al funzionamento offline
    • GitHub Action che mantiene aggiornati una branch e una richiesta pull per ogni branch di base
    • Playground web che esegue lo stesso motore del CLI