
Pseudo-Localization: اختبر جاهزية i18n دون ترجمات حقيقية
الترجمات الحقيقية تستغرق وقتًا وتكلّف مالًا. تقوم pseudo-localization بتحويل سلاسل المصدر إلى نص قابل للقراءة لكنه مزيف بوضوح، ما يكشف أخطاء i18n فورًا؛ مثل السلاسل المرمّزة صلبًا، وتجاوز النص للمساحة، ومشكلات RTL، ومشكلات الربط.
ما هي pseudo-localization؟
تستبدل pseudo-localization الأحرف في سلاسل المصدر بأحرف مُشكَّلة أو ممتدة ومتشابهة بصريًا، وتضيف حشوًا لتوسيع النص، وتغلّف السلاسل بأقواس. تظل النتيجة قابلة للقراءة للمطورين، لكنها تبدو مختلفة بوضوح عن النص الحقيقي؛ ما يجعل اكتشاف السلاسل التي لم تُغلَّف بدوال الترجمة أمرًا سهلًا للغاية.
// 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 visibleالاستخدام في مشروعك
ثبّت i18n-pseudo وشغّله على ملفات locale لديك. تكتشف الأداة تلقائيًا تنسيق الملف وتولّد نسخة pseudo-localized يمكنك تحميلها كلغة اختبار في تطبيقك.
// 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 استراتيجيات تحويل
يوفّر i18n-pseudo 7 استراتيجيات تحويل تختبر كل واحدة منها جانبًا مختلفًا من تنفيذ i18n لديك. استخدمها منفردة للاختبار المستهدف، أو اجمعها مع إعدادات مسبقة لتغطية شاملة.
// 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 إعدادات مسبقة مدمجة
تجمع الإعدادات المسبقة عدة استراتيجيات في تكوينات شائعة. استخدم إعدادًا مسبقًا للاختبار السريع، أو أنشئ تركيبات مخصصة لاحتياجاتك.
// 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.*"
]
}دمج CI/CD
شغّل pseudo-localization في CI لاكتشاف تراجعات i18n تلقائيًا. ولّد ملفات pseudo-localized، واعرض الشاشات الأساسية، وقارنها بلقطات الشاشة المرجعية. أي نص غير مُحوَّل في لقطات الشاشة يُعد تراجعًا؛ أي سلسلة مرمّزة صلبًا جديدة تجاوزت دالة الترجمة.
# .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: pseudoجرّب i18n Agent الآن
أفلت ملف الترجمة هنا
JSON, YAML, PO, XML, CSV, Markdown, Properties
أو انقر للاستعراض
اللغات المستهدفة