Skip to main content

Pseudo-Localization: اختبر جاهزية i18n دون ترجمات حقيقية

الترجمات الحقيقية تستغرق وقتًا وتكلّف مالًا. تقوم pseudo-localization بتحويل سلاسل المصدر إلى نص قابل للقراءة لكنه مزيف بوضوح، ما يكشف أخطاء i18n فورًا؛ مثل السلاسل المرمّزة صلبًا، وتجاوز النص للمساحة، ومشكلات RTL، ومشكلات الربط.

1

ما هي pseudo-localization؟

تستبدل pseudo-localization الأحرف في سلاسل المصدر بأحرف مُشكَّلة أو ممتدة ومتشابهة بصريًا، وتضيف حشوًا لتوسيع النص، وتغلّف السلاسل بأقواس. تظل النتيجة قابلة للقراءة للمطورين، لكنها تبدو مختلفة بوضوح عن النص الحقيقي؛ ما يجعل اكتشاف السلاسل التي لم تُغلَّف بدوال الترجمة أمرًا سهلًا للغاية.

Pseudo-localization examples
// 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
تُعد pseudo-localization أسرع طريقة لاكتشاف أخطاء i18n. تستغرق ثوانٍ لتوليدها، ولا تكلّف شيئًا، وتكشف مشكلات لا تظهر إلا عند الاختبار بلغة حقيقية. ينبغي لكل مشروع جاهز لـ i18n استخدامها قبل تكليف ترجمات حقيقية.
2

الاستخدام في مشروعك

ثبّت i18n-pseudo وشغّله على ملفات locale لديك. تكتشف الأداة تلقائيًا تنسيق الملف وتولّد نسخة pseudo-localized يمكنك تحميلها كلغة اختبار في تطبيقك.

Issues caught by pseudo-localization
// 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 text
أضف لغة 'pseudo' إلى مُبدّل اللغات في تطبيقك أثناء التطوير. عندما يبدّل المطورون إليها، تصبح السلاسل غير المترجمة مرئية فورًا. أزل لغة pseudo قبل النشر إلى الإنتاج.
3

7 استراتيجيات تحويل

يوفّر i18n-pseudo 7 استراتيجيات تحويل تختبر كل واحدة منها جانبًا مختلفًا من تنفيذ i18n لديك. استخدمها منفردة للاختبار المستهدف، أو اجمعها مع إعدادات مسبقة لتغطية شاملة.

Pseudo-localization strategies
// 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 pass
4

5 إعدادات مسبقة مدمجة

تجمع الإعدادات المسبقة عدة استراتيجيات في تكوينات شائعة. استخدم إعدادًا مسبقًا للاختبار السريع، أو أنشئ تركيبات مخصصة لاحتياجاتك.

CLI & Configuration
// 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.*"
  ]
}
5

دمج CI/CD

شغّل pseudo-localization في CI لاكتشاف تراجعات i18n تلقائيًا. ولّد ملفات pseudo-localized، واعرض الشاشات الأساسية، وقارنها بلقطات الشاشة المرجعية. أي نص غير مُحوَّل في لقطات الشاشة يُعد تراجعًا؛ أي سلسلة مرمّزة صلبًا جديدة تجاوزت دالة الترجمة.

.github/workflows/pseudo-check.yml
# .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

أو انقر للاستعراض

اللغات المستهدفة

لا حاجة إلى التسجيلتقدير فوري

أسئلة شائعة حول pseudo-localization