# General Translation Knowledge Base: Che cos'è la pseudo-localizzazione?
URL: https://generaltranslation.com/it/kb/pseudo-localization.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: La pseudo-localizzazione è un test che sostituisce il testo di origine con una versione alterata, con caratteri accentati, allungata di circa il 40% e racchiusa tra parentesi quadre, così che stringhe hardcoded, troncamenti, font che non vengono visualizzati correttamente e frasi concatenate emergano prima ancora che esista una traduzione. Android include a questo scopo le pseudo-impostazioni regionali en-XA e ar-XB.
Category: Internazionalizzazione
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

La pseudo-localizzazione (scritta anche pseudolocalizzazione) verifica se il codice è pronto per la traduzione, non la qualità di una traduzione. Dato che il testo alterato resta leggibile, chiunque nel team può navigare nell&#39;app con una pseudo-impostazione regionale e individuare ciò che non funziona. Richiede pochi secondi, non costa nulla e si può usare fin dal primo giorno di sviluppo.

## Qual è la differenza tra pseudotraduzione e pseudo-impostazione regionale?

La [documentazione di Microsoft sulla globalizzazione](https://learn.microsoft.com/en-us/globalization/methodology/pseudolocalization) distingue due aspetti:

* La **pseudotraduzione** trasforma le stringhe stesse: &quot;Save changes&quot; diventa qualcosa come `[Šáṽé çĥáñĝéš~~~~~]`.
* Le **pseudo-impostazioni regionali** sono codici locale fittizi, come `qps-ploc` di Windows o `en-XA` di Android, che si possono selezionare come una lingua reale. Alcune prevedono anche formati di data, ora e numeri volutamente insoliti, per testare il codice di formattazione.

Microsoft consiglia codici formalmente validi che però non corrisponderanno mai a un&#39;impostazione regionale reale, come i codici `qps-` di Windows, che rientrano in un intervallo riservato da BCP 47 all&#39;uso privato. L&#39;ha imparato a proprie spese: la sua prima pseudo-impostazione regionale era `tk-TM` (turkmeno, Turkmenistan), che in seguito è stata rilasciata come impostazione regionale reale di Windows, entrando in conflitto con i sistemi di build e di test.

## Quali bug individua la pseudo-localizzazione?

* **Stringhe hardcoded.** Qualsiasi testo che non passa dal livello di i18n resta in inglese semplice mentre tutto il resto è accentato, quindi salta all&#39;occhio in ogni schermata. (Per individuarle nel codice, consulta [Come trovo le stringhe hardcoded non tradotte?](/kb/find-hardcoded-strings))
* **Troncamento e overflow dovuti all&#39;espansione del testo.** Le stringhe allungate mostrano quali pulsanti, schede e intestazioni di tabella vengono tagliati, vanno a capo in modo scorretto o spingono i controlli fuori dallo schermo.
* **Problemi di codifica e di font.** I caratteri accentati e non latini fanno emergere codifiche errate, font privi dei glifi necessari e altezze di riga che tagliano i segni diacritici.
* **Concatenazione.** Una frase composta da frammenti appare come più segmenti tra parentesi, `[Ýöû ĥáṽé~~~~] 3 [íţéɱš~~]`, invece che come un unico blocco: segno che i traduttori riceverebbero i frammenti senza la frase completa.
* **Supporto right-to-left mancante.** Un&#39;pseudo-impostazione regionale RTL mostra se il layout viene specchiato, quali icone vanno capovolte e dove i valori left-to-right non vengono visualizzati correttamente. (Consulta [Come supporto le lingue RTL (right-to-left) in CSS?](/kb/right-to-left-css))

## Come funziona la pseudo-localizzazione?

La maggior parte degli strumenti combina alcune di queste tecniche:

* **Accenti e altri sistemi di scrittura.** Sostituire `a` con caratteri come `á`, `ä` o `å` e le cifre con cifre cerchiate, come suggerisce la guida di Microsoft.
* **Espansione.** Allungare ogni stringa. Per i testi sorgente in inglese, Microsoft indica circa il 40% come regola empirica e osserva che alcune stringhe, una volta tradotte, si allungano del 200% o persino del 400%, soprattutto quelle di una o due parole.
* **Delimitatori.** Racchiudere ogni stringa tra marcatori come parentesi quadre o accenti circonflessi. Se manca il marcatore di chiusura, il testo è stato troncato.
* **Identificatori.** Facoltativamente, aggiungere un breve ID a ogni stringa, in modo che un tester possa risalire alla sua sorgente.
* **Right-to-left.** Invertire la direzione del testo in modo che la UI si comporti come in arabo o in ebraico, come avviene con `ar-XB` di Android e con la variante speculare `qps-plocm` di Windows.

Le traduzioni possono anche risultare più corte. Una variazione di larghezza dipende da una specifica stringa renderizzata con un determinato font, dimensione e peso: non è una percentuale fissa valida per un&#39;intera lingua. Le pseudo-traduzioni con riempimento servono a verificare l&#39;espansione. Usa anche traduzioni reali per controllare le etichette più corte, le spaziature e l&#39;allineamento.

## Quali piattaforme offrono pseudo-impostazioni regionali integrate?

| Piattaforma         | Pseudo-impostazioni regionali                                                      | Cosa fanno                                                                                                                                                                     | Come attivarle                                                                                                                                                                                 |
| ------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android             | `en-XA`, `ar-XB`                                                                   | `en-XA` aggiunge accenti, allunga il testo e racchiude ogni messaggio tra parentesi; `ar-XB` imposta i messaggi in modalità right-to-left e ne inverte i caratteri             | `pseudoLocalesEnabled` sul tipo di build di debug; abilita le Opzioni sviluppatore e riavvia il dispositivo, quindi seleziona la pseudo-impostazione regionale nelle impostazioni della lingua |
| Xcode (iOS, macOS)  | Double-Length, Right-to-Left, Accented, Bounded String, Tall e altre pseudolingue  | Raddoppiano la lunghezza delle stringhe, invertono la direzione, aggiungono accenti, racchiudono le stringhe per evidenziare il troncamento, aumentano l&#39;altezza verticale | **Product &gt; Scheme &gt; Edit Scheme &gt; Run &gt; Options**, quindi scegli dal menu **App Language**                                                                                        |
| Windows             | `qps-ploc`, `qps-plocm`, `qps-ploca` (più `qps-Latn-x-sh` a partire da Windows 10) | Pseudo-impostazioni regionali di base, speculari (right-to-left) e dell&#39;Asia orientale, con dati di test per date, font e lunghezze delle stringhe                         | Passa il nome della pseudo-impostazione regionale alle API NLS, come `GetLocaleInfoEx`; il Multilingual App Toolkit di Microsoft esegue la pseudo-traduzione delle risorse                     |
| Lingui (JavaScript) | Qualsiasi impostazione regionale a tua scelta, come `pseudo-LOCALE`                | Genera messaggi accentati in fase di compilazione, con una variante right-to-left facoltativa                                                                                  | La chiave `pseudoLocale` nella config di Lingui                                                                                                                                                |

Su Android, la [guida alle pseudo-impostazioni regionali](https://developer.android.com/guide/topics/resources/pseudolocales) spiega come abilitarle nel file Gradle del modulo:

```kotlin title="build.gradle.kts"
android {
    buildTypes.getByName("debug") {
        isPseudoLocalesEnabled = true
    }
}
```

La [documentazione di riferimento di Gradle](https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/BuildType) indica che un filtro `resourceConfigurations` può rimuovere dall&#39;APK le risorse delle pseudo-impostazioni regionali. In Xcode, la stessa finestra dello schema include anche l&#39;opzione **Show non-localized strings**, che visualizza in maiuscolo le stringhe che Xcode non esporterà. (Consulta la pagina di Apple [Preparing your interface for localization](https://developer.apple.com/documentation/xcode/preparing-your-interface-for-localization).) Windows elenca i propri codici nella pagina [Pseudo-Locales](https://learn.microsoft.com/en-us/windows/win32/intl/pseudo-locales) e precisa che, per impostazione predefinita, non vengono enumerati come impostazioni regionali di sistema ([Using pseudo-locales](https://learn.microsoft.com/en-us/windows/win32/intl/using-pseudo-locales-for-localization-testing)), mentre Lingui ne descrive la configurazione nella [guida alla pseudolocalizzazione](https://lingui.dev/guides/pseudolocalization).

## Pseudo-localizzare le stringhe in JavaScript

Sul web non esiste una pseudo-impostazione regionale integrata, ma bastano poche righe per scrivere una trasformazione. Questa aggiunge accenti alle lettere ASCII, allunga il testo di circa il 40% e racchiude il risultato tra parentesi quadre, lasciando intatti i `{placeholders}` e i tag HTML in modo che interpolazione e markup continuino a funzionare:

```js title="pseudo.mjs"
// Caratteri accentati simili alle lettere ASCII
const ACCENTS = {
  a: 'á', b: 'ƀ', c: 'ç', d: 'ð', e: 'é', f: 'ƒ', g: 'ĝ', h: 'ĥ', i: 'í',
  j: 'ĵ', k: 'ķ', l: 'ļ', m: 'ɱ', n: 'ñ', o: 'ö', p: 'þ', q: 'ǫ', r: 'ŕ',
  s: 'š', t: 'ţ', u: 'û', v: 'ṽ', w: 'ŵ', x: 'ẋ', y: 'ý', z: 'ž',
  A: 'Á', B: 'Ɓ', C: 'Ç', D: 'Ð', E: 'É', F: 'Ƒ', G: 'Ĝ', H: 'Ĥ', I: 'Í',
  J: 'Ĵ', K: 'Ķ', L: 'Ļ', M: 'Ṁ', N: 'Ñ', O: 'Ö', P: 'Þ', Q: 'Ǫ', R: 'Ŕ',
  S: 'Š', T: 'Ţ', U: 'Û', V: 'Ṽ', W: 'Ŵ', X: 'Ẋ', Y: 'Ý', Z: 'Ž',
};

// I segnaposto come {name} e i tag come <b> devono rimanere intatti
const PROTECTED = /(\{[^}]*\}|<[^>]+>)/;

export function pseudoLocalize(text, { expansion = 0.4 } = {}) {
  const accented = text
    .split(PROTECTED)
    .map((part, i) =>
      i % 2 === 1 ? part : part.replace(/[A-Za-z]/g, (ch) => ACCENTS[ch])
    )
    .join('');
  // Aggiunge un riempimento pari a circa il 40% della lunghezza del testo sorgente per simulare traduzioni più lunghe
  const padding = '~'.repeat(Math.ceil(text.length * expansion));
  // Le parentesi quadre indicano l'inizio e la fine di una stringa, così l'eventuale troncamento risulta visibile
  return `[${accented}${padding}]`;
}
```

```js title="demo.mjs"
import { pseudoLocalize } from './pseudo.mjs';

for (const source of ['Save changes', 'Hello, {name}!', 'Read the <a>terms</a>']) {
  console.log(pseudoLocalize(source));
}
```

Eseguendo `node demo.mjs` con Node.js 24:

```text title="Output"
[Šáṽé çĥáñĝéš~~~~~]
[Ĥéļļö, {name}!~~~~~~]
[Ŕéáð ţĥé <a>ţéŕɱš</a>~~~~~~~~~]
```

Per usarla, applicala a ogni messaggio restituito dal tuo livello i18n mentre è attivo un flag di debug o un&#39;impostazione regionale fittizia. In questo modo, una frase concatenata si tradisce subito:

```js title="concatenation.mjs"
import { pseudoLocalize } from './pseudo.mjs';

// ❌ Tre frammenti: i traduttori non vedono mai la frase completa
console.log(pseudoLocalize('You have') + ' 3 ' + pseudoLocalize('items'));
// ✅ Un unico messaggio con un segnaposto
console.log(pseudoLocalize('You have {count} items'));
```

```text title="Output"
[Ýöû ĥáṽé~~~~] 3 [íţéɱš~~]
[Ýöû ĥáṽé {count} íţéɱš~~~~~~~~~]
```

L&#39;espressione regolare per i segnaposto gestisce variabili semplici come `{name}`. I messaggi ICU plural e select annidano le parentesi graffe, quindi applica la pseudo-localizzazione all&#39;output formattato anziché al messaggio grezzo. Lo stesso vale per il pacchetto npm [`pseudo-localization`](https://github.com/tryggvigy/pseudo-localization): la sua funzione `pseudoLocalizeString('Hello, {name}!')` restituisce `Ħḗḗŀŀǿǿ, {ƞȧȧḿḗḗ}!`, applicando gli accenti anche al nome del segnaposto, quindi eseguila sull&#39;output tradotto, come mostrato nel README. Il pacchetto offre anche una strategia `bidi` per i test right-to-left e una modalità DOM che pseudo-localizza un&#39;intera pagina. Per eseguire autonomamente una verifica RTL, imposta `dir="rtl"` sull&#39;elemento `<html>` mentre la pseudo-impostazione regionale è attiva.

Per individuare le stringhe hardcoded, applica la trasformazione al livello dell&#39;i18n. Una trasformazione del DOM sull&#39;intera pagina modifica anche il testo hardcoded: può quindi servire a testare il layout, ma nasconde quali stringhe sono sfuggite alle tue chiamate di traduzione. Trasformare l&#39;output formattato modifica anche i nomi interpolati e altri dati; limita quell&#39;output alla UI di test.

## Cosa non verifica la pseudo-localizzazione

La pseudo-localizzazione non dice nulla sulla qualità della traduzione, sull&#39;ordine delle parole o sul tono. Non permette nemmeno di mettere alla prova le regole del plurale: l&#39;inglese ha 2 forme plurali e l&#39;arabo ne ha 6, ma una stringa inglese con caratteri accentati mantiene comunque le 2 forme dell&#39;inglese. Secondo la guida di Microsoft, la pseudo-localizzazione &quot;non sostituisce completamente&quot; la validazione dell&#39;applicazione tradotta: prima del lancio, quindi, effettua i test anche con le lingue reali. La [checklist per il lancio di un&#39;app multilingue](/kb/multilingual-app-launch-checklist) spiega cosa controllare.

## Abbinare la pseudo-localizzazione alle traduzioni reali

General Translation consente di testare traduzioni reali durante lo sviluppo: con una chiave API di progetto dotata del permesso di traduzione in fase di esecuzione, `gt-next` richiede le traduzioni al servizio di GT su richiesta. Passate al tedesco per verificare la formulazione e il layout effettivi, e a una lingua con regole del plurale diverse per mettere alla prova i relativi rami. Il testo al di fuori di [`<T>`](/docs/react/reference/components/t) o di una funzione di traduzione rimane nella lingua sorgente (consultate l&#39;[Avvio rapido di Next.js](/docs/react/nextjs-quickstart)). Usate la pseudo-localizzazione per un primo controllo del layout che resti leggibile per i tester, quindi generate le traduzioni per il rilascio con la [CLI](/docs/cli/reference/commands/translate) e rivedetele nell&#39;[Editor di traduzione](/docs/platform/dashboard/guides/reviewing-translations) di GT e nell&#39;app in esecuzione. Allungare artificialmente il testo inglese non basta a stabilire se una frase tradotta sia corretta o se rientri nello stesso spazio.

## Punti chiave

* La pseudo-localizzazione sostituisce il testo di origine con versioni accentate, allungate, racchiuse tra parentesi o speculari, così da individuare i bug di i18n prima che inizi la traduzione.
* Fa emergere stringhe hardcoded, problemi di troncamento, di font e di codifica, frasi costruite per concatenazione e la mancanza di supporto right-to-left.
* Android (`en-XA`, `ar-XB`), Xcode (pseudolingue nelle opzioni dello schema) e Windows (`qps-ploc`, `qps-plocm`, `qps-ploca`) la supportano nativamente; sul web bastano una breve funzione di trasformazione o il pacchetto `pseudo-localization`.
* Non verifica la qualità della traduzione né le regole del plurale: per questo servono test con traduzioni reali, che `gt-next` può generare su richiesta durante lo sviluppo.

## Related questions

- [Come si trovano le stringhe hardcoded non tradotte?](https://generaltranslation.com/it/kb/find-hardcoded-strings.mdx): Esegui in CI un linter che segnali i letterali stringa visibili all'utente, come la regola no-literal-string di eslint-plugin-i18next per JSX, il controllo HardcodedText di Android Lint o il linter HardCodedString di erb_lint per Rails. Poi naviga nell'app con una pseudo-impostazione regionale per individuare il testo che i controlli statici non riescono a tracciare.
- [Come si supportano le lingue RTL (right-to-left) in CSS?](https://generaltranslation.com/it/kb/right-to-left-css.mdx): Imposta dir="rtl" e lang sull'elemento html, perché lang da solo non cambia la direzione, poi sostituisci le proprietà CSS fisiche come margin-left con proprietà logiche come margin-inline-start. Le righe flex, le colonne della griglia e l'allineamento predefinito del testo si invertono da sole; translateX(), left e right no.
- [Checklist per il test di localizzazione delle app multilingue](https://generaltranslation.com/it/kb/multilingual-app-launch-checklist.mdx): Verifica nove aspetti in ogni impostazione regionale supportata su una build di produzione: percorsi completi, inclusi gli stati di errore e le email, cambio di lingua, plurali, valuta e fusi orari, espansione del testo, layout right-to-left, accessibilità, distribuzione delle traduzioni e URL per lingua scansionabili. Assegna a ogni verifica un criterio di superamento esplicito.
- [Internazionalizzazione vs. localizzazione (i18n vs. l10n)](https://generaltranslation.com/it/kb/internationalization-vs-localization.mdx): L'internazionalizzazione (i18n) è il lavoro di sviluppo e progettazione che permette a un unico prodotto di supportare molte impostazioni regionali, ad esempio formattando le date con Intl e gestendo il testo right-to-left. La localizzazione (l10n) adatta il prodotto a una specifica impostazione regionale e comprende la traduzione, ma anche valute, formati di data, unità di misura, tono e aspetti legali.

## Previous and next questions

- Previous question: [Che cos'è l'ICU formato dei messaggi?](https://generaltranslation.com/it/kb/icu-message-format.mdx)
- Next question: [Che cos'è un sistema di gestione delle traduzioni (TMS)?](https://generaltranslation.com/it/kb/what-is-a-translation-management-system.mdx)

## Sitemap

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