புதிதாக வெளியிடப்பட்ட Cache-Control analyzer-ன் ஆங்கிலப் பதிப்பில் ஜப்பானிய மொழித் தரவுகள் தெரிந்தன—அதன் நிலை (status) “Fresh” என்பதற்குப் பதிலாக “新鮮” என்று இருந்தது. இந்தப் பிழை, பக்கத்தில் ஆங்கில லேபிள்கள் மட்டுமே இருந்தபோதிலும், பகிரப்பட்ட லாஜிக் (shared logic) மூலம் நேரடியாக ஜப்பானிய சொற்கள் (hard-coded Japanese strings) வழங்கப்பட்டதால் ஏற்பட்டது.

அந்த டெவலப்பர் பல இலகுரக பிரவுசர் கருவிகளை (browser tools) உருவாக்கியுள்ளார். ஒவ்வொன்றும் ஒரு ஆங்கிலப் பக்கம் மற்றும் ஒரு ஜப்பானியப் பக்கத்தைக் கொண்டுள்ளது; இவை இரண்டும் ஒரே parsing functions மற்றும் core logic-ஐப் பயன்படுத்துகின்றன. வெறும் திரையில் தெரியும் சொற்கள் மட்டுமே மாறுபட வேண்டும். Cache-Control analyzer வெளியிடப்பட்டபோது, ஆங்கில இடைமுகம் (interface) சரியான லேபிள்களைக் காட்டியது, ஆனால் அது காண்பித்த மதிப்புகள் (values) லாஜிக் லேயரிலிருந்து வந்தன, அதில் இன்னும் ஜப்பானிய சொற்களே இருந்தன. கன்சோலில் (console) எந்தப் பிழைகளும் தெரியவில்லை; பக்கம் சாதாரணமாகத் தெரிந்தது, ஆனால் ஆங்கிலம் பேசும் பயனர்களுக்கு வழங்கப்பட்ட தகவல் தவறாக இருந்தது.

பகிரப்பட்ட லாஜிக் ஏன் மொழிபெயர்ப்பைத் தவறவிடலாம்

இந்தப் பிழை ஒரு வடிவமைப்புத் தேர்வினால் (design choice) ஏற்பட்டது: எதைக் காண்பிக்க வேண்டும் என்று தீர்மானிக்கும் முக்கியச் செயல்பாடு (core function), ஜப்பானிய மொழியில் நேரடிச் சொற்களையே (literal strings) வழங்கியது. சுற்றியுள்ள ஆங்கில உரைகளுக்குப் பொறுப்பான பக்க லேயருக்கு (page layer), அந்த மதிப்புகளை மாற்றியமைக்க வாய்ப்பே கிடைக்கவில்லை. லாஜிக் மற்றும் UI ஆகியவை தனித்தனியாகப் பிரிக்கப்பட்டிருந்ததால், சோதனையின் போது இந்தப் பிரச்சனை தெரியவில்லை—தொழில்நுட்ப ரீதியாக எல்லாம் சரியாக வேலை செய்தன, ஆனால் பயனர்களுக்குத் தெரிந்த மொழி தவறாக இருந்தது.

இதன் குறைபாடு என்னவென்றால், பகிரப்பட்ட மாட்யூலுக்குள் (shared module) பயன்படுத்தப்படும் மொழி, அதைத் தொடர்ந்து பயன்படுத்தும் ஒவ்வொரு முன்முனைக்கும் (front-end) இயல்புநிலையாக (default) மாறிவிடும். வேறு மொழி தேவைப்படும்போது, இந்த இயல்புநிலை ஒரு மறைமுகப் பிழையாக (hidden bug) மாறுகிறது.

தீர்வு: கீய்கள் (keys), பேக்குகள் (packs) மற்றும் ஒரு பாதுகாப்பு வலை

பொறுப்புகளைத் தனித்தனியாகப் பிரிக்க ஆசிரியர் கட்டமைப்பை (architecture) மாற்றியமைத்தார்:

  • Message packs இப்போது ஒவ்வொரு மொழிக்கும் தேவையான அனைத்து மனிதர்கள் வாசிக்கக்கூடிய சொற்களையும் கொண்டுள்ளன.
  • Shared logic இப்போது குறியீட்டுச் சொற்களை (symbolic keys) மட்டுமே வழங்கும், நேரடி உரையை (raw text) அல்ல.
  • Pages அந்தச் சொல் (key)-ஐ அடிப்படையாகக் கொண்டு, பொருத்தமான பேக்கிலிருந்து சரியான சொல்லைத் தேடி எடுக்கும்.

ஒரு செய்தியில் எண் இடம்பெற வேண்டியிருக்கும் போது, புதிய குறியீடு டெம்ப்ளேட் ஸ்ட்ரிங்கிற்கு (template string) பதிலாக ஒரு சிறிய செயல்பாட்டைப் பயன்படுத்துகிறது. இது ஒவ்வொரு மொழியும் அந்த எண் எங்கு வர வேண்டும் என்பதைத் தீர்மானிக்க அனுமதிக்கிறது, இதன் மூலம் சொற்களின் வரிசை மாற்றங்களைச் சமாளிக்க முடிகிறது.

ஒரு எளிய ஸ்டேடிக்-அனாலிசிஸ் (static-analysis) படிநிலையும் சேர்க்கப்பட்டது: பில்ட் செயல்முறை (build process) பகிரப்பட்ட கோப்புகளில் ஜப்பானிய எழுத்துக்கள் உள்ளனவா என்று ஸ்கேன் செய்யும். ஏதேனும் இருந்தால், டெவலப்பருக்கு உடனடியாகத் தகவல் தெரிவிக்கப்படும், இதன் மூலம் நேரடியாக எழுதப்பட்ட (hard-coded) வெளிநாட்டு உரைகள் மீண்டும் உள்ளே நுழைவது தடுக்கப்படுகிறது.

இந்த அனுபவம் ஆசிரியருக்குக் கற்பித்தது

  1. மொழிபெயர்ப்பு ஒரு மறுஆய்வாகச் (review pass) செயல்படுகிறது. ஆங்கிலச் செய்திகளை எழுதும் போது, சில ஜப்பானியச் சொற்கள் தெளிவற்றதாக இருப்பதை ஆசிரியர் கவனித்தார். மொழிபெயர்ப்பது இரு மொழிகளிலும் தெளிவான சொற்றொடர்களைப் பயன்படுத்தத் தூண்டியது.
  2. சொற்களைத் திருப்பித் தரும் பகிரப்பட்ட செயல்பாடுகள் (shared functions), அனைவருக்கும் ஒரு மொழியைத் திணித்துவிடுகின்றன. ஒரு செயல்பாடு மொழியைத் தீர்மானித்தால், வேறு மொழியை எதிர்பார்க்கும் எந்தவொரு பயனரும் அந்தத் தவறைப் பெறுவார்கள். இந்தப் பிழை ஒரு UI கோளாறு அல்ல; அது ஒரு லாஜிக் குறைபாடு.

பலமொழி கருவிகளைப் பராமரிப்பவர்களுக்கான பரிந்துரைகள்

  • முக்கியச் செயல்பாடுகளிலிருந்து (core functions) சொற்களுக்குப் பதிலாகக் குறியீடுகளை (keys) மட்டும் வழங்கவும். லோக்கலைசேஷனை (localization) கையாளுவதற்கு UI லேயரையே விட்டுவிடுங்கள்.
  • அல்லது தேவையான சொற்களை அளவுருக்களாக (parameters) செயல்பாட்டிற்குள் அனுப்பவும். இது லாஜிக் மொழியிலிருந்து விடுபட்டுச் செயல்பட உதவும்.
  • பகிரப்பட்ட மாட்யூல்களில் நேரடியாக எழுதப்பட்ட தாய்மொழி உரைகள் உள்ளனவா என்று ஆய்வு செய்யவும். non-ASCII எழுத்துக்களுக்கான விரைவான தேடல் மறைந்திருக்கும் சிக்கல்களை வெளிச்சத்திற்குக் கொண்டு வரும்.
  • பகிரப்பட்ட குறியீட்டில் வெளிநாட்டு எழுத்துக்கள் உள்ளனவா என்பதைக் கண்டறிய பில்ட்-டைம் (build-time) சோதனையைச் சேர்க்கவும். வெளியீட்டிற்குப் பிந்தைய குழப்பங்களை விட, முன்கூட்டியே கண்டறிவதே சிறந்தது.

அடுத்து கவனிக்க வேண்டியவை

முக்கியக் கருத்து: உங்கள் திட்டம் வெவ்வேறு மொழிப் பதிப்புகளுக்கு இடையே குறியீடுகளைப் பகிர்ந்து கொண்டால், அந்தப் பகிரப்பட்ட பகுதி ஒருபோதும் சொற்களைத் தீர்மானிக்காமல் இருப்பதை உறுதி செய்யவும். ஒவ்வொரு பக்கமும் அதன் சொந்தச் சொற்களை வழங்கட்டும், இதன் மூலம் ஆங்கிலப் பக்கம் தவறுதலாக ஜப்பானிய மொழியில் பேசுவது போன்ற சங்கடத்தைத் தவிர்க்கலாம்.