Pubblica la tua app in every language.
Ogni stringa hardcoded nella tua app web, mobile o desktop, trovata e tradotta con il contesto della tua app. Una pull request da revisionare e unire, da un comando CLI o ad ogni push.
import { useTranslation } from 'react-i18next';
export function Inbox({ user, unread }) {
const { t } = useTranslation();
return (
<section>
<h1>{t('inbox.welcome_heading', { name: user.name })}</h1>
<p>{t('inbox.unread_summary', { unread })}</p>
<input placeholder={t('inbox.search_placeholder')} />
<button>{unread ? t('inbox.mark_all_read') : t('inbox.refresh')}</button>
</section>
);
}19 framework, da React e Flutter a Rails, Android e iOS, e gli strumenti correlati
Perché localize.dev
Cinque passaggi manuali, eseguiti in un'unica esecuzione
Il lavoro che ripeti ad ogni rilascio, fatto in un'unica passata e revisionato come qualsiasi altra modifica al codice.
- Trova
Di solito:Scansiona il codebase per le stringhe, file per file
Ora:Ogni stringa trovata sull'AST, inclusi attributi, ternari e template literal
- Nome
Di solito:Inventare una chiave per ciascuno e sperare che rimanga coerente
Ora:Chiavi semantiche dal contesto del componente; le copie identiche riutilizzano la stessa chiave
- Traduci
Di solito:Esporta un foglio di calcolo, aspetta i traduttori, incolla tutto di nuovo
Ora:Ogni lingua di destinazione tradotta in un'unica passata
- Verifica
Di solito:Scopri il {placeholder} rotto in produzione
Ora:Segnaposto verificati prima che venga scritto qualcosa
- Pubblica
Di solito:Farlo di nuovo nella prossima versione
Ora:Una pull request ad ogni push, così il nuovo testo non viene mai pubblicato non tradotto
5 passaggi di consegne il modo solito
1 pull request con localize.dev
Come funziona
Dalla copia hardcoded a una pull request localizzata
Quattro passaggi deterministici, con il modello che interviene solo dove serve giudizio: nominare le chiavi e tradurre. Scorri per seguire un componente attraverso tutti e quattro.
01 / 04
Scansiona l'AST
Ogni componente e pagina viene analizzato: JSX, template Vue e Svelte o HTML. Vengono estratti testo, attributi visibili all'utente e le stringhe che il tuo codice renderizza. Vengono saltati URL, nomi di classi e campioni di codice.
5
stringhe trovate
2
ignorato dalla regola
1
componente
Traduzione consapevole del contesto
Tradotto per dove si trova ogni stringa
La traduzione parola per parola si rompe non appena una parola ha due significati. localize.dev traduce ogni stringa tenendo conto di cosa dice il tuo progetto e di cosa si aspetta la lingua di destinazione.
Legge il tuo progetto
Una stringa viene tradotta insieme al suo contesto: il file, il componente e l'elemento in cui si trova. Ad esempio, un'etichetta di pulsante, un titolo e un placeholder ottengono il significato corretto. Il glossario e le note di stile mantengono i termini del prodotto e il tono uniformi in ogni file.
- Percorso del file
- Componente
- Elemento e attributo
- Termini del glossario
- Nomi da non tradurre
- Tono e forma di indirizzo
"Post" → it
Scrive per ogni lingua
I plurali ottengono ogni forma di cui la locale ha bisogno, anche con due conteggi in una frase, il 1° e il 2° seguono gli ordinali propri di ogni lingua, i link e il testo in grassetto si spostano dove la grammatica li colloca, e la forma di attacco corrisponde alla voce scelta per ogni mercato.
- Regole plurali CLDR
- Ordinali
- Ordine delle parole
- Tu formale o informale
- Formulazione UI breve
"{count} file" → pl
Imposta i termini del glossario, i nomi da mantenere e le note di stile per progetto nel dashboard. Ogni esecuzione su quel repository utilizza queste impostazioni.
Localizzazione continua
Ogni push rimane localizzato
Aggiungi l'Azione GitHub e la nuova copia non verrà mai inviata senza traduzione. Ogni esecuzione aggiorna la stessa branch e la pull request, quindi non finirai mai con una pila di PR o conflitti tra esecuzioni.
- Nuovo commit con componenti e tutti i file delle lingue
- Imposta la libreria i18n del tuo framework se non ce n’è ancora una
- Il corpo R elenca ogni sostituzione e ogni stringa saltata
- Recupera le traduzioni revisionate da Crowdin, Phrase, Lokalise o Transifex
- Ogni esecuzione si apre sulla scheda Revisione del progetto
- Controllo che fallisce le pull request con testo non tradotto aggiunto
Localizza: 12 nuove stringhe in 4 localizzazioni
localize-dev/mainmain
name: Localize
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize]
workflow_dispatch: # "Run workflow" button in the Actions tab
permissions:
contents: write # push the localize-dev/<branch> branch
pull-requests: write # open or update the localization PR
# One run per branch at a time; a newer push supersedes the running one.
concurrency:
group: localize-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
jobs:
localize:
runs-on: ubuntu-latest
timeout-minutes: 60
# Skip localize.dev's own branches, and fork PRs (their token is read-only).
if: >-
!startsWith(github.head_ref || github.ref_name, 'localize-dev/') &&
(github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
steps:
- name: Checkout
uses: actions/checkout@v5
with:
# On PRs, scan the branch itself rather than the merge commit.
ref: ${{ github.head_ref || github.ref_name }}
- name: Localize
uses: ufortstephen/autolocalize-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
api_key: ${{ secrets.LOCALIZEDEV_API_KEY }}
target_locales: 'es,fr,de,ja'
# src_dir: 'src' # default: your framework's (src, app/views, resources/views, lib…)
# locales_path: 'public/locales/{locale}/common.json' # default: your framework's
# working_directory: 'apps/web' # monorepo: localize just this appRevisione umana
I madrelingua approvano e le loro correzioni rimangono
Le traduzioni automatiche sono una prima bozza. Ogni lingua ha il proprio revisore, e ogni correzione viene ricordata per la prossima volta.
- Il modello evidenzia le traduzioni di cui non è sicuro, insieme alla ragione, quindi i revisori possono iniziare da lì
- un revisore per lingua, email inviato una volta per ru
- Approva o modifica, incluse le forme plurali, con un link al file originale
- Bozze sono committe nella pull request aperta
- Note per il prossimo revisore e termini del glossario suggeriti dalle correzioni ripetute
12 nuove traduzioni in spagnolo da revisionare
Inviato al revisore spagnolo del progetto al termine dell'esecuzione
Effettua ordine
checkout.place_order
Effettua ordine
Approvato{{count}} articoli nel tuo carrello
checkout.items
{{count}} articoli nel tuo carrello
ApprovaCassa
checkout.heading
Pagamento
Modificato
I revisori continuano a cambiare checkout a pago.
Prima del rilascio
Individua i problemi prima che lo facciano i tuoi utenti.
Provalo sul tuo codice, individua layout che si rompono con testi più lunghi o in direzione da destra a sinistra, ferma le traduzioni non aggiornate o non tradotte alla pull request, indirizza i revisori alle traduzioni necessarie e porta con te la documentazione.
Vederlo nel tuo codice prima
Collega un repository e ottieni una richiesta di pull preview: fino a 200 stringhe dal tuo branch predefinito, localizzate dal nostro lato. Nessun workflow, chiave o checkout.
anteprima di localize.dev: 184 stringhe in es
localize-dev/previewmain
Un controllo che mantiene le cose così
Il controllo di localize-dev fallisce una pull request che aggiunge testo codificato direttamente, lascia indietro una lingua o modifica l'inglese senza che le traduzioni siano aggiornate, e indica la riga. Esegue in CI senza chiave API.
controllo i18n fallito
src/Cart.tsx:7 "Spedizione gratuita oggi" non è tradotto
locales/de.json 3 messaggi non hanno traduzione in tedesco
locales/en.json cart.pay è cambiato dopo la traduzione
Trova layout che si rompono, prima di tradurre
localize-dev run --pseudo genera una lingua pseudo allungata e con accenti. I pulsanti tagliati vengono visualizzati, così come il testo ancora codificato direttamente. Gratis, senza modello.
Rivedi prima quelli dubbi
Il modello segnala le traduzioni di cui non è sicuro, con il relativo motivo. La scheda Revisione si apre su quelle; approva il resto in un clic.
Prenota → Reservares
Da rivedere: una prenotazione o un romanzo? Ho ipotizzato prenotazione dal pulsante.
Layout da destra a sinistra, controllati prima del rilascio
Con arabo o ebraico nelle tue lingue, i margini e gli allineamenti delle liste di controllo sono fissati su un lato, e localize-dev rtl --fix scambia quelli sicuri con quelli logici che si capovolgono da soli.
- ml-4 text-left rounded-l-lg
+ ms-4 text-start rounded-s-lg
I tuoi documenti, anche in ogni lingua
Il contenuto di localize-dev traduce documenti Markdown e MDX, post di blog e pagine legali in una copia per lingua. Codice, link e componenti rimangono esattamente come scritti; solo i documenti modificati vengono rifatti.
docs/intro.mdintro.es.mdintro.fr.mdintro.de.mdFunziona ovunque tu sviluppi
Un motore per web, mobile e desktop
Siti web e app server-side, app iOS e Android, app desktop e le librerie di componenti condivise. Ognuna utilizza la libreria i18n prevista dal framework.
01 / 04
App web
React · Next.js · Angular · Vue · SvelteKit · Astro
Free shipping on orders over $50





Integrazioni
Il tuo framework, i tuoi strumenti
Ogni framework ha la propria libreria di internazionalizzazione, configurata per te. Le traduzioni arrivano fino alla richiesta pull, alla tua piattaforma di traduzione o ai file di localizzazione che già possiedi.
Frameworks
Piattaforme di traduzione e CI
Già localizzato? localize-dev translate compila i file di localizzazione di qualsiasi stack. File di localizzazione esistenti
Dal tuo terminale
Vedi ogni cambiamento prima che avvenga
Esegui prima una prova locale. Il comando --dry-run stampa ogni sostituzione e ogni stringa saltata con la motivazione, così nulla ti sorprenderà nella revisione.
localize-dev scanlocalize-dev run --dry-runlocalize-dev run --pseudolocalize-dev checklocalize-dev prlocalize-dev translate$ npx localize-dev run -l es,fr,de
🔍 Scansione di src/ (localizzazioni di destinazione: es, fr, de)
src/checkout/Summary.tsx
Riepilogo ordine → {t('checkout.order_summary_heading') }
Codice sconto → {t('checkout.discount_code_placeholder') }
Conferma ordine → {t('checkout.place_order_button') }
src/legacy/PromoBanner.tsx:9 saltato "Spedizione gratuita oltre 50 $": componente di classe
✅ Stringhe localizzate in 3 file(s) (3 nuove chiavi, 0 riutilizzate). 5 file scritti.
$
Come funziona l'ingranaggio
Le regole eseguono la riscrittura. Il modello si occupa solo di nominare le chiavi e tradurre.
Differenze minime
Le modifiche vengono inserite con precisione agli offset dell'AST. La formattazione e l'ordine delle importazioni rimangono invariati, così i revisori vedono solo le righe modificate.
Frasi intere
Testo, espressioni, link e testo in grassetto si fondono in un unico messaggio, in modo che i traduttori vedano l'intera frase invece di frammenti.
Ciao {name}, hai {count} articoli
Salta ciò che non può modificare in modo sicuro
Le stringhe che il motore non può riscrivere in sicurezza, come quelle nei componenti di classe o al di fuori di un Composable, vengono lasciate così come sono e segnalate con il motivo.
Idempotente
Eseguilo su ogni push. Le stringhe avvolte rimangono intatte e la copia identica riutilizza la chiave esistente.
Niente da ospitare
La traduzione avviene sul modello ospitato di localize.dev per ogni piano. Non servono GPU, prompt o chiavi dei fornitori. Una chiave API è sufficiente.
Nessun vincolo di permanenza
L'output è la libreria i18n che il tuo framework utilizza già, con file di locazione semplici nel tuo repository. Smetti di usare localize.dev domani e la tua app continua a funzionare, traduzioni incluse.
- react-i18next
- vue-i18n
- ngx-translate
- svelte-i18n
- ember-intl
- Rails I18n
- gettext
- strings.xml
- Flutter ARB
Date, numeri e denaro pure
toLocaleDateString('en-US'), i formattatori Intl e `$${{price}}` vengono riscritti per seguire la lingua dell'app, quindi 1.234,50 $ viene visualizzato come 1.234,50 € per un visitatore tedesco.
Sicurezza e privacy
Cosa lascia il tuo dispositivo
Solo le stringhe in traduzione vengono inviate all'API. I file sorgente rimangono sul tuo dispositivo o nel runner CI.
Stringhe, non il codice sorgente
Solo le stringhe estratte vengono inviate, insieme al percorso del file per contesto. I file interi non lasciano mai la tua macchina.
Locale quando vuoi
Le scansioni e le esecuzioni offline avvengono sulla tua macchina senza chiavi API e senza chiamate di rete, e non consumano il tuo limite.
Chiavi API hash
Viene memorizzato solo l'hash di ogni chiave. I segreti vengono mostrati una volta e la revoca ha effetto immediato.
Tutto o niente
Se un'esecuzione supererebbe il tuo piano, si ferma prima di scrivere qualcosa, quindi il tuo codice non viene mai lasciato parzialmente riscritto.
Prezzi
Inizia gratis. Aggiorna quando il tuo progetto cresce.
Free
$0per sempre
Tutto ciò che ti serve per localizzare un progetto secondario o provarlo su una codebase reale.
- 1000 stringhe / mese
- 3 lingue di destinazione
- CLI and GitHub Action
- La modalità offline e le scansioni non utilizzano mai la tua quota
Pro
Più popolare$100/anno
Fatturato annualmente
Per prodotti distribuiti in diversi mercati.
- Stringhe illimitate
- 5 lingue di destinazione
- Pull request su ogni push
- Dashboard di utilizzo e chiavi API multiple
Team
$200/anno
Fatturato annualmente
Include 3 membri · +50 USD/anno per membro aggiuntivo
Per team di prodotto presenti in molti mercati.
- Stringhe illimitate
- Lingue di destinazione illimitate
- 3 membri inclusi, poi 50 USD/anno ciascuno
- Spazi di lavoro illimitati, condivisione del piano
- Progetti, chiavi e utilizzo condivisi
- Supporto prioritario
FAQ
Domande che le squadre fanno per prime
È solo per app web React?+
No. Funziona su React e Next.js, React Native e Expo, Flutter, Angular, Vue e Nuxt, Svelte e SvelteKit, Astro, Solid, Qwik, Lit, Ember, Electron e Tauri, siti HTML semplici, modelli Rails, Django e Laravel, layout Android, Jetpack Compose e codice View, e app iOS e macOS in SwiftUI e UIKit. Configura la libreria i18n corrispondente per ciascuna: react-i18next, ngx-translate, vue-i18n o @nuxtjs/i18n, svelte-i18n, ember-intl, gen-l10n di Flutter, Rails I18n, gettext di Django, risorse stringa Android, o uno script per pagine statiche.
Abbiamo già configurato i18n. È ancora utile?+
Sì. localize-dev translate riempie le traduzioni mancanti nei file di localizzazione già esistenti, in qualsiasi stack: JSON (i18next, react-intl, vue-i18n, ngx-translate), YAML di Rails, gettext .po, Flutter .arb, Android strings.xml, Cataloghi di Stringhe Apple e .strings, e messaggi di estensione browser. Il codice non viene modificato, le traduzioni esistenti non cambiano, e in CI apre una pull request ogni volta che vengono aggiunte nuove chiavi.
Il mio codice lascia la mia macchina?+
Solo le stringhe che vengono tradotte vengono inviate all'API di localize.dev, con il loro percorso file e la loro posizione (il componente e l'elemento come un pulsante o un'intestazione) come contesto. I file interi non vengono mai inviati. La riscrittura avviene localmente (o sul tuo CI runner), e le scansioni e le esecuzioni offline non toccano mai la rete.
Le traduzioni automatiche sono abbastanza buone da pubblicare?+
Sono una prima bozza solida con placeholder corretti e chiavi coerenti. Per testi regolamentati o critici per il brand, assegna un revisore per lingua: ricevono un'email quando un'esecuzione termina, approvano o correggono ogni traduzione nella scheda Revisione, e le correzioni vengono inserite nella pull request aperta e in ogni esecuzione successiva. Le correzioni che continuano a presentarsi diventano termini del glossario con un clic. Il modello segnala anche le traduzioni di cui non è sicuro, con il motivo, in modo che i revisori inizino da quelle.
Cosa succede se smettiamo di usare localize.dev?+
La tua app continua a funzionare. Il risultato è la libreria di internazionalizzazione che il tuo framework utilizza già (react-i18next, vue-i18n, ngx-translate, Rails I18n, gettext, risorse stringhe Android, Apple String Catalogs…) con file di localizzazione semplici nel tuo repository. Non c'è bisogno di rimuovere alcuna runtime, SDK o proxy di localize.dev.
Incolla un componente o una pagina. Vedilo in due lingue.
Nessun account necessario. Il playground esegue lo stesso motore della CLI.

