కొత్తగా విడుదలైన Cache-Control analyzer యొక్క ఇంగ్లీష్ వెర్షన్లో జపనీస్ టెక్స్ట్ కనిపించింది—అందులోని స్టేటస్ "Fresh" కి బదులుగా "新鮮" అని ఉంది. పేజీ కేవలం ఇంగ్లీష్ లేబుల్స్ను మాత్రమే అందిస్తున్నప్పటికీ, షేర్డ్ లాజిక్ హార్డ్-కోడెడ్ జపనీస్ స్ట్రింగ్స్ను తిరిగి పంపడం వల్ల ఈ తప్పు జరిగింది.
డెవలపర్ వరుసగా కొన్ని లైట్వెయిట్ బ్రౌజర్ టూల్స్ను రూపొందిస్తారు, ప్రతి టూల్కు ఇంగ్లీష్ మరియు జపనీస్ పేజీలు ఉంటాయి. ఇవి ఒకే పార్సింగ్ ఫంక్షన్స్ మరియు కోర్ లాజిక్ను ఉపయోగిస్తాయి. కేవలం కనిపించే పదజాలం మాత్రమే మారాలి. Cache-Control analyzer విడుదలైనప్పుడు, ఇంగ్లీష్ ఇంటర్ఫేస్ సరైన లేబుల్స్ను చూపించింది, కానీ అది రెండర్ చేసిన విలువలు లాజిక్ లేయర్ నుండి వచ్చాయి, అందులో ఇంకా జపనీస్ లిటరల్స్ ఉన్నాయి. ఎటువంటి కన్సోల్ ఎర్రర్స్ కనిపించలేదు; పేజీ సాధారణంగానే కనిపించింది, కానీ ఇంగ్లీష్ మాట్లాడే వినియోగదారులకు అందించబడిన సమాచారం తప్పుగా ఉంది.
ఉమ్మడి లాజిక్ (shared logic) అనువాదాన్ని ఎందుకు దెబ్బతీస్తుంది
ఈ బగ్ ఒక డిజైన్ ఎంపిక వల్ల వచ్చింది: ఏమి చూపించాలో నిర్ణయించే కోర్ ఫంక్షన్ జపనీస్ భాషలో లిటరల్ స్ట్రింగ్స్ను తిరిగి ఇచ్చింది. చుట్టూ ఉండే ఇంగ్లీష్ టెక్స్ట్కు బాధ్యత వహించే పేజీ లేయర్, ఆ విలువలను మార్చడానికి అవకాశం పొందలేదు. లాజిక్ మరియు UI స్పష్టంగా విడిపోయి ఉండటం వల్ల, టెస్టింగ్ సమయంలో ఈ సమస్య కనిపించలేదు—వినియోగదారులకు కనిపించే భాష తప్పుగా ఉన్నప్పటికీ, సాంకేతికంగా అంతా "పనిచేస్తోంది".
దీని వల్ల కలిగే నష్టం ఏమిటంటే, షేర్డ్ మాడ్యూల్లో ఉపయోగించిన భాష, దానిని ఉపయోగించే ప్రతి ఫ్రంట్-ఎండ్ కోసం డిఫాల్ట్గా మారిపోతుంది. వేరే భాష అవసరమైతే, ఆ డిఫాల్ట్ విలువ ఒక దాగి ఉన్న బగ్గా మారుతుంది.
పరిష్కారం: కీస్, ప్యాక్స్ మరియు ఒక సేఫ్టీ నెట్
రచయిత బాధ్యతలను వేరు చేయడానికి ఆర్కిటెక్చర్ను తిరిగి రాశారు:
- మెసేజ్ ప్యాక్స్ (Message packs) ఇప్పుడు ప్రతి భాషకు సంబంధించిన అన్ని హ్యూమన్-రీడబుల్ స్ట్రింగ్స్ను కలిగి ఉంటాయి.
- షేర్డ్ లాజిక్ (Shared logic) కేవలం సింబాలిక్ కీస్లను మాత్రమే తిరిగి ఇస్తుంది, ఎప్పుడూ ముడి టెక్స్ట్ను (raw text) ఇవ్వదు.
- పేజీలు (Pages) కీ ఆధారంగా సంబంధిత ప్యాక్ నుండి సరైన పదాన్ని వెతుక్కుంటాయి.
ఒక మెసేజ్లో సంఖ్య (number) ఉండాల్సి వచ్చినప్పుడు, కొత్త కోడ్ టెంప్లేట్ స్ట్రింగ్కు బదులుగా ఒక చిన్న ఫంక్షన్ను ఉపయోగిస్తుంది. ఇది పదాల క్రమంలో ఉండే తేడాలను బట్టి, సంఖ్య ఎక్కడ ఉండాలో ప్రతి భాష స్వయంగా నిర్ణయించుకోవడానికి అనుమతిస్తుంది.
ఒక సాధారణ స్టాటిక్-అనాలిసిస్ స్టెప్ను కూడా జోడించారు: బిల్డ్ ప్రాసెస్ షేర్డ్ ఫైల్స్లో జపనీస్ క్యారెక్టర్ల కోసం స్కాన్ చేస్తుంది. ఏవైనా కనిపిస్తే, డెవలపర్కు వెంటనే అలర్ట్ పంపిస్తుంది, తద్వారా హార్డ్-కోడెడ్ విదేశీ టెక్స్ట్ మళ్ళీ లోపలికి రాకుండా నిరోధిస్తుంది.
ఈ అనుభవం రచయితకు ఏమి నేర్పింది
- అనువాదం ఒక రివ్యూ పాస్లా పనిచేస్తుంది. ఇంగ్లీష్ మెసేజ్లను రాస్తున్నప్పుడు, కొన్ని జపనీస్ సమానార్థకాలు అస్పష్టంగా ఉన్నాయని రచయిత గమనించారు. అనువదించడం వల్ల రెండు భాషల్లోనూ స్పష్టమైన పదజాలం రూపొందించబడింది.
- స్ట్రింగ్స్ను తిరిగి ఇచ్చే షేర్డ్ ఫంక్షన్స్ అందరికీ ఒకే భాషను నిర్ణయించేస్తాయి. ఒక ఫంక్షన్ భాషను నిర్ణయిస్తే, వేరే భాషను ఆశించే ఏ వినియోగదారుడైనా ఆ తప్పును పొందుతాడు. ఇది కేవలం UI గ్లిచ్ కాదు; ఇది ఒక లాజిక్ లోపం.
బహుభాషా టూల్స్ను నిర్వహించే ఎవరికైనా సూచనలు
- కోర్ ఫంక్షన్ల నుండి స్ట్రింగ్స్కు బదులుగా కీస్లను మాత్రమే తిరిగి ఇవ్వండి. లోకలైజేషన్ను UI లేయర్ ద్వారా నిర్వహించనివ్వండి.
- లేదా కావలసిన స్ట్రింగ్స్ను పారామీటర్లుగా ఫంక్షన్లోకి పంపండి. ఇది లాజిక్ భాషతో సంబంధం లేకుండా (agnostic) ఉండేలా చేస్తుంది.
- హార్డ్-కోడెడ్ నేటివ్-లాంగ్వేజ్ టెక్స్ట్ కోసం షేర్డ్ మాడ్యూల్స్ను తనిఖీ చేయండి. నాన్-ASCII క్యారెక్టర్ల కోసం వేగంగా వెతకడం ద్వారా దాగి ఉన్న సమస్యలను గుర్తించవచ్చు.
- షేర్డ్ కోడ్లో విదేశీ క్యారెక్టర్ల కోసం బిల్డ్-టైమ్ చెక్ను జోడించండి. విడుదల చేసిన తర్వాత వచ్చే గందరగోళం కంటే ముందే గుర్తించడం మేలు.
తదుపరి జాగ్రత్తలు
ముఖ్య గమనిక: మీ ప్రాజెక్ట్ వివిధ భాషా వెర్షన్ల మధ్య కోడ్ను షేర్ చేస్తుంటే, షేర్ చేయబడిన భాగం ఎప్పుడూ పదజాలాన్ని నిర్ణయించకుండా చూసుకోండి. ప్రతి పేజీ తన స్వంత పదాలను అందించనివ్వండి, తద్వారా ఇంగ్లీష్ పేజీ అనుకోకుండా జపనీస్ మాట్లాడుతున్నట్లుగా ఉండే ఇబ్బందికర పరిస్థితిని మీరు నివారించవచ్చు.
