# General Translation Knowledge Base: Come si migra da Crowdin a General Translation?
URL: https://generaltranslation.com/it/kb/migrate-from-crowdin.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Mantieni i file di risorse, la libreria i18n e le traduzioni già revisionate. Attiva Skip untranslated strings, scarica le traduzioni, impedisci all'integrazione Git di Crowdin di inviare traduzioni e importa i file con npx gt upload prima del primo npx gt translate. Da quel momento General Translation traduce le stringhe nuove e modificate durante la build, usando il glossario di un gruppo di contesto.
Category: Strumenti per il flusso di lavoro
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

Crowdin conserva i file sorgente, le relative traduzioni, un glossario e una memoria di traduzione, e la sua integrazione Git restituisce le traduzioni sotto forma di pull request. Con il passaggio a General Translation mantieni i file di risorse che la tua app già legge: la CLI `gt` li importa insieme alle traduzioni esistenti, poi traduce le stringhe nuove e modificate durante la build o in CI. Libreria i18n, chiavi e struttura dei file restano invariate; spostare i testi inline è un passaggio separato e facoltativo (vedi [migrazione da react-i18next](/kb/migrate-from-react-i18next) o [da next-intl](/kb/migrate-from-next-intl)). Il glossario diventa un gruppo di contesto condivisibile tra la tua app, la documentazione e altri progetti.

## Cosa si può portare da Crowdin?

| In Crowdin                                                                 | In General Translation                                                                                                                                                                        |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Voci `files` di `crowdin.yml`                                              | `files` in `gt.config.json`, con `[locale]` al posto di `%locale%`                                                                                                                            |
| File tradotti                                                              | Importati con [`npx gt upload`](/docs/cli/reference/commands/upload) e conservati finché il relativo sorgente non cambia                                                                      |
| Glossario                                                                  | Il Glossario di un [Gruppo di contesto](/docs/platform/dashboard/guides/defining-context-for-translations), importato da CSV                                                                  |
| Guida di stile e prompt AI                                                 | [Prompt personalizzati](/docs/platform/dashboard/guides/defining-context-for-translations), globali o per impostazione regionale                                                              |
| Contesto e lunghezza massima delle stringhe                                | Commenti nei file sorgente Android e iOS, che General Translation legge come contesto, oppure un file di [metadati associati alle chiavi](/docs/cli/reference/keyed-metadata) per JSON e YAML |
| Memoria di traduzione                                                      | Le traduzioni caricate: le stringhe invariate le conservano e vengono tradotte solo quelle nuove o modificate. I file TMX non vengono importati                                               |
| Integrazione GitHub o GitLab (branch `l10n_` per impostazione predefinita) | [`npx gt translate`](/docs/cli/reference/commands/translate) in CI, oppure pull request di [Locadex](/docs/platform/locadex/quickstart)                                                       |
| Correzione di bozze e approvazione                                         | Modifica nella [Dashboard](/docs/platform/dashboard/guides/reviewing-translations), con approvazione disponibile nel Piano Enterprise                                                         |
| Consegna dei contenuti over-the-air (OTA) per le app mobili                | Le traduzioni vengono distribuite nei file di risorse a ogni rilascio dell&#39;app                                                                                                            |

La CLI legge JSON, YAML, `.pot` e `.po`, i file iOS `.strings`, `.stringsdict` e `.xcstrings`, Android `strings.xml`, `.resx`, HTML, Markdown e MDX, e altro ancora. (Consulta i [formati supportati](/docs/cli/reference/config#files).) Non legge invece XLIFF, ARB, i file Java `.properties`, né i file di stringhe CSV e XLSX.

## Passaggio 1: impedire a Crowdin di riempire i vuoti con il testo di origine

Per impostazione predefinita, Crowdin [esporta le stringhe non tradotte come testo di origine](https://support.crowdin.com/project-settings/export/), in modo che i file non siano mai vuoti. Se importato così com&#39;è, quel testo in inglese verrebbe considerato come traduzione completata. Prima di scaricare i file, attiva **Skip untranslated strings** in **Settings &gt; Export** nel progetto Crowdin (l&#39;opzione non ha effetto se **Skip untranslated files** è attiva), oppure imposta [`skip_untranslated_strings`](https://crowdin.github.io/crowdin-cli/advanced) in `crowdin.yml`:

```yaml title="crowdin.yml"
files:
  - source: /locales/en/**/*.json
    translation: /locales/%locale%/**/%original_file_name%
    skip_untranslated_strings: true
```

Il significato di &quot;skip&quot; dipende dal formato. Crowdin rimuove le stringhe non tradotte da JSON flat, YAML, Android XML, file iOS `.strings` e `.stringsdict` e `.resx`. Nei file JSON annidati, JSON di i18next, gettext PO e TS o JS, invece, le esporta come valori vuoti: cerca quindi le stringhe vuote in questi file e rimuovile prima di importarli. Aggiungi `export_only_approved: true` se vuoi trasferire solo le traduzioni revisionate.

## Passaggio 2: Scarica le traduzioni

Se i file sorgente sono già nel tuo repository, scarica le traduzioni con la [CLI di Crowdin](https://crowdin.github.io/crowdin-cli/commands/crowdin-download). Per prima cosa, visualizza un&#39;anteprima dei percorsi:

```bash
crowdin download --dryrun
crowdin download --skip-untranslated-strings
```

Senza la CLI, usa **Translations &gt; Build &amp; Download** nel progetto Crowdin, che rispetta le impostazioni di esportazione del progetto. Se usi Crowdin Enterprise, imposta `base_url` sull&#39;indirizzo API della tua organizzazione in `crowdin.yml`.

Controlla i nomi delle cartelle delle impostazioni regionali. `%locale%` genera codici lingua-regione come `uk-UA`, mentre `%two_letters_code%` genera codici di sola lingua come `uk`. Elenca gli stessi codici in `gt.config.json`, oppure rinominali in fase di esportazione con l&#39;opzione [`languages_mapping`](https://support.crowdin.com/developer/configuration-file/) di Crowdin.

## Passaggio 3: Impedisci a Crowdin di inviare traduzioni

Le integrazioni di Crowdin con GitHub e GitLab [eseguono per impostazione predefinita una sincronizzazione ogni ora](https://support.crowdin.com/github-integration/) e aprono pull request (merge request su GitLab) dai branch `l10n_`. Prima che General Translation scriva qualsiasi file, svuota il campo **Sync Schedule** dell&#39;integrazione e salva, così Crowdin smetterà di inviare traduzioni al tuo repository; solo il membro che ha configurato l&#39;integrazione può modificarla. Chiudi tutte le pull request `l10n_` ancora aperte e rimuovi i passaggi di Crowdin dalla tua CI. Una volta che i file sono gestiti da General Translation, puoi rimuovere del tutto l&#39;integrazione. Se due strumenti scrivono negli stessi file, prevale quello che scrive per ultimo.

## Passaggio 4: Configura la CLI per usare gli stessi file

Installa la CLI `gt` e converti le voci di `crowdin.yml` in `gt.config.json`. Ogni pattern `translation` diventa un pattern `include` con `[locale]`:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["de-DE", "pt-BR", "uk-UA"],
  "files": {
    "json": { "include": ["locales/[locale]/**/*.json"] }
  }
}
```

Accedi con [`npx gt login`](/docs/cli/reference/commands/login) e imposta `GT_PROJECT_ID`, oppure imposta `projectId` nella config. In CI, usa `GT_API_KEY` con una chiave API di progetto dotata delle autorizzazioni **File &gt; Scrittura**, **Coda di traduzione &gt; Abilitata** e **Contesto &gt; Scrittura**.

## Passaggio 5: Importa il glossario e il contesto delle stringhe

Il proprietario o un manager del progetto può scaricare il glossario in formato CSV dalla pagina [Glossaries](https://support.crowdin.com/glossary/) di Crowdin oppure tramite la CLI (`crowdin glossary list` mostra l&#39;ID):

```bash
crowdin glossary download <glossary-id> --format csv --to ./glossary.csv
```

Crowdin assegna i nomi alle colonne in base alla lingua. Rinomina `Term [en]` in `term`, `Description [en]` in `definition` e ogni colonna di destinazione, ad esempio `Term [de]`, in `translation_de`; elimina le colonne rimanenti e salva il file. L&#39;importatore di General Translation legge direttamente questo layout e interpreta gli altri layout tramite l&#39;AI. Nella Dashboard, crea un [gruppo di contesto](/docs/platform/dashboard/guides/defining-context-for-translations), fai clic su **Import**, scegli il file e assegna il gruppo al tuo progetto prima della prima esecuzione della traduzione, in modo che le nuove traduzioni usino la tua terminologia fin dall&#39;inizio.

Il contesto delle stringhe indica al traduttore il significato di una stringa, che sia stato scritto da uno sviluppatore o generato da Crowdin. I commenti sopra ogni stringa nei file sorgente Android `strings.xml` e iOS `.strings` vengono già passati a General Translation come contesto. Per il contesto presente solo in Crowdin, recupera i campi `context` e `maxLength` di ogni stringa tramite l&#39;[API delle stringhe di origine](https://support.crowdin.com/developer/api/v2/#tag/Source-Strings/operation/api.projects.strings.getMany) di Crowdin. Aggiungi il contesto come commenti nei file sorgente Android e iOS oppure, per JSON e YAML, scrivi entrambi i valori in un file di [metadati associati alle chiavi](/docs/cli/reference/keyed-metadata) accanto al file sorgente:

```json title="locales/en/common.metadata.json"
{
  "checkout": {
    "save": { "context": "Button that saves the shipping address", "maxChars": 12 }
  }
}
```

Ricrea la tua guida di stile e le istruzioni per i prompt AI come [Prompt Personalizzati](/docs/platform/dashboard/guides/defining-context-for-translations). Per conservare un archivio della tua memoria di traduzione, scaricala in formato TMX con `crowdin tm download <tm-id>`.

## Passaggio 6: Esegui il caricamento prima di tradurre

Esegui prima [`npx gt upload`](/docs/cli/reference/commands/upload). Il comando invia ogni file sorgente insieme al file tradotto corrispondente per ciascuna impostazione regionale e salva queste traduzioni come completate:

```bash
npx gt upload
npx gt translate
```

[`npx gt translate`](/docs/cli/reference/commands/translate) traduce poi solo ciò che manca, come una nuova impostazione regionale o un file privo di traduzione, e scrive i risultati negli stessi percorsi. Se esegui [`npx gt translate`](/docs/cli/reference/commands/translate) prima di [`npx gt upload`](/docs/cli/reference/commands/upload), verranno generate nuove traduzioni che sovrascriveranno i file scaricati. General Translation tradurrà le stringhe non tradotte in Crowdin alla successiva modifica del relativo file sorgente. Per pubblicarle prima, completale in Crowdin prima di effettuare il download.

## Passaggio 7: Traduci automaticamente i nuovi testi

D&#39;ora in poi, esegui [`npx gt translate`](/docs/cli/reference/commands/translate) nella tua [build o pipeline di CI](/kb/translations-in-ci), oppure lascia che sia [Locadex](/docs/platform/locadex/quickstart) ad aprire pull request con le traduzioni. Esegui il commit di `gt-lock.json`, che tiene traccia delle traduzioni già scritte dalla CLI per evitare di scaricarle di nuovo. Se il tuo team modifica i file tradotti nel repository, esegui [`npx gt save-local`](/docs/cli/reference/commands/save-local) prima della traduzione successiva, in modo da conservare quelle modifiche.

## Quando conviene restare su Crowdin?

Conviene restare se un progetto open-source si affida alla licenza gratuita di Crowdin e ai traduttori della community, se si commissiona la traduzione umana tramite il suo marketplace di fornitori, se si scambiano file XLIFF o Office, oppure se le app mobile native dipendono dagli aggiornamenti over-the-air. (Vedi [General Translation vs. Crowdin](/kb/general-translation-vs-crowdin).)

## Domande frequenti

### Perderò le traduzioni già revisionate?

No, a patto di escludere le stringhe non tradotte durante l&#39;esportazione e di eseguire [`npx gt upload`](/docs/cli/reference/commands/upload) prima di [`npx gt translate`](/docs/cli/reference/commands/translate). Le traduzioni caricate restano invariate finché non cambia il relativo testo di origine, e il tuo team può correggere qualsiasi traduzione dalla [dashboard](/docs/platform/dashboard/guides/reviewing-translations).

### Posso continuare a usare Crowdin per una parte dei contenuti?

Sì. Limita `include` ed `exclude` in `gt.config.json` ai file gestiti da General Translation e lascia che Crowdin continui a sincronizzare tutto il resto. Evita che entrambi gli strumenti scrivano sugli stessi file.

## Punti chiave

* Attiva Skip untranslated strings prima di esportare, altrimenti Crowdin colma le lacune con il testo di origine, che verrebbe poi importato come traduzione.
* Impedisci all&#39;integrazione Git di Crowdin di effettuare il push delle traduzioni prima che General Translation scriva gli stessi file.
* Replica `crowdin.yml` in `gt.config.json`, importa il glossario in un gruppo di contesto e, prima di tradurre, trasferisci il contesto delle stringhe salvato in Crowdin come contesto per singola chiave.
* Esegui [`npx gt upload`](/docs/cli/reference/commands/upload) prima del primo [`npx gt translate`](/docs/cli/reference/commands/translate), poi traduci i nuovi testi durante la build o con Locadex.

## Related questions

- [Alternative a Crowdin: General Translation o Crowdin](https://generaltranslation.com/it/kb/general-translation-vs-crowdin.mdx): Scegli General Translation per mantenere i testi nei tuoi componenti e generare le traduzioni durante la build. Crowdin gestisce progetti di traduzione incentrati su file di risorse, traduttori e flussi di lavoro di revisione, che gli ingegneri devono collegare all'app e mantenere man mano che il prodotto evolve. Crowdin resta un'ottima scelta per le traduzioni affidate alla community nei progetti open source e per i programmi gestiti da fornitori esterni.
- [Come si migra da Lokalise a General Translation?](https://generaltranslation.com/it/kb/migrate-from-lokalise.mdx): Mantieni i file di risorse, la libreria i18n e le traduzioni già revisionate. Esporta da Lokalise escludendo le traduzioni vuote, disattiva la sincronizzazione con GitHub e importa i file con npx gt upload prima di eseguire per la prima volta npx gt translate. Da quel momento General Translation traduce le stringhe nuove e modificate durante la build, usando il tuo glossario in un gruppo di contesto e le descrizioni delle chiavi come contesto per singola chiave.
- [Come si migra da Phrase a General Translation?](https://generaltranslation.com/it/kb/migrate-from-phrase.mdx): Mantieni i file delle impostazioni regionali, la libreria i18n e le traduzioni verificate. Esegui il pull da Phrase Strings escludendo le chiavi non tradotte e i fallback, disattiva Repo Sync e importa i file con npx gt upload prima di eseguire per la prima volta npx gt translate. A quel punto General Translation traduce le stringhe nuove e modificate durante la build, usando la tua term base in un gruppo di contesto e le descrizioni delle chiavi come contesto per ciascuna chiave.
- [Come mantengo le traduzioni aggiornate a ogni distribuzione?](https://generaltranslation.com/it/kb/translations-in-ci.mdx): Esegui la traduzione come passaggio della pipeline prima di ogni build di produzione, così i nuovi testi vengono rilasciati già tradotti insieme alla distribuzione che li introduce. La CLI gt di General Translation lo fa con npx gt translate, usando una chiave API e un ID progetto archiviati come segreti CI.
- [Che cos'è la memoria di traduzione e serve ancora con l'IA?](https://generaltranslation.com/it/kb/what-is-translation-memory.mdx): La memoria di traduzione (TM) è un database di coppie di segmenti sorgente e di destinazione già tradotti, in cui uno strumento di traduzione cerca corrispondenze esatte, in contesto e fuzzy. Anche con l'IA conviene riutilizzare le formulazioni approvate e avere a disposizione le traduzioni precedenti come contesto. General Translation riutilizza le traduzioni corrispondenti delle versioni precedenti dei file e conserva le modifiche del team, senza dover gestire una TM separata.

## Previous and next questions

- Previous question: [Agente di programmazione IA o pipeline di traduzione: a chi affidare l'automazione della localizzazione?](https://generaltranslation.com/it/kb/ai-coding-agent-vs-translation-pipeline.mdx)
- Next question: [Come si migra da Lokalise a General Translation?](https://generaltranslation.com/it/kb/migrate-from-lokalise.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/it/kb/sitemap.md) for every article.
