Back to Guides
Útmutató

10 gyakori i18n-hiba és hogyan kerüld el őket

Ismerd meg a fejlesztők által leggyakrabban elkövetett i18n hibákat és hogyan javíthatod őket. Javítsd az alkalmazásod lokalizációjának minőségét ezekkel a bevált legjobb gyakorlatokkal.

5 Min. olvasási idő
Szerző: shipglobal.dev
#i18n#developer#user experience#best practices#internationalization#common mistakes

A nemzetközivé tétel (i18n) egyszerűnek tűnik — amíg rá nem ébredsz, hogy német felhasználóid levágott gombokat látnak, a japán felhasználók torzított mondatrészeket kapnak, és az arab beszélő felhasználók teljesen rossz elrendezéssel találkoznak. Ezek nem kivételes esetek. Ezek a leggyakoribb hibák előre látható következményei, amelyeket a legtöbb fejlesztőcsapat elkövet, amikor először áll hozzá a lokalizációhoz. Ebben az útmutatóban a 10 leggyakoribb i18n hibát tárgyaljuk, pontosan megmagyarázzuk, miért fordulnak elő, és lépésről lépésre megmutatjuk, hogyan javítsd ki mindegyiket. Akár egy új alkalmazást építesz, akár egy meglévőt korszerűsítesz — ezeknek a csapdáknak a elkerülése hetek helyett napokat spórol meg neked.

Hiba #1: Kódolt szövegek

A hardkodolt stringek az i18n legalapvetőbb hibája. Akkor fordul elő, amikor a fejlesztők először azon dolgoznak, hogy a funkciók működjenek, és úgy terveznek, hogy 'később rendbe tesszük'. De a késő soha nem jön el, és hirtelen ezer szöveg kerül feltöltésre több száz fájlban.

['Állítsa be az i18n keretrendszert az első UI-kódsor megírása előtt', 'Használjon lint-plugin-t a hardkodolt stringek felismerésére sablonokban és komponensekben', 'Tartsa a fordítási kulcsokat leíró és rendezett funkció/szint szerint']

Az i18n keretrendszert állítsd be, mielőtt az UI kód első sorát megírod.

Használd a Linter plugint, hogy felismerd a hardkodolt szövegeket sablonokban és komponensekben.

A fordítás kulcsokat legyen leíróak és rendezze őket funkció szerint vagy oldalanként.

Tipikus forgatókönyv

1

Fejlesztő egy gomb feliratát közvetlenül JSX-ben írja: <button>Submit Order</button>.

2

Az alkalmazás angol nyelven érkezik és hibátlanul működik. Hét hónappal később a vállalat Németország felé bővül.

3

A lokalizációs csapat több mint 2 000 hardkodolt szöveget talál. A pótlás 3 hétig tart, és 47 hibát okoz.

Miért ez probléma

Kiforrott kódbázisban a hardkodolt stringek ezreire rúghatnak. Utólagos kivonás azt jelentené, hogy érintenie kell minden fájlt, újra kell tesztelni minden összetevőt és kockáztatni visszatérő problémákat mindenhol.

A hardkodolt stringek közvetlenül a forráskódban, sablonokban vagy komponensekben vannak beágyazva. Nem vonhatók ki, lefordíthatók vagy futási időben cserélhetők anélkül, hogy a kódot megváltoztatnánk.

Az angolul nem beszélő felhasználók olyan UI-elemeket látnak, amelyek nincsenek lefordítva, vegyítve a lefordított tartalommal — kaotikus és nem professzionális benyomás.

Így oldhatod meg

Helyezze át a felhasználók által látott összes stringet már a kezdetektől fogva erőforrásfájlokba.

1

Rendszeresítsen egy fordítási keretrendszert (például next-intl, react-i18next, vue-i18n) az első komponens megírása előtt.

2

Hozzon létre erőforrásfájl-struktúrát (pl. messages/de.json), és hivatkozzon minden stringre fordítási kulcsokkal, például t('checkout.submitButton').

3

Adjon hozzá linting-szabályt vagy pre-commit hook-ot, amely a nyers string-literalokat jelzi a UI-komponensekben.

Hiba #10: Minden szöveg szó szerint lefordítása

Nem minden tartalom legyen lefordítva. Márkanévek, jogi személyek nevei, technikai kifejezések és bizonyos terméknevek az eredeti nyelvükön maradjanak. Túlzott fordítás jogi problémákat, a márka konzisztenciájának hiányát és felhasználói zavart okozhat.

["Tarts egy 'Ne fordítsd le' szótárt és oszd meg minden fordítóval", "Használj külön névteret vagy speciális kulcsokat a nem lefordítandó tartalmakhoz", "Mindig adj kontextus-megjegyzéseket a többértelmű stringekhez a téves fordítások megelőzése érdekében"]

Tartsa karban a 'ne fordítsd' szószedetet és ossza meg minden fordítóval.

Használjon zárt szegmenseket vagy külön namespace-eket a márka- és jogi terminológiához.

Mindig adjon kontextusmegjegyzéseket a többértelmű karakterláncokhoz, hogy elkerülje a rossz fordításokat.

Egy tipikus helyzet

1

Egy fordítási fájl tartalmazza a 'CloudForge Inc.' vállalatnevet és a 'OAuth 2.0 Token' technikai kifejezést mint általános fordítható stringeket.

2

A spanyol fordító a 'CloudForge'-t 'ForjaNube'-ként, és az 'OAuth 2.0 Token'-t 'ficha OAuth 2.0'-ként fordította.

3

Eredmény: a felhasználók nem találják meg a céget a valódi nevével, és a spanyol dokumentációt olvasó fejlesztők zavartak az ismeretlen, lefordított technikai kifejezésektől.

Miért jelent problémát

Egy jogi dokumentumban rosszul lefordított márkanév érvénytelenítheti a szerződést. A túlzott fordítások kijavítása megkívánja minden szöveg ellenőrzését minden nyelven — többhetes munka.

Ha az összes szöveg kontextus nélkül kerül lefordításra, a fordítók előfordulhat, hogy márkaneveket ('Apple' → 'Apfel'), jogi terminusokat ('GmbH' → 'LLC') vagy olyan technikai kifejezéseket fordítanak le, amelyek angolul kell maradjanak.

Felhasználók nem találják termékeiket a megszokott márkanév alatt, jogi dokumentumok a helytelen társaságra hivatkoznak, és a technikai dokumentáció érthetőtlenné válik, ha olyan kifejezéseket, mint az 'API Endpoint', lefordítanak.

Hogyan javítsd ki ezt

Jelöld egyértelműen a nem lefordítható tartalmakat, és adj kontextusmegjegyzéseket a fordítók számára.

1

Hozz létre egy 'Ne Fordítsd Le' glosszáriót, amely felsorolja minden márkanév, terméknév, jogi személy és szakmai kifejezés, amelyet változtatás nélkül kell megtartani.

2

Használj külön névteret vagy speciális kulcsokat a nem lefordítandó tartalmakhoz. Sok i18n eszköz támogatja a 'zártként' kezelt szegmenseket, amelyeket a fordítók nem szerkeszthetnek.

3

Fordító megjegyzéseket/tartalmi leírásokat adj a fordítási fájljaidhoz, amelyek megmagyarázzák a kontextust: 'Ez egy márkanév — ne fordítsd le' vagy 'Szakmai kifejezés — angolul hagyd'.

Hiba #2: Szövegek összefűzése

A mondatokat fragmentumokból összerakni angolul logikusnak tűnhet, de más nyelveken nem működik. A szórend, a nyelvtan és a mondatszerkezet nyelvről nyelvre drámaian eltérő, így az összefűzött stringek lefordíthatatlanná válnak.

['Soha ne építs mondatokat fordított fragmentumok összefűzésével', 'Használj nevezett helyettesítőket ('{name}') a pozíciós helyett ({0}) helyett a világoság érdekében', 'Biztosíts fordítói kontextus kommenteket, amelyek elmagyarázzák, mit tartalmaz minden helyettesítő']

Soha ne alkoss mondatokat fordított töredékek összeillesztésével.

Használj nevezett helyettesítőket ('{name}') a pozíciós helyett ({0}) a világoság érdekében

Biztosítson kontextusmegjegyzéseket a fordítók számára, amelyek elmagyarázzák, hogy minden helykitöltő mit tartalmaz.

Egy tipikus forgatókönyv

1

Fejlesztő azt írja: 'You have ' + count + ' items in your ' + cartType + ' cart' — angolul tökéletesen működik.

2

A német fordító három külön részre kap és nem tud helyes mondatot alkotni, mert a szórend megváltoztatása szükséges.

3

Eredmény: a német felhasználók látják a 'Sie haben 5 Artikel in Ihrem Warenkorb Standard' szöveget — döcögős és nem professzionális.

Miért ez probléma

Minden összefűzött string időzített bomba. 20 nyelvnél és 50 összefűzött stringnél 1 000 potenciális nyelvtani hiba van, amelyeket manuálisan ki kell javítani.

Olyan stringek összefűzése, mint a 'Willkommen ' + userName + ', du hast ' + count + ' neue Nachrichten' bizonyos szórendet igényel. A fordítók összefüggéstelen fragmentumokat kapnak, amelyeket nem tudnak átstrukturálni.

Felhasználók nyelvtanilag helytelen mondatokat látnak. Németországban az ige általában a mondat végén áll. Az arab nyelvben a teljes szerkezet megfordul. Az eredmény olvasva értelmetlennek tűnik.

Így javíthatod ki

Használj névvel ellátott helyettesítőket a teljes mondat átrendezéséhez.

1

Cseréld le az összefűzést egy egyedi üzenetkulcsra helyettesítőkkel: 'cart.summary': 'A '{cartType}' kosaradban {count} tétel van'.

2

A változókat paraméterekként adhatod át a fordítási függvénynek: t('cart.summary', { count: 5, cartType: 'Premium' }).

3

A fordítók most szabadon átrendezhetik: 'A '{cartType}' kosaradban {count} tétel van' — nyelvtanilag helyes német.

Hiba #3: Többes szám figyelmen kívül hagyása

Az angolnak két többes szám alakja van: egyes szám és többes szám. A fejlesztők gyakran feltételezik, hogy minden nyelv ugyanolyan módon működik. Nem így van. A lengyelnek 4 alakja van, az arabnak 6, s még olyan nyelvek, mint a francia, az nullát a angolhoz hasonlóan kezeli.

['Mindig használja ICU MessageFormat-et vagy hasonló könyvtárat a számolható tartalmakhoz', 'Soha ne írj saját többes szám logikát — bízz a CLDR szabályokban', 'Teszteld a többes számot olyan értékekkel, mint 0, 1, 2, 5, 21 és 100, hogy lefedd minden kategóriát']

Mindig használja az ICU MessageFormat-et vagy egy ekvivalens könyvtárat számlálható tartalmakhoz.

Soha ne írjon saját többes szám logikát — bízzon a CLDR szabályokban.

Tesztelje a többes számot olyan értékekkel, mint 0, 1, 2, 5, 21 és 100, hogy minden kategóriát lefedjen.

Egy tipikus forgatókönyv

1

Fejlesztő írja: count + (count === 1 ? ' Datei' : ' Dateien') — németül helyes.

2

A lengyel fordító 4 formát igényel: 1 plik, 2-4 pliki, 5-21 plików, 22-24 pliki. Az egyszerű ternáris ezt nem képes kifejezni.

3

Eredmény: a lengyel felhasználók a '5 pliki' (helytelen forma) helyett a '5 plików' (helyes forma) látják, és az alkalmazás hibásnak tűnik.

Miért probléma ez

Minden számlálható főnévhez a alkalmazásodban plurálkezelés szükséges. 50 ilyen string és 20 nyelv esetén 1 000 plurális szabály van — manuálisan kezelhetetlen.

Egyszerű if/else ellenőrzések (count === 1 ? 'Datei' : 'Dateien') csak németet/angolt kezelnek. A CLDR definiál akár 6 plurális kategóriát: zero, one, two, few, many és other. Minden nyelv egy másik al-készletet használ.

A felhasználók olyan nyelvtani hibákat tartalmazó szövegeket látnak, mint a '1 Nachrichten', vagy teljesen helytelen plurális formák. Formális kontextusokban ez rontja a hitelességet.

Így javíthatod

Használd az ICU MessageFormat-et, amely beépített módon támogatja a CLDR plurális szabályait.

1

Határozd meg az üzeneteket ICU-szintaxissal: 'fileCount': '{count, plural, one {# Datei} other {# Dateien}}'.

2

A fordítók biztosítják nyelvükhöz a szükséges plurális formákat. Lengyel: '{count, plural, one {# plik} few {# pliki} many {# plików} other {# pliku}}'.

3

Az i18n-könyvtárad futás közben automatikusan az aktív locale CLDR-szabályainak megfelelő alakot választja.

Hiba #4: Feste UI-Element-Breiten

A tervezők angol nyelvű pixel pontosságú elrendezéseket készítenek, és a fejlesztők ezeket rögzített szélességekkel valósítják meg. De a lefordított szöveg drámaian hosszabb vagy rövidebb lehet. A német szöveg kb. 30%-kal hosszabb, mint az angol, míg a kínai szöveg akár 50%-kal rövidebb is lehet.

['Soha ne használjon fix pixel-szélességet az lefordítható szöveget tartalmazó elemeknél', 'Tervezzen 40%-os szövegnövekedést baseline-ként — egyes nyelvek még többet bővülnek', 'Használja a CSS Flexbox-ot vagy Grid-et olyan elrendezésekhez, amelyek alkalmazkodnak a változó tartalomhoz']

Soha ne használjon rögzített pixell szélességet olyan elemeknél, amelyek fordítható szöveget tartalmaznak.

Tervezzen 40%-os szöveg-bővítést kiindulási alapként — egyes nyelvek még tovább bővülnek.

Használja a CSS Flexbox-ot vagy Gridet olyan elrendezésekhez, amelyek a változó tartalom hosszához igazodnak.

Egy tipikus helyzet

1

A tervező egy navigációs sávot készít 5 gombbal, mindegyik pontosan 100px széles — angol verzióban jól néz ki.

2

Német fordítás: 'Settings' 'Einstellungen'-é válik (13 vs 8 karakter), 'Submit' pedig 'Absenden'-né válik (8 vs 6). A navigációs sáv túlcsúszik.

3

Eredmény: Mobil eszközökön a gombok egymásra kerülnek vagy a szöveg levágódik, ami a német felhasználók számára a navigációt használhatatlanná teszi.

Miért probléma ez

Minden fix szélességű elem potenciális töréspont. Egy tipikus alkalmazásban százak gomb, címke és kártya van, amelyek mind a szöveg bővítését ki kell bírniuk.

Fix szélességű konténer (width: 120px) és fix méretű gombok kivágódnak vagy túlcsordulnak, ha a szöveg kitágul. A CSS overflow: hidden csendben elrejti a tartalmat, míg az overflow: visible tönkreteszi a layoutot.

Felhasználók olyan vágott feliratokat láthatnak, mint 'Einstellu...' ahelyett, hogy 'Einstellungen' lenne, vagy olyan gombokat, amelyek átfedik a szomszédos elemeket. Kritikus műveletek olvashatatlanná vagy kattinthatatlanná válnak.

Így javíthatod ki

Készítsen és valósítson meg rugalmas elrendezéseket, amelyek alkalmazkodnak minden locale tartalmának hosszához.

1

A fix szélességeket cserélje ki min-width, max-width és Flex-Layouts-ra. Helyet dinamikusan oszd el a CSS Grid vagy Flexbox segítségével.

2

Írja be a szövegtárolót tördelésre: használja az overflow-wrap: break-word-et és kerülje a white-space: nowrap-ot lefordítható szöveg esetén.

3

Az UI-t tesztelje pseudo-lokalizációval, amely minden szöveget 40%-kal meghosszabbítja, hogy a legrosszabb esetet szimulálja — még mielőtt a szövegeket a fordítóknak küldené.

Hiba #5: Dátum- és számformázás

Az adatok és számok látszólag univerzálisak. De 01/02/2025 az USA-ban 2. január és Európában 1. február. A vesszők és a pontok a számoknál jelentésüket felcserélik: 1,000.50 (USA) vs 1.000,50 (Németország). Ezt rosszul csinálva összezavarodást, adathibákat és bizalomvesztést okoz.

['Az elejétől kezdve kizárólag logikus CSS-tulajdonságokat használjon (inline-start/end, block-start/end)', 'Minden sprint-áttekintésnél tesztelje az alkalmazást a HTML-elem dir='rtl' beállításával', 'Készítsen RTL-tesztlistát a navigációhoz, ikonokhoz, űrlapokhoz és a haladást jelző elemekhez']

Soha ne formázzon adatokat vagy számokat manuálisan string sablonokkal — mindig használja az Intl API-kat.

Belsőleg minden adatot ISO 8601-ben és a valutákat a legkisebb egységben (cent) tároljon.

Tesztelje különböző lokalokkal, amelyek különböző tizedesjelek, dátum sorrendek és különböző naptár rendszerek használatát.

Egy tipikus helyzet

1

Fejlesztők dátumot MM/DD/YYYY formátumban és árat $1,234.50 formátumban adnak meg — helyes az USA-felhasználók számára.

2

Német fordítás: 'Settings' 'Einstellungen'-é válik (13 vs 8 karakter), 'Submit' pedig 'Absenden'-né válik (8 vs 6). A navigációs sáv túlcsúszik.

3

Eredmény: a felhasználó egy rossz dátumra foglal repülőjegyet és megkérdőjelezi az ár formátumát. A német piacon a támogatási jegyek száma 15%-kal nő.

Miért probléma ez

A dátumok és számok formázása minden adat-megjelenítést érint az alkalmazásodban: táblázatok, diagramok, űrlapok, számlák, jelentések. Egy globális javítás több száz példányt érint.

Kódolt formátum stringek, mint a toLocaleDateString('en-US') vagy a sablon-literalákkal végzett kézi formázás figyelmen kívül hagyja a felhasználó tényleges locale-ját. Még ha a helyes locale is megvan, a helytelen naptármendszer (Gregorian vs Hijri) problémákat okoz.

A felhasználók helytelenül olvassák az adatokat, és hibás formátumban adnak meg adatokat. Egy európai felhasználó, aki 03/04/2025-öt lát, talán úgy értelmezi, hogy az 3. április a 4. március helyett — elhalasztott találkozók vagy hibás foglalások.

Így javíthatod meg

Használd a beépített Intl-API-t vagy egy locale-tudatos formázó könyvtárat minden dátumhoz, időhöz, számhoz és valutához.

1

A manuális formázást cseréld le az adatokhoz az Intl.DateTimeFormat(locale) használatával, a díjakhoz pedig az Intl.NumberFormat(locale, { style: 'currency', currency }) használatával.

2

Belsőleg tárold az adatokat ISO 8601 formátumban (YYYY-MM-DD), és csak a megjelenítéshez formázd őket a felhasználó locale-jának megfelelően.

3

Legalább 5 különböző lokációval tesztelje a dátumok és számok kritikus megjelenítését: en-US, de-DE, ja-JP, ar-SA és zh-CN, hogy lefedje a legfontosabb formázási variációkat.

Hiba #6: RTL-nyelvek figyelmen kívül hagyása

RTL-támogatás minden egyes komponensre hat az alkalmazásban. Az RTL támogatás utólagos bevezetése általában a CSS 30-50%-ának újraírását és minden ikon és elrendezés ellenőrzését igényli.

['Az elejétől kezdve kizárólag logikus CSS-tulajdonságokat használjon (inline-start/end, block-start/end)', 'Minden sprint-áttekintésnél tesztelje az alkalmazást a HTML-elem dir='rtl' beállításával', 'Készítsen RTL-tesztlistát a navigációhoz, ikonokhoz, űrlapokhoz és a haladást jelző elemekhez']

Az első naptól kezdve kizárólag logikai CSS-tulajdonságokat használjon (inline-start/end, block-start/end).

Az első naptól kezdve kizárólag logikai CSS-tulajdonságokat használjon (inline-start/end, block-start/end).

Készítsen RTL-tesztlistát a navigációhoz, ikonokhoz, űrlapokhoz és a haladásjelzőkhöz.

Egy tipikus forgatókönyv

1

Fejlesztő az egész alkalmazásban margin-left: 16px és text-align: left használatával — az LTR alapvető gyakorlat.

2

Az alkalmazás Szaúd-Arábiában indul. A visszafelé nyilak előre mutatnak, az oldalsávok a rossz oldalon jelennek meg, és a numerikus adatok nincsenek helyesen igazítva.

3

Eredmény: Arab felhasználók 30 másodpercben belül kilépnek az alkalmazásból. A csapatnak 4 hét CSS-refaktorálásra van szüksége a probléma megoldásához.

Miért jelent ez problémát?

Az RTL-támogatás minden egyes komponensre hat az alkalmazásban. Az RTL későbbi bevezetése általában a CSS 30-50%-ának újraírását és minden ikon és elrendezés ellenőrzését igényli.

CSS-tulajdonságok, mint margin-left, padding-right, text-align: left és float: left véglegesen kódolják az irányt. Irányítottsággal rendelkező ikonok a rossz irányba mutatnak. Még a border-radius értékei is tükrözniük kellene.

Arab felhasználók a navigációt a helytelen sarokban látják, az előre haladó folyamat visszafelé fut, és a szöveg ütközik a UI elemekkel. Az alkalmazás idegennek és használhatatlannak tűnik.

Így javíthatod meg

Használd a logikus CSS-tulajdonságokat, és kezdetektől fogva teszteld RTL-elrendezéssel.

1

Az összes fizikai CSS-tulajdonságot cseréld le logikus megfelelőkre: margin-left → margin-inline-start, padding-right → padding-inline-end, text-align: left → text-align: start.

2

Állítsd be a dir attribútumot a HTML-gyökér elemén a kiválasztott locale alapján. Használd a :dir(rtl) CSS-pseudo-osztályt RTL-specifikus felülírásokhoz.

3

Ellenőrizd az összes ikont irányjelölés szempontjából. Cseréld le az iránytól függő ikonokat tükrözött verziókra, vagy használd a CSS transform: scaleX(-1) RTL-környezetekhez.

Hiba #7: Képeken lévő szöveg

Szöveg beépítése képekbe — legyen az hős banneren, gombokon, infografikákon vagy képernyőmentéseken — i18n rémálom. Minden képhez szöveggel minden nyelvre külön újra kell készíteni, ami növeli a dizájnköltségeket és késlelteti a kiadásokat.

['Soha ne illessük közvetlenül raszterképekre a lefordítható szöveget (PNG, JPG)', 'Használd a CSS szöveges overlays-t a háttérképeken a hős bannerekhez és a CTA-khoz', 'Automatizáld a képernyőképek generálását App Store listingek és marketing oldalakhoz']

Soha ne illessze közvetlenül fordítható szöveget raszterképekbe (PNG, JPG).

Használja a CSS szövegfedő rétegeit a háttérképeken a hős bannerekhez és a CTA-khoz.

Automatizálja a képernyőképek generálását az App Store-listákhoz és a marketingoldalakhoz.

Egy tipikus forgatókönyv

1

Egy tervező létrehoz egy promóciós bannert a 'Start Your Free Trial' szöveggel, amely közvetlenül a képre van ágyazva.

2

A helyi fejlesztő csapat minden UI-szöveget lefordít, de a német oldalon a banner továbbra is angol szöveget mutat.

3

Eredmény: a német landoló oldal egy zavaró angol bannert tartalmaz. Az 15 nyelvre lokalizált bannerek elkészítése 3 napos tervezési munkát igényel, és késlelteti a bevezetést.

Miért jelent ez problémát?

Egy tipikus marketingoldal 5-10 képet tartalmaz szöveggel. 15 nyelv esetén ez 75-150 képvariánst jelent, amelyeket létre kell hozni, karbantartani és minden dizájnváltoztatásnál frissíteni kell.

Képbe ágyazott szöveg (PNG, JPG, SVG beágyazott szöveggel) nem érhető el fordítóeszközökkel. Bármely helyi verzióhoz a tervezőnek manuálisan kell szerkesztenie a forrásfájlt, exportálnia és feltöltenie.

A felhasználók idegen nyelvű szöveget tartalmazó képeket látnak, vagy még rosszabbul, a fordított felület és a le nem fordított képek keverékét. Ez konzisztenciátlanul hat, és aláásja a márka iránti bizalmat.

Hogyan oldod meg ezt

Tedd el a szöveget a képektől CSS felülírásokkal, SVG-kkel, amelyek fordítható szöveg elemeket referálnak, vagy dinamikus kép generálással.

1

Használd a CSS-t, hogy a lefordított szöveget a háttérképek fölé tedd: helyezd el a szöveg réteget abszolút pozícionálással a kép tartálya fölé.

2

Infografikák vagy diagramok esetén használj SVG-ket <text> elemekkel, amelyek a fordítási kulcsokat referenciálják, ne pedig nyers szöveget építs be.

3

Az App Store-listingek és marketingoldalak képernyőképeinek automatikus generálását állítsd be, hogy minden locale tartalmazzon képernyőképeket.

Hiba #8: Hiányzó fordítások nincsenek kezelve

A fordítások a fejlesztés során mindig hiányosak. Az új funkciók gyorsabban adnak hozzá szövegeket, mint a fordítók lefordíthatják őket. Megfelelő fallback-logika nélkül a hiányzó fordítások összeomláshoz, üres UI-elemekhez vagy a felhasználók által látott nyers fordítás-kulcsokhoz vezethetnek.

['Mindig állíts be legalább egy fallback nyelvet az i18n-beállításaidban', 'Naplózd a hiányzó fordításkulcsokat a monitorozó rendszeredbe nyomon követés céljából', 'Állíts be minimális fordítás-fedezetet, mielőtt egy locale élőre kerülhet']

Mindig konfiguráljon legalább egy fallback nyelvet az i18n beállításokban.

Rögzítse a hiányzó fordítási kulcsokat a nyomon követő rendszerében.

Állítson be minimális fordítási lefedettséget, mielőtt egy locale élő lehet.

Egy tipikus forgatókönyv

1

Fejlesztők hozzáraknak egy új 'Premium Features' részt 15 új fordítási kulccsal. Az angol változat azonnal kiszállításra kerül.

2

A francia fordítások még nincsenek kész. A francia oldal nyers kulcsokat mutat: 'premium.feature1.title', 'premium.feature1.description'.

3

Eredmény: a francia felhasználók egy törött oldalt látnak, tele fejlesztői kulcsnevekkel. A támogató csapat tucatnyi hibajelentést kap.

Miért probléma ez

Az alkalmazás egyre nagyobb lesz, annál nagyobb a szakadék az angol szövegek és a többi nyelv fordításai között. Egy 100 nyelvet támogató alkalmazás és 2.000 szöveg esetén bármikor több mint 10.000 hiányzó fordítás lehet.

Fallback logika nélkül egy hiányzó fordítási kulcs undefined-et, null-t vagy a nyers kulcs stringet ad vissza (pl. 'checkout.confirmButton'). Sablonmotorok hibákat dobhatnak, az oldal összeomolhat, vagy semmit sem renderel.

A felhasználók hibás UI-t látnak: üres gombok, hiányzó címkék vagy 'nav.settings.title'-hez hasonló rejtélyes szöveg a tényleges szöveg helyett. Ez megtévesztő és nem profi.

Hogyan oldod meg ezt

Egy erős fallback láncot konfigurálj, és figyeld a fordítások lefedettségét minden locale-ban.

1

Az i18n konfigurációdban állíts be egy robusztus fallback nyelvi láncot: a hiányzó fr (fr) kulcsok automatikusan visszakerülnek angolra (en).

2

Adj hozzá egy hiányzó kulcsok kezelésőjét, amely a le nem fordított kulcsokat a monitorozó rendszeredbe (például Sentry, Datadog) naplózza, anélkül hogy a felhasználói élményt megszakadna.

3

Készíts egy Fordítási lefedettség-irányítót (dashboard), amely nyomon követi a teljesítési arányt minden locale-ra, és blokkolja a kiadásokat, ha a lefedettség egy küszöbérték alá esik (például 95%).

Hiba #9: Karakterkódolási problémák

Karakterkódolási problémák a lokalizáció csendes gyilkosaik. Minden rendben van angolul és európai nyelveken, de ha kínait, japánt, koreait, arabot vagy emojit adsz hozzá, torzított karakterek (Mojibake) jelennek meg. Ezek a hibák nehéz felderítésűek.

['Mindenhol UTF-8 kódolást használj — forrásfájlok, adatbázis, API-válaszok és HTML meta-tagek', 'Használd a utf8mb4-et MySQL-ben (nem csak az utf8-at), hogy a teljes Unicode-területet beleértve az emoji-t is támogasd', 'Tesztelj valódi tartalommal CJK, arab és emoji esetén, hogy korán észrevegyük a kódolási problémákat']

Használja a UTF-8 kódolást mindenhol — forrásfájlok, adatbázis, API-válaszok és HTML meta-tagek.

MySQL-ben használja a utf8mb4-et (nem utf8), hogy a teljes Unicode-tartományt támogató legyen, beleértve az emoji-t.

CJK, kínai és koreai (CJK), arab és emoji valós tartalommal tesztelje a kódolási problémák korai felismerése érdekében.

Egy tipikus helyzet

1

A fejlesztő egy MySQL adatbázist latin1-kollációval állít be (régió alapértelmezés). Az alkalmazás forráskódja UTF-8-at használ.

2

A japán felhasználók a valódi nevükkel regisztrálnak. Az adatbázis '田中太郎'-t hibás bájtokként tárolja.

3

Eredmény: a felhasználói profil torzult szöveget mutat. Még rosszabb: a keresés és rendezés minden CJK névre hibás lesz, ami több ezer felhasználót érint.

Miért jelent problémát

A karakterkódolási problémák az egész stackre kiterjednek. A helytelen adatbázis-kolláció millió rekordot tehet tönkre — a javítás költséges adat-migrációt igényel.

A karakterkódolás inkonzisztenciája a stackszerte — UTF-8 a forrásfájlokban, Latin-1 az adatbázisban és Windows-1252 az API-válaszban — tönkreteszi a többbites karaktereket. Egyetlen rosszul konfigurált réteg '日本語'-t '????' vagy '日本èª' értékre változtathat.

Felhasználók torzult szövegeket, kérdőjeleket vagy üres négyzeteket látnak a nyelvük helyén. A legrosszabb esetben a űrlapok bevitele tartósan megsérülhet az adatbázisban.

Hogyan oldható meg

Következetesen alkalmazd az UTF-8 kódolást a teljes alkalmazás-stacken minden rétegében.

1

Az összes forrásfájlt állítsd UTF-8-ra (konfiguráld a szerkesztődet és a .editorconfig-et). Adj meg HTML-ben <meta charset='UTF-8'>-t és az API-válaszokban a 'Content-Type: application/json; charset=utf-8' beállítást.

2

Állítsd be az adatbázist utf8mb4-re (nem csak az utf8-re, mert az MySQL-ben 3 bájtos részhalmaz). Állítsd a kapcsolati kollációt utf8mb4_unicode_ci-re.

3

Válassz olyan betűtípusokat, amelyek lefedik a cél írási rendszereidet: latin, cirill, CJK, arab, devanagari. Használd a rendszer betűtípus-Stack-eket vagy a Google Fontokat nyelvi alcsoportokkal a gyorsabb betöltésért.

Az i18n-implementáció tesztelése

Hosszabbítás-teszt

A lefordított összes szöveget 30–40%-kal növeld meg, hogy szimuláld a szöveg bővülését olyan gazdag nyelvekben, mint a német, a finn vagy a görög. Ez lefedi a rögzített szélességű tartályokat, a levágott címkéket és a túlcsorduló gombokat is, mielőtt egyáltalán elkezded a fordítást. Sok pszeudo-lokációs eszköz beépített funkcióként kínálja ezt.

"Senden" → "Ṡééééñðéñ_éxpáñðéð" (40% hosszabb)

pszeudo-lokalizáció

Pseudó-lokáció minden karaktert akcentuált megfelelővel helyettesít (például 'a' → 'á') és a karakterláncokat olyan jelölésekkel veszi körül, mint [!! és !!]. Így azonnal láthatóvá válik, mely sorok vannak kódolva a forráskódban és melyek a fordítási rendszerből származnak. Futtasd a pseudó-lokálizációt a CI-pipeline részeként, hogy regressziókat automatikusan kiszűrj.

A képernyőn lévő minden szöveg, amely nem szerepel a [!! !!]-jelölések között, hardkódolt és ki kell vonni a kódból. Ez a teszt 95%-ban észleli a rejtett stringeket kevesebb mint egy perc alatt.

"Üzenet küldése" → "[!! Ñáçḥŕíçḥṫ ṡéñðéñ !!]"

RTL-elrendezés-teszt

Még akkor is, ha nincs arámi vagy héber fordítás, RTL-elrendezést tesztelhetünk úgy, hogy dir='rtl' értéket adunk a HTML gyökérelemhez. Ez közvetlenül feltárja a CSS irányítási hibákat: helytelen ikon-igazítás, oldalról helyes margó hiánya, nehezen navigálható és rosszul rendezett Flex-elemek. Tegyük ezt sztenderd ellenőrzéssé minden sprint-áttekintésben — 10 másodpercbe kerül a váltás, és olyan problémákat fog fel, amelyek egyébként hetekig tartottak volna a Productionban.

Az i18n-ellenőrzőlista

['Az összes felhasználói szemmel látható stringet erőforrásfájlokba helyeztük', 'Nem használunk string-összefűzést mondatok létrehozására', 'Pluralis szabályokat ICU MessageFormat vagy megfelelővel valósítottuk meg', 'Dátum-, idő- és számformázás locale-érzékeny API-kkal történik', 'RTL-elrendezést arab vagy héber tartalommal teszteltünk', 'Rugalmas UI dinamikus szélességekkel a szövegtartalom esetén', 'Alapértelmezett nyelv konfigurálva és hiányzó kulcsok esetén tesztelve', 'UTF-8 kódolás konzisztens minden fájlban és adatbázisban', 'Alkalmazás áruház és Google Play áruadatok piacra lokalizált', 'Képernyőképek és marketing-eszközök minden nyelvre frissítve']

Cikk megosztása

Készen állsz lefordítani az alkalmazásodat?

Fordítsd le az iOS-, Android- vagy webes alkalmazásodat több mint 29 nyelvre mesterséges intelligencia-alapú fordítással.

Ingyenes kezdés

Kapcsolódó tartalmak

Útmutató

Célnyelvek kiválasztása az alkalmazásodhoz

Adatalapú útmutató a megfelelő nyelvek kiválasztásához az alkalmazás lokalizálásához. Tudj meg, mely nyelvek hoznak a legjobb ROI-t — a piacméret, ARPU és verseny alapján.

7 min
target languagesmarket researchlocalization strategy