# General Translation Knowledge Base: ¿Cómo migro de Crowdin a General Translation?
URL: https://generaltranslation.com/es/kb/migrate-from-crowdin.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 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.
Category: Herramientas para flujos de trabajo
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

Crowdin almacena tus archivos de origen, sus traducciones, un glosario y una memoria de traducción, y su integración de Git devuelve las traducciones en forma de pull requests. Al pasarte a General Translation, conservas los archivos de recursos que tu aplicación ya lee: la CLI de `gt` los importa junto con tus traducciones existentes y, a partir de ahí, traduce las cadenas nuevas y modificadas durante la compilación o en CI. Tu biblioteca de i18n, tus claves y el layout de tus archivos 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 glosario se convierte en un grupo de contexto que pueden compartir tu aplicación, tu documentación y otros proyectos.

## ¿Qué se conserva de Crowdin?

| En Crowdin                                                              | En General Translation                                                                                                                                                                                        |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Entradas `files` de `crowdin.yml`                                       | `files` en `gt.config.json`, con `[locale]` en lugar de `%locale%`                                                                                                                                            |
| Archivos traducidos                                                     | Se importan con [`npx gt upload`](/docs/cli/reference/commands/upload) y se conservan hasta que cambie su origen                                                                                              |
| Glosario                                                                | El glosario de un [grupo de contexto](/docs/platform/dashboard/guides/defining-context-for-translations), importado desde CSV                                                                                 |
| Guía de estilo y prompts de IA                                          | [Prompts personalizados](/docs/platform/dashboard/guides/defining-context-for-translations), globales o por configuración regional                                                                            |
| Contexto de cadenas y longitud máxima                                   | Comentarios en tus archivos de origen de Android e iOS, que General Translation interpreta como contexto, o un archivo de [metadatos asociados a claves](/docs/cli/reference/keyed-metadata) para JSON y YAML |
| Memoria de traducción                                                   | Las traducciones que hayas subido: las cadenas que no cambian las conservan y solo se traducen las cadenas nuevas o modificadas. Los archivos TMX no se importan                                              |
| Integración con GitHub o GitLab (ramas `l10n_` de forma predeterminada) | [`npx gt translate`](/docs/cli/reference/commands/translate) en CI, o pull requests de [Locadex](/docs/platform/locadex/quickstart)                                                                           |
| Corrección y aprobación                                                 | Edición en el [panel de control](/docs/platform/dashboard/guides/reviewing-translations), con aprobación en el Plan empresarial                                                                               |
| Entrega de contenido over-the-air (OTA) para apps móviles               | Las traducciones se incluyen en tus archivos de recursos 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 archivos de cadenas CSV o XLSX.

## Paso 1: Evita que Crowdin rellene los huecos con el texto de origen

De forma predeterminada, Crowdin [exporta las cadenas sin traducir como texto de origen](https://support.crowdin.com/project-settings/export/) para que los archivos nunca queden vacíos. Si lo importas tal cual, ese texto en inglés contará como traducciones terminadas. Antes de descargar, activa **Skip untranslated strings** en **Settings &gt; Export** dentro del proyecto de Crowdin (esta opción no tiene efecto mientras **Skip untranslated files** esté activada), o configura [`skip_untranslated_strings`](https://crowdin.github.io/crowdin-cli/advanced) en `crowdin.yml`:

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

Lo que significa &quot;omitir&quot; depende del formato. Crowdin elimina las cadenas sin traducir en JSON plano, YAML, Android XML, `.strings` y `.stringsdict` de iOS, y `.resx`. En cambio, en JSON anidado, JSON de i18next, gettext PO y archivos TS o JS las exporta como valores vacíos, así que busca las cadenas vacías en esos archivos y elimínalas antes de importarlos. Añade `export_only_approved: true` si quieres trasladar solo las traducciones revisadas.

## Paso 2: Descarga tus traducciones

Si los archivos de origen ya están en tu repositorio, descarga las traducciones con la [CLI de Crowdin](https://crowdin.github.io/crowdin-cli/commands/crowdin-download). Antes, revisa una vista previa de las rutas:

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

Sin la CLI, usa **Translations &gt; Build &amp; Download** en el proyecto de Crowdin, que aplica la configuración de exportación del proyecto. Si usas Crowdin Enterprise, establece `base_url` en `crowdin.yml` con la dirección de la API de tu organización.

Revisa los nombres de las carpetas de configuración regional. `%locale%` genera códigos de idioma y región, como `uk-UA`, mientras que `%two_letters_code%` genera códigos solo de idioma, como `uk`. Incluye los mismos códigos en `gt.config.json` o renómbralos al exportar con la opción [`languages_mapping`](https://support.crowdin.com/developer/configuration-file/) de Crowdin.

## Paso 3: Impide que Crowdin envíe traducciones

Las integraciones de Crowdin con GitHub y GitLab [se sincronizan cada hora de forma predeterminada](https://support.crowdin.com/github-integration/) y abren pull requests (merge requests en GitLab) desde ramas `l10n_`. Antes de que General Translation escriba ningún archivo, vacía el campo **Sync Schedule** de la integración y guarda los cambios para que Crowdin deje de enviar traducciones a tu repositorio; solo el miembro que configuró la integración puede editarla. Cierra los pull requests `l10n_` que sigan abiertos y elimina los pasos de Crowdin de tu CI. Cuando General Translation ya gestione los archivos, puedes eliminar la integración por completo. Si dos herramientas escriben en los mismos archivos, prevalecen los cambios de la última que escriba.

## Paso 4: Apunta la CLI a los mismos archivos

Instala la CLI de `gt` y convierte las entradas de tu `crowdin.yml` en `gt.config.json`. Cada patrón `translation` se convierte en un patrón `include` con `[locale]`:

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

Inicia sesión con [`npx gt login`](/docs/cli/reference/commands/login) y define `GT_PROJECT_ID`, o define `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; Habilitado** y **Contexto &gt; Escritura**.

## Paso 5: Migra tu glosario y el contexto de las cadenas

Un propietario o administrador del proyecto puede descargar el glosario en formato CSV desde la página [Glossaries](https://support.crowdin.com/glossary/) de Crowdin o mediante la CLI (`crowdin glossary list` muestra el ID):

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

Crowdin nombra las columnas según el idioma. Cambia el nombre de `Term [en]` a `term`, el de `Description [en]` a `definition` y el de cada columna de destino, como `Term [de]`, a `translation_de`; elimina las demás columnas y guarda el archivo. 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**, selecciona el archivo y asigna el grupo a tu proyecto antes de la primera ejecución de traducción, para que las nuevas traducciones usen tu terminología desde el principio.

El contexto de una cadena le indica al traductor qué significa, tanto si la escribió un desarrollador como si la generó Crowdin. Los comentarios situados encima de cada cadena en tus archivos de origen `strings.xml` de Android y `.strings` de iOS ya llegan a General Translation como contexto. Si el contexto solo está almacenado en Crowdin, obtén el `context` y el `maxLength` de cada cadena mediante la [API de cadenas de origen](https://support.crowdin.com/developer/api/v2/#tag/Source-Strings/operation/api.projects.strings.getMany) de Crowdin. Añade el contexto como comentarios en los archivos de origen de Android e iOS o, en el caso de JSON y YAML, escribe ambos valores en un archivo de [metadatos asociados a claves](/docs/cli/reference/keyed-metadata) junto al archivo de origen:

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

Recrea tu guía de estilo y tus instrucciones de prompts de IA como [prompts personalizados](/docs/platform/dashboard/guides/defining-context-for-translations). Para conservar una copia de tu memoria de traducción, descárgala en formato TMX con `crowdin tm download <tm-id>`.

## Paso 6: 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 generan traducciones nuevas que sobrescriben los archivos descargados. General Translation traducirá las cadenas que Crowdin no había traducido la próxima vez que cambie su archivo de origen. Si quieres publicarlas antes, termina de traducirlas en Crowdin antes de descargarlas.

## Paso 7: Traduce automáticamente el contenido 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 Crowdin?

Sigue con Crowdin si tienes un proyecto de código abierto que depende de su licencia gratuita y de traductores de la comunidad, si encargas traducción humana a través de su marketplace de proveedores, si intercambias archivos XLIFF u Office, o si tus aplicaciones móviles nativas dependen de actualizaciones over-the-air (OTA). (Consulta [General Translation vs. Crowdin](/kb/general-translation-vs-crowdin)).

## Preguntas frecuentes

### ¿Perderé mis traducciones revisadas?

No, siempre que omitas las cadenas sin traducir al exportar y ejecutes [`npx gt upload`](/docs/cli/reference/commands/upload) antes de [`npx gt translate`](/docs/cli/reference/commands/translate). Las traducciones subidas se conservan 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).

### ¿Puedo seguir usando Crowdin para parte del contenido?

Sí. Limita `include` y `exclude` en `gt.config.json` a los archivos que gestiona General Translation y deja que Crowdin siga sincronizando todo lo demás. Evita que ambas herramientas escriban en los mismos archivos.

## Puntos clave

* Activa Skip untranslated strings antes de exportar; de lo contrario, Crowdin rellenará los huecos con el texto de origen, que luego se importaría como traducción.
* Impide que la integración de Git de Crowdin haga push de traducciones antes de que General Translation escriba esos mismos archivos.
* Replica `crowdin.yml` en `gt.config.json`, importa el glosario a un grupo de contexto y traslada el contexto de las cadenas almacenado en Crowdin 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 Crowdin: General Translation vs. Crowdin](https://generaltranslation.com/es/kb/general-translation-vs-crowdin.mdx): Elige General Translation para mantener los textos en tus componentes y generar las traducciones con tu compilación. Crowdin gestiona proyectos de traducción en torno a archivos de recursos, traductores y flujos de trabajo de revisión, que los ingenieros conectan a la aplicación y mantienen a medida que el producto evoluciona. Crowdin sigue siendo una buena opción para la traducción comunitaria de proyectos de código abierto y los programas gestionados por proveedores.
- [¿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 Phrase a General Translation?](https://generaltranslation.com/es/kb/migrate-from-phrase.mdx): 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.
- [¿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 vue-i18n a gt-vue?](https://generaltranslation.com/es/kb/migrate-from-vue-i18n.mdx)
- Next question: [¿Cómo migro de Lokalise a General Translation?](https://generaltranslation.com/es/kb/migrate-from-lokalise.mdx)

## Sitemap

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