તાજેતરમાં રિલીઝ થયેલા Cache-Control એનાલાઇઝરના અંગ્રેજી વર્ઝનમાં જાપાનીઝ લખાણ દેખાયું—તેનો સ્ટેટસ "Fresh" ને બદલે “新鮮” દર્શાવતો હતો. આ ભૂલ પાછળનું કારણ એવું શેર કરેલું લોજિક (shared logic) હતું જે હાર્ડ-કોડેડ જાપાનીઝ સ્ટ્રિંગ્સ રિટર્ન કરતું હતું, જ્યારે પેજ માત્ર અંગ્રેજી લેબલ્સ જ સપ્લાય કરતું હતું.
ડેવલપર હળવા બ્રાઉઝર ટૂલ્સની એક શ્રેણી બનાવે છે, જેમાં દરેક ટૂલનું એક અંગ્રેજી પેજ અને એક જાપાનીઝ પેજ હોય છે જે સમાન પાર્સિંગ ફંક્શન્સ અને કોર લોજિકનો ફરીથી ઉપયોગ કરે છે. માત્ર દેખાતા શબ્દો અલગ હોવા જોઈએ. જ્યારે Cache-Control એનાલાઇઝર રિલીઝ થયું, ત્યારે અંગ્રેજી ઇન્ટરફેસ સાચા લેબલ્સ દર્શાવતું હતું, પરંતુ તે જે વેલ્યુઝ રિટર્ન કરતું હતું તે લોજિક લેયરમાંથી આવતી હતી, જેમાં હજુ પણ જાપાનીઝ લિટરલ્સ (literals) હતા. કન્સોલ (console) માં કોઈ એરર દેખાઈ નહીં; પેજ સામાન્ય લાગતું હતું, છતાં અંગ્રેજી બોલતા વપરાશકર્તાઓ માટે રજૂ કરવામાં આવેલી માહિતી ખોટી હતી.
શા માટે શેર કરેલું લોજિક ટ્રાન્સલેશનમાં ભૂલ કરાવી શકે છે
આ બગ (bug) એક ડિઝાઇન પસંદગીને કારણે ઉદભવ્યો હતો: શું બતાવવું તે નક્કી કરતું મુખ્ય ફંક્શન જાપાનીઝમાં લિટરલ સ્ટ્રિંગ્સ રિટર્ન કરતું હતું. પેજ લેયર, જે આસપાસના અંગ્રેજી લખાણ માટે જવાબદાર હતું, તેને તે વેલ્યુઝ બદલવાની તક જ મળી નહીં. કારણ કે લોજિક અને UI સ્પષ્ટ રીતે અલગ હતા, ટેસ્ટિંગ દરમિયાન આ સમસ્યા દેખાઈ નહીં—ટેકનિકલ રીતે બધું "સાચું" કામ કરતું હતું, ભલે વપરાશકર્તા માટેની ભાષા ખોટી હતી.
તેની નકારાત્મક બાજુ એ છે કે શેર કરેલા મોડ્યુલની અંદર વપરાતી ભાષા તે વાપરતા દરેક ફ્રન્ટ-એન્ડ માટે ડિફોલ્ટ બની જાય છે. જો કોઈ અન્ય ભાષાની જરૂર હોય, તો આ ડિફોલ્ટ એક છુપાયેલું બગ બની જાય છે.
ઉકેલ: કીઝ (keys), પેક્સ (packs), અને સેફ્ટી નેટ
લેખકે જવાબદારીઓ અલગ કરવા માટે આર્કિટેક્ચર ફરીથી લખ્યું:
- મેસેજ પેક્સ (Message packs) હવે દરેક ભાષા માટે તમામ માનવ-વાંચન યોગ્ય સ્ટ્રિંગ્સ ધરાવે છે.
- શેર કરેલું લોજિક (Shared logic) માત્ર સિમ્બોલિક કીઝ રિટર્ન કરે છે, ક્યારેય કાચું લખાણ (raw text) નહીં.
- પેજ (Pages) કીના આધારે સંબંધિત પેકમાંથી યોગ્ય શબ્દ શોધી લે છે.
જ્યારે કોઈ મેસેજમાં નંબરનો સમાવેશ કરવો જરૂરી હોય, ત્યારે નવો કોડ ટેમ્પલેટ સ્ટ્રિંગને બદલે એક નાનું ફંક્શન વાપરે છે. આનાથી દરેક ભાષા નક્કી કરી શકે છે કે નંબર ક્યાં હોવો જોઈએ, જેથી શબ્દોના ક્રમમાં આવતા તફાવતોને સમાવી શકાય.
એક સરળ સ્ટેટિક-એનાલિસિસ સ્ટેપ પણ ઉમેરવામાં આવ્યું છે: બિલ્ડ પ્રોસેસ શેર કરેલી ફાઇલોમાં જાપાનીઝ અક્ષરો માટે સ્કેન કરે છે. જો કોઈ અક્ષરો દેખાય, તો ડેવલપરને તરત જ એલર્ટ કરવામાં આવે છે, જેથી હાર્ડ-કોડેડ વિદેશી લખાણ ફરીથી અંદર ન આવી જાય.
આ અનુભવે લેખકને શું શીખવ્યું
- ટ્રાન્સલેશન એક રિવ્યુ તરીકે કામ કરે છે. અંગ્રેજી મેસેજ લખતી વખતે, લેખકે નોંધ્યું કે કેટલાક જાપાનીઝ સમાન શબ્દો અસ્પષ્ટ હતા. ટ્રાન્સલેશન કરવાથી બંને ભાષાઓમાં વધુ સ્પષ્ટ શબ્દો વાપરવા પડ્યા.
- સ્ટ્રિંગ્સ રિટર્ન કરતા શેર કરેલા ફંક્શન્સ દરેક માટે એક ભાષા નક્કી કરી દે છે. જો કોઈ ફંક્શન ભાષા નક્કી કરે છે, તો જે કોઈ અન્ય ભાષાની અપેક્ષા રાખતું હોય તેને પણ આ ભૂલ વારસામાં મળે છે. આ બગ કોઈ UI ગ્લીચ (glitch) નથી; તે લોજિકની ખામી છે.
બહુભાષી ટૂલ્સ જાળવતા કોઈપણ માટે ભલામણો
- કોર ફંક્શન્સમાંથી સ્ટ્રિંગ્સ નહીં, પણ કીઝ રિટર્ન કરો. લોકલાઇઝેશન (localization) સંભાળવા માટે UI લેયરને કામ કરવા દો.
- અથવા ઇચ્છિત સ્ટ્રિંગ્સને પેરામીટર્સ તરીકે ફંક્શનમાં પાસ કરો. આનાથી લોજિક ભાષાથી સ્વતંત્ર રહે છે.
- હાર્ડ-કોડેડ મૂળ-ભાષાના લખાણ માટે શેર કરેલા મોડ્યુલ્સનું ઓડિટ કરો. નોન-ASCII અક્ષરો માટે ઝડપી સર્ચ કરવાથી છુપાયેલી સમસ્યાઓ સામે આવી શકે છે.
- શેર કરેલા કોડમાં વિદેશી અક્ષરો માટે બિલ્ડ-ટાઇમ ચેક ઉમેરો. વહેલું નિરીક્ષણ રિલીઝ પછીની મૂંઝવણ કરતાં વધુ સારું છે.
આગળ શું ધ્યાન રાખવું
મુખ્ય વાત (Takeaway): જો તમારો પ્રોજેક્ટ વિવિધ ભાષાના વર્ઝન વચ્ચે કોડ શેર કરતો હોય, તો ખાતરી કરો કે શેર કરેલો ભાગ ક્યારેય શબ્દો નક્કી ન કરે. દરેક પેજને તેના પોતાના શબ્દો સપ્લાય કરવા દો, અને તમે અંગ્રેજી પેજ અચાનક જાપાનીઝ બોલતું હોય તેવી શરમજનક સ્થિતિથી બચી શકશો.
