Module:Engvar
![]() | This Lua module is used on approximately 13,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
![]() | This module depends on the following other modules: |
This module implements {{engvar}}. It allows templates to show national varieties of English, when |engvar=
is passed by each article.
For example, one template can display "football" for |engvar=en-UK
articles, and "soccer" for |engvar=en-US
articles.
Parameter list
Template
{{#invoke:engvar|variants
| defaultWord =
| defaultLang =
| engvar = <!-- Pass-through the editor's choice, set to 'auto' to automatically detect -->
| en-XX = <!-- add country code for XX, and the nation language word -->
| en-YY = <!-- add more varieties as might be needed -->
| engvarCat = <!-- '=no' will suppress message category in article page -->
| fallback = <!-- set to 'true' to allow commonwealth languages to fallback to 'en-GB'. False by default unless engvar='auto'. -->
}}
Article
{{example
| engvar =
| engvarCat =
}}
Maintenance category
Articles with an invalid |engvar=
will be placed in the hidden maintenance category Category:Articles using an unknown Template:Engvar option. Articles listed may need editing.
An article's requested |engvar=
may be unspecified in the template. For example, if an article uses {{example|engvar=South African English}}
but the template has no |en-ZA=
, then the template will return |defaultWord=default color name
. The category will not be used.
- When this categorization is not desired for a whole template, set
|engvarCat=no
in the template - Otherwise pass-through this setting from the article:
|engvarCat={{{engvarCat|yes}}}
. This allows the editor to switch categorization off per article.
Articles are sorted by |engvarCatSort=
or {{pagename}} by default. Note that other templates will fill this category. Set this parameter like |engvarCatSort=Personal prefs
in a template to group its listings under "P".
List of English varieties
In the template, use the exact ISO-code as the parameter name like |en-GB=vapour
. Write |en-US=soccer
not |American English=soccer
. Needed varieties have articles using the template and words differing from the default.
English variety | ISO-code |
---|---|
American English | en-US
|
Australian English | en-AU
|
British English | en-GB
|
Canadian English | en-CA
|
Hiberno-English (Irish English) | en-EI
|
Hong Kong English | en-HK
|
Indian English | en-IN
|
Jamaican English | en-JM
|
Malawian English | en-MW
|
New Zealand English | en-NZ
|
Nigerian English | en-NG
|
Pakistani English | en-PK
|
Philippine English | en-PH
|
Scottish English | en-SCO
|
Singapore English | en-SG
|
South African English | en-ZA
|
Trinidadian English | en-TT
|
British English Oxford spelling British (Oxford) English Oxford English Dictionary (OED) |
en-OED
|
IUPAC spelling | en-IUPAC
|
There is backwards compatibility for leeway in articles. |engvar=en-US
, |engvar=United States
, |engvar=US
can all show the |en-US=football
variety.
See also
- HELP:ENGVAR
- Category:Articles using an unknown Template:Engvar option
- ISO 3166-1 alpha-2 -- The 2-letter country code
- {{#invoke:Engvar|explain|...}} - debugging
-- This module implements template:Engvar.
-- The defaultWord is returned, unless the engvar input hits on an existing variant (en-XX) word.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local gsub = string.gsub
local lower = string.lower
local upper = string.upper
function p.variants(frame)
local args = getArgs(frame)
return p._variants(args)
end
function p._variants(args)
local returnWord = nil
local defaultWord = args.defaultWord or ''
if args.engvar == nil then
--Nothing to look for; use defaultWord right away
returnWord = defaultWord
elseif args.defaultLang == gsub(lower(args.engvar), '^en%-(%w%w)$', formatISO) then
--By the defaultLang, the defaultWord is asked
returnWord = defaultWord
else
returnWord = args[gsub(lower(args.engvar), '^en%-(%w%w)$', formatISO)]
end
if returnWord == nil then
--No hit so far. Search by words in the engvar entered, checking the list
local useLang = engvarLang(args.engvar)
if useLang == nil then
local catMaintenance
if args.engvarCat == 'no' then
else
local title = mw.title.getCurrentTitle()
if title:inNamespaces(0, 10, 828) then --main, templ, module
catMaintenance = '_[[:Category:Articles using an unknown Template:Engvar option]]'
end
end
returnWord = defaultWord .. (catMaintenance or '')
else
returnWord = args[useLang] or defaultWord
end
end
return returnWord
end
-- Returns arguments and intermediate result. Plus the template result.
function p.explain(frame)
local args = getArgs(frame)
local ret = {'\n\n* Module:Engvar: '}
table.insert(ret, 2, 'defaultWord=' .. (args.defaultWord or '') .. '; ')
table.insert(ret, 3, 'defaultLang=' .. (args.defaultLang or '') .. '; ')
table.insert(ret, 4, 'engvar=' .. (args.engvar or '') .. '; ')
for k, v in pairs(args) do
if k == 'defaultWord' then
elseif k == 'defaultLang' then
elseif k == 'engvar' then
elseif k == gsub(lower(k), '^en%-(%w%w)$', formatISO) then
table.insert(ret, k .. '=' .. v .. '; ')
else
table.insert(ret, k .. ' (check, lowercase?)=' .. v .. ' ; ')
end
end
local useLang = engvarLang(args.engvar or '')
table.insert(ret, 5, 'Engvar code: >' .. (useLang or '') .. '<.\n\n:')
return p._variants(args) .. table.concat(ret)
end
function formatISO(country)
return ('en-' .. string.upper(country) or '')
end
function engvarLang(searchEngvar)
-- Search verbose language identifiers to ISO-format 'en-XX'
local match = string.match
searchEngvar = gsub(string.lower(searchEngvar), '[%s%(%)%-]', '') -- to lc, remove all: (, ) , ws, hyphen.
local useLang
--specials
if match(searchEngvar, 'oxford')
or searchEngvar == 'enoed'
or searchEngvar == oed then
useLang = 'en-OED' -- 'oxford' to catch before anyting 'british'
elseif match(searchEngvar, 'iupac') then
useLang = 'en-IUPAC' -- chemistry
-- very often used
elseif match(searchEngvar, 'british')
or searchEngvar == 'uk'
or searchEngvar=='engb' then
useLang = 'en-UK'
elseif searchEngvar == 'us'
or match(searchEngvar, 'unitedstates')
or searchEngvar=='american' then
useLang = 'en-US'
elseif match(searchEngvar, 'australia') then
useLang = 'en-AU'
-- often used
elseif match(searchEngvar, 'india') then
useLang = 'en-IN'
elseif searchEngvar == 'newzealand' then
useLang = 'en-NZ'
elseif match(searchEngvar, 'southafrica')
or searchEngvar == 'ensa' then
useLang = 'en-ZA'
elseif searchEngvar == 'canada' then
useLang = 'en-CA'
elseif match(searchEngvar, 'hiberno')
or match(searchEngvar, 'ireland')
or match(searchEngvar, 'irish') then
useLang = 'en-EI'
elseif searchEngvar == 'hongkong' then
useLang = 'en-HK'
--less often used
elseif match(searchEngvar, 'jamaica') then
useLang = 'en-JM'
elseif match(searchEngvar, 'malawi') then
useLang = 'en-MW'
elseif match(searchEngvar, 'nigeria') then
useLang = 'en-NG'
elseif match(searchEngvar, 'pakistan') then
useLang = 'en-PK'
elseif match(searchEngvar, 'philippine') then
useLang = 'en-PH'
elseif match(searchEngvar, 'scotland')
or match(searchEngvar, 'scots')
or match(searchEngvar, 'scottish') then
useLang = 'en-SCOTLAND' -- has no alpha-2 code
elseif match(searchEngvar, 'singapore') then
useLang = 'en-SG'
elseif match(searchEngvar, 'trinidad')
or match(searchEngvar, 'tobago') then
useLang = 'en-TT'
else
useLang = nil
end
return useLang
end
return p