
Pseudolocalizzazione: testare l'idoneità all'i18n senza traduzioni reali
Le traduzioni reali richiedono tempo e denaro. La pseudolocalizzazione trasforma le stringhe di origine in testo leggibile ma palesemente fittizio, che rivela immediatamente gli errori i18n: stringhe codificate direttamente, testo che fuoriesce, problemi RTL e difetti di concatenazione.
Che cos'è la pseudolocalizzazione?
La pseudolocalizzazione sostituisce i caratteri delle stringhe di origine con caratteri accentati o estesi visivamente simili, aggiunge riempimento per espandere il testo e racchiude le stringhe tra parentesi. Il risultato rimane leggibile per gli sviluppatori, ma è chiaramente diverso dal testo reale, rendendo immediato individuare le stringhe non racchiuse con funzioni di traduzione.
// Pseudo-localization transforms your source strings
// to simulate translation without real translators
// Original:
"Welcome to our application"
// Accented (simulates diacritics):
"[Ẁëľčöṁë ţö öüŕ àṗṗľïčàţïöñ]"
// Expanded (simulates text expansion ~30%):
"[Weeelcooomee tooo ouuur aaappliiicaaatiiioon]"
// Mirrored (simulates RTL layout):
"[noitacilppa ruo ot emocleW]"
// Brackets make untranslated strings immediately visibleUtilizzo nel progetto
Installi i18n-pseudo e lo esegua sui file di lingua. Lo strumento rileva automaticamente il formato e genera una versione pseudolocalizzata, che può caricare come lingua di test nell'app.
// 1. Hardcoded strings (not wrapped in t())
// Pseudo strings have brackets/accents, so untranslated
// strings are immediately obvious in the UI
// 2. Text truncation
// Expanded text reveals buttons and labels that break
// when translations are longer than English
// 3. Layout issues
// Accented characters reveal font rendering problems
// RTL mode reveals directional layout bugs
// 4. Concatenation bugs
// "Hello " + name vs t('greeting', { name })
// Pseudo-localization breaks concatenated strings
// 5. Missing i18n wrappers
// Any string not going through the i18n system
// appears as plain English among pseudo text7 strategie di trasformazione
i18n-pseudo offre 7 strategie di trasformazione, ciascuna delle quali verifica un aspetto diverso dell'implementazione i18n. Le usi singolarmente per test mirati oppure le combini con preimpostazioni per una copertura completa.
// Strategy 1: Accented characters
// Replace ASCII with similar-looking Unicode
// a -> à, e -> ë, o -> ö, etc.
// Preserves readability while testing rendering
// Strategy 2: Text expansion
// Pad strings to simulate longer translations
// German is ~30% longer, Finnish ~40% longer
// Helps catch UI overflow early
// Strategy 3: Brackets/wrappers
// Wrap strings in [brackets] or «guillemets»
// Makes untranslated strings visually obvious
// Strategy 4: Bidi/RTL
// Mirror text for right-to-left testing
// Catches layout issues before Arabic/Hebrew testing
// Strategy 5: Combined
// Apply all strategies simultaneously
// Maximum coverage in one pass5 preimpostazioni integrate
Le preimpostazioni combinano più strategie in configurazioni di uso comune. Usi una preimpostazione per un test rapido oppure crei combinazioni personalizzate per esigenze specifiche.
// Using i18n-pseudo CLI
npx i18n-pseudo generate \
--source locales/en.json \
--output locales/pseudo.json \
--preset accented
# Available presets:
# accented - Ḣëľľö Ẁöŕľð (default)
# expanded - Heeellooo Wooorld
# mirrored - dlroW olleH
# brackets - [Hello World]
# maximum - [Ḣëëëľľľöööö Ẁöööŕŕŕľľľðððð]
// i18n-pseudo.config.json
{
"source": "locales/en.json",
"output": "locales/pseudo.json",
"preset": "maximum",
"expansion": 1.4,
"wrapper": ["[", "]"],
"exclude": [
"*.url",
"*.email",
"branding.*"
]
}Integrazione CI/CD
Esegua la pseudolocalizzazione nella CI per rilevare automaticamente le regressioni i18n. Generi file pseudolocalizzati, visualizzi le schermate principali e le confronti con le acquisizioni di riferimento. Qualsiasi testo non trasformato nelle immagini è una regressione: una nuova stringa codificata direttamente che ha ignorato la funzione di traduzione.
# .github/workflows/pseudo-check.yml
name: Pseudo-Localization Check
on:
pull_request:
paths:
- 'src/**'
jobs:
pseudo-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Generate pseudo locale
run: npx i18n-pseudo generate \
--source locales/en.json \
--output locales/pseudo.json \
--preset maximum
- name: Build with pseudo locale
run: npm run build
env:
NEXT_PUBLIC_LOCALE: pseudo
- name: Run visual regression tests
run: npx playwright test --project=pseudo
env:
LOCALE: pseudoProvi subito i18n Agent
Trascinare qui il file di traduzione
JSON, YAML, PO, XML, CSV, Markdown, Properties
oppure fare clic per selezionarlo
Lingue di destinazione