Mô đun:ISO 3166
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 varity of inputs (alpha-2, alpha-3, numeric, name, ISO-name, alternative names). The module also removes junk from the input.
Examples Mô đun:ISO 3166 Mô đun:ISO 3166
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}}→ Vương quốc Anh{{#invoke:ISO 3166|name|GBR}}→ Vương quốc Anh{{#invoke:ISO 3166|name|826}}→ Vương quốc Anh
ISO Name
To get the common 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}}→{{#invoke:ISO 3166|code|UK}}→
Alpha-3
To get the alpha 3 code use the code function with codetype = 3
{{#invoke:ISO 3166|code|United Kingdom|codetype=alpha3}}→{{#invoke:ISO 3166|name|GB}}→ Vương quốc Anh{{#invoke:ISO 3166|name|GBR}}→ Vương quốc Anh{{#invoke:ISO 3166|name|826}}→ Vương quốc Anh{{#invoke:ISO 3166|code|UK|codetype=alpha3}}→
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}}→{{#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}}→ Anh{{#invoke:ISO 3166|name|GB|ENG}}→ Anh
|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}}→ Bruxelles{{#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 Mô đun:ISO 3166 Mô đun:ISO 3166
- Thể loại:Wikipedia page with obscure country (0)
- Thể loại:Wikipedia page with obscure country or subdivision (0)
- Thể loại:Wikipedia page with obscure subdivision (0)
See also Mô đun:ISO 3166 Mô đun:ISO 3166
- Wikipedia:Templates for discussion/Log/2015 November 12#Template:ISO 3166 name DE-HB – discussion of replacement of template-based system with Lua
- Wikipedia:Templates_for_discussion/Log/2018_September_10#Template:ISO_3166_code-3_AD – discussion of full removal of template-based system
- {{ISO 3166 name}} – (ISO name)
- {{Country name}} – (Standard name)
- {{ISO 3166 code}} – (Code)
- {{ISO 3166 code-3}} – (3 letter code)
- {{ISO 3166 numeric}} – (numeric code)
- Module:ISO 3166/data – the data subpages used by this module
Subpages Mô đun:ISO 3166 Mô đun:ISO 3166
- ISO 3166/data
- ISO 3166/data/AD
- ISO 3166/data/AE
- ISO 3166/data/AF
- ISO 3166/data/AG
- ISO 3166/data/AI
- ISO 3166/data/AL
- ISO 3166/data/AM
- ISO 3166/data/AO
- ISO 3166/data/AQ
- ISO 3166/data/AR
- ISO 3166/data/AS
- ISO 3166/data/AT
- ISO 3166/data/AU
- ISO 3166/data/AW
- ISO 3166/data/AX
- ISO 3166/data/AZ
- ISO 3166/data/BA
- ISO 3166/data/BB
- ISO 3166/data/BD
- ISO 3166/data/BE
- ISO 3166/data/BF
- ISO 3166/data/BG
- ISO 3166/data/BH
- ISO 3166/data/BI
- ISO 3166/data/BJ
- ISO 3166/data/BL
- ISO 3166/data/BM
- ISO 3166/data/BN
- ISO 3166/data/BR
- ISO 3166/data/CA
- ISO 3166/data/CN
- ISO 3166/data/CU
- ISO 3166/data/DE
- ISO 3166/data/EE
- ISO 3166/data/FR
- ISO 3166/data/GB
- ISO 3166/data/GR
- ISO 3166/data/ID
- ISO 3166/data/IN
- ISO 3166/data/IR
- ISO 3166/data/JP
- ISO 3166/data/KR
- ISO 3166/data/MX
- ISO 3166/data/National
- ISO 3166/data/PT
- ISO 3166/data/RS
- ISO 3166/data/RU
- ISO 3166/data/SG
- ISO 3166/data/ST
- ISO 3166/data/US
- ISO 3166/data/VN
- ISO 3166/data/tài liệu
- ISO 3166/sandbox
- ISO 3166/tài liệu
-- 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 [[hình:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE!local p = {}local getArgs = require("Mô đun:Arguments").getArgslocal data = mw.loadData("Mô đun:ISO 3166/data/National")--[[----------F I N D N A M E----------]]-- -- Finds the name in the databaselocal function findname(code,cdata,qry) local sqry = p.strip(qry) if code == "NG" and qry == "Nga" then return false end -- Nga chứ không phải Nigeria 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 falseend--[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/regionlocal 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"] endend--[[----------S T R I P----------]]-- -- Removes junk from the inputfunction p.strip(text) local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list ["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E", ["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I", ["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",["Ô"]="O", ["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U", ["Û"]="U",["Ü"]="U",["Ý"]="Y" } local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list "FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ", "PROVINCE OF","PROVINCE","TERRITORY" } local patterns = {[".+:"]="",["|.+"]="",["%(.-%)"]="", -- patterns to follow (order may matter) ["%..*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ", ["%d%d?%d?PX"]="", } if text ~= "Nga" then text = mw.ustring.upper(text) -- Case insensitivity end text = mw.ustring.gsub(text,"[À-Ý]",accents) -- Deaccent for pattern,value in pairs(patterns) do -- Follow patterns text = mw.ustring.gsub(text,pattern,value) end for _,words in pairs(remove) do -- Remove unneeded words text = mw.ustring.gsub(text,words,"") end text = mw.ustring.gsub(text,"%W","") -- Remove non alpha-numeric return text end--[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Mô đun:Argumentsfunction p.callstrip(frame) local args = getArgs(frame) return p.strip(args[1]) or ""end--[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a countryfunction p.luacode(args) if string.find(args[1] or '',"%-") then args[1], args[2] = string.match(args[1] or '',"^([^%-]*)%-(.*)$") end if args[1] then args[1] = p.strip(args[1]) end if args[2] then args[2] = p.strip(args[2]) end if args["codetype"]=="3" then args["codetype"]="alpha3" end local eot = args.error or "" local catnocountry = (args.nocat and args.nocat == 'true') and '' or '[[Thể loại:Trang Wikipedia có quốc gia tối nghĩa]]' local catnosubdivision = (args.nocat and args.nocat == 'true') and '' or '[[Thể loại:Trang Wikipedia có phân khu tối nghĩa]]' if not args[1] then if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end return catnocountry, '<span style="font-size:100%" class="error">"Không có tham số cho quốc gia được đưa ra"</span>' 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 if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end return catnocountry else --3166-2 code for alpha2,cdata in pairs(data) do if findname(alpha2,cdata,args[1]) then if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc. alpha2 = "GB" end local sdata = mw.loadData("Mô đun: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 mw.title.getCurrentTitle().namespace ~= 0 then catnosubdivision = '' end return catnosubdivision end end if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end return catnocountry endend--[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Mô đun:Argumentsfunction p.code(frame) return p.luacode(getArgs(frame)) or ""end--[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Mô đun:Arguments and setting it to output a numeric valuefunction p.numeric(frame) local args = getArgs(frame) args["codetype"]="numeric" return p.luacode(args) or "" end --[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country function p.luaname(args) local code1 = p.luacode(args) local code2 = '' if string.find(code1,"%-") then code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$") 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 '[[Thể loại:Trang Wikipedia có quốc gia tối nghĩa]]' end else --3166-2 code local sdata if data[code1] then sdata = mw.loadData("Mô đun:ISO 3166/data/"..code1) else return '[[Thể loại:Trang Wikipedia có quốc gia tối nghĩa]]' 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 return '[[Thể loại:Trang Wikipedia có quốc gia tối nghĩa]]' end end end end--[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Mô đun:Argumentsfunction p.name(frame) return p.luaname(getArgs(frame)) or ""end --[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Mô đun:Coordinates.coordinsertfunction p.geocoordinsert(frame) -- {{#gọi:ISO 3166|geocoordinsert|{{tọa độ|...}} -- |country=..|subdivision1=...|subdivision2=... -- |type=...|scale=...|dim=...|source=...|globe=... -- }} local args = frame.args local subdivisionqueried = false local catnocountry = (args.nocat and args.nocat == 'true') and '' or '[[Thể loại:Trang Wikipedia có quốc gia tối nghĩa]]' local catnosubdivision = (args.nocat and args.nocat == 'true') and '' or '[[Thể loại:Trang Wikipedia có phân khu tối nghĩa]]' or '' local tracking = '' local targs = {} targs[1] = args[1] or '' for i, v in pairs(args) do if i == 'country' and not mw.ustring.find(targs[1], 'region:') then local country = v local k, region = 1, '' -- look for a valid subdivision while region == '' and k < 3 do local subdivision = args['subdivision' .. k] or '' if subdivision ~= '' then region = p.luacode({country, subdivision, nocat = 'true'}) subdivisionqueried = true end k = k + 1 end -- subdivision lookup failed or never attempted, try country only if region == '' then region = p.luacode({country, nocat = 'true'}) if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry, catnosubdivision = '', '' end if region == '' then tracking = tracking .. catnocountry elseif subdivisionqueried == true then tracking = tracking .. catnosubdivision end end -- something worked, add it to the targs if region ~= '' then targs[#targs + 1] = 'region:' .. region end elseif i == 'type' or i == 'scale' or i == 'dim' or i == 'source' or i == 'globe' then targs[#targs + 1] = i .. ':' .. v end end -- call Mô đun:Coordinates.coordinsert if there is something to insert if #targs > 1 then local coordinsert = require('Mô đun:Coordinates').coordinsert return coordinsert({args = targs}) .. tracking end -- otherwise, just return the coordinates return targs[1] .. trackingendreturn p- Data retrieval templates