# General Translation Knowledge Base: Qu’est-ce que la pseudo-localisation ?
URL: https://generaltranslation.com/fr/kb/pseudo-localization.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: La pseudo-localisation est un test qui remplace votre texte source par une version modifiée, accentuée, allongée d’environ 40 % et encadrée de crochets, afin de faire apparaître les chaînes codées en dur, les troncatures, les polices défaillantes et les phrases concaténées avant même qu’une traduction n’existe. Android propose à cet effet les pseudo-paramètres régionaux en-XA et ar-XB.
Category: Internationalisation
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

La pseudo-localisation (ou pseudolocalisation) permet de vérifier si votre code est prêt pour la traduction, et non si une traduction est de bonne qualité. Comme le texte modifié reste lisible, n’importe quel membre de l’équipe peut parcourir l’application dans un pseudo-paramètre régional et repérer ce qui ne fonctionne pas. Elle s’exécute en quelques secondes, ne coûte rien et peut être mise en place dès le premier jour de développement.

## Quelle est la différence entre la pseudo-traduction et un pseudo-paramètre régional ?

[La documentation de Microsoft sur la globalisation](https://learn.microsoft.com/en-us/globalization/methodology/pseudolocalization) distingue deux aspects :

* La **pseudo-traduction** transforme les chaînes elles-mêmes : « Save changes » devient par exemple `[Šáṽé çĥáñĝéš~~~~~]`.
* Les **pseudo-paramètres régionaux** sont de faux codes de paramètres régionaux, comme `qps-ploc` sous Windows ou `en-XA` sous Android, que l&#39;on peut sélectionner comme une vraie langue. Certains utilisent en outre des formats de date, d&#39;heure et de nombre volontairement inhabituels afin de tester le code de formatage.

Microsoft recommande d&#39;utiliser des codes bien formés, mais qui ne désigneront jamais un paramètre régional réel, comme les codes `qps-` de Windows, situés dans une plage que BCP 47 réserve à un usage privé. L&#39;entreprise l&#39;a appris à ses dépens : son premier pseudo-paramètre régional était `tk-TM` (turkmène, Turkménistan), qui est ensuite devenu un véritable paramètre régional de Windows et est entré en conflit avec les systèmes de compilation et de test.

## Quels bugs la pseudo-localisation permet-elle de détecter ?

* **Chaînes codées en dur.** Tout texte qui n&#39;est pas passé par votre couche i18n reste en anglais brut alors que tout ce qui l&#39;entoure est accentué : il saute donc aux yeux sur chaque écran. (Pour les repérer dans le code, consultez [Comment trouver les chaînes codées en dur qui ne sont pas traduites ?](/kb/find-hardcoded-strings))
* **Troncature et débordement dus au foisonnement du texte.** Les chaînes allongées révèlent quels boutons, onglets et en-têtes de tableau sont tronqués, passent mal à la ligne ou repoussent des contrôles hors de l&#39;écran.
* **Problèmes d&#39;encodage et de police.** Les caractères accentués et non latins mettent en évidence les encodages défectueux, les polices dépourvues des glyphes nécessaires et les hauteurs de ligne qui rognent les signes diacritiques.
* **Concaténation.** Une phrase assemblée à partir de fragments apparaît sous la forme de plusieurs morceaux entre crochets, `[Ýöû ĥáṽé~~~~] 3 [íţéɱš~~]`, au lieu d&#39;un seul : cela indique que les traducteurs recevraient les fragments sans la phrase complète.
* **Prise en charge du right-to-left manquante.** Un pseudo-paramètre régional RTL montre si la mise en page s&#39;inverse correctement, quelles icônes doivent être retournées et où les valeurs left-to-right posent problème. (Consultez [Comment prendre en charge les langues RTL (right-to-left) en CSS ?](/kb/right-to-left-css))

## Comment fonctionne la pseudo-localisation ?

La plupart des outils combinent plusieurs des techniques suivantes :

* **Accents et autres systèmes d’écriture.** Remplacer `a` par des caractères comme `á`, `ä` ou `å`, et les chiffres par des chiffres cerclés, comme le suggère le guide de Microsoft.
* **Expansion.** Allonger chaque chaîne. Pour des sources en anglais, Microsoft retient environ 40 % comme règle empirique, et précise que certaines chaînes s’allongent de 200 %, voire de 400 % une fois traduites, les chaînes d’un ou deux mots étant celles qui s’allongent le plus.
* **Délimiteurs.** Encadrer chaque chaîne de marqueurs, par exemple des crochets ou des accents circonflexes. Si le marqueur de fermeture manque, c’est que le texte a été tronqué.
* **Identifiants.** Ajouter éventuellement un court identifiant à chaque chaîne pour qu’un testeur puisse en retrouver la source.
* **Right-to-left.** Inverser le sens du texte pour que l’IU se comporte comme en arabe ou en hébreu, à l’image de `ar-XB` sur Android et du mode miroir `qps-plocm` sur Windows.

Les traductions peuvent aussi être plus courtes. Une variation de largeur dépend d’une chaîne précise, affichée dans une police, une taille et une graisse précises ; ce n’est pas un pourcentage fixe applicable à toute une langue. Les pseudo-traductions allongées permettent de tester l’expansion. Utilisez aussi de vraies traductions pour vérifier les libellés plus courts, l’espacement et l’alignement.

## Quelles plateformes proposent des pseudo-paramètres régionaux intégrés ?

| Plateforme          | Pseudo-paramètres régionaux                                                                          | Effet                                                                                                                                                                        | Activation                                                                                                                                                                                     |
| ------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android             | `en-XA`, `ar-XB`                                                                        | `en-XA` ajoute des accents, allonge le texte et place chaque message entre crochets ; `ar-XB` passe les messages en right-to-left et inverse leurs caractères                | `pseudoLocalesEnabled` sur le type de compilation debug ; activez les Options pour les développeurs et redémarrez l’appareil, puis sélectionnez le pseudo-paramètre régional dans ses paramètres de langue |
| Xcode (iOS, macOS)  | Double-Length, Right-to-Left, Accented, Bounded String, Tall et d’autres pseudo-langues | Doublent la longueur des chaînes, inversent le sens d’écriture, ajoutent des accents, encadrent les chaînes pour révéler la troncature, augmentent la hauteur des caractères | **Product &gt; Scheme &gt; Edit Scheme &gt; Run &gt; Options**, puis faites votre choix dans le menu **App Language**                                                                          |
| Windows             | `qps-ploc`, `qps-plocm`, `qps-ploca` (ainsi que `qps-Latn-x-sh` à partir de Windows 10) | Pseudo-paramètres régionaux de base, en miroir (right-to-left) et d’Asie de l’Est, avec des données de test pour les dates, les polices et la longueur des chaînes                        | Transmettez le nom du pseudo-paramètre régional aux API NLS, comme `GetLocaleInfoEx` ; le Multilingual App Toolkit de Microsoft pseudo-traduit les ressources                                           |
| Lingui (JavaScript) | N’importe quel nom de locale, comme `pseudo-LOCALE`                                     | Génère des messages accentués à la compilation, avec une variante right-to-left facultative                                                                                  | La clé `pseudoLocale` dans la configuration Lingui                                                                                                                                             |

Sur Android, le [guide des pseudo-paramètres régionaux](https://developer.android.com/guide/topics/resources/pseudolocales) les active dans le fichier Gradle du module :

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

La [référence Gradle](https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/BuildType) indique qu&#39;un filtre `resourceConfigurations` permet de retirer de l&#39;APK les ressources des pseudo-paramètres régionaux. Dans Xcode, la même feuille de schéma propose également l&#39;option **Show non-localized strings**, qui affiche en majuscules les chaînes que Xcode n&#39;exportera pas. (Voir la page d&#39;Apple [Preparing your interface for localization](https://developer.apple.com/documentation/xcode/preparing-your-interface-for-localization).) Windows répertorie ses codes sur la page [Pseudo-paramètres régionaux](https://learn.microsoft.com/en-us/windows/win32/intl/pseudo-locales) et précise que, par défaut, ils ne figurent pas parmi les paramètres régionaux système ([Using pseudo-paramètres régionaux](https://learn.microsoft.com/en-us/windows/win32/intl/using-pseudo-locales-for-localization-testing)). Lingui, de son côté, décrit sa configuration initiale dans son [guide de pseudo-localisation](https://lingui.dev/guides/pseudolocalization).

## Pseudo-localiser des chaînes en JavaScript

Sur le web, il n&#39;existe pas de pseudo-paramètre régional intégré, mais une transformation tient en quelques lignes. Celle-ci accentue les lettres ASCII, allonge le texte d&#39;environ 40 % et encadre le résultat de crochets, tout en laissant intacts les `{placeholders}` et les balises HTML afin que l&#39;interpolation et le balisage continuent de fonctionner :

```js title="pseudo.mjs"
// Équivalents accentués des lettres 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: 'Ž',
};

// Les espaces réservés comme {name} et les balises comme <b> doivent rester intacts
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('');
  // Ajouter environ 40 % de la longueur source pour simuler des traductions plus longues
  const padding = '~'.repeat(Math.ceil(text.length * expansion));
  // Les crochets indiquent le début et la fin d'une chaîne de caractères, ce qui rend la troncature visible
  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));
}
```

En exécutant `node demo.mjs` avec Node.js 24 :

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

Pour l&#39;utiliser, appliquez-la à chaque message renvoyé par votre couche i18n lorsqu&#39;un indicateur de débogage ou un faux paramètre régional est actif. Une phrase concaténée se trahit alors immédiatement :

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

// ❌ Trois fragments : les traducteurs ne voient jamais la phrase complète
console.log(pseudoLocalize('You have') + ' 3 ' + pseudoLocalize('items'));
// ✅ Un seul message avec un espace réservé
console.log(pseudoLocalize('You have {count} items'));
```

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

L&#39;expression régulière des espaces réservés gère les variables simples de type `{name}`. Les messages ICU plural et select imbriquent des accolades : appliquez donc la pseudo-localisation à la sortie formatée plutôt qu&#39;au message brut. Il en va de même pour le paquet npm [`pseudo-localization`](https://github.com/tryggvigy/pseudo-localization) : sa fonction `pseudoLocalizeString('Hello, {name}!')` renvoie `Ħḗḗŀŀǿǿ, {ƞȧȧḿḗḗ}!` et accentue donc aussi le nom de l&#39;espace réservé. Exécutez-la plutôt sur la sortie traduite, comme l&#39;indique son README. Ce paquet propose également une stratégie `bidi` pour tester l&#39;affichage right-to-left, ainsi qu&#39;un mode DOM qui pseudo-localise une page entière. Pour vérifier vous-même le rendu RTL, définissez `dir="rtl"` sur l&#39;élément `<html>` tant que le pseudo-paramètre régional est actif.

Pour repérer les chaînes codées en dur, appliquez la transformation au niveau de la couche i18n. Une transformation du DOM sur toute la page modifie aussi le texte codé en dur : elle permet de tester la mise en page, mais masque les chaînes qui ont échappé à vos appels de traduction. Transformer la sortie formatée modifie également les noms interpolés et les autres données ; conservez cette sortie dans l&#39;IU de test.

## Ce que la pseudo-localisation ne teste pas

La pseudo-localisation ne dit rien de la qualité de la traduction, de l&#39;ordre des mots ou du ton. Elle ne permet pas non plus de vérifier les règles de pluriel : l&#39;anglais compte 2 formes du pluriel, l&#39;arabe 6, et une chaîne de caractères anglaise accentuée conserve les 2 formes de l&#39;anglais. Selon le guide de Microsoft, elle « ne remplace pas entièrement » la validation de l&#39;application traduite : testez donc aussi de vraies langues avant le lancement. La [checklist de lancement d&#39;une application multilingue](/kb/multilingual-app-launch-checklist) détaille les points à vérifier.

## Associer la pseudo-localisation à de vraies traductions

General Translation vous permet de tester de vraies traductions pendant le développement : avec une clé API de projet disposant de l’autorisation de traduction à l’exécution, `gt-next` demande les traductions au service de GT à la demande. Passez à l’allemand pour vérifier la formulation et la mise en page réelles, puis à une langue dont les règles de pluriel diffèrent pour tester ces branches. Le texte situé en dehors de [`<T>`](/docs/react/reference/components/t) ou d’une fonction de traduction reste dans la langue source. (Consultez le [Démarrage rapide Next.js](/docs/react/nextjs-quickstart).) Utilisez la pseudo-localisation pour une première passe sur la mise en page, que les testeurs peuvent lire, puis générez les traductions destinées à la livraison avec la [CLI](/docs/cli/reference/commands/translate) et relisez-les dans l’[Éditeur de Traduction](/docs/platform/dashboard/guides/reviewing-translations) de GT ainsi que dans l’application en cours d’exécution. Un texte anglais simplement allongé ne permet pas de savoir si une phrase traduite est correcte ni si elle tient dans le même espace.

## Points clés

* La pseudo-localisation remplace le texte source par des versions accentuées, allongées, entourées de crochets ou inversées afin de détecter les bogues d&#39;i18n avant même le début de la traduction.
* Elle permet de repérer les chaînes codées en dur, les problèmes de troncature, de police et d&#39;encodage, les phrases concaténées ainsi que l&#39;absence de prise en charge du right-to-left.
* Android (`en-XA`, `ar-XB`), Xcode (pseudo-langues dans les options du schéma) et Windows (`qps-ploc`, `qps-plocm`, `qps-ploca`) l&#39;intègrent nativement ; sur le web, une simple fonction de transformation ou le paquet `pseudo-localization` suffit.
* Elle ne permet de tester ni la qualité de la traduction ni les règles de pluriel ; pour cela, testez avec de vraies traductions, que `gt-next` peut générer à la demande pendant le développement.

## Related questions

- [Comment trouver les chaînes codées en dur qui ne sont pas traduites ?](https://generaltranslation.com/fr/kb/find-hardcoded-strings.mdx): Exécutez dans votre CI un linter qui signale les littéraux de chaîne de caractères visibles par l’utilisateur, comme la règle no-literal-string d’eslint-plugin-i18next pour JSX, la vérification HardcodedText d’Android Lint ou le linter HardCodedString d’erb_lint pour Rails. Parcourez ensuite l’application avec un pseudo-paramètre régional pour repérer le texte que les vérifications statiques ne peuvent pas détecter.
- [Comment prendre en charge les langues RTL (right-to-left) en CSS ?](https://generaltranslation.com/fr/kb/right-to-left-css.mdx): Placez dir="rtl" et lang sur l’élément html, car lang seul ne modifie pas le sens d’écriture, puis remplacez les propriétés CSS physiques comme margin-left par des propriétés logiques comme margin-inline-start. Les lignes flex, les colonnes de grille et l’alignement du texte par défaut s’inversent automatiquement ; ce n’est pas le cas de translateX(), left et right.
- [Liste de contrôle des tests de localisation pour les applications multilingues](https://generaltranslation.com/fr/kb/multilingual-app-launch-checklist.mdx): Testez neuf points dans chaque paramètre régional pris en charge sur une compilation de Production : les parcours complets, y compris les états d’erreur et les e-mails, le changement de langue, les formes plurielles, la devise et les fuseaux horaires, le foisonnement du texte, la mise en page right-to-left, l’accessibilité, la distribution des traductions et des URL de langue explorables. Associez à chaque vérification un critère de réussite explicite.
- [Internationalisation et localisation (i18n et l10n)](https://generaltranslation.com/fr/kb/internationalization-vs-localization.mdx): L’internationalisation (i18n) désigne le travail de code et de conception qui permet à un même produit de prendre en charge de nombreux paramètres régionaux, par exemple le formatage des dates avec Intl ou la prise en charge du texte right-to-left. La localisation (l10n) l’adapte à un paramètre régional donné, ce qui englobe la traduction, mais aussi la devise, les formats de date, les unités, le ton et les aspects juridiques.

## Previous and next questions

- Previous question: [Qu’est-ce que hreflang et comment le configurer ?](https://generaltranslation.com/fr/kb/what-is-hreflang.mdx)
- Next question: [Qu’est-ce que le format de message ICU ?](https://generaltranslation.com/fr/kb/icu-message-format.mdx)

## Sitemap

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