Skip to main content

Razširjanje besedila pri i18n: preprečite porušitev postavitve zaradi dolžine prevoda

Vaš angleški uporabniški vmesnik se popolnoma prilega. Nato prispejo nemški prevodi, ki so 30 % daljši. Finski so 40 % daljši. Besedilo se preliva iz gumbov, tabele se podrejo in skrbno zasnovana postavitev razpade. To lahko preprečite s preskušanjem razširjanja besedila.

1

Zakaj razširjanje besedila poruši postavitve

Razvijalci uporabniške vmesnike oblikujejo z angleškim besedilom, ki je med najbolj jedrnatimi. Ko prispejo prevodi, se besedilo v daljših jezikih prelije iz vsebnikov, poruši mrežne postavitve, odreže oznake gumbov in potisne vsebino z zaslona. Te napake se pojavijo le v določenih področnih nastavitvah, zato med razvojem in preskušanjem izključno v angleščini ostanejo neopažene.

The expansion problem
// English is one of the most compact languages.
// Translations are almost always LONGER.

// English (source):
"Save"           // 4 chars

// Translations:
"Speichern"      // German: 10 chars (+150%)
"Enregistrer"    // French: 12 chars (+200%)
"Guardar"        // Spanish: 7 chars (+75%)
"Сохранить"      // Russian: 9 chars (+125%)
"Tallenna"       // Finnish: 8 chars (+100%)

// Buttons, labels, and table headers designed for
// English text WILL break in other languages.
Razširjanje besedila ni redek robni primer. Pojavi se v vsakem uporabniškem vmesniku, ki podpira več jezikov. Nemščina je 30 % daljša od angleščine, finščina 40 %, pri kratkih nizih pa so lahko nekateri jeziki daljši za več kot 100 %. S preskušanjem razširitve pred prihodom prevodov preprečite drage predelave zasnove.
2

Razmerja razširitve besedila po jezikih

Povprečna razmerja razširitve glede na izvorno angleško besedilo. Kratki nizi (z manj kot 20 znaki) se razširijo bolj kot dolgi, saj izbira posamezne besede močneje vpliva na skupno dolžino.

Expansion ratios by language
// Average text expansion relative to English:

// European languages:
// German:     +30-35%  (compound words)
// Finnish:    +30-40%  (agglutinative)
// French:     +15-25%  (articles, prepositions)
// Spanish:    +15-25%
// Italian:    +15-25%
// Portuguese: +15-25%
// Russian:    +20-30%  (case endings)
// Polish:     +20-30%
// Greek:      +20-30%

// Asian languages (CJK):
// Chinese:    -30-50%  (shorter in characters, but wider per char)
// Japanese:   -20-40%  (kanji compress meaning)
// Korean:     -10-20%

// Right-to-left:
// Arabic:     +20-30%
// Hebrew:     +10-20%

// Rule of thumb by source string length:
// 1-10 chars:   expect +200% expansion
// 11-20 chars:  expect +80% expansion
// 21-70 chars:  expect +40% expansion
// 71+ chars:    expect +30% expansion
To so povprečja. Posamezni nizi se lahko razširijo bistveno bolj – angleška oznaka gumba iz dveh besed lahko v nemščini obsega 4 besede. Za ključne elemente uporabniškega vmesnika, kot so gumbi, krmarjenje in glave tabel, preskušajte z višjimi razmerji (več kot 50 %).
3

Preskušanje z i18n-pseudo

Strategija razširitve orodja i18n-pseudo izvornim nizom doda polnilo in tako ponazori dolžino prevodov. Razmerje razširitve nastavite glede na ciljne jezike in postavitve preskusite, še preden prispejo pravi prevodi.

Terminal
# Method 1: Pseudo-localization with expansion
npx i18n-pseudo generate \
  --source locales/en.json \
  --output locales/pseudo-expanded.json \
  --expansion 1.4 \
  --preset expanded

# Method 2: Longest-translation analysis
npx i18n-validate expansion \
  --source locales/en.json \
  --targets 'locales/*.json' \
  --report expansion-report.json

# Output:
# Key                  | EN  | Longest | Lang | Ratio
# ---------------------|-----|---------|------|-------
# nav.settings         | 8   | 14      | de   | 175%
# buttons.save         | 4   | 12      | fr   | 300%
# errors.networkFailed | 14  | 28      | fi   | 200%

# Method 3: Visual regression with expanded text
npx playwright test \
  --project=expansion-test \
  --update-snapshots
Visual regression tests
// playwright.config.ts
export default defineConfig({
  projects: [
    {
      name: 'expansion-test',
      use: {
        locale: 'pseudo-expanded',
      },
    },
  ],
});

// tests/expansion.spec.ts
test('buttons do not overflow with expanded text', async ({ page }) => {
  await page.goto('/');

  // Check no horizontal overflow
  const buttons = await page.locator('button').all();
  for (const button of buttons) {
    const box = await button.boundingBox();
    const parent = await button.locator('..').boundingBox();
    expect(box!.x + box!.width).toBeLessThanOrEqual(
      parent!.x + parent!.width
    );
  }

  // Visual snapshot comparison
  await expect(page).toHaveScreenshot('homepage-expanded.png', {
    maxDiffPixels: 100,
  });
});
Za evropske jezike preskušajte s 40-odstotno razširitvijo, za najslabše možne primere pa s 50-odstotno. Če Vaša postavitev prenese 50-odstotno razširitev, bo kos skoraj vsakemu jeziku.
4

Najboljše oblikovalske prakse za i18n

Postavitve, ki so kos razširjanju besedila, zahtevajo oblikovalske odločitve še pred začetkom prevajanja. S temi praksami preprečite najpogostejše napake, povezane z razširitvijo.

CSS best practices
/* 1. Use flexible containers, not fixed widths */
/* WRONG */
.button { width: 120px; }

/* RIGHT */
.button { min-width: 80px; padding: 8px 16px; }

/* 2. Allow text wrapping in labels */
/* WRONG */
.label { white-space: nowrap; overflow: hidden; }

/* RIGHT */
.label { overflow-wrap: break-word; }

/* 3. Use CSS Grid/Flexbox for adaptive layouts */
.nav {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

/* 4. Reserve space for the longest expected translation */
/* Use min-width based on ~1.4x English length */
.table-header {
  min-width: max-content;
  padding-right: 16px;
}

/* 5. Test with the longest language first */
/* German and Finnish are good stress-test languages */

/* 6. For CJK: account for wider characters */
/* CJK characters are typically 2x the width of Latin chars */
/* Even though text is shorter, it may be wider visually */

Preizkusite i18n Agent zdaj

Spustite prevajalsko datoteko sem

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

ali kliknite za izbiro

Ciljni jeziki

Registracija ni potrebnaTakojšnja ocena

Pogosta vprašanja o razširjanju besedila