Module:Engvar
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
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Subpages of this module.
-- 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. localp={} localgetArgs=require('Module:Arguments').getArgs localyesno=require('Module:Yesno') localgsub=string.gsub locallower=string.lower localupper=string.upper functionp.variants(frame) localargs=getArgs(frame) returnp._variants(args) end localfunctionfallback(args,useLang) localcwealthLangs={['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'oruseLang=='en-OED')and(args['en-OED']orargs['en-CA'])then returnargs['en-OED']orargs['en-CA'] elseifuseLang=='en-CA'and(args['en-OED']orargs['en-US'])then returnargs['en-OED']orargs['en-US'] elseifcwealthLangs[useLang]andargs['en-GB']then returnargs['en-GB'] end returnargs.defaultWordor'' end functionp._variants(args) localreturnWord=nil localauto=false localdefaultWord=args.defaultWordor'' localengvar=args.engvar if(lower(engvaror'')=='auto')then engvar=require('Module:Engvar/detect').detect() auto=true end ifengvar==nilthen -- Nothing to look for; use defaultWord right away returnWord=defaultWord elseifargs.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 ifreturnWord==nilthen -- No hit so far. Search by words in the engvar entered, checking the list localuseLang=engvarLang(engvar) ifuseLang==nilthen returnWord=defaultWord..addMaintCat(args) elseifargs[useLang]then returnWord=args[useLang] elseifyesno(args.fallbackorauto,auto)then--default to fallback if auto, otherwise default to no fallback returnWord=fallback(args,useLang) else returnWord=defaultWord end end returnreturnWord end -- Returns arguments and intermediate result. Plus the template result, in front. functionp.explain(frame) localargs=getArgs(frame) localret={} localengvar=args.engvaror'' table.insert(ret,'\n\n: Settings:') table.insert(ret,'defaultWord='..(args.defaultWordor'')..'; ') table.insert(ret,'defaultLang='..(args.defaultLangor'')..'; ') table.insert(ret,'engvarCat='..(args.engvarCator'[default:yes]')..'; ') table.insert(ret,'engvarCatSort='..(args.engvarCatSortor'')) table.insert(ret,'fallback='..(args.fallbackor'')) 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 localuseLang=engvarLang(engvar) table.insert(ret,' => Engvar code [used]: >'..(useLangor'')..'<.') fork,vinpairs(args)do ifk=='en-UK'then table.insert(ret,k..' ? better: use "en-GB"; ') elseifk=='en-SA'then table.insert(ret,k..' ? misleading; use "en-ZA"; ') end ifk=='defaultWord'then elseifk=='defaultLang'then elseifk=='engvar'then elseifk=='engvarcat'then elseifk==gsub(lower(k),'^en%-(%w%w)$',formatISO)then table.insert(ret,k..'='..v..'; ') else table.insert(ret,k..' [not standard:]='..v..'; ') end end returnengvar..' => '..p._variants(args)..table.concat(ret,' ') end -- Turn a match into pattern 'en-XX' functionformatISO(country) return('en-'..upper(country)or'') end functionengvarLang(searchEngvar) -- Search verbose language identifiers to ISO-format 'en-XX' -- Assumed: not a blank string '' to search localmatch=string.match locallangs={ 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 localuseLang=langs[searchEngvar] ifuseLangthen return'en-'..useLang --Special codes elseifmatch(searchEngvar,'oxford')then useLang='OED'-- 'oxford' to catch before anyting 'british' elseifmatch(searchEngvar,'iupac')then useLang='IUPAC'-- chemistry -- Very often used elseifmatch(searchEngvar,'british')then useLang='GB' elseifmatch(searchEngvar,'unitedstates') ormatch(searchEngvar,'american')then useLang='US' elseifmatch(searchEngvar,'australia')then useLang='AU' -- Often used elseifmatch(searchEngvar,'india')then useLang='IN' elseifmatch(searchEngvar,'newzealand')then useLang='NZ' elseifmatch(searchEngvar,'southafrica')then-- not: SA useLang='ZA' elseifmatch(searchEngvar,'canad')then--'canada' or 'canadian' useLang='CA' elseifmatch(searchEngvar,'hiberno') ormatch(searchEngvar,'ireland') ormatch(searchEngvar,'irish')then useLang='EI' elseifmatch(searchEngvar,'hongkong')then useLang='HK' -- Less often used elseifmatch(searchEngvar,'jamaica')then useLang='JM' elseifmatch(searchEngvar,'malawi')then useLang='MW' elseifmatch(searchEngvar,'nigeria')then useLang='NG' elseifmatch(searchEngvar,'pakistan')then useLang='PK' elseifmatch(searchEngvar,'philippine')then useLang='PH' elseifmatch(searchEngvar,'scotland') ormatch(searchEngvar,'scottish')then useLang='SCO'-- Has no alpha-2 code; not 'scotch' elseifmatch(searchEngvar,'singapore')then useLang='SG' elseifmatch(searchEngvar,'trinidad') ormatch(searchEngvar,'tobago')then useLang='TT' end returnuseLangand'en-'..useLang end functionaddMaintCat(args) localcatMaintenance ifargs.engvarCat~='no'then localtitle=mw.title.getCurrentTitle() iftitle:inNamespaces(0)then-- 0=main, 10=templ, 828=module ifargs.engvarCatSortthen catMaintenance='|'..args.engvarCatSort..', '..title.text end catMaintenance='[[Category:Articles using an unknown Template:Engvar option'..(catMaintenanceor'')..']]' end end returncatMaintenanceor'' end returnp