Toleo la Kiingereza la kichanganuzi cha Cache-Control kilichozinduliwa hivi karibuni lilionyesha maandishi ya Kijapani—hali yake ilisomeka “新鮮” badala ya “Fresh.” Kosa hilo lilitokana na mantiki ya pamoja (shared logic) iliyotoa maandishi ya Kijapani yaliyowekwa moja kwa moja (hard-coded) wakati ukurasa ulipotoa lebo za Kiingereza pekee.

Msanidi programu anajenga mfululizo wa zana nyepesi za kivinjari, kila moja ikiwa na ukurasa wa Kiingereza na ukurasa wa Kijapani unaotumia tena kazi za uchambuzi (parsing functions) na mantiki ya msingi ile ile. Ni maneno yanayoonekana pekee yanayopaswa kutofautiana. Wakati kichanganuzi cha Cache-Control kilipozinduliwa, kiolesura cha Kiingereza kilionyesha lebo sahihi, lakini thamani zilizotolewa zilitoka kwenye tabaka la mantiki (logic layer), ambalo bado lilikuwa na maandishi ya Kijapani. Hakuna makosa ya console yaliyotokea; ukurasa ulionekana wa kawaida, lakini habari iliyowasilishwa kwa watumiaji wanaozungumza Kiingereza ilikuwa isiyo sahihi.

Kwa nini mantiki ya pamoja inaweza kusaliti tafsiri

Hitilafu hiyo ilitokana na uamuzi wa usanifu: kazi ya msingi inayofanya uamuzi wa nini cha kuonyesha ilirudisha maandishi ya moja kwa moja katika Kijapani. Tabaka la ukurasa, ambalo linahusika na maandishi ya Kiingereza yanayozunguka, halikupata nafasi ya kubadilisha thamani hizo. Kwa sababu mantiki na UI vilitenganishwa vizuri, tatizo lilibaki halionekani wakati wa majaribio—kila kitu "kilifanya kazi" kiufundi, ingawa lugha inayomfikia mtumiaji haikuwa sahihi.

Hasara yake ni kwamba lugha inayotumika ndani ya moduli ya pamoja inakuwa chaguo la kwanza (default) kwa kila upande wa mbele (front-end) unaoitumia. Ikiwa lugha tofauti itahitajika, chaguo hilo la kwanza linakuwa hitilafu iliyojificha.

Suluhisho: funguo, pakiti, na mtandao wa usalama

Mwandishi aliandika upya usanifu ili kutenganisha majukumu:

  • Pakiti za ujumbe (Message packs) sasa zinahifadhi maandishi yote yanayoweza kusomwa na binadamu kwa kila lugha.
  • Mantiki ya pamoja inarudisha funguo za ishara (symbolic keys) pekee, wala si maandishi ghafi.
  • Kurasa hutafuta neno linalofaa kutoka kwenye pakiti husika kulingana na funguo.

Wakati ujumbe unapaswa kujumuisha namba, kodi mpya hutumia kazi ndogo badala ya mfuatano wa kiolezo (template string). Hii inaruhusu kila lugha kuamua mahali namba inapopaswa kuwa, ikizingatia tofauti katika mpangilio wa maneno.

Hatua rahisi ya uchambuzi wa tuli (static-analysis) pia iliongezwa: mchakato wa ujenzi (build process) huchunguza faili za pamoja kwa ajili ya herufi za Kijapani. Ikiwa zitaonekana, msanidi programu anajulishwa mara moja, kuzuia maandishi ya kigeni yaliyowekwa moja kwa moja yasirudi tena.

Kile uzoefu huo ulimfundisha mwandishi

  1. Tafsiri hufanya kazi kama hatua ya uhakiki. Wakati akiandika ujumbe wa Kiingereza, mwandishi aligundua kuwa baadhi ya maneno sawa ya Kijapani yalikuwa na utata. Kufanya tafsiri kulilazimisha matumizi ya misemo iliyo wazi zaidi katika lugha zote mbili.
  2. Kazi za pamoja zinazorudisha maandishi hufunga lugha kwa kila mtu. Ikiwa kazi itafanya uamuzi wa lugha, mtumiaji yeyote anayetarajia lugha tofauti ataingia kwenye kosa hilo. Hitilafu hiyo si hitilafu ya UI; ni kasoro ya mantiki.

Mapendekezo kwa yeyote anayesimamia zana za lugha nyingi

  • Rudisha funguo, si maandishi, kutoka kwenye kazi za msingi. Ruhusu tabaka la UI lishughulikie uwekaji wa mahali (localization).
  • Au pitisha maandishi yanayohitajika kwenye kazi kama vigezo (parameters). Hii inafanya mantiki isiathiriwe na lugha.
  • Kagua moduli za pamoja kwa ajili ya maandishi ya lugha ya asili yaliyowekwa moja kwa moja. Utafutaji wa haraka wa herufi zisizo za ASCII unaweza kuibua matatizo yaliyojificha.
  • Ongeza ukaguzi wakati wa ujenzi (build-time) kwa ajili ya herufi za kigeni kwenye kodi ya pamoja. Ugunduzi wa mapema ni bora kuliko mkanganyiko baada ya toleo kutoka.

Nini cha kuzingatia baadaye

Funzo: Ikiwa mradi wako unashiriki kodi kati ya matoleo ya lugha, hakikisha sehemu ya pamoja haiamui maneno. Ruhusu kila ukurasa utoe maneno yake yenyewe, na utaepuka aibu ya ukurasa wa Kiingereza unaozungumza Kijapani kwa bahati mbaya.