Module:Engvar/sandbox
| This is the module sandbox page for Module:Engvar (diff). |
| This Lua module is used on approximately 17,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=noin 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.
-- Template:Engvar is to be build into the template (like an infobox), with default & variant spellings defined.
-- That template should also allow parameter '|engvar=' for the editor (article page).
-- The module/template Engvar then returns the spelling variant as is set in that article (for example '|engvar=en-GB').
-- The defaultWord is returned, unless the engvar input hits on a defined (en-XX) variant word.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
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
local function fallback(args, useLang)
local cwealthLangs = { ['en-OED'] = 1, ['en-IUPAC'] = 1,
['en-AU'] = 1, ['en-CA'] = 1, ['en-EI'] = 1, ['en-HK'] = 1,
['en-IN'] = 1, ['en-JM'] = 1, ['en-NZ'] = 1, ['en-PK'] = 1,
['en-SCO'] = 1, ['en-SG'] = 1, ['en-ZA'] = 1 }
if (useLang == 'en-IUPAC' or useLang == 'en-OED') and (args['en-OED'] or args['en-CA']) then
return args['en-OED'] or args['en-CA']
elseif useLang == 'en-CA' and (args['en-OED'] or args['en-US']) then
return args['en-OED'] or args['en-US']
elseif cwealthLangs[useLang] and args['en-GB'] then
return args['en-GB']
end
return args.defaultWord or ''
end
function p._variants(args)
local returnWord = nil
local defaultWord = args.defaultWord or ''
local engvar = args.engvar
local auto = false
if (lower(engvar or '') == 'auto') then
engvar = require('Module:Engvar/detect').detect()
auto = true
end
if engvar == nil then
-- Nothing to look for; use defaultWord right away
returnWord = defaultWord
elseif args.defaultLang == gsub(lower(engvar), '^en%-(%w%w)$', formatISO) then
-- By the defaultLang, the defaultWord is asked
returnWord = defaultWord
else
returnWord = args[gsub(lower(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(engvar)
if useLang == nil then
returnWord = defaultWord .. addMaintCat(args)
elseif args[useLang] then
returnWord = args[useLang]
elseif yesno(args.fallback or auto, auto) then --default to fallback if auto, otherwise default to no fallback
returnWord = fallback(args, useLang)
else
returnWord = defaultWord
end
end
return returnWord
end
-- Returns arguments and intermediate result. Plus the template result, in front.
function p.explain(frame)
local args = getArgs(frame)
local ret = {}
local engvar = args.engvar or ''
table.insert(ret, '\n\n: Settings:')
table.insert(ret, 'defaultWord=' .. (args.defaultWord or '') .. '; ')
table.insert(ret, 'defaultLang=' .. (args.defaultLang or '') .. '; ')
table.insert(ret, 'engvarCat=' .. (args.engvarCat or '[default:yes]') .. '; ')
table.insert(ret, 'engvarCatSort=' .. (args.engvarCatSort or ''))
table.insert(ret, 'fallback=' .. (args.fallback or ''))
table.insert(ret, '\n\n: engvar=' .. engvar .. ' [input] ')
if (lower(engvar) == 'auto') then
engvar = require('Module:Engvar/detect').detect() or ''
table.insert(ret, 'engvar=' .. engvar .. ' [detected] ')
end
local useLang = engvarLang(engvar)
table.insert(ret, ' => Engvar code [used]: >' .. (useLang or '') .. '<.')
for k, v in pairs(args) do
if k == 'en-UK' then
table.insert(ret, k .. ' ? better: use "en-GB"; ')
elseif k == 'en-SA' then
table.insert(ret, k .. ' ? misleading; use "en-ZA"; ')
end
if k == 'defaultWord' then
elseif k == 'defaultLang' then
elseif k == 'engvar' then
elseif k == 'engvarcat' then
elseif k == gsub(lower(k), '^en%-(%w%w)$', formatISO) then
table.insert(ret, k .. '=' .. v .. '; ')
else
table.insert(ret, k .. ' [not standard:]=' .. v .. '; ')
end
end
return engvar .. ' => ' .. p._variants(args) .. table.concat(ret, ' ')
end
-- Turn a match into pattern 'en-XX'
function formatISO(country)
return ('en-' .. upper(country) or '')
end
function engvarLang(searchEngvar)
-- Search verbose language identifiers to ISO-format 'en-XX'
-- Assumed: not a blank string '' to search
local match = string.match
local langs = {
us = 'US', usa = 'US',
au = 'AU', aus = 'AU',
gb = 'GB', gbr = 'GB', uk = 'GB',
ca = 'CA', can = 'CA',
ei = 'EI', irl = 'EI',
hk = 'HK', hkg = 'HK',
['in'] = 'IN', ind = 'IN', --'in' is a reserved keyword and needs to be in quotes
jm = 'JM', jam = 'JM',
mw = 'MW', mwi = 'MW',
nz = 'NZ', nzl = 'NZ',
ng = 'NG', nga = 'NG',
pk = 'PK', pak = 'PK',
ph = 'PH', phl = 'PH',
sco = 'SCO',
sg = 'SG', sgp = 'SG',
za = 'ZA', zaf = 'ZA',
tt = 'TT', tto = 'TT',
oed = 'OED'};
searchEngvar = gsub(searchEngvar, '^%s*en%-(.*)', '%1') -- rm any opening 'en-'.
searchEngvar = gsub(lower(searchEngvar), '[%s%(%)%-]', '') -- To lc, remove all: (, ) , ws, hyphen.
--normalize language codes so we don't trigger the maintenence category on valid codes
local useLang = langs[searchEngvar]
if useLang then
return 'en-'..useLang
--Special codes
elseif match(searchEngvar, 'oxford') then
useLang = 'OED' -- 'oxford' to catch before anyting 'british'
elseif match(searchEngvar, 'iupac') then
useLang = 'IUPAC' -- chemistry
-- Very often used
elseif match(searchEngvar, 'british') then
useLang = 'GB'
elseif match(searchEngvar, 'unitedstates')
or match(searchEngvar, 'american') then
useLang = 'US'
elseif match(searchEngvar, 'australia') then
useLang = 'AU'
-- Often used
elseif match(searchEngvar, 'india') then
useLang = 'IN'
elseif match(searchEngvar, 'newzealand') then
useLang = 'NZ'
elseif match(searchEngvar, 'southafrica') then -- not: SA
useLang = 'ZA'
elseif match(searchEngvar, 'canad') then --'canada' or 'canadian'
useLang = 'CA'
elseif match(searchEngvar, 'hiberno')
or match(searchEngvar, 'ireland')
or match(searchEngvar, 'irish') then
useLang = 'EI'
elseif match(searchEngvar, 'hongkong') then
useLang = 'HK'
-- Less often used
elseif match(searchEngvar, 'jamaica') then
useLang = 'JM'
elseif match(searchEngvar, 'malawi') then
useLang = 'MW'
elseif match(searchEngvar, 'nigeria') then
useLang = 'NG'
elseif match(searchEngvar, 'pakistan') then
useLang = 'PK'
elseif match(searchEngvar, 'philippine') then
useLang = 'PH'
elseif match(searchEngvar, 'scotland')
or match(searchEngvar, 'scottish') then
useLang = 'SCO' -- Has no alpha-2 code; not 'scotch'
elseif match(searchEngvar, 'singapore') then
useLang = 'SG'
elseif match(searchEngvar, 'trinidad')
or match(searchEngvar, 'tobago') then
useLang = 'TT'
end
return useLang and 'en-'..useLang
end
function addMaintCat(args)
local catMaintenance
if args.engvarCat ~= 'no' then
local title = mw.title.getCurrentTitle()
if title:inNamespaces(0) then -- 0=main, 10=templ, 828=module
if args.engvarCatSort then
catMaintenance = '|' .. args.engvarCatSort .. ', ' .. title.text
end
catMaintenance = '[[Category:Articles using an unknown Template:Engvar option' .. (catMaintenance or '') .. ']]'
end
end
return catMaintenance or ''
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.