---
title: "verbatra pseudo"
description: "Genera un pseudolocale a partir de tus cadenas de origen para que destaquen los botones cortados y las etiquetas sin extraer, sin proveedor ni clave de API."
type: "reference"
---
# verbatra pseudo

Genera un pseudolocale a partir de tus cadenas de origen para que destaquen los botones cortados y las etiquetas sin extraer, sin proveedor ni clave de API.

<AvailableFrom version="0.11.0" />

Ejecuta tu app en un idioma que no existe. `pseudo` construye un locale falso a partir de tus cadenas de origen: cada valor se acentúa, se alarga y se envuelve en marcadores visibles, así que los botones recortados, las frases pegadas a trozos y las etiquetas nunca extraídas saltan a la vista. Con `--mode bidi` muestra en cambio cada cadena de derecha a izquierda. No construye ningún proveedor, no lee ninguna clave de API ni hace peticiones de red, así que funciona antes de que exista una clave.

## Sinopsis [#sinopsis]

```bash
verbatra pseudo [flags]
```

## Ejemplos [#ejemplos]

```bash
# generar en-XA en .verbatra-local/pseudo
verbatra pseudo

# mostrar cada cadena de derecha a izquierda en ar-XB
verbatra pseudo --mode bidi

# escribirlo donde el servidor de desarrollo ya sirve archivos estáticos (no hagas commit de un archivo bidi: GitHub marca su Unicode oculto)
verbatra pseudo --out public/locales-pseudo

# resultado legible por máquina para un script
verbatra pseudo --json
```

## Flags [#flags]

| Flag | Argumento | Por defecto | Efecto |
| --- | --- | --- | --- |
| `--mode` | `<mode>` | `accented` | <AvailableFrom version="0.12.0" /> la transformación: `accented` o `bidi`, que muestra cada palabra de derecha a izquierda (si no, `INVALID_OPTION`) |
| `--locale` | `<code>` | `en-XA` (`ar-XB` con `--mode bidi`) | el pseudolocale que se genera; solo letras, dígitos y guiones (si no, `INVALID_LOCALE`) |
| `--out` | `<path>` | `.verbatra-local/pseudo` | directorio donde se escribe el pseudolocale, relativo al directorio de trabajo y dentro de la raíz del proyecto; un valor vacío es `INVALID_OUT` |

También acepta los [flags globales](https://verbatra.kreitz-webdev.de/es/docs/cli.md#flags-globales) `--cwd`, `--config` y `--json`.

## Comportamiento [#comportamiento]

### Qué hace la transformación [#qué-hace-la-transformación]

| Paso | Lo que ves |
| --- | --- |
| Acentuar | cada letra ASCII pasa a un doble acentuado, así que `Save` se lee `Śáṽé` |
| Alargar | el valor crece alrededor de un tercio de su longitud traducible, más o menos lo que el alemán necesita frente al inglés |
| Marcar | el valor se envuelve entre `[` y `]`, así que una cadena recortada o concatenada se ve enseguida |

`Hello {{name}}, you have {{count}} unread messages` se convierte en
`[Ĥéĺĺó {{name}}, ýóú ĥáṽé {{count}} úńŕéáḋ ṁéśśáġéś············]`.

Solo cambia el texto traducible. Los placeholders sobreviven en cualquier sintaxis que reconozcan los [adaptadores de formato](https://verbatra.kreitz-webdev.de/es/docs/formats.md), y dentro de un mensaje ICU los nombres de argumento, las palabras clave `plural` y `select` y los selectores de rama se quedan como están. Las formas plurales de vue-i18n separadas por barras se transforman una a una: `car | cars` pasa a `[ćáŕ··] | [ćáŕś··]`. La transformación es determinista, así que el archivo produce diffs limpios.

### Modo de derecha a izquierda [#modo-de-derecha-a-izquierda]

<AvailableFrom version="0.12.0" />

`--mode bidi` cambia los acentos por una anulación de derecha a izquierda, el mismo enfoque que Android y Chromium usan para su pseudolocale `ar-XB`, así que un diseño que da por hecho texto de izquierda a derecha se nota antes de que exista ninguna traducción de derecha a izquierda.

| Paso | Lo que ves |
| --- | --- |
| Anular | cada palabra va entre una marca y una anulación de derecha a izquierda (`U+200F U+202E` delante, `U+202C U+200F` detrás), así que `Save` se muestra como `evaS` |
| Conservar | los placeholders, la sintaxis ICU, el marcado, los dígitos y la puntuación quedan fuera de la anulación y se leen de izquierda a derecha, como en un texto real de derecha a izquierda |

Nada se acentúa, se alarga ni va entre corchetes: la anchura es lo que prueba el modo por defecto. El archivo guarda las letras en su orden original, y cada valor pasa la misma puerta de integridad, así que los placeholders y las ramas de plural quedan idénticos byte a byte.

El pseudolocale por defecto es `ar-XB`, que `Intl.Locale` y la mayoría de las bibliotecas de i18n resuelven de derecha a izquierda, así que una app que deduce `dir` del locale se invierte sola. `ar-XB` sigue las reglas de plural del árabe (`zero`, `one`, `two`, `few`, `many`, `other`). Los mensajes ICU, los `<plurals>` de Android, gettext, los catálogos de Apple y las barras de vue-i18n resuelven una cantidad con las formas que el archivo ya tiene. `i18next-json` guarda cada forma en su propia clave `_one` u `_other`, así que el archivo recibe además cada categoría que le falta al origen (`_zero`, `_two`, `_few`, `_many`, y las formas ordinales igual), rellenada con la forma `other` del origen, y ninguna cantidad recurre a tu idioma de respaldo. Pasa `--locale en-XB` para conservar las reglas de plural del inglés, y pon tú `dir="rtl"`.

Un sanitizador que elimina los caracteres de formato Unicode quita la anulación, y la cadena vuelve a mostrarse de izquierda a derecha. Los editores y escáneres de código que avisan de caracteres bidireccionales ocultos marcan el archivo, un motivo más para que se quede en `.verbatra-local`.

### Nunca llega nada roto al archivo [#nunca-llega-nada-roto-al-archivo]

Cada valor generado pasa la misma puerta de integridad que la traducción de un proveedor: los mismos placeholders que el origen, sintaxis de mensaje válida, sin degenerar, no vacío. Un valor que fallaría se copia tal cual del origen y aparece bajo `copied verbatim`; es un aviso, no un fallo.

### Dónde va la salida [#dónde-va-la-salida]

El pseudolocale se escribe fuera de tus archivos de locale reales, por defecto en `.verbatra-local/pseudo`, que [`verbatra init`](https://verbatra.kreitz-webdev.de/es/docs/cli/init.md) añade a `.gitignore` (`pseudo` añade la entrada si falta). Tu `files.pattern` se expande dentro de ese directorio, así que con `locales/{locale}.json` la ejecución por defecto escribe `.verbatra-local/pseudo/locales/en-XA.json`. Apunta tu servidor de desarrollo ahí, o usa `--out` para escribir donde tu build ya sirve archivos.

`PSEUDO_OUTPUT_CONFLICT` rechaza, antes de leer o escribir nada:

- un pseudolocale que nombra tu locale de origen o un locale de destino,
- un `--out` que deja el archivo en el mismo directorio que un archivo de locale configurado,
- un `--out` absoluto, que sale de la raíz del proyecto o que, tras resolver los enlaces simbólicos, acaba fuera del proyecto, en su raíz o sobre un archivo del que depende el proyecto.

Como el archivo queda fuera de `files.pattern`, [`translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md) nunca gasta en él y [`check`](https://verbatra.kreitz-webdev.de/es/docs/cli/check.md) y [`diff`](https://verbatra.kreitz-webdev.de/es/docs/cli/diff.md) nunca lo informan.

### Formatos que se escriben parcheando un archivo existente [#formatos-que-se-escriben-parcheando-un-archivo-existente]

Los escritores de `xliff` y `apple-xcstrings` parchean unidades que ya están en el documento de destino, así que el archivo del pseudolocale se vuelve a copiar desde tu archivo de origen en cada escritura, y una clave añadida después al origen también llega. En un XLIFF copiado, `target-language` se reescribe al pseudolocale.

### Salida JSON [#salida-json]

Esquema: [`pseudo-envelope.json`](https://verbatra.kreitz-webdev.de/schema/v1/pseudo-envelope.json) valida el envoltorio completo; [Esquemas](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#esquemas) enumera los demás.

Con `--json`, el [envoltorio JSON](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#salida-json) lleva `locale`, `mode` (`accented` o `bidi`), `path`, `entries` (entradas escritas, incluidas las formas de plural añadidas en modo bidi), `transformed` (valores que difieren del origen), `copied` (claves copiadas tal cual) y `written` (`false` cuando el archivo ya estaba al día).

### Información en el terminal [#información-en-el-terminal]

<AvailableFrom version="0.12.0" />

El resultado va a stdout; la línea de progreso y el siguiente paso van a stderr:

```text output
verbatra: pseudolocalizing the source... done (0.1s)
verbatra pseudo
  en-XA (accented): 118 of 120 entries pseudolocalized
    copied verbatim: legal.disclaimer, brand.name
  wrote .verbatra-local/pseudo/locales/en-XA.json
next: load .verbatra-local/pseudo/locales/en-XA.json as the en-XA locale in your dev server
```

Una segunda ejecución sobre un origen sin cambios informa `unchanged` en lugar de `wrote`. `--quiet` elimina las líneas de stderr. Consulta [Salida en el terminal](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#salida-en-el-terminal).

## Códigos de salida [#códigos-de-salida]

| Código | Significado |
| --- | --- |
| `0` | se generó el pseudolocale, haya cambiado el archivo o no; los valores copiados tal cual no cambian esto |
| `2` | no pudo ejecutarse: un error de uso, un problema de configuración o de origen, o un pseudolocale o una ruta de salida rechazados |

Consulta [el contrato de códigos de salida](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#códigos-de-salida).

## Relacionado [#relacionado]

- [`verbatra translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md) hace lo de verdad, en cuanto tengas una clave.
- [`verbatra doctor`](https://verbatra.kreitz-webdev.de/es/docs/cli/doctor.md) también valida un proyecto sin gastar nada.
- [Formatos](https://verbatra.kreitz-webdev.de/es/docs/formats.md) lista la sintaxis de placeholders de cada formato.
- [El archivo de configuración](https://verbatra.kreitz-webdev.de/es/docs/config-file.md) documenta `files.pattern`, que fija la estructura del archivo generado.
