Skip to main content

Lokalisasi Semu: Uji Kesiapan i18n Tanpa Terjemahan Nyata

Terjemahan nyata membutuhkan waktu dan biaya. Lokalisasi semu mengubah string sumber Anda menjadi teks yang dapat dibaca, tetapi jelas palsu, sehingga langsung mengungkap bug i18n — string yang di-hardcode, teks meluap, masalah RTL, dan masalah penggabungan.

1

Apa Itu Lokalisasi Semu?

Lokalisasi semu mengganti karakter dalam string sumber dengan karakter beraksen atau karakter diperluas yang tampak serupa, menambahkan padding perluasan teks, dan membungkus string dalam kurung. Hasilnya tetap dapat dibaca developer, tetapi tampak jelas berbeda dari teks nyata — sehingga string yang tidak dibungkus dengan fungsi terjemahan mudah ditemukan.

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
Lokalisasi semu adalah cara tercepat untuk menemukan bug i18n. Pembuatannya hanya memerlukan beberapa detik, tanpa biaya, dan menemukan masalah yang tidak terlihat hingga Anda menguji dengan bahasa nyata. Setiap proyek yang siap untuk i18n harus menggunakannya sebelum memesan terjemahan nyata.
2

Penggunaan dalam Proyek Anda

Instal i18n-pseudo dan jalankan pada file locale Anda. Alat ini secara otomatis mendeteksi format file dan menghasilkan versi yang dilokalkan secara semu untuk dimuat sebagai locale pengujian dalam aplikasi Anda.

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
Tambahkan locale 'pseudo' ke pengalih bahasa aplikasi selama pengembangan. Ketika developer beralih ke locale tersebut, string yang belum diterjemahkan langsung terlihat. Hapus locale pseudo sebelum merilis ke produksi.
3

7 Strategi Transformasi

i18n-pseudo menyediakan 7 strategi transformasi yang masing-masing menguji aspek berbeda dari implementasi i18n Anda. Gunakan satu per satu untuk pengujian terarah atau gabungkan dengan preset untuk cakupan menyeluruh.

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 Preset Bawaan

Preset menggabungkan beberapa strategi menjadi konfigurasi yang umum diperlukan. Gunakan preset untuk pengujian cepat, atau buat kombinasi khusus sesuai kebutuhan Anda.

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

Integrasi CI/CD

Jalankan lokalisasi semu di CI untuk mendeteksi regresi i18n secara otomatis. Hasilkan file yang dilokalkan secara semu, render layar utama, dan bandingkan dengan tangkapan layar dasar. Teks yang tidak ditransformasi dalam tangkapan layar adalah regresi — string baru yang di-hardcode dan melewati fungsi terjemahan.

.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

Coba i18n Agent Sekarang

Lepaskan file terjemahan Anda di sini

JSON, YAML, PO, XML, CSV, Markdown, Properties

atau klik untuk menjelajahi

Bahasa target

Tidak perlu mendaftarEstimasi instan

Tanya Jawab Lokalisasi Semu