Gaa na ọdịnaya

Module:ISO 3166

Shí Wikipedia, njikotá édémédé nke onyobulạ

Templeeti:High risk

This module returns a country's or subdivision's code (alpha-2, alpha-3, numeric) or name (ISO, non-ISO) from ISO 3166 from a variety of inputs (alpha-2, alpha-3, numeric, name, ISO-name, alternative names). The module also removes junk from the input.

Examples

Countries (ISO 3166-1)

All three types of ISO 3166-1 codes (alpha-2, alpha-3 and numeric) work as inputs to name, as well as to code (which can therefore also be used to convert between different code types). Use |codetype= to output alpha-3 or numeric codes in code instead of the default alpha-2 codes.

Name

To get the common name use the name function

  • {{#invoke:ISO 3166|name|GB}} → United Kingdom
  • {{#invoke:ISO 3166|name|GBR}} → United Kingdom
  • {{#invoke:ISO 3166|name|826}} → United Kingdom

ISO Name

To get the ISO name use the name function with isoname = yes

  • {{#invoke:ISO 3166|name|GB|isoname=yes}} → United Kingdom of Great Britain and Northern Ireland
  • {{#invoke:ISO 3166|name|GBR|isoname=yes}} → United Kingdom of Great Britain and Northern Ireland
  • {{#invoke:ISO 3166|name|826|isoname=yes}} → United Kingdom of Great Britain and Northern Ireland

Alpha-2

To get the alpha 2 code use the code function

  • {{#invoke:ISO 3166|code|826}} → GB
  • {{#invoke:ISO 3166|code|United Kingdom}} → GB
  • {{#invoke:ISO 3166|code|UK}} → GB

Alpha-3

To get the alpha 3 code use the code function with codetype = 3

  • {{#invoke:ISO 3166|code|United Kingdom|codetype=alpha3}} → GBR
  • {{#invoke:ISO 3166|name|GB}} → United Kingdom
  • {{#invoke:ISO 3166|name|GBR}} → United Kingdom
  • {{#invoke:ISO 3166|name|826}} → United Kingdom
  • {{#invoke:ISO 3166|code|UK|codetype=alpha3}} → GBR

Numeric

To get the numeric code use the code function with codetype = numeric or use the numeric function

  • {{#invoke:ISO 3166|numeric|GB}} → 826
  • {{#invoke:ISO 3166|code|GB|codetype=numeric}} → 826

Subdivisions (ISO 3166-2)

Inputs to name must be valid ISO 3166-2 codes, i.e. the country's alpha-2 code for the first part, and up to three alphanumeric characters for the second part. They may be given normally (with a hyphen between the parts), or split between two unnamed parameters. For code, the first parameter is the country name (or any of its three codes, like above), and the second the subdivision name.

Code (alpha-2)

To get the alpha-2 code of a subdivision use the code function with parameter 1 being the country and parameter 2 being the subdivision

  • {{#invoke:ISO 3166|code|United Kingdom|England}} → GB-ENG
  • {{#invoke:ISO 3166|code|GBR|England}} → GB-ENG
  • {{#invoke:ISO 3166|code|GB|England}} → GB-ENG

Name

To get the name of a subdivision use the name function with parameter 1 being the country and parameter 2 being the subdivsion or parameter 1 being the subdivsion code

  • {{#invoke:ISO 3166|name|GB-ENG}} → England
  • {{#invoke:ISO 3166|name|GB|ENG}} → England

|isoname= works for subnational entities as well; keep in mind that ISO 3166-2 uses (transliterations of) local names that may differ from English ones. Set |lang= to a language code to switch between different languages for entities that have multiple ISO names. The default language for multilingual entities can be set on the country's data page.

  • {{#invoke:ISO 3166|name|BE|BRU}} → Brussels
  • {{#invoke:ISO 3166|name|BE|BRU|isoname=yes}} → Bruxelles-Capitale, Région de
  • {{#invoke:ISO 3166|name|BE|BRU|lang=fr}} → Bruxelles-Capitale, Région de
  • {{#invoke:ISO 3166|name|BE|BRU|lang=nl}} → Brussels Hoofdstedelijk Gewest

Tracking categories

See also

Subpages


-- to enable us to replicate the current functioning of Country extract, we need to deal with:
-- 2 {{<name>}} DONE!
-- 3 [[<name>]] DONE!
-- 4 [[<name>|<junk>]] DONE!
-- 5 [[image:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE!

local p = {}
local getArgs = require("Module:Arguments").getArgs
local data = mw.loadData("Module:ISO 3166/data/National")

--[[----------F I N D N A M E----------]]---- Finds the name in the database

local function findname(code,cdata,qry)
  local sqry = p.strip(qry)
  if cdata["name"] and sqry==p.strip(cdata["name"])
    or cdata["isoname"] and sqry==p.strip(cdata["isoname"])
    or not cdata["nocode"] and sqry==code
    or sqry==cdata["alpha3"] or sqry==cdata["numeric"]
  then
    return true
  end
  for _,tname in pairs(cdata["isonames"] or {}) do
    if sqry==p.strip(tname) then
      return true
    end
  end
  for _,tname in pairs(cdata["altnames"] or {}) do
    if sqry==p.strip(tname) then
      return true
    end
  end
  return false
end

--[[----------I S O N A M E----------]]---- Find the ISO name of a country/region

local function isoname(data,code,lang)
	if data[code]["isonames"] then
		local name = data[code]["isodisplaynames"] and data[code]["isodisplaynames"][lang]
			 or data[code]["isonames"][lang]
			 or data[code]["isodisplaynames"] and data[code]["isodisplaynames"][data[code]["defaultlang"] or data["defaultlang"]]
			 or data[code]["isonames"][data[code]["defaultlang"] or data["defaultlang"]]
			 or data[code]["isodisplaynames"] and data[code]["isodisplaynames"]["en"]
			 or data[code]["isonames"]["en"]
		if name then return name end
		for _,iname in pairs(data[code]["isonames"]) do return iname end
		return data[code]["isodisplayname"] or data[code]["isoname"]
	else
		return data[code]["isodisplayname"] or data[code]["isoname"]
	end
end

--[[----------P . S T R I P----------]]---- Removes junk from the input

function p.strip(text)
	local match=nil;
	match = mw.ustring.match(text, "Flag of ([^\.]*)")
	if (match) then 
	  return match
	end 
	match = mw.ustring.match(text, "(%u[%a\(\)\.' -]+)")
	if (match == "Image") then
	   text = mw.ustring.gsub(text, match, "")
	   match = mw.ustring.match(text, "[\|\[](%u[%a\(\)\.' -]+)")
	end
	if (match == "20px") then
	   text = mw.ustring.gsub(text, match, "")
	   match = mw.ustring.match(text, "\[(%u[%a\(\)\.' -]+)")
	end 
	if (match) then 
	  text = match
	end
	text = mw.ustring.upper(text)                     --Case insensitivity
	text = string.gsub(text,"^THE ","")               --Remove definite article
	text = string.gsub(text,"[%s%-%,%.%(%)%/%\']","") --Remove spacing and punctuation
	local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A",["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
	               ["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I",["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",
	               ["Ô"]="O",["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U",["Û"]="U",["Ü"]="U",["Ý"]="Y"}
	text = mw.ustring.gsub(text,"[À-Ý]",accents)      --Deaccent
	return text
end

--[[----------P . C A L L S T R I P ---------]]---- Calls P.strip but using Module:Arguments

function p.callstrip(frame)
	
	local args = getArgs(frame)
	
	return p.strip(args[1]) or ""

end

--[[----------P . L U A N A M E---------]]---- Makes the ISO/common name of a country

function p.luaname(args)

	local eot = args.error or ""
	
	if not args[1] then
	  return cerror(eot,"No parameter given",args[2] or "")
	end
	
	local code1 = args[1] or ""; local code2 = args[2] or ""
	if string.find(code1,"%-") then
	  code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
	end
	local orig = code1..(code1 and code2 and "-" or "")..code2
	code1 = string.upper(code1); code2 = string.upper(code2)
	
	if --Check if valid code
	  --No non-alphanumeric characters allowed
	  string.find(code1..code2,"[^A-Z0-9]")
	  --3166-1 codes can be two or three letters or three digits;
	  --3166-2 codes must be two letters (first part) and 1-3 letters or digits (second part)
	  or not (string.find(code1,"^%u%u%u?$") or string.find(code1,"^%d%d%d$"))
	  or not string.find(code2,"^%w?%w?%w?$")
	  or not (string.find(code1,"^%u%u$") or code2=="")
	then
	  if code2=="" then
	    return '[[Category:Wikipedia page with obscure country]]'
	  else
	    return '[[Category:Wikipedia page with obscure country or subdivision]]'
	  end
	end
	
	if string.find(code1,"^%u%u$") then
	  if code2=="" then
	    --3166-1 alpha-2 code
	    if data[code1] then
	      return (args.isoname or args.lang) 
	             and isoname(data,code1,args.lang)
	             or (data[code1]["displayname"] or data[code1]["name"])
	    else
	      return '[[Category:Wikipedia page with obscure country]]'
	    end
	  else
	    --3166-2 code
	    local sdata
	    if data[code1] then
	      sdata = mw.loadData("Module:ISO 3166/data/"..code1)
	    else
	      return '[[Category:Wikipedia page with obscure country]]'
	    end
	    if sdata[code2] then
	      return (args.isoname or args.lang)
	             and isoname(sdata,code2,args.lang)
	             or (sdata[code2]["displayname"] or sdata[code2]["name"])
	    else
	      for _,_ in pairs(sdata) do
	        return '[[Category:Wikipedia page with obscure country]]'
	      end
	      return '[[Category:Wikipedia page with obscure country]]'
	    end
	  end
	else
	  --3166-1 alpha-3 or numeric code
	  local codetype = string.find(code1,"%d") and "numeric" or "alpha3"
	  for alpha2,cdata in pairs(data) do
	    if cdata[codetype]==code1 then
	      return (args.isoname or args.lang)
	             and isoname(data,alpha2,args.lang)
	             or (cdata["displayname"] or cdata["name"])
	    end
	  end
	  return '[[Category:Wikipedia page with obscure country]]'
	end
	
	end

--[[----------P . N A M E---------]]---- Calls P.Luaname but using Module:Arguments

function p.name(frame)

	return p.luaname(getArgs(frame)) or ""

end

--[[----------P . L U A C O D E---------]]---- Makes the ISO code of a country

function p.luacode(args)

	if args["codetype"]=="3" then
		args["codetype"]="alpha3"
	end
	
	local eot = args.error or ""
	
	if not args[1] then
	  return cerror(eot,"No parameter given",args[2] or "")
	end
	
	if not args[2] then
	  --3166-1 code
	  for alpha2,cdata in pairs(data) do
	    if findname(alpha2,cdata,args[1]) then
	      if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
	        return cdata[args["codetype"]]
	      else
	        return alpha2
	      end
	    end
	  end
	  return '[[Category:Wikipedia page with obscure country]]'
	else
	  --3166-2 code
	  for alpha2,cdata in pairs(data) do
	    if findname(alpha2,cdata,args[1]) then
	      local sdata = mw.loadData("Module:ISO 3166/data/"..alpha2)
	      local empty = true
	      for scode,scdata in pairs(sdata) do
	        if type(scdata)=="table" then
	          empty = false
	          if findname(scode,scdata,args[2]) then
	            return alpha2.."-"..scode
	          end
	        end
	      end
	      if empty then
	        return '[[Category:Wikipedia page with obscure subdivision]]'
	      else
	        return '[[Category:Wikipedia page with obscure subdivision]]'
	      end
	    end
	  end
	  return '[[Category:Wikipedia page with obscure country]]'
	end
	
	end

--[[----------P . C O D E---------]]---- Calls P.Luacode but using Module:Arguments

function p.code(frame)

	return p.luacode(getArgs(frame)) or ""

end

--[[----------P . N U M E R I C---------]]---- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value

function p.numeric(frame)

	local args = getArgs(frame)
	
	args["codetype"]="numeric"
	
	return p.luacode(args) or ""

end

return p