Modul:ISO 3166
Modul ini mengembalikan kod (alpha-2, alpha-3, numeric) atau nama (ISO, bukan ISO) negara atau subbahagian dari ISO 3166 dari pelbagai input (alpha-2, alpha-3, numeric, name, ISO-name, alternative names). Modul ini juga membuang perkara remeh dari input.
Contoh
[sunting sumber]Negara (ISO 3166-1)
[sunting sumber]Semua ketiga jenis kod ISO 3166-1 (alpha-2, alpha-3 dan numeric) berfungsi sebagai input kepada name
, dan juga kepada code
(oleh itu juga boleh digunakan untuk menukar di antara jenis kod yang berlainan). Gunakan |codetype=
untuk mengeluarkan kod alpha-3 atau numeric dalam <cod>code sebagai ganti kepada kod tersedia alpha-2.
Nama
[sunting sumber]Untuk mendapatkan nama biasa gunakan fungsi name
{{#invoke:ISO 3166|name|GB}}
→ United Kingdom{{#invoke:ISO 3166|name|GBR}}
→ United Kingdom{{#invoke:ISO 3166|name|826}}
→ United Kingdom
Nama ISO
[sunting sumber]Untuk mendapatkan nama biasa gunakan fungsi name dengan 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
[sunting sumber]Untuk mendapatkan kod alpha 2 gunakan fungsi code
{{#invoke:ISO 3166|code|826}}
→ GB{{#invoke:ISO 3166|code|United Kingdom}}
→ GB{{#invoke:ISO 3166|code|UK}}
→ GB
Alpha-3
[sunting sumber]Untuk mendapatkan kod alpha 3 gunakan fungsi code dengan 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
[sunting sumber]Untuk mendapatkan kod angka gunakan fungsi code dengan codetype = numeric atau gunakan fungsi numeric
{{#invoke:ISO 3166|numeric|GB}}
→ 826{{#invoke:ISO 3166|code|GB|codetype=numeric}}
→ 826
Subbahagian (ISO 3166-2)
[sunting sumber]Input kepada name
hendaklah terdiri dari kod ISO 3166-2 yang sah, iaitu kod alpha-2 negara untuk bahagian pertama, dan sehingga tiga aksara abjad angka untuk bahagian kedua. Mereka mungkin diberi secara biasa (dengan tanda sempang di antara bahagian tersebut), atau dipisahkan di antara dua parameter tidak bernama. Untuk code
, parameter pertama ialah nama negara (atau apa sahaja dari salah satu dari tiga kodnya, seperti di atas), dan yang kedua ialah nama subbahagian.
Kod (alpha-2)
[sunting sumber]Untuk mendapat kod alpha-2 bagi subbahagian gunakan fungsi code dengan parameter 1 terdiri dari negara dan parameter 2 terdiri dari subbahagian
{{#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
Nama
[sunting sumber]Untuk mendapatkan nama subbahagian gunakan fungsi name dengan parameter 1 terdiri dari negara dan parameter 2 terdiri dari subbahagian atau parameter 1 terdiri dari kod subbahagian
{{#invoke:ISO 3166|name|GB-ENG}}
→ England{{#invoke:ISO 3166|name|GB|ENG}}
→ England
|isoname=
juga berfungsi untuk entiti subnegara; perlu diingat bahawa ISO 3166-2 menggunakan (transliterasi) nama tempatan yang mungkin berbeza dari nama bahasa Melayu. Tetapkan |lang=
ke kod bahasa untuk menukar di antara bahasa berlainan untuk entiti yang mempunyai nama ISO berganda. Bahasa tersedia untuk entiti pelbagai bahasa boleh ditetapkan pada laman data negara.
{{#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
Kategori penjejakan
[sunting sumber]- Kategori:Laman Wikipedia dengan negara kabur (23)
- Kategori:Laman Wikipedia dengan negara atau subbahagian kabur (0)
- Kategori:Laman Wikipedia dengan subbahagian kabur (0)
Lihat juga
[sunting sumber]- (Inggeris) en:Wikipedia:Templates for discussion/Log/2015 November 12#Template:ISO 3166 name DE-HB – perbincangan tentang penggantian sistem berdasarkan templat dengan Lua
- (Inggeris) en:Wikipedia:Templates_for_discussion/Log/2018_September_10#Template:ISO_3166_code-3_AD – perbincangan tentang pembuangan penuh sistem berdasarkan templat
- {{Nama ISO 3166}} – (Nama ISO)
- {{Nama negara}} – (Nama piawai)
- {{Kod ISO 3166}} – (Kod)
- {{ISO 3166 code-3}} – (kod 3 huruf)
- {{ISO 3166 numeric}} – (kod angka)
- Modul:ISO 3166/data – sublaman data yang digunakan oleh modul ini
Sublaman
[sunting sumber]- ISO 3166/data
- ISO 3166/data/AD
- ISO 3166/data/AE
- ISO 3166/data/AF
- ISO 3166/data/AG
- ISO 3166/data/AL
- ISO 3166/data/AM
- ISO 3166/data/AO
- ISO 3166/data/AR
- ISO 3166/data/AT
- ISO 3166/data/AU
- ISO 3166/data/AZ
- ISO 3166/data/BA
- ISO 3166/data/BD
- ISO 3166/data/BE
- ISO 3166/data/BN
- ISO 3166/data/BR
- ISO 3166/data/CA
- ISO 3166/data/CH
- ISO 3166/data/CI
- ISO 3166/data/CL
- ISO 3166/data/CN
- ISO 3166/data/CZ
- ISO 3166/data/DE
- ISO 3166/data/ES
- 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/IT
- ISO 3166/data/LB
- ISO 3166/data/LK
- ISO 3166/data/LU
- ISO 3166/data/ME
- ISO 3166/data/MY
- ISO 3166/data/NL
- ISO 3166/data/NO
- ISO 3166/data/NZ
- ISO 3166/data/National
- ISO 3166/data/Negara
- ISO 3166/data/Negara/kotak pasir
- ISO 3166/data/PK
- ISO 3166/data/PL
- ISO 3166/data/PT
- ISO 3166/data/QA
- ISO 3166/data/QA/doc
- ISO 3166/data/RS
- ISO 3166/data/RU
- ISO 3166/data/SG
- ISO 3166/data/SK
- ISO 3166/data/TH
- ISO 3166/data/TR
- ISO 3166/data/UA
- ISO 3166/data/US
- ISO 3166/data/doc
- ISO 3166/doc
- ISO 3166/kotak pasir
- ISO 3166/terjemahan
-- 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("Modul:Arguments").getArgs
local data = mw.loadData("Modul:ISO 3166/data/Negara")
--[[----------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
--[[----------S T R I P----------]]-- -- Removes junk from the input
function 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"]="",
}
text = mw.ustring.upper(text) -- Case insensitivity
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 Module:Arguments
function 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 country
function 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 '[[Kategori:Laman Wikipedia dengan negara kabur]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Kategori:Laman Wikipedia dengan subbahagian kabur]]'
if not args[1] then
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry, '<span style="font-size:100%" class="error">"Tiada parameter untuk negara yang diberi"</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("Modul: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
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
--[[----------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 '[[Kategori:Laman Wikipedia dengan negara kabur]]'
end
else --3166-2 code
local sdata
if data[code1] then
sdata = mw.loadData("Modul:ISO 3166/data/"..code1)
else
return '[[Kategori:Laman Wikipedia dengan negara kabur]]'
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 '[[Kategori:Laman Wikipedia dengan negara kabur]]'
end
end
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 . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert
function p.geocoordinsert(frame)
-- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}}
-- |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 '[[Kategori:Laman Wikipedia dengan negara kabur]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Kategori:Laman Wikipedia dengan subbahagian kabur]]' 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 Module:Coordinates.coordinsert if there is something to insert
if #targs > 1 then
local coordinsert = require('Modul:Koordinat').coordinsert
return coordinsert({args = targs}) .. tracking
end
-- otherwise, just return the coordinates
return targs[1] .. tracking
end
return p