Gaa na ọdịnaya

Module:Engvar

Shí Wikipedia, njikotá édémédé nke onyobulạ

This template is used inside other templates. 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.

  1. Articles specify the English variety parameter for relevant templates like {{example|engvar=en-US}}. They do not use {{engvar}}.
  2. Templates use {{engvar}}. It should not forget to pass-through |engvar={{{engvar|}}}
...
| label3 = {{engvar |defaultWord=Colour |defaultLang=en-UK |en-US=Color |engvar={{{engvar|auto}}} }}
|  data3 = {{{color|}}}
| label4 = {{engvar |defaultWord=Football |defaultLang=en-UK |en-US=Soccer |engvar={{{engvar|auto}}} }} team
|  data4 = {{{team|}}}
...

The |defaultWord= be shown by default. But if an article asks for an English variety that has a corresponding parameter specified in the template, the value will be shown.

In the example, the template specified a British English word as default whenever no |engvar= is specified by the article. The word can be changed in an American English article by that article specifying |engvar=en-US. The fallback 'auto' value means it will try to determine the language based on templates like {{Use British English}} or {{Use American English}} being present on the page if no engvar is specified.

Note: {{engvar}} is unrelated to parameter names like |color= vs. |colour=. See programming option |data3={{{color|{{{colour|}}} }}}

Consider an example template, a fictive {{infobox personal likes}}. The demo is encoded in {{Engvar/doc/infobox demo}}.

Template code

[dezie ebe o si]
{{infobox
| title       = Personal likes
| above       = Demo: using [[WP:ENGVAR|WP:Engvar]] in templates
| abovestyle  = background:#ddd; font-weight:normal; font-size:smaller;
| headerstyle = background:lemonchiffon
| label1      = Home country
| data1       = {{{home country|}}}
| header2     = {{engvar|defaultWord=Favourite |defaultLang=en-GB | engvar={{{engvar|auto}}}
                        |en-US=Favorite }} things
| label3      = {{engvar|defaultWord=Colour |defaultLang=en-GB | engvar={{{engvar|auto}}}
                        |en-US=Color }}
| data3       = {{{color|}}}
| label4      = {{engvar|defaultWord=Football |defaultLang=en-GB | engvar={{{engvar|auto}}}
                        |en-US=Soccer |en-AU=Association Football}} team
| data4       = {{{team|}}}
| below       = In this demo 'article', the template parameter is set: {{para|1=engvar|2={{{engvar|(unspecified)}}}}}
| belowstyle  = background:#ddd;
}}

Three articles

[dezie ebe o si]
Personal likes
Demo: using WP:Engvar in templates
Home countryWales
Favourite things
ColourBlue
Football teamFC Kuusysi
In this demo 'article', the template parameter is set: |engvar=(unspecified)
{{Engvar/doc/infobox demo
| home country = Wales
| color = Blue
| team  = [[FC Kuusysi]]
<!-- |engvar= not set; expect defaults -->
}}
Personal likes
Demo: using WP:Engvar in templates
Home countryAlaska
Favorite things
ColorBlue
Soccer teamFC Kuusysi
In this demo 'article', the template parameter is set: |engvar=en-US
{{Engvar/doc/infobox demo
| home country = Alaska
| color = Blue
| team  = [[FC Kuusysi]]
| engvar= en-US
}}
Personal likes
Demo: using WP:Engvar in templates
Home countryAustralia
Favourite things
ColourBlue
Association Football teamFC Kuusysi
In this demo 'article', the template parameter is set: |engvar=Australian
{{Engvar/doc/infobox demo
| home country = Australia
| color = Blue
| team  = [[FC Kuusysi]]
| engvar= Australian
}}

A live example

[dezie ebe o si]

Currently, {{infobox element}} has five {{engvar}} words. Phosphorus shows |engvar=en-UK despite the |engvar=en-US default.

Parameter list

[dezie ebe o si]

Template

[dezie ebe o si]
{{#invoke:engvar|variants
[[:Templeeti:Expand wikitext]]
{{example
| engvar =
| engvarCat =
}}

List of English varieties

[dezie ebe o si]

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.

Maintenance category

[dezie ebe o si]

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".

Template data

[dezie ebe o si]
This is the TemplateData for this template used by TemplateWizard, VisualEditor and other tools. See a monthly parameter usage report for Template:Engvar in articles based on its TemplateData.

TemplateData for Engvar

Enweghị nkọwa.

Ụdị ụkpụrụ[Dezie data ndebiri]

OkeNkọwaDeeỌnọdụ
Default spellingdefaultword

The default word, usually the word in the English variety most often used

Ịhe àtụ̀
colour
EririNa-atụ aro
Default English varietydefaultLang

Adding this helps document your {{engvar}} setting

Ụkpụrụ ndị a tụrụ aro
en-US en-AU en-GB en-CA en-EI en-HK en-IN en-JM en-MW en-NZ en-NG en-PK en-PH en-SCO en-SG en-ZA en-TT en-OED en-IUPAC
Ịhe àtụ̀
en-US
EririNa-atụ aro
English varietyengvar

English variety to use. Set to 'auto' to try to detect variety based on templates such as {{Use British English}} or {{EngvarB}} being present on the page.

Ụkpụrụ ndị a tụrụ aro
{{{engvar|auto}}} {{{engvar|}}} auto
EririAchọrọ
Suppress maintenance categoryengvarCat

Enweghị nkọwa.

Ụkpụrụ ndị a tụrụ aro
{{{engvarCat|yes}}} no
Nke éjị bịdó
yes
EririNa-atụ aro
Fallbackfallback

Whether Commonwealth English languages should fallback to en-GB if not specified

Nke éjị bịdó
false unless engvar=auto
BooleanNhọrọ
Maintenance category sort keyengvarCatSort

Enweghị nkọwa.

Nke éjị bịdó
{{pagename}}
EririNhọrọ
American English spellingen-US

Enweghị nkọwa.

Ịhe àtụ̀
color
EririNhọrọ
Australian English spellingen-AU

Enweghị nkọwa.

EririNhọrọ
British English spellingen-GB

Enweghị nkọwa.

EririNhọrọ
Canadian English spellingen-CA

Enweghị nkọwa.

EririNhọrọ
Hiberno-English (Irish-English) spellingen-EI

Enweghị nkọwa.

EririNhọrọ
Hong Kong English spellingen-HK

Enweghị nkọwa.

EririNhọrọ
Indian English spellingen-IN

Enweghị nkọwa.

EririNhọrọ
Jamaican English spellingen-JM

Enweghị nkọwa.

EririNhọrọ
Malawian English spellingen-MW

Enweghị nkọwa.

EririNhọrọ
New Zealand English spellingen-NZ

Enweghị nkọwa.

EririNhọrọ
Nigerian English spellingen-NG

Enweghị nkọwa.

EririNhọrọ
Pakistani English spellingen-PK

Enweghị nkọwa.

EririNhọrọ
Philippine English spellingen-PH

Enweghị nkọwa.

EririNhọrọ
Scottish English spellingen-SCO

Enweghị nkọwa.

EririNhọrọ
Singapore English spellingen-SG

Enweghị nkọwa.

EririNhọrọ
South African English spellingen-ZA

Enweghị nkọwa.

EririNhọrọ
Trinidadian English spellingen-TT

Enweghị nkọwa.

EririNhọrọ
British (Oxford) English spellingen-OED

Enweghị nkọwa.

EririNhọrọ
IUPAC spellingen-IUPAC

Enweghị nkọwa.

EririNhọrọ

See also

[dezie ebe o si]

-- 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 auto = false
	
	local defaultWord = args.defaultWord or ''
	local engvar = args.engvar

	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