# General Translation Knowledge Base: Come si migra da Phrase a General Translation?
URL: https://generaltranslation.com/it/kb/migrate-from-phrase.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 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.
Category: Strumenti per il flusso di lavoro
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

Phrase Strings, il prodotto di Phrase per la localizzazione del software, memorizza le stringhe come chiavi all&#39;interno di un progetto, genera i file delle impostazioni regionali al momento del download e li sincronizza con il tuo repository. Passando a General Translation conservi i file delle impostazioni regionali 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. La libreria i18n e le chiavi restano invariate; spostare i testi inline è un passaggio separato e facoltativo (vedi [migrare da react-i18next](/kb/migrate-from-react-i18next) o [da next-intl](/kb/migrate-from-next-intl)). La tua term base diventa un gruppo di contesto condivisibile tra la tua app, la documentazione e altri progetti. Questa guida riguarda Phrase Strings: per i documenti tradotti in Phrase TMS il flusso di lavoro è diverso.

## Cosa si può portare da Phrase Strings?

| In Phrase Strings                                                               | In General Translation                                                                                                                               |
| ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Target di pull in `.phrase.yml`                                                 | `files` in `gt.config.json`, con `[locale]` al posto di `<locale_name>`                                                                              |
| Traduzioni                                                                      | Importate con [`npx gt upload`](/docs/cli/reference/commands/upload) e conservate finché la relativa sorgente non cambia                             |
| Term base                                                                       | Un Glossario di un [Gruppo di contesto](/docs/platform/dashboard/guides/defining-context-for-translations), importato da CSV                         |
| Guide di stile                                                                  | [Prompt Personalizzati](/docs/platform/dashboard/guides/defining-context-for-translations), globali o per impostazione regionale                     |
| Descrizioni delle chiavi e limiti di caratteri                                  | Un file di [metadati associati alle chiavi](/docs/cli/reference/keyed-metadata) con `context` e `maxChars` per ogni chiave, per JSON e YAML          |
| Memoria di traduzione                                                           | Le traduzioni caricate: le stringhe invariate le conservano e vengono tradotte solo le stringhe nuove e modificate. I file TMX non vengono importati |
| Repo Sync                                                                       | [`npx gt translate`](/docs/cli/reference/commands/translate) in CI, oppure pull request di [Locadex](/docs/platform/locadex/quickstart)              |
| Verifica e revisione delle traduzioni                                           | Modifica nella [Dashboard](/docs/platform/dashboard/guides/reviewing-translations), con approvazione nel Piano Enterprise                            |
| SDK over-the-air (OTA) per iOS, Android, React Native, Flutter, i18next e Rails | Le traduzioni vengono distribuite nei file delle impostazioni regionali a ogni rilascio dell&#39;app                                                 |

La CLI legge JSON, YAML, `.pot` e `.po`, i file iOS `.strings`, `.stringsdict` e `.xcstrings`, i file Android `strings.xml`, `.resx`, HTML, Markdown e MDX e altro ancora (consulta i [formati supportati](/docs/cli/reference/config#files)). Non legge XLIFF, ARB, i file Java `.properties` né le esportazioni CSV e XLSX, quindi scegli un formato supportato quando esegui il pull.

## Passaggio 1: scarica un file per ogni impostazione regionale

Phrase genera i file dalle chiavi a ogni download. Se il tuo repository contiene già file sincronizzati da Phrase, esegui il pull con gli stessi target di `.phrase.yml`, in modo che l&#39;output corrisponda, e confrontalo tramite diff con il repository prima dell&#39;importazione.

Ecco un esempio di target di pull per un&#39;app JSON:

```yaml title=".phrase.yml"
phrase:
  project_id: "YOUR_PROJECT_ID"
  file_format: nested_json
  pull:
    targets:
      - file: ./locales/<locale_name>/app.json
        params:
          file_format: nested_json
          include_empty_translations: false
```

Quindi esegui [`phrase pull`](https://developers.phrase.com/en/developer-tools/strings-cli) con un token di accesso che abbia l&#39;ambito `read`. Ometti `--branch` per scaricare dal branch principale. Se il tuo account si trova nel data center statunitense di Phrase, aggiungi `host: https://api.us.app.phrase.com/v2` sotto `phrase:` in `.phrase.yml`.

Per un&#39;importazione pulita contano tre impostazioni:

* **Chiavi non tradotte.** `include_empty_translations: false`, il valore predefinito della CLI, esclude le chiavi non tradotte. Non impostare `fallback_locale_id` né `use_locale_fallback`, e verifica che l&#39;impostazione di progetto **Use fallback for unverified translations** sia disattivata. Ognuna di queste opzioni riempie i vuoti con il testo di un&#39;altra impostazione regionale, che verrebbe poi importato come traduzione.
* **Formato dei file.** Usa il formato che la tua libreria legge già: `nested_json` o `simple_json`, `i18next_4` per i18next, `yml` per Rails, `strings` e `stringsdict` per iOS, `strings_catalog` per `.xcstrings` e `xml` per Android. Il formato `json` di Phrase è il JSON delle estensioni di Chrome, non un JSON generico. (Consulta i [formati di file supportati](https://support.phrase.com/hc/en-us/articles/9652464547740) da Phrase.)
* **Nomi delle impostazioni regionali.** `<locale_name>` viene sostituito con il nome che hai assegnato a ciascuna impostazione regionale in Phrase, ad esempio `de-AT`. La CLI `gt` richiede che i nomi delle cartelle corrispondano esattamente a quelli dell&#39;elenco `locales`: rinomina quindi le impostazioni regionali in Phrase, mappale con `locale_mapping` sotto `phrase:` in `.phrase.yml` (Phrase CLI 2.59.0 o successiva), oppure elenca in `gt.config.json` i nomi così come vengono scaricati.

Senza la CLI, apri la scheda **Languages** del progetto e fai clic su **Download** per scaricare più impostazioni regionali in una sola volta, lasciando deselezionata l&#39;opzione **Include empty translations**.

## Passaggio 2: Disattiva Repo Sync e OTA

[Repo Sync](https://support.phrase.com/hc/en-us/articles/5784125562012-GitHub-Strings) di Phrase, configurato in **Automations &gt; Repo Syncs**, può importare le traduzioni a ogni push ed esportarle come pull request, per impostazione predefinita da un branch `phrase-translations`. Prima che General Translation scriva qualsiasi file, disattiva ogni sincronizzazione in modo che smetta di importare ed esportare, chiudi le eventuali pull request di Phrase ancora aperte e rimuovi i passaggi `phrase push` e `phrase pull` dalla tua CI. Se due strumenti scrivono sugli stessi file, prevale quello che scrive per ultimo.

Se le tue app mobili usano Phrase OTA, le app installate continueranno a ricevere i nuovi rilasci OTA. Per interrompere gli aggiornamenti, smetti di creare rilasci oppure elimina la distribuzione, poi rimuovi l&#39;SDK in un rilascio successivo dell&#39;app.

## Passaggio 3: indica alla CLI dove trovare i file

Installa la CLI `gt` e descrivi i file scaricati in `gt.config.json`:

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

La CLI legge la sintassi dei messaggi di i18next e next-intl dai file JSON quando trova `i18next` o `next-intl` nel tuo `package.json`, mentre tratta gli altri valori JSON come semplici stringhe. (Vedi [File JSON](/docs/cli/reference/formats/json-files).)

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 che disponga delle autorizzazioni **Files &gt; Write**, **Translation queue &gt; Enabled** e **Context &gt; Write**.

## Passaggio 4: Importa la tua term base e il contesto delle chiavi

In Phrase Strings, apri **Term bases**, poi **More &gt; Download CSV**, scegli i campi e fai clic su **Download**. Il file contiene le colonne `term`, `case_sensitive`, `translatable` e `description`, più una colonna per ogni impostazione regionale. (Vedi [Uploading and downloading terms](https://support.phrase.com/hc/en-us/articles/10112307427740).) Rinomina `description` in `definition` e ogni colonna delle impostazioni regionali, ad esempio `de`, in `translation_de`, quindi elimina le colonne `case_sensitive` e `translatable`. Lo strumento di importazione di General Translation legge direttamente questo layout e interpreta gli altri tramite 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 di traduzione: in questo modo le nuove traduzioni useranno la tua terminologia fin da subito.

Le descrizioni delle chiavi e i limiti di caratteri indicano al traduttore il significato di una stringa e la lunghezza massima consentita. Aggiungi un secondo target di pull per il tuo locale di origine con `file_format: strings_json`, salvandolo al di fuori delle cartelle indicate in `gt.config.json` (ad esempio `./phrase-export/app.strings.json`). Questo file include la `description` e il `max_characters_allowed` di ogni chiave; trascrivili in un file di [metadati associati alle chiavi](/docs/cli/reference/keyed-metadata) accanto al file sorgente:

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

Ricrea le tue guide di stile come [Prompt Personalizzati](/docs/platform/dashboard/guides/defining-context-for-translations). Per conservare un archivio della tua memoria di traduzione, scarica ciascuna lingua del progetto in formato TMX.

## Passaggio 5: 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 quindi solo ciò che manca, ad esempio 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. Le chiavi che Phrase non aveva tradotto verranno tradotte da General Translation alla successiva modifica del relativo file sorgente. Per pubblicarle prima, completale in Phrase prima di eseguire il pull.

## Passaggio 6: traduci automaticamente i nuovi testi

D&#39;ora in poi, esegui [`npx gt translate`](/docs/cli/reference/commands/translate) nella tua [build o pipeline 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, così da non 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 tali modifiche.

## Quando conviene restare su Phrase?

Conviene restare su Phrase quando un&#39;unica piattaforma deve gestire sia le stringhe del software sia un programma di traduzione di documenti in Phrase TMS, quando le app mobile native dipendono dagli aggiornamenti OTA, quando commissionate la traduzione umana tramite Phrase o quando la vostra pipeline scambia file XLIFF o ARB. (Vedi [General Translation vs. Phrase](/kb/general-translation-vs-phrase).)

## Domande frequenti

### Perderò le mie traduzioni verificate?

No, a patto di eseguire il pull senza fallback e di lanciare [`npx gt upload`](/docs/cli/reference/commands/upload) prima di [`npx gt translate`](/docs/cli/reference/commands/translate). Le traduzioni caricate restano invariate finché il relativo testo di origine non cambia, e il tuo team può correggere qualsiasi traduzione dalla [dashboard](/docs/platform/dashboard/guides/reviewing-translations).

## Punti chiave

* Esporta un file per ogni impostazione regionale con `include_empty_translations: false` e senza impostazione locale di fallback, nel formato già letto dalla tua app.
* Disattiva Repo Sync e OTA prima che General Translation scriva negli stessi file.
* Allinea i nomi delle impostazioni regionali di Phrase ai `locales` in `gt.config.json`, importa la term base in un gruppo di contesto e riporta le descrizioni delle chiavi e i limiti di caratteri come contesto per singola chiave prima di tradurre.
* 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 Phrase: General Translation vs. Phrase](https://generaltranslation.com/it/kb/general-translation-vs-phrase.mdx): General Translation è una valida alternativa a Phrase Strings quando la tua app e la documentazione vengono rilasciate insieme. Genera le traduzioni a partire dal codice e dai file di contenuto, applica una terminologia condivisa e si integra nel tuo flusso di lavoro di rilascio. Phrase combina la localizzazione del software con un TMS incentrato sui documenti, la gestione dei fornitori e un'ampia scelta di motori di traduzione.
- [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 Crowdin a General Translation?](https://generaltranslation.com/it/kb/migrate-from-crowdin.mdx): 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.
- [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: [Come si migra da Lokalise a General Translation?](https://generaltranslation.com/it/kb/migrate-from-lokalise.mdx)
- Next question: [Fase di compilazione, runtime o proxy di traduzione: come distribuire le traduzioni?](https://generaltranslation.com/it/kb/build-time-vs-runtime-translation.mdx)

## Sitemap

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