--[[ -- This module detects whether the first positional parameter is a valid ISO 639-1 language code. -- If it is, it returns the code. If not, it returns an error and a tracking category. For blank -- or non-string input, the returns a blank string. The tracking category is sorted by the language -- code, rather than by the page name. --]]  local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno')  local p = {}  local codes = { 	['aa'] = true, ['ab'] = true, ['ae'] = true, ['af'] = true, ['ak'] = true, ['am'] = true, ['an'] = true, ['ar'] = true, ['as'] = true, ['av'] = true, 	['ay'] = true, ['az'] = true, ['ba'] = true, ['be'] = true, ['bg'] = true, ['bh'] = true, ['bi'] = true, ['bn'] = true, ['bo'] = true, ['br'] = true, 	['bs'] = true, ['ca'] = true, ['ce'] = true, ['ch'] = true, ['co'] = true, ['cr'] = true, ['cs'] = true, ['cu'] = true, ['cv'] = true, ['cy'] = true, 	['da'] = true, ['de'] = true, ['dv'] = true, ['dz'] = true, ['ee'] = true, ['el'] = true, ['en'] = true, ['eo'] = true, ['es'] = true, ['et'] = true, 	['eu'] = true, ['fa'] = true, ['ff'] = true, ['fi'] = true, ['fj'] = true, ['fo'] = true, ['fr'] = true, ['fy'] = true, ['ga'] = true, ['gd'] = true, 	['gl'] = true, ['gn'] = true, ['gu'] = true, ['gv'] = true, ['ha'] = true, ['he'] = true, ['hi'] = true, ['ho'] = true, ['hr'] = true, ['ht'] = true, 	['hu'] = true, ['hy'] = true, ['ia'] = true, ['id'] = true, ['ie'] = true, ['ig'] = true, ['ii'] = true, ['ik'] = true, ['io'] = true, ['is'] = true, 	['it'] = true, ['iu'] = true, ['ja'] = true, ['jv'] = true, ['ka'] = true, ['kg'] = true, ['ki'] = true, ['kj'] = true, ['kk'] = true, ['kl'] = true, 	['km'] = true, ['kn'] = true, ['ko'] = true, ['kr'] = true, ['ks'] = true, ['ku'] = true, ['kv'] = true, ['kw'] = true, ['ky'] = true, ['la'] = true, 	['lb'] = true, ['lg'] = true, ['li'] = true, ['ln'] = true, ['lo'] = true, ['lt'] = true, ['lu'] = true, ['lv'] = true, ['mg'] = true, ['mh'] = true, 	['mi'] = true, ['mk'] = true, ['ml'] = true, ['mn'] = true, ['mr'] = true, ['ms'] = true, ['mt'] = true, ['my'] = true, ['na'] = true, ['nb'] = true, 	['nd'] = true, ['ng'] = true, ['ne'] = true, ['nl'] = true, ['nn'] = true, ['no'] = true, ['nr'] = true, ['nv'] = true, ['ny'] = true, ['oc'] = true, 	['om'] = true, ['or'] = true, ['os'] = true, ['pa'] = true, ['pi'] = true, ['pl'] = true, ['ps'] = true, ['pt'] = true, ['qu'] = true, ['rm'] = true, 	['rn'] = true, ['ro'] = true, ['ru'] = true, ['rw'] = true, ['sa'] = true, ['sc'] = true, ['sd'] = true, ['se'] = true, ['sk'] = true, ['sl'] = true, 	['sm'] = true, ['sn'] = true, ['so'] = true, ['sq'] = true, ['sr'] = true, ['ss'] = true, ['st'] = true, ['su'] = true, ['sv'] = true, ['sw'] = true, 	['ta'] = true, ['te'] = true, ['tg'] = true, ['th'] = true, ['ti'] = true, ['tk'] = true, ['tl'] = true, ['tn'] = true, ['tr'] = true, ['ts'] = true, 	['tt'] = true, ['tw'] = true, ['ty'] = true, ['ug'] = true, ['uk'] = true, ['ur'] = true, ['uz'] = true, ['ve'] = true, ['vi'] = true, ['vo'] = true, 	['yi'] = true, ['yo'] = true, ['za'] = true, ['zh'] = true, ['za'] = true }  function p.main(frame) 	local args = getArgs(frame) 	return p._main(args) end  function p._main(args) 	local code = args[1] 	if type(code) ~= 'string' then 		return '' -- code is either not a string or is a blank string that was removed by getArgs. 	end 	local ret = mw.ustring.lower(code) 	if not codes[ret] then 		ret = 'ত্রুটি: "' .. code .. '" বৈধ আইএসও ৬৩৯-১ কোড নয়' 		if not yesno(args.nocat) then 			ret = ret .. '' .. code .. '' 		end 	end 	return ret end  return p