# General Translation Knowledge Base: ¿Cómo migro de Phrase a General Translation?
URL: https://generaltranslation.com/es/kb/migrate-from-phrase.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Conserva tus archivos de configuración regional, tu biblioteca de i18n y tus traducciones verificadas. Descarga los archivos desde Phrase Strings sin claves sin traducir ni alternativas de respaldo, desactiva Repo Sync e impórtalos con npx gt upload antes de ejecutar npx gt translate por primera vez. A partir de ahí, General Translation traduce las cadenas nuevas y modificadas durante la compilación, con tu base terminológica en un grupo de contexto y las descripciones de las claves como contexto de cada clave.
Category: Herramientas para flujos de trabajo
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

Phrase Strings, el producto de localización de software de Phrase, almacena tus cadenas como claves dentro de un proyecto, genera los archivos de configuración regional al descargarlos y los sincroniza con tu repositorio. Al pasarte a General Translation, conservas los archivos de configuración regional que tu aplicación ya lee: la CLI `gt` los importa junto con tus traducciones existentes y luego traduce las cadenas nuevas y modificadas durante la compilación o en CI. Tu biblioteca de i18n y tus claves no cambian; mover los textos inline es un paso aparte y opcional (consulta [migrar desde react-i18next](/kb/migrate-from-react-i18next) o [desde next-intl](/kb/migrate-from-next-intl)). Tu base terminológica pasa a ser un grupo de contexto que pueden compartir tu aplicación, tu documentación y otros proyectos. Esta guía se centra en Phrase Strings; los documentos traducidos en Phrase TMS siguen un flujo de trabajo distinto.

## ¿Qué se conserva de Phrase Strings?

| En Phrase Strings                                                                | En General Translation                                                                                                                                        |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Objetivos de descarga de `.phrase.yml`                             | `files` en `gt.config.json`, con `[locale]` en lugar de `<locale_name>`                                                                                       |
| Traducciones                                                                     | Se importan con [`npx gt upload`](/docs/cli/reference/commands/upload) y se conservan hasta que cambia su texto de origen                                     |
| Base terminológica                                                               | El glosario de un [grupo de contexto](/docs/platform/dashboard/guides/defining-context-for-translations), importado desde CSV                                 |
| Guías de estilo                                                                  | [Prompts personalizados](/docs/platform/dashboard/guides/defining-context-for-translations), globales o por configuración regional                            |
| Descripciones de claves y límites de caracteres                                  | Un archivo de [metadatos asociados a claves](/docs/cli/reference/keyed-metadata) con `context` y `maxChars` por clave, para JSON y YAML                       |
| Memoria de traducción                                                            | Las traducciones que hayas subido: las cadenas sin cambios las conservan y solo se traducen las cadenas nuevas o modificadas. Los archivos TMX no se importan |
| Repo Sync                                                                        | [`npx gt translate`](/docs/cli/reference/commands/translate) en CI, o pull requests de [Locadex](/docs/platform/locadex/quickstart)                           |
| Verificación y revisión de traducciones                                          | Edición en el [panel de control](/docs/platform/dashboard/guides/reviewing-translations), con aprobación en el Plan empresarial                               |
| SDK over-the-air (OTA) para iOS, Android, React Native, Flutter, i18next y Rails | Las traducciones se distribuyen en tus archivos de configuración regional con cada lanzamiento de la app                                                      |

La CLI lee JSON, YAML, `.pot` y `.po`, `.strings`, `.stringsdict` y `.xcstrings` de iOS, `strings.xml` de Android, `.resx`, HTML, Markdown y MDX, entre otros. (Consulta los [formatos compatibles](/docs/cli/reference/config#files)). No lee XLIFF, ARB, `.properties` de Java ni exportaciones en CSV o XLSX, así que elige un formato compatible al descargar.

## Paso 1: Descarga un archivo por configuración regional

Phrase genera los archivos a partir de las claves en cada descarga. Si tu repositorio ya contiene archivos sincronizados por Phrase, descárgalos con los mismos objetivos de `.phrase.yml` para que el resultado coincida y genera un diff con respecto al repositorio antes de importarlos.

Un objetivo de descarga para una aplicación JSON tiene este aspecto:

```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
```

Luego, ejecuta [`phrase pull`](https://developers.phrase.com/en/developer-tools/strings-cli) con un token de acceso que tenga el ámbito `read`. Omite `--branch` para descargar desde la rama principal. Si tu cuenta está en el centro de datos de EE. UU. de Phrase, agrega `host: https://api.us.app.phrase.com/v2` bajo `phrase:` en `.phrase.yml`.

Para que la importación sea limpia, hay tres ajustes clave:

* **Claves sin traducir.** `include_empty_translations: false`, el valor predeterminado de la CLI, excluye las claves sin traducir. No configures `fallback_locale_id` ni `use_locale_fallback`, y comprueba que el ajuste del proyecto **Use fallback for unverified translations** esté desactivado. Todos ellos rellenan los huecos con el texto de otra configuración regional, que se importaría como si fuera una traducción.
* **Formato de archivo.** Usa el formato que tu biblioteca ya lee: `nested_json` o `simple_json`, `i18next_4` para i18next, `yml` para Rails, `strings` y `stringsdict` para iOS, `strings_catalog` para `.xcstrings` y `xml` para Android. El formato `json` de Phrase corresponde al JSON de las extensiones de Chrome, no a un JSON de uso general. (Consulta los [formatos de archivo compatibles](https://support.phrase.com/hc/en-us/articles/9652464547740) de Phrase).
* **Nombres de las configuraciones regionales.** `<locale_name>` se sustituye por el nombre que le diste a cada configuración regional en Phrase, como `de-AT`. La CLI `gt` exige que los nombres de las carpetas coincidan exactamente con tu lista `locales`, así que cambia el nombre de las configuraciones regionales en Phrase, mapéalas con `locale_mapping` bajo `phrase:` en `.phrase.yml` (Phrase CLI 2.59.0 o posterior), o indica en `gt.config.json` los nombres tal como se descargan.

Si no usas la CLI, abre la pestaña **Languages** del proyecto y haz clic en **Download** para descargar varias configuraciones regionales a la vez, dejando sin marcar **Include empty translations**.

## Paso 2: Desactiva Repo Sync y OTA

La función [Repo Sync](https://support.phrase.com/hc/en-us/articles/5784125562012-GitHub-Strings) de Phrase, que se configura en **Automations &gt; Repo Syncs**, puede importar al hacer push y exporta las traducciones como pull requests desde una rama `phrase-translations` de forma predeterminada. Antes de que General Translation escriba cualquier archivo, desactiva cada sincronización para que deje de importar y exportar, cierra los pull requests de Phrase que sigan abiertos y elimina los pasos `phrase push` y `phrase pull` de tu CI. Si dos herramientas escriben en los mismos archivos, prevalecen los cambios de la última que escriba.

Si tus aplicaciones móviles usan Phrase OTA, las aplicaciones instaladas seguirán recibiendo nuevos lanzamientos OTA. Para que dejen de recibir actualizaciones, deja de crear lanzamientos o elimina la distribución, y quita el SDK en un lanzamiento posterior de la aplicación.

## Paso 3: Indica al CLI dónde están los archivos

Instala el CLI `gt` y describe los archivos descargados en `gt.config.json`:

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

La CLI lee la sintaxis de mensajes de i18next y next-intl en los archivos JSON cuando encuentra `i18next` o `next-intl` en tu `package.json`, y trata el resto de valores JSON como cadenas simples. (Consulta [Archivos JSON](/docs/cli/reference/formats/json-files)).

Inicia sesión con [`npx gt login`](/docs/cli/reference/commands/login) y define `GT_PROJECT_ID`, o establece `projectId` en la configuración. En CI, usa `GT_API_KEY` con una clave de API de proyecto que tenga los permisos **Archivos &gt; Escritura**, **Cola de traducción &gt; Habilitada** y **Contexto &gt; Escritura**.

## Paso 4: Traslada tu base terminológica y el contexto de las claves

En Phrase Strings, abre **Term bases**, luego **More &gt; Download CSV**, elige los campos y haz clic en **Download**. El archivo contiene las columnas `term`, `case_sensitive`, `translatable` y `description`, además de una columna por cada configuración regional. (Consulta [Uploading and downloading terms](https://support.phrase.com/hc/en-us/articles/10112307427740)). Cambia el nombre de `description` a `definition` y el de cada columna de configuración regional, como `de`, a `translation_de`, y elimina las columnas `case_sensitive` y `translatable`. El importador de General Translation lee ese layout directamente e interpreta cualquier otro layout con IA. En el panel de control, crea un [grupo de contexto](/docs/platform/dashboard/guides/defining-context-for-translations), haz clic en **Import**, elige el archivo y asigna el grupo a tu proyecto antes de la primera ejecución de traducción. Así, las nuevas traducciones usarán tu terminología desde el principio.

Las descripciones de las claves y los límites de caracteres le indican al traductor qué significa una cadena y qué longitud puede tener. Añade un segundo objetivo de descarga (pull) para tu configuración regional de origen con `file_format: strings_json` y guárdalo fuera de las carpetas indicadas en `gt.config.json` (por ejemplo, `./phrase-export/app.strings.json`). Este archivo incluye la `description` y el `max_characters_allowed` de cada clave; escríbelos en un archivo de [metadatos asociados a claves](/docs/cli/reference/keyed-metadata) junto al archivo de origen:

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

Vuelve a crear tus guías de estilo como [Prompts personalizados](/docs/platform/dashboard/guides/defining-context-for-translations). Para conservar una copia de tu memoria de traducción, descarga cada idioma del proyecto en formato TMX.

## Paso 5: Sube los archivos antes de traducir

Ejecuta primero [`npx gt upload`](/docs/cli/reference/commands/upload). Este comando envía cada archivo de origen junto con su archivo traducido correspondiente para cada configuración regional, y guarda esas traducciones como completadas:

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

A continuación, [`npx gt translate`](/docs/cli/reference/commands/translate) traduce solo lo que falta, como una nueva configuración regional o un archivo sin traducir, y escribe los resultados en las mismas rutas. Si ejecutas [`npx gt translate`](/docs/cli/reference/commands/translate) antes de [`npx gt upload`](/docs/cli/reference/commands/upload), se generarán traducciones nuevas que sobrescribirán los archivos descargados. General Translation traducirá las claves que Phrase no había traducido la próxima vez que cambie su archivo de origen. Si quieres publicarlas antes, termínalas en Phrase antes de descargar los archivos.

## Paso 6: Traduce automáticamente el texto nuevo

A partir de ahora, ejecuta [`npx gt translate`](/docs/cli/reference/commands/translate) en tu [compilación o CI](/kb/translations-in-ci), o deja que [Locadex](/docs/platform/locadex/quickstart) abra pull requests con las traducciones. Haz commit de `gt-lock.json`, que registra las traducciones que la CLI ya ha escrito para no tener que volver a descargarlas. Si tu equipo edita archivos traducidos en el repositorio, ejecuta [`npx gt save-local`](/docs/cli/reference/commands/save-local) antes de la siguiente traducción para conservar esos cambios.

## ¿Cuándo conviene seguir con Phrase?

Sigue con Phrase si necesitas que una sola plataforma gestione tanto las cadenas de software como un programa de traducción de documentos en Phrase TMS, si tus aplicaciones móviles nativas dependen de actualizaciones OTA, si encargas traducción humana a través de Phrase o si tu flujo intercambia archivos XLIFF o ARB. (Consulta [General Translation vs. Phrase](/kb/general-translation-vs-phrase)).

## Preguntas frecuentes

### ¿Perderé mis traducciones verificadas?

No, siempre que descargues sin alternativas de respaldo y ejecutes [`npx gt upload`](/docs/cli/reference/commands/upload) antes de [`npx gt translate`](/docs/cli/reference/commands/translate). Las traducciones subidas se mantienen hasta que cambie su texto de origen, y tu equipo puede corregir cualquier traducción en el [panel de control](/docs/platform/dashboard/guides/reviewing-translations).

## Puntos clave

* Exporta un archivo por configuración regional con `include_empty_translations: false` y sin configuración regional de respaldo, en el formato que tu aplicación ya utiliza.
* Desactiva Repo Sync y OTA antes de que General Translation escriba en esos mismos archivos.
* Haz que los nombres de configuración regional de Phrase coincidan con los `locales` de `gt.config.json`, importa la base terminológica a un grupo de contexto y traslada las descripciones de las claves y los límites de caracteres como contexto por clave antes de traducir.
* Ejecuta [`npx gt upload`](/docs/cli/reference/commands/upload) antes del primer [`npx gt translate`](/docs/cli/reference/commands/translate) y, a partir de ahí, traduce el contenido nuevo durante la compilación o con Locadex.

## Related questions

- [Alternativas a Phrase: General Translation vs. Phrase](https://generaltranslation.com/es/kb/general-translation-vs-phrase.mdx): General Translation es una sólida alternativa a Phrase Strings cuando tu aplicación y tu documentación se publican a la vez. Genera traducciones a partir del código y de los archivos de contenido, aplica terminología compartida y se ejecuta dentro de tu flujo de trabajo de lanzamiento. Phrase combina la localización de software con un TMS centrado en documentos, gestión de proveedores y una amplia variedad de motores de traducción.
- [¿Cómo migro de Lokalise a General Translation?](https://generaltranslation.com/es/kb/migrate-from-lokalise.mdx): Conserva tus archivos de recursos, tu biblioteca de i18n y tus traducciones revisadas. Exporta desde Lokalise sin traducciones vacías, desactiva su sincronización con GitHub e importa los archivos con npx gt upload antes del primer npx gt translate. A partir de ahí, General Translation traduce las cadenas nuevas y modificadas durante la compilación, con tu glosario en un grupo de contexto y las descripciones de las claves como contexto por clave.
- [¿Cómo migro de Crowdin a General Translation?](https://generaltranslation.com/es/kb/migrate-from-crowdin.mdx): Conserva tus archivos de recursos, tu biblioteca de i18n y tus traducciones revisadas. Activa Skip untranslated strings, descarga tus traducciones, impide que la integración de Git de Crowdin envíe traducciones e importa los archivos con npx gt upload antes del primer npx gt translate. A partir de ahí, General Translation traduce las cadenas nuevas y modificadas durante la compilación, usando tu glosario desde un grupo de contexto.
- [¿Cómo mantengo las traducciones actualizadas en cada despliegue?](https://generaltranslation.com/es/kb/translations-in-ci.mdx): Ejecuta la traducción como un paso del flujo antes de cada compilación de producción, para que el texto nuevo se publique ya traducido en el mismo despliegue que lo incorpora. La CLI gt de General Translation lo hace con npx gt translate, usando una clave de API del proyecto y el ID del proyecto almacenados como secretos de CI.
- [¿Qué es la memoria de traducción y sigue siendo necesaria con la IA?](https://generaltranslation.com/es/kb/what-is-translation-memory.mdx): La memoria de traducción (TM) es una base de datos de pares de segmentos de origen y destino ya traducidos en la que una herramienta de traducción busca coincidencias exactas, en contexto y aproximadas. Con la IA, sigue siendo conveniente reutilizar la redacción aprobada y tener las traducciones anteriores disponibles como contexto. General Translation reutiliza las traducciones coincidentes de versiones anteriores de los archivos y conserva las ediciones del equipo, sin necesidad de mantener una TM aparte.

## Previous and next questions

- Previous question: [¿Cómo migro de Lokalise a General Translation?](https://generaltranslation.com/es/kb/migrate-from-lokalise.mdx)
- Next question: [¿Cuál es la mejor herramienta de localización continua para equipos que publican a diario?](https://generaltranslation.com/es/kb/best-continuous-localization-tools.mdx)

## Sitemap

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