10 makosa ya kawaida ya i18n na jinsi ya kuyakwepa.
Jifunze makosa ya kawaida ya i18n ya kimataifa ambayo watengenezaji hufanya na jinsi ya kuyarekebisha. Boresha ubora wa lokalisering ya programu yako kwa kutumia mbinu bora.
Internationalisierung (i18n) inaonekana ya rahisi â hadi ugundue kuwa watumiaji wa Kijerumani wako wanaonekana buttons zilizokatwa, watumiaji wa Kihonshu Kupata sentensi zilizokatwa na watumiaji wa Kiarabu wana layout iliyoharibika kabisa. Haya si matukio ya bahati mbaya. Ni matokeo ya makosa ya kawaida ambayo timu nyingi za maendeleo hufanya wanapoanzisha Lokalisation. Katika mwongozo huu tutajadili makosa 10 ya i18n, kuelezea kwa nini yanatokea, na kuonyesha hatua kwa hatua jinsi ya kufanya kila moja ifanye kazi. Bila kujali kama unaunda app mpya au unayoboresha ile ya zamani â kuepuka mitego hii kutakuokoa wiki kadhaa za debugging.
Hitilafu #1: Maneno yaliyo hardcode
Kosa la i18n la msingi ni kutaja strings kwa mkono (hardcoding). Inatokea kwa sababu watengenezaji wanazingatia kwanza kuhakikisha vipengele vinakimbia, na kupanga âtutafanya baadayeâ. Lakini baadaye hakuja sana, na ghafla una maelfu ya strings yaliyogawa katika faili nyingi.
['Wekea i18n framework yako kabla ya kuandika mstari wa UI wa kwanza', 'Tumia plagin ya Linter ili kutambua strings zilizohardcoded katika templates na vipengele', 'Halina maana, maneno ya tafsiri yako ya kipekee na upange kwa feature au page']
Sanidi mfumo wa i18n kabla uandike mstari wowote wa UI.
Tumia kiendelezi cha linter kugundua strings zilizohardcoded katika templates na vipengele.
Fungua funguo za tafsiri kwa maelezo na ziandikwe kwa muundo wa kipengele au ukurasa.
Kisa ya kawaida
Mjuzi wa programu anaandika lebo ya kitufe moja kwa moja ndani ya JSX: <button>Submit Order</button>.
Programu itatolewa kwa Kiingereza na kufanya kazi vyema. Sita miezi baadaye kampuni inapanua hadi Ujerumani.
Timu ya utafutaji wa lokalisierung inagundua zaidi ya 2,000 strings zilizohardcoded. Marekebisho yatadumu kwa wiki 3 na husababisha 47 Bugs.
Kwa nini hili ni Tatizo
Katika msimbo uliokomaa, strings zilizohardcoded zinaweza kuwa katika maelfu. Kutoa baadaye kunahitaji kugusa kila faili, kujaribu tena kila sehemu na hatimaye kuhatarisha regression mahali popote.
Maneno yaliyohardcoded yapo moja kwa moja ndani ya msimbo wa chanzo, templates au vipengele. Haiwezi kutenganishwa, kutafsiri au kubadilishwa wakati wa utekelezaji bila kubadili msimbo wenyewe.
Watumiaji katika locales zisizotumia Kiingereza wanaona vipengele vya UI visivyo tafsiriwa vikiwa vimechanganywa na yaliyotafsiriwa â muonekano wa kuchanganyikiwa na usio rasmi.
Jinsi ya kuondoa hilo
Weka strings zote zinazoonekana na watumiaji mapema katika faili za rasilimali.
Hakikisha unaanza mfumo wa tafsiri (mf. next-intl, react-i18next, vue-i18n) kabla hujaandika kipengele chako cha kwanza.
Unda muundo wa faili za rasilimali (e.g. messages/de.json) na rejelea strings zote kwa kutumia keys za tafsiri kama t('checkout.submitButton').
Ongeza sheria ya Linting au Pre-Commit Hook inayobainisha rohes string literals katika UI components.
Kosa #10: Tafsiri kila kitu kwa maneno kwa maneno moja kwa moja.
Nicht alle Inhalte sollten ĂŒbersetzt werden. Majina ya chapa, majina ya watu wa kisheria, maneno ya kitaalamu na majina ya bidhaa fulani wanafaa kukaa kwa lugha yao asili. Tafsiri zisizohitajika zinaweza kusababisha matatizo ya kisheria, dosh ya chapa na usumbufu kwa watumiaji.
["UnderhĂ„ll ett 'ĂversĂ€tt inte'-glossarium och dela det med alla översĂ€ttare", 'AnvĂ€nd spĂ€rrade segment eller separata namnrymder för varumĂ€rkes- och rĂ€ttsbegrepp', 'Ge alltid kontextanteckningar för tvetydiga strĂ€ngar för att förhindra felöversĂ€ttningar']
Hifadhi kamusi ya 'usitafsiri' na itumie na wahariri wote.
Tumia segmet za kizuizi zilizofungwa au namespaces tofauti kwa maneno ya chapa na haki
Ge alltid kontextanteckningar för tvetydiga strÀngar för att förhindra felöversÀttningar
Mfano wa kawaida
Faili ya tafsiri ina jina la kampuni 'CloudForge Inc.' na neno la kiufundi 'OAuth 2.0 Token' kama maneno ya kawaida yanayoweza kutafsiriwa.
Mtafsiri wa Kispanishi hutoa 'CloudForge' kuwa 'ForjaNube' na 'OAuth 2.0 Token' kuwa 'ficha OAuth 2.0'.
Matokeo: Watumiaji hawapati kampuni hiyo kwa jina lake halisi, na wahandisi wanaosoma nyaraka za Kiswahili wanashangazwa na maneno ya kitaalam yaliyotafsiriwa ambayo hayajulikani.
Kwa nini hilo ni tatizo
Kiasi kimoja ya jina la chapa lenye tafsiri isiyofaa katika hati za kisheria kinaweza kufanya mkataba kuwa batili. Sukuvutia tafsiri nyingi za kuirekebisha inahusisha ukaguzi wa kila string katika kila lugha â kuchukua wiki kadhaa.
Iwapo maneno yote yatatolewa kwa tafsiri bila muktadha, watafsiri wanaweza kutafsiri majina ya chapa ('Apple' â 'Apfel'), maneno ya kisheria ('GmbH' â 'LLC') au yanayotaka kuendelea kwa Kiingereza.
Watumiaji hawatafuti bidhaa kwa jina la chapa lao, nyaraka za kisheria zinataja kampuni isiyo sahihi, na dokumentation ya kiufundi inakuwa isiyoeleweka iwapo maneno kama 'API Endpoint' yatatafsiriwa.
Jinsi ya kuitatua
Weka wazi yaliyomo yasiyohitajika kutafsiriwa na utoe maelezo ya muktadha kwa watafsiri.
Unda kamusi ya 'Usitafsiri' inayoorodhesha majina ya chapa, majina ya bidhaa, watu wa kisheria na maneno ya kitaalam ambayo hayapaswi kubadilishwa.
Tumia jina/space tofauti ya Namespace au funguo maalum kwa yaliyomo yasiyotafsiriwa. Zana nyingi za i18n husaidia vipande vilivyofungwa ambavyo watafsaji hawawezi kuhariri.
Ongeza maoni/maelezo ya mwaandishi wa kutafsiri kwenye faili zako za tafsiri kuelezea muktadha: 'Hii ni jina la chapa â usitafsiri' au 'Mtaalamu â uachwe kwa Kiingereza'.
Hitilafu #2: Muunganiko wa maneno
Kusanya sentensi kwa maneno ya vipande hufanya maana ya Kiingereza kuwa rahisi, lakini katika lugha nyingine si hivyo. Msimamo wa maneno, sarufi na muundo wa sentensi hubadilika sana kati ya lugha, ambayo makundi ya maneno yaliyounganishwa hayawezi kutafsiriwa.
['No construeix mai frases concatenant fragments traduïts', 'Utilitza marcadors de posició amb nom ('{name}') en lloc de posicional ({0}) per claredat', 'Proporciona comentaris de context per als traductors explicant quÚ conté cada marcador de posició']
Usijenge sentensi kwa kuunganisha vipande vilivyotafsiriwa.
Utilitza marcadors de posiciĂł amb nom ('{name}') en lloc de posicional ({0}) per claredat
Toa maelezo ya muktadha kwa watafsiri yanayofafanua kilicho katika kila placeholder.
Mfano wa kawaida
Mjenzi wa programu anaandika: 'You have ' + count + ' items in your ' + cartType + ' cart' â inafanya kazi kikamilifu kwa Kiingereza.
Mtafsiri wa Kijerumani hupokea vipande vitatu vilivyo tofauti na hakuweza kujenga sentensi sahihi kisarufi kwa sababu mpangilio wa maneno unapaswa kubadilika.
Matokeo: Watumiaji wa Kijerumani wanaona 'Sie haben 5 Artikel in Ihrem Warenkorb Standard' â haifai na si ya kitaaluma.
Kwa nini hili ni Tatizo
Kila string iliyoshikamana ni bomu la muda. Kwa lugha 20 na misimbo 50 iliyoshikamana, una makosa ya kisarufi 1,000 ambayo yanapaswa kurekebishwa kwa mikono.
Kusanyikana kwa maneno kama 'Karibu ' + userName + ', una ' + count + ' ujumbe mpya' inahitaji mpangilio wa maneno maalum. Watafsiri wanaopata vipande visivyo na muktadha hawawezi kuyaorodhesha.
Watumiaji wanaona sentensi zisizo sahihi kisarufi. Katika Kijerumani, tendo huwa mwishoni mwa sentensi. Katika Kiarabu, muundo mzima ni kinyume. Matokeo yanasomwa kama upuuzi.
Namna ya kuirekebisha
Tumia ujumbe ulioparametrishwa na viashiria vilivyotajwa ili wakalimani waweze kutengeneza sentensi kwa mpangilio tofauti.
Substitueix la concatenaciĂł per una Ășnica clau de missatge amb marcadors: 'cart.summary': 'Tens {count} articles al teu carret de compra '{cartType}''.
Watafsiri wanatoa aina zote za wingi kwa lugha yao. Polish: '{count, plural, one {# plik} few {# pliki} many {# plikĂłw} other {# pliku}}'.
Els traductors ara poden reordenar lliurement: 'El teu carret de compra '{cartType}' tĂ© {count} articles' â alemany gramaticalment correcte.
Tatizo #3: Uwingi wa maneno
Kiingereza kina aina mbili za wingi: moja na nyingi. Watengenezaji wanafikiria kuwa lugha zote zinafanya kazi kwa njia ile ile. Hawafanyi hivyo. Kiarabu kina muundo 6, na hata lugha kama Kifaransa huchukua sifuri tofauti na Kiingereza.
['AnvĂ€nd alltid ICU MessageFormat eller ett motsvarande bibliotek för rĂ€knbara innehĂ„ll', 'Skriv aldrig egen plurallogik â lita pĂ„ CLDR-reglerna', 'Testa pluralisering med vĂ€rden som 0, 1, 2, 5, 21 och 100 för att tĂ€cka alla kategorier']
Tumia daima ICU MessageFormat au maktaba inayofanana kwa maudhui yanayojumlisha.
Usiandike kamwe logiki yako ya wingiâ tumia sheria za CLDR.
Jaribu wingi kwa thamani kama 0, 1, 2, 5, 21 na 100 ili kufunika makundi yote.
Mfano wa kawaida
Mjenzi wa programu anaandika: count + (count === 1 ? ' Datei' : ' Dateien') â inahudumia Kijerumani ipasavyo.
Mtafsiri wa Kipolishi anahitaji 4 forms: 1 plik, 2-4 pliki, 5-21 plikĂłw, 22-24 pliki. Der einfache TernĂ€r kann das nicht ausdrĂŒcken.
Matokeo: Watumiaji wa Kipolishi wanaona '5 pliki' (fomu mbovu) badala ya '5 plikĂłw' (fomu sahihi), na programu inaonekana mbovu.
Kwa nini hii ni tatizo
Kila nomino inayohesabika katika programu yako inahitaji matunzo ya wingi. Kwa 50 strings na lugha 20 kuna 1,000 sheria za wingi â si rahisi kusimamia kwa mikono.
Vipimo rahisi vya if/else (count === 1 ? 'Datei' : 'Dateien') huhudumia tu Kijerumani na Kiingereza. CLDR inaweka hadi makundi ya wingi 6: zero, one, two, few, many na other. Kila lugha inatumia sehemu tofauti ya kundi.
Watumiaji wanaona maandishi ya wingi yasiyo sahihi kama '1 Nachricht' au muundo wa wingi usio sahihi kabisa. Katika muktadha rasmi huaribu uaminifu.
Namna ya kuirekebisha
Tumia ICU MessageFormat, ambayo inaunga mkono sheria za wingi za CLDR moja kwa moja.
Tafaza ujumbe kwa muundo wa ICU: 'fileCount': '{count, plural, one {# Datei} other {# Dateien}}'.
Watafsiri wanatoa form zote za wingi kwa lugha yao. Polish: '{count, plural, one {# plik} few {# pliki} many {# plikĂłw} other {# pliku}}'.
Ditt i18n-bibliotek vÀljer vid körning automatiskt rÀtt form baserat pÄ CLDR-reglerna för den aktiva lokaliteten.
Hitilafu #4: Upana wa vipengele vya UI vya kubainisha
Desigâners skapar pixelnoga layouter pĂ„ engelska, och utvecklare implementerar dem med fasta bredder. Men översatt text kan vara dramatiskt lĂ€ngre eller kortare. Svensk text Ă€r ungefĂ€r 30% lĂ€ngre Ă€n engelska, medan kinesisk text kan vara upp till 50% kortare.
['AnvĂ€nd aldrig fasta pixelbredder för element med översĂ€ttbart textinnehĂ„ll', 'Planera för 40% textförlĂ€ngning som baseline â vissa sprĂ„k expanderar Ă€nnu mer', 'AnvĂ€nd CSS Flexbox eller Grid för layouter som anpassar sig till varierande innehĂ„llslĂ€ngder']
Usitumie upana wa pikseli uliowekwa kwa vipengele vyenye maandishi yanayoweza kutafsiriwa.
Panga ongezeko la maandishi la 40% kama baselineâ baadhi ya lugha zinaongezeka zaidi.
Tumia CSS Flexbox au Grid kwa mipangilio inayojirudisha kwa urefu tofauti wa maudhui.
Ein typisches Szenario
Designer skapar en navigationsrad med 5 knappar, var och en exakt 100 px bred â ser perfekt ut pĂ„ engelska.
Tysk översÀttning: 'Settings' översÀtts till 'Einstellungen' (13 tecken mot 8), 'Submit' översÀtts till 'Absenden' (8 mot 6). Navbarn överflödar.
Resultat: PÄ mobila enheter staplas knapparna eller texten klipps, vilket gör navigationen oanvÀndbar för svenska anvÀndare.
Varför det hÀr Àr ett problem
KaĆŒde element z fester Breite Ă€r ett potentieller sprickpunkt. En typisk app har hundratals knappar, labels och cards som alla mĂ„ste klara textförlĂ€ngning.
BehÄllare med fast bredd (width: 120px) och knappar med fast storlek klipper av eller sprÀnger över kanten nÀr texten expanderar. CSS overflow: hidden döljer innehÄll tyst, medan overflow: visible förstör layouten.
AnvÀndare ser avkapade etiketter som 'Einstellu...' istÀllet för 'Einstellungen', eller knappar som överlappar angrÀnsande element. Kritiska ÄtgÀrder blir olÀsliga eller oklikkbara.
Bunu nasıl dĂŒzeltebilirsin
Formge och implementera flexibla layouter som anpassar sig till innehÄllets lÀngd i alla lokaler.
Byt ut fasta bredder till min-width, max-width och flex-layouts. AnvÀnd CSS Grid eller Flexbox för att fördela utrymmet dynamiskt.
AnvÀnd textbehÄllare som bryts: anvÀnd overflow-wrap: break-word och undvik white-space: nowrap vid översÀttbart innehÄll.
Testa din UI med pseudo-lokalisering som förlĂ€nger alla strĂ€ngar med 40% för att simulera vĂ€rsta fallet â innan du skickar strĂ€ngarna till översĂ€ttare.
Hitilafu #5: Muda wa tarehe na idadi
Dâata och siffror verkar universella. Men 01/02/2025 betyder den 2 januari i USA och den 1 februari i Europa. Kommatecken och decimaltecken Ă€ndrar betydelsen i siffror: 1,000.50 (USA) vs 1.000,50 (Tyskland). Att göra fel leder till förvirring, datafel och misstro.
['Fomati data au nambari kamwe usitumie templates za maandishiâ daima tumia API za Intl', 'Hifadhi data zote katika ISO 8601 na sarafu kwa unit ndogo kabisa (sent) ndani', 'Jaribu Locale zinazotumia alama za desimali tofauti, mpangilio wa tarehe tofauti na mifumo ya kalenda']
Usifanyie data au nambari muundo kwa mikono kwa kutumia template za maandishiâ daima tumia Intl-APIs.
Hifadhi data zote kwa ISO 8601 na sarafu kwa kipimo kidogo zaidi (sent) ndani.
Jaribu na locales zinazo tumia alama za sehemu tofauti, mpangilio wa tarehe na mifumo ya kalenda tofauti.
Ett typiskt scenario
Utvecklaren formaterar ett datum som MM/DD/YYYY och ett pris som $1,234.50 â korrekt för amerikanska anvĂ€ndare.
Eine deutsche Benutzer sieht das Datum 03/04/2025 und interpretiert es als 3. April statt 4. MĂ€rz â verpasste Termine oder falsche Buchungen.
Matokeo: Mtumiaji anapanga ndege kwa tarehe isiyo sahihi na anauliza kuhusu muundo wa bei. Tiketi za msaada zinaongezeka kwa 15% katika soko la Ujerumani.
Varför Àr det ett problem
Fomatering av datum och siffror pÄverkar varje data som visas i din app: tabeller, diagram, formulÀr, fakturor, rapporter. En global fix tÀcker hundratals instanser.
Hardkodierte Formatstrings som toLocaleDateString('en-US') eller manuell formatierung med Template-Literals ignorieren die tatsÀchliche Locale des Nutzers. Selbst die richtige Locale aber das falsche Kalendersystem (Gregorianisch vs. Hijri) verursacht Probleme.
Kullanıcılar verileri yanlıà okur ve yanlıà biçimde veri girer. Avrupa'da bir kullanıcı 03/04/2025 gördĂŒÄĂŒnde bunun 3 Nisan mı yoksa 4 Mart mı olduÄuna karar veremeyebilir â kaçırılan randevular veya hatalı rezervasyonlar.
Namna ya kulitatua hili
Matumizi ya Intl-API iliyojengwa ndani au maktaba ya muundo inayojali locale kwa data, saa, idadi na sarafu zote.
Badili muundo wa data kwa kutumia Intl.DateTimeFormat(locale) kwa tarehe na Intl.NumberFormat(locale, { style: 'currency', currency }) kwa bei.
Zifadhi data ndani ya ISO 8601 (YYYY-MM-DD) na uformatie tu kwa kuonyesha kwa kutumia locale ya mtumiaji.
Jaribu mitindo ya Locales inayotumia alama za desimali tofauti, mpangilio wa tarehe tofauti na mifumo ya kalenda tofauti.
Hitilafu #6: Kusahau lugha za RTL
Lugha zilizopangwa kulia kuelekea kushoto (RTL) kama Kiarabu, Kiebrania na Kisiri zinatumiwa na zaidi ya watu milioni 500. Hata hivyo, programu nyingi hufanywa kwa muundo wa kushoto-kwa-kuume (LTR) pekee. Msaada wa RTL hauhusihi tu kugeuza maandishiâ UI yote inapaswa kuonyeshwa kwa kioo.
['Tumia kutoka siku za mwanzo tu sifa za CSS zenye mantiki (inline-start/end, block-start/end)', 'Test App yako kwa RTL (dir=rtl) kwenye HTML-Element katika kila Sprint-Review', 'Tengeneza RTL-test-checklist kwa navigation, icons, fomr na maendeleo ya onyesisho']
Tumia tangu siku ya kwanza tu sifa za CSS zinazofuatilia muktadha ya lugha (inline-start/end, block-start/end).
Pima programu yako ukiwa na dir='rtl' kwenye element HTML katika kila sprint-review.
Tengeneza orodha ya ukaguzi ya RTL kwa ajili ya urambazaji, ikoni, fomu na maonyesho ya maendeleo.
Kesi ya kawaida
Mjenzi wa programu anatumia margin-left: 16px na text-align: left kote katika programu â Mipangilio ya kawaida ya LTR.
Programu inaanza nchini Saudi-Arabia. Mipito ya nyuma inaonyesha mbele, Sidebars zinaonekana upande wa sgini sahihi? Imeandikwa vibaya.
Matokeo: Wataja wa Kiarabu wanaacha programu baada ya sekunde 30. Timu inahitaji 4 wiki za Notfall-CSS-Refactoring ili kuondoa tatizo.
Kwa nini hili ni tatizo
Support ya RTL inahusisha kila kikundi cha programu yako. Kuanzisha RTL kwa mara ya kwanza inahitaji kwa kawaida kuandika upya 30-50% ya sheria za CSS na kukagua kila ikoni na muundo.
Vipengele vya CSS kama margin-left, padding-right, text-align: left na float: left hufikisha mwelekeo kwa alama. Icons zenye maelekeo (mshale, maendeleo) zinaonyesha upande usio sahihi. Hata thamani za border-radius zinapaswa kupindishwa.
Wateja wa Kiarabu wanaona uramu wa uramu wa kuongoza uliokwenda nyuma, mstari wa maendeleo unaendelea nyuma, na maandishi yanayokutana na vipengele vya UI. Programu inahisi ya kigeni na haifai kujazwa.
Namna ya kuirekebisha hili
Matumizi ya sifa za CSS zenye mantiki na kujaribu muundo wa RTL kuanzia mwanzo.
Badili zote physischen CSS-Properties kwa logische Ăquivalente: margin-left â margin-inline-start, padding-right â padding-inline-end, text-align: left â text-align: start.
Weka dir-atributu kwenye HTML-Root-Element yako kulingana na Locale inayotumika. Tumia :dir(rtl) CSS-pseudoklasse kwa overrides za RTL.
Angalia icons zote kwa maana ya mwelekeo. Badili icons zenye mwelekeo kuwa na toleo zilizowakilishwa kwa paji au tumia CSS transform: scaleX(-1) kwa muktadha wa RTL.
Hitilafu #7: Picha zenye maandishi ndani
Kuweka maandishi katika picha â iwe katika Hero banners, vitufe, infographics au screenshots â ni ndoto ya kutafsiri. Kila picha yenye maandishi inapaswa kutengenezwa upya kwa kila lugha, jambo ambalo huongeza gharama za ubunifu na husababisha kuahirishwa kwa toleo.
['Maandishi yanayoweza kutafsiri yasifichwe moja kwa moja ndani ya raster picha (PNG, JPG)', 'Tumia overlays za maandishi za CSS kwenye picha za asili kwa Hero-Banner na CTAs', 'Automatiza utekelezaji wa screenshot kwa orodha za App Store na kurasa za masoko']
Usiingize maandishi yanayoweza kutafsiri moja kwa moja ndani ya picha raster (PNG, JPG).
Tumia overlays ya maandishi ya CSS kwenye picha za eneo la nyuma kwa Hero Banner na CTAs
Automatiza uzalishaji wa screenshots kwa orodha za App Store na kurasa za masoko.
Kesi ya kawaida
Mbunifu anaandaa bango la promo lenye maandishi 'Anza Jaribio Lako Bila Malipo' ndani ya picha.
Timu ya utafisiri inatafsiri maandishi yote ya UI, lakini bango katika ukurasa wa Kijerumani linaonyesha tena maandishi ya Kiingereza.
Matokeo: Kurasa ya mahali ya Ujerumani ina bango ya Kiingereza kilicholeta usumbufu. Kuunda mabango yaliyotafsiri kwa lugha 15 inachukua siku 3 za kazi za usanifu na inachelewesha uzinduzi.
Kwa nini hili ni tatizo
Ukubwa wa kawaida wa ukurasa wa uuzaji ni picha 5-10 zenye maandishi. Kwa lugha 15, hiyo ni takriban picha 75-150 zinazopaswa kuundwa, kuandaliwa, na kusasishwa katika kila mabadiliko ya muundo.
Maandishi yaliyopachikwa ndani ya picha (PNG, JPG, SVG yenye maandishi) hayawezi kutolewa na zana za tafsiri. Kila toleo lililotafsiriwa linahitaji muundaji kuhariri kwa mikono faili chanzo, kuizalisha na kupakia.
Watumiaji wanaona picha zenye maandishi katika lugha ya kigeni, au mbaya zaidi, mchanganyiko wa UI iliyotafsiriwa na picha zisizotafsiriwa. Hii inafanya kazi kuwa ya kutofautiana na inaharibu uaminifu wa chapa.
Jinsi ya Kulitatua
Tambua maandishi kutoka kwenye picha kwa kutumia overlays za CSS, SVG zilizo na vipengele vya maandishi vinavyoweza kutafsiriwa, au uzalishaji wa picha kwa njia ya kiotomatiki.
Tumia CSS kuweka maandishi yanayoweza kutafsiri juu ya picha: weka tabaka la maandishi kwa nafasi ya absolute juu ya kontena la picha.
Kwa infographics au grafiki tumia SVG zenye vipengele vya <text> vinavyorejelea funguo za tafsiri, badala ya kuweka maandishi moja kwa moja.
Kwa screenshots za programu katika vifaa vya masoko, tumia automatization ya takwimu za skrini (screenshots) kwa zana kama Fastlane (Mobile) au Playwright (Web), ambazo zitachukua skrini katika kila locale.
Fehler #8: Fehlendi Ăbersetzige nöd bearbeitet
ĂversĂ€ttningar Ă€r under utvecklingen alltid ofullstĂ€ndiga. Nya funktioner lĂ€gger till strĂ€ngar snabbare Ă€n översĂ€ttare kan översĂ€tta dem. Utan riktig fallback-hantering orsakar saknade översĂ€ttningar krascher, tomma UI-element eller rĂ„a översĂ€ttningsnycklar som visas för anvĂ€ndarna.
['Hakikikisha daima kuna lugha ya kujifunika (fallback) angalau moja katika usanidi wako wa i18n', 'Taarifu funguo zilizokosekana za tafsiri katika Mfumo wako wa ufuatiliaji kwa ufuatiliaji', 'Weka kiwango cha chini cha upimaji wa tafsiri kabla ya Locale kuishi']
Weka angalau lugha moja ya kurudisha nyuma katika mipangilio yako ya i18n.
Weka rekodi zile zilizokosa maneno ya tafsiri kwenye mfumo wako wa ufuatiliaji.
Weka kiwango kidogo cha upatikanaji wa tafsiri kabla ya Locale kuwa hai.
Kesi ya kawaida
Mhandisi anaongeza sehemu mpya 'Premium Features' yenye funguo za tafsiri 15 mpya. Toleo la Kiingereza linatolewa mara moja.
Tafsiri za Kifaransa bado hazijakamilika. Ukurasa wa Kifaransa unaonyesha funguo mbichi: 'premium.feature1.title', 'premium.feature1.description'.
Matokeo: Wafanyakazi wa Kifaransa wanaona ukurasa mbovu wenye majina ya funguo za maendeleo. Timu ya usaidizi inapata maombi ya hitilafu kadhaa.
Kwa nini hili ni tatizo
Kadiri programu yako inavyozidi kukua, pengo kati ya maneno ya Kiingereza na tafsiri katika lugha nyingine linakuwa kubwa. App yenye lugha 100 na maneno 2,000 inaweza kuwa na zaidi ya 10,000 tafsiri ambazo hazijapatikana wakati wowote.
Bila logiki ya fallback, ufunguo wa tafsiri uliokosekana unaweza kurudisha undefined, null au maneno ya ufunguo mbichi (mfano 'checkout.confirmButton'). Mitambo ya templating inaweza kutoa makosa, ukurasa unaweza kuanguka au hata kitu kingine hakionyeshwi.
Watumiaji wanaona UI iliyoharibiwa: vitufe visivyo na maandishi, lebo zilizokosekana au maneno ya kutatanisha kama 'nav.settings.title' badala ya maandishi halisi. Hii inachanganya na sio ya kitaaluma.
SÄ hÀr ÄtgÀrdar du det
Richte mlolongo wa lugha ya fallback thabiti na ufuatilie upatikanaji wa tafsiri katika lugha zote.
StÀll in en fallback-sprÄk-kedja i din i18n-konfiguration: saknade fr-nycklar ÄtergÄr automatiskt till engelska (en).
Ongeza mshughulikiaji wa Missing-Key unaoweza kurekodi misimbo isiyo tafsiriwa kwa mfumo wako wa ufuatiliaji (k.m. Sentry, Datadog) bila kuvunja uzoefu wa mtumiaji.
Jenga dashibodi ya upotofu wa tafsiri inayofuatilia kiwango cha ukamilifu kwa kila Locale na kuzuia utoaji wa toleo ikiwa asilimia ya ukamilifu inashuka chini ya kiwango (mf. 95%).
Kosa #9: Tatizo la uandishi wa herufi
Masuala ya muundo wa herufi ni 'muuaji wa kimya' wa ulinganifu wa lugha. Yote yanaonekana sahihi kwa Kiingereza na lugha za Ulaya, lakini unapoongeza Kichina, Kijapani, Kikorea, Kiarabu au Emoji, herufi zilizovunjika hujitokeza. Hitilafu hizi ni ngumu sana kugundua.
['AnvĂ€nd UTF-8-kodning överallt â kĂ€llfiler, databas, API-svar och HTML-meta-taggar', 'AnvĂ€nd utf8mb4 i MySQL (inte utf8) för att stödja hela Unicode-omrĂ„det inklusive emojis', 'Testa med verkligt innehĂ„ll i CJK, arabiska och emojis för att tidigt fĂ„nga kodningsproblem']
Tumia UTF-8 kila mahali â Faili za chanzo, hifadhidata, majibu ya API na HTML-Meta-Tags
Tumia utf8mb4 katika MySQL (sio utf8) ili kuunga mkono eneo la Unicode pamoja na Emoji.
Jaribu na maudhui halisi ya CJK, Kiarabu na Emoji ili kugundua matatizo ya utungaji mapema.
Mfano wa kawaida
Mhandishi wa programu anaweka hifadhidata ya MySQL yenye latin1-Collation (mabainisho ya zamani). Msimbo wa chanzo wa programu unatumia UTF-8.
Watumiaji wa Kijapani wanajisajili kwa jina lao halisi. Hifadhi ya database inahifadhi 'ç°äžć€Șé' kama bytes zilizoharibika.
Matokeo: wasifu wa mtumiaji unaonyesha maandishi yaliyo taabika. Zaidi ya hayo: Utafutaji na upendeleo wa kuorodhesha huharibika kwa majina ya CJK, ambayo yanahusu maelfu ya watumiaji.
Kwa nini hii ni shida
Masuala ya uandishi wa herufi yanapanuka kote katika stack yako. Kolation ya hifadhidata isiyo sahihi inaweza kuharibu mamilioni ya rekodi â urekebishaji unahitaji uhamishaji wa data wa gharama.
Uyumbuzo wa mfululizo wa msimbo hauko sawa kote; UTF-8 katika faili za source, Latin-1 katika hifadhidata na Windows-1252 katika majibu ya API â kuharibu herufi nyingi za maelfu. Tabaka moja isiyoagizwa vizuri husababisha 'æ„æŹèȘ' kubadilishwa kuwa '????' au 'ĂŠâ„ÊĆÂŹĂšÂȘ'.
Watumiaji wanaona maandishi yaliyovunjika, alama za kuuliza au sanduku tupu pale ambapo lugha yao inapaswa kuwepo. Katika hali mbaya zaidi, ingizo la fomu linaweza kuharibika katika hifadhidata kwa ujumla.
Jinsi ya kurekebisha tatizo hili
Lazimisha uhuishaji wa UTF-8 kwa tabaka zote za Stack ya programu.
Seti semua fail ya chanzo kwenye UTF-8 (sahihisha Mhariri wako na .editorconfig). Ongeza <meta charset='UTF-8'> katika HTML yako na 'Content-Type: application/json; charset=utf-8' katika majibu ya API.
Sahihisha hifadhidata yako kuwa utf8mb4 (si utf8 tu, ambayo ni subset ya 3-bytes katika MySQL). Weka Connection-Collation yao utf8mb4_unicode_ci.
Chagua fonts ambazo zinashughulikia alphabet yako: Kilatini, Kirill, CJK, Kiarabu, Devanagari. Tumia System-Font-Stacks au Google Fonts yenye subset za lugha kwa kupakia kwa kasi.
Jaribu utekelezaji wako wa i18n.
Jaribio la upanuzi wa urefu
Panua maandishi yote yaliyo tafsiri kwa 30-40% ili kuiga upanuzi wa maandishi unaotokea katika lugha zenye maneno mengi kama Kijerumani, Kifini na Kigiriki. Hii inashughulikia kontena zilizopangwa kwa upana wa lazima, lebo zilizokatwa na vitufe vinavyojaa kabla ya kuanza kutafsiri. Zana nyingi za lokalisaji ya bandia zinatoa hii kama kipengele kilichojengwa ndani.
"Senden" â "áč ééééñðéñ_Ă©xpåñðéð" (40% lĂ€nger)
Pseudolokalisering
Ufafanuzi wa bandia wa i18n unabadilisha kila herufi kuwa na herufi zenye alama (kwa mfano 'a' â 'ĂĄ') na kuzungusha maneno kwa alama kama [!! na !!]. Hii inabainisha mara moja ni maneno yaliyoandikwa moja kwa moja (hard-coded) au yanatoka kwenye mfumo wa tafsiri. Fanya lokalisaji bandia kuwa sehemu ya pipeline ya CI yako ili kukamata regression kiotomatiki.
Varje text pÄ skÀrmen som inte Àr inuti [!! !!]-markeringar Àr hÄrdkodad och mÄste flyttas ut. Denna test fÄngar 95% av de förbisedda strÀngarna pÄ under en minut.
"Tuma ujumbe" â "[!! ĂåçងĆĂçងáč« áčĄĂ©Ă±Ă°Ă©Ă± !!]"
Mtihani wa muundo wa RTL
Ingawa hujapata tafsiri za Kiarabu au Kiebrania, unaweza kujaribu RTL layout kwa kuongeza dir='rtl' kwenye HTML Root. Hii inabainisha mara moja makosa ya CSS ya mwelekeo: alama za icons zenye mwelekeo usio sahihi, margins upande usiofaa, navigation iliyofeli na vitu vya Flex vilivyoorodheshwa vibaya. Hakikisha hii iwe ukaguzi wa kawaida katika kila sprint review â inachukua sekunde 10 kubadili na inaangazia matatizo ambayo vinginevyo yanahitaji wiki za kurekebisha Production.
Orodha ukaguzi ya i18n
['Strings zote zinazoonekana kwa mtumiaji zimetolewa katika faili za rasilimali', 'Hakuna muunganiko wa maneno kwa ajili ya kuunda sentensi', 'Kanuni za wingi kwa ICU MessageFormat au kifanana zimetekelezwa', 'Matumizi ya API zinazojali locale kwa usahihi wa tarehe, saa, na muundo wa nambari', 'Muundo wa RTL umejaribiwa na maudhui ya Kiarabu au Kiebrania', 'UI inayoweza kubadilika isiyo na upana wa thabiti kwa vipengele vyenye maandishi', 'Lugha ya msaidizi ya kubadili (fallback) imewekewa na kujaribiwa pale keys zinapokosekana', 'Ufafanuzi wa UTF-8 unakuwa thabiti katika faili zote na hifadhidata zote', 'Metadati za App Store na Play Store kwa kila soko zimelokalizwa', 'Screenshots na rasilimali za masoko kwa kila lugha zimesasishwa']