Gaa na ọdịnaya

Module:ISO 3166

Shí Wikipedia, njikotá édémédé nke onyobulạ
Mmeghari kemgbe 20:39, 11 Disemba 2015 si n'aka SiBr4 (ṅkátá | mmetara)
(ndịịche) ← Orübà di kwa nke ichié | Orübà nke ubwa (ndịịche) | Orübà di kwa ohúrù → (ndịịche)

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}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|GBR}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|826}}Script error: The function "name" does not exist.

ISO Name

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

  • {{#invoke:ISO 3166|name|GB|isoname=yes}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|GBR|isoname=yes}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|826|isoname=yes}}Script error: The function "name" does not exist.

Alpha-2

To get the alpha 2 code use the code function

  • {{#invoke:ISO 3166|code|826}}Script error: The function "code" does not exist.
  • {{#invoke:ISO 3166|code|United Kingdom}}Script error: The function "code" does not exist.
  • {{#invoke:ISO 3166|code|UK}}Script error: The function "code" does not exist.

Alpha-3

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

  • {{#invoke:ISO 3166|code|United Kingdom|codetype=alpha3}}Script error: The function "code" does not exist.
  • {{#invoke:ISO 3166|name|GB}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|GBR}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|826}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|code|UK|codetype=alpha3}}Script error: The function "code" does not exist.

Numeric

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

  • {{#invoke:ISO 3166|numeric|GB}}Script error: The function "numeric" does not exist.
  • {{#invoke:ISO 3166|code|GB|codetype=numeric}}Script error: The function "code" does not exist.

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}}Script error: The function "code" does not exist.
  • {{#invoke:ISO 3166|code|GBR|England}}Script error: The function "code" does not exist.
  • {{#invoke:ISO 3166|code|GB|England}}Script error: The function "code" does not exist.

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}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|GB|ENG}}Script error: The function "name" does not exist.

|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}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|BE|BRU|isoname=yes}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|BE|BRU|lang=fr}}Script error: The function "name" does not exist.
  • {{#invoke:ISO 3166|name|BE|BRU|lang=nl}}Script error: The function "name" does not exist.

Tracking categories

See also

Subpages


local p = {}

local data = {
  national = {
    ["AF"] = {alpha3="AFG",numeric="004",name="Afghanistan"},
    ["AL"] = {alpha3="ALB",numeric="008",name="Albania"},
    ["BO"] = {alpha3="BOL",numeric="068",name="Bolivia",isoname="Bolivia, Plurinational State of"},
    ["NL"] = {alpha3="NLD",numeric="528",name="Netherlands"},
    ["GB"] = {alpha3="GBR",numeric="826",name="United Kingdom",altnames={"UK"}}
  },
  NL = {
    ["DR"] = {name="Drenthe"},
    ["FL"] = {name="Flevoland"},
    ["FR"] = {name="Friesland",altnames={"Fryslân","Fryslan"}},
    ["GE"] = {name="Gelderland"}
  },
  GB = {
    ["ENG"] = {name="England"},
    ["NIR"] = {name="Northern Ireland"},
    ["SCT"] = {name="Scotland"},
    ["WLS"] = {name="Wales"}
  }
}

local function cerror(text)
  return mw.html.create("span"):addClass("error"):wikitext(text)
end

local function strip(text)
  text = string.lower(text)
  text = string.gsub(text,"[%s%-%,%.]","")
  --text = string.gsub(text,"[\768-\879]","") --Unicode deaccenting doesn't work
  return text
end

local function findname(qry,cdata)
  local testnames = cdata["altnames"] or {}
  if cdata["isoname"] then table.insert(testnames,1,cdata["isoname"]) end
  table.insert(testnames,1,cdata["name"])
  for _,tname in ipairs(testnames) do
    if strip(qry)==strip(tname) then
      return true
    end
  end
  return false
end

function p.lua_code2name(args)

if not args[1] then
  return cerror("No parameter given")
end

local code1 = string.upper(args[1] or "")
local code2 = string.upper(args[2] or "")
if string.find(code1,"%-") then
  code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
end

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,"^%u?%u?%u?$") or string.find(code2,"^%d?%d?%d?$"))
  or not (string.find(code1,"^%u%u$") or code2=="")
then
  return cerror("Invalid code "..code1..(code2~="" and "-"..code2 or ""))
end

if string.find(code1,"^%u%u$") then
  if code2=="" then
    --3166-1 alpha-2 code
    if data["national"][code1] then
      return args.isoname and data["national"][code1]["isoname"] or data["national"][code1]["name"]
    else
      return cerror("Unknown code "..code1..(code2~="" and "-"..code2 or ""))
    end
  else
    --3166-2 code
    if data[code1] and data[code1][code2] then
      return args.isoname and data[code1][code2]["isoname"] or data[code1][code2]["name"]
    else
      return cerror("Unknown code "..code1..(code2~="" and "-"..code2 or ""))
    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["national"]) do
    if cdata[codetype]==code1 then
      return args.isoname and cdata["isoname"] or cdata["name"]
    end
  end
end

return cerror("Unknown code "..code1..(code2~="" and "-"..code2 or ""))

end

function p.code2name(frame)

local args = require("Module:Arguments").getArgs(frame)
return p.lua_code2name(args)

end

function p.lua_name2code(args)

if not args[1] then
  return cerror("No parameter given")
end

if not args[2] then
  --3166-1 code
  for alpha2,cdata in pairs(data["national"]) do
    if findname(args[1],cdata) then
      if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
        return data["national"][alpha2][args["codetype"]]
      else
        return alpha2
      end
    end
  end
  return cerror("Unknown name "..args[1])
else
  --3166-2 code
  for alpha2,cdata in pairs(data["national"]) do
    if findname(args[1],cdata) then
      if not data[alpha2] then
        return cerror("No subdivision codes for "..args[1])
      end
      for scode,sdata in pairs(data[alpha2]) do
        if findname(args[2],sdata) then
          return alpha2.."-"..scode
        end
      end
      return cerror("Unknown name "..args[2])
    end
  end
  return cerror("Unknown name "..args[1])
end

end

function p.name2code(frame)

local args = require("Module:Arguments").getArgs(frame)
return p.lua_name2code(args)

end

return p