Manual:Messages API - MediaWiki
Jump to content
From mediawiki.org
Translate this page
Languages:
Bahasa Indonesia
Nederlands
català
magyar
polski
português
čeština
русский
українська
العربية
中文
i18n docs
Localisation
System message
Messages API
Language
translatewiki.net
Writing systems
Language Converter
Directionality
MediaWiki messages
can be used in the code through the Message class and its associated methods.
While the examples throughout this document make use of the global function
wfMessage()
, in most cases it is best not to use this global function. Instead, you should use an object that provides a
RequestContext
, and call
$context
->
msg
()
on it. In many classes, you can use
$this
->
msg
()
Message parameters
Some messages take parameters.
They are represented by
$1
$2
$3
, … in the (static) message texts, and replaced at run time.
Typical parameter values are numbers (the "3" in "Delete 3 versions?"), or user names (the "Bob" in "Page last edited by Bob"), page names, links and so on, or sometimes other messages.
They can be of arbitrary complexity.
The list of parameters defined for each specific message is placed in special file "qqq.json" located in "languages/" folder of MediaWiki - read more in
Message documentation
It's preferable to use whole words with the PLURAL, GENDER, and GRAMMAR magic words.
For example,
{{PLURAL:$1|subpage|subpages}}
is better than
sub{{PLURAL:$1|page|pages}}
It makes searching easier.
Referring to other messages
It's sometimes convenient to refer to sub-messages in a message, e.g. in phrases like "Use the X button" or "Visit the Y page", to ensure that the translations are consistent.
To do so, you may use the following syntax:
{{int:X}}
– to use the sub-message in interface language. This is often used when referring to form buttons or site navigation, e.g.
showpreview
{{MediaWiki:Y}}
– to use the sub-message in content language. This is used when the sub-message defines a translatable name of a local page, e.g.
mainpage
grouppage-sysop
policy-url
{{#Special:Z}}
– to use the name of a special page in content language.
If you need anything more complicated (e.g. the sub-message used depends on configuration), parse it in your code and pass the whole sub-message as a parameter.
Example:
Before saving, use the
{{
int
foo-test
}}
button to test the changes. Visit
[[{{
MediaWiki
foo-help
}}|
the help page
]]
to learn more.Customize this feature at
[[{{
#Special
Preferences
}}]]
Switches in messages…
Parameters values at times influence the exact wording, or grammatical variations in messages.
We don't resort to ugly constructs like "$1 (sub)page(s) of his/her userpage", because these are poor for users and we can do better.
Instead, we make switches that are parsed according to values that will be known at run time.
The static message text then supplies each of the possible choices in a list, preceded by the name of the switch, and a reference to the value that makes a difference.
This resembles the way
Parser functions
are called in MediaWiki.
Several types of switches are available.
These only work if you do full parsing, or
{{
-transformation, for the messages.
…on numbers via PLURAL
MediaWiki supports plurals, which makes for a nicer-looking product.
For example:
'undelete_short'
=>
'Undelete {{PLURAL:$1|one edit|$1 edits}}'
If there is an explicit plural form to be given for a specific number, it is possible with the following syntax:
'Box has {{PLURAL:$1|one egg|$1 eggs|12=a dozen eggs}}.'
Be aware of PLURAL use on
all
numbers
See also:
translatewiki:Plural
and
Help:Magic words#plural
When a number has to be inserted into a message text, be aware that some languages will have to use PLURAL on it even if always larger than 1.
The reason is that PLURAL in languages other than English can make very different and complex distinctions, comparable to English 1
st
, 2
nd
, 3
rd
, 4
th
, … 11
th
, 12
th
, 13
th
, … 21
st
, 22
nd
, 23
rd
, …
etc.
Do not try to supply three different messages for cases like "no items counted", "one item counted", "more items counted".
Rather, let one message take them all, and leave it to translators and PLURAL to properly treat any possible differences of presentation for them in their respective languages.
Always include the number as a parameter if possible.
Always add
{{PLURAL:}}
syntax to the source messages if possible, even if it makes no sense in English.
The syntax guides translators.
Fractional numbers are supported, but the plural rules may not be complete.
Pass the number of list items as parameters to messages talking about lists
Don't assume that there's only singular and plural.
Many languages have more than two forms, which depend on the actual number used and they have to use
grammar
varying with the number of list items when expressing what is listed in a list visible to readers.
Thus, whenever your code computes a list, include
count( $list )
as parameter to headlines, lead-ins, footers and other messages about the list, even if the count is not used in English.
There is a neutral way to talk about invisible lists, so you can have links to lists on extra pages without having to count items in advance.
…on user names via GENDER
'foobar-edit-review'
=>
'Please review {{GENDER:$1|his|her|their}} edits.'
If you refer to a user in a message, pass the user name as parameter to the message and add a mention in the message documentation that gender is supported.
If it is likely that GENDER will be used in translations for languages with gender inflections, add it explicitly in the English language source message.
If you directly address the currently logged-in user, leave the user name as parameter empty:
'foobar-logged-in-user'
=>
'You said {{GENDER:|you were male|you were female|nothing about your gender}}.'
MediaWiki version:
1.31
Gerrit change 398772
If you include the user name into the message (e.g.
$1 thanked you.
), consider passing it through
wfEscapeWikitext()
first, to ensure that characters like
or
are not interpreted.
Users have grammatical genders
See also:
translatewiki:Gender
and
Help:Magic words#gender
When a message talks about a user, or relates to a user, or addresses a user directly, the user name should be passed to the message as a parameter.
Thus languages having to, or wanting to, use proper gender dependent grammar, can do so.
This should be done even when the user name is not intended to appear in the message, such as in "inform the user on his/her talk page", which is better made "inform the user on {{GENDER:$1|his|her|their}} talk page" in English as well.
This does not mean that you are encouraged to "sexualise" messages' language: please use gender-neutral language whenever this can be done with clarity and precision.
…on use context inside sentences via GRAMMAR
Grammatical transformations for
agglutinative language
(Q171263)
is also available.
For example for Finnish, where it was an absolute necessity to make language files site-independent,
i.e.
to remove the Wikipedia references.
In Finnish, "about Wikipedia" becomes "Tietoja Wikipediasta" and "you can upload it to Wikipedia" becomes "Voit tallentaa tiedoston Wikipediaan".
Suffixes are added depending on how the word is used, plus minor modifications to the base.
There is a long list of exceptions, but since only a few words needed to be translated, such as the site name, we didn't need to include it.
MediaWiki has grammatical transformation functions for over 20 languages.
Some of these are just dictionaries for Wikimedia site names, but others have simple algorithms which will fail for all but the most common cases.
Even before MediaWiki had arbitrary grammatical transformation, it had a nominative/genitive distinction for month names.
This distinction is necessary for some languages if you wish to substitute month names into sentences.
Filtering special characters in parameters and messages
The other (much simpler) issue with parameter substitution is HTML escaping. Despite being much simpler, MediaWiki does a pretty poor job of it.
Using messages in PHP
Warning:
Make sure you always use one of the
output modes
mentioned below
Here is a simple example:
$out
Xml
::
submitButton
wfMessage
'submit'
->
text
()
);
wfMessage()
is a global function which acts as a wrapper for the Message class, creating a Message object.
This example then invokes Message method
text()
which fetches the text of the
submit
message in the current language, performs certain language transformations (such as gender and plural), and returns the unescaped message text.
Here is a more complex example using a message that takes a count and supports linguistic plural handling:
$out
Xml
::
label
wfMessage
'numberofpages'
->
numParams
$count
->
text
()
);
Don't use the
formatnum
magic word in messages. Always format the numbers in code.
The following sections explain the code.
Parameters
Given a message like the following:
"msg"
"Values are $1, $2"
You pass parameters to messages that need them in several ways:
wfMessage
'msg'
'param1'
'param2'
->
plain
();
wfMessage
'msg'
->
params
'param1'
'param2'
->
plain
();
wfMessage
'msg'
'param1'
'param2'
->
plain
();
The first approach is most common, use the second approach when mixing different types of parameters, and you can use the third to construct message objects dynamically from other data. There are
different types of parameters
wfMessage
'msg'
->
params
$username
->
plain
();
wfMessage
'msg'
->
rawParams
$link
->
plain
();
wfMessage
'msg'
->
plaintextParams
$userInput
->
plain
();
wfMessage
'msg'
->
numParams
$count
->
plain
();
wfMessage
'msg'
->
durationParams
$duration
->
plain
();
// MediaWiki 1.22+
wfMessage
'msg'
->
expiryParams
$expiry
->
plain
();
// MediaWiki 1.22+
wfMessage
'msg'
->
timeperiodParams
$period
->
plain
();
// MediaWiki 1.22+
wfMessage
'msg'
->
sizeParams
$size
->
plain
();
// MediaWiki 1.22+
wfMessage
'msg'
->
bitrateParams
$bitrate
->
plain
();
// MediaWiki 1.22+
params()
Normal message substitution parameter.
rawParams()
Substitutes the parameter after the message has been otherwise processed; this means that these parameters are not available to parser functions, nor are they escaped if escaping output format is used (see below). Make sure you escape them properly yourself.
plaintextParams()
Like
rawParams()
, but does escaping. It is useful when you pass user input that may contain wikitext that should not be parsed.
Each function from the second group formats the value in a specific way before the substitution.
numParams()
must be used if the message uses
{{PLURAL:}}
In some cases you might not want to use it even though you have a number, for example a revision ID.
The other functions correspond to Language functions
formatDuration
formatExpiry
formatTimePeriod
formatSize
and
formatBitrate
, and are just shorthands for calling them directly.
Language
To override the language in which you want the message, there is one method and one shortcut for the common case of using wiki content language.
In the latter case you can use either a language code or a language object.
The usual language fallback chains apply, so the actual message you get may be in a different language than requested, if a translation does not exist.
wfMessage
'message-key'
->
inContentLanguage
();
wfMessage
'message-key'
->
inLanguage
$lang
);
Output modes and escaping
The Message class, and thus the object returned by wfMessage(), has five output modes:
plain()
– returns the message text as-is; only parameters are substituted
text()
– transforms the message text (see
MessageCache::transform()
) which transforms all
{{}}
including templates and parser functions like PLURAL and GENDER, but neither escapes nor sanitizes
escaped()
– same as 'text', but also escapes it for use in HTML
parse()
– parses the message text from wikitext to HTML and sanitizes (MessageCache::parse() which calls the Parser)
parseAsBlock()
– the output is wrapped in a block level HTML element, if not already, similarly to OutputPage::addWikiMsg
Remember that
Html::
functions escape everything fed into them, so use the text() format with those to avoid double escaping.
Hence the most common output format is text().
Also, make sure to use parse() or parseAsBlock() if the message has wikitext in it, otherwise the wikitext will just be escaped and output as plain text.
When using
wfMessage()
or
$this
->
msg
()
, you should always specify an output type.
text()
is appropriate when you're outputting it through
addWikiText()
Which output mode to use
Generally speaking, the most common modes you will use are
->parse()
and
->text()
You use ->parse() in most places where HTML markup is supported, and you use
->text()
in places where the content is going to become HTML escaped or HTML markup is not supported.
Some common cases:
If you are putting the message in the text part (third argument) of
Html
::
element
use
->text()
. You may also consider using
Html
::
rawElement
()
instead and using the
->parse()
mode.
If you are putting in text (third argument) of
Html
::
rawElement
()
, you should generally use
->parse()
If you are putting into the attributes (second argument) of
Html
::
rawElement
()
or
Html
::
element
()
, use
->parse()
If you are manually constructing HTML attributes, you should use
->escaped()
. However you should never manually construct HTML attributes
For
$out
->
addWikiText
()
where
$out
is an OutputPage object use
->text()
or
->plain()
. However consider if you would rather use
$out
->
addWikiMsg
instead.
For $out->addHTML() use
->parse()
Method chaining
Most Message methods return the current object, so you can conveniently call one after another to operate on an object before finally returning its text.
This is called
method chaining
Here is an example:
wfMessage
'key'
->
params
'apple'
->
numParams
$numOfApples
->
setContext
$context
->
inContentLanguage
()
->
parse
()
Additional methods of printing messages
The general message function in MediaWiki is
wfMessage
However, since in a message the value of magic words can depend on the context, there are various wrappers to this function, that automatically set the correct context.
OutputPage
has a few methods that append directly to the generated output.
The useful ones are:
$out
->
addWikiMsg
'pageheader'
);
$out
->
wrapWikiMsg
'

\n$1\n
'
'someerrormessage'
$user
->
getName
()
);
Both of the above parse the wikitext in the context of the current page before appending it to output buffer.
Classes extending
ContextSource
have a method
msg
that automatically sets the current context (language, current page etc.).
It is therefore recommended to use
$this
->
msg
()
for those classes, like
special pages
Here is a non-exhaustive list of such classes:
CategoryViewer
HTMLForm
LogEventsList
DifferenceEngine
OutputPage
IndexPager
ImageHistoryList
ApiBase
ChangesList
Skin
Warning:
The QuickTemplate class and its subclasses (BaseTemplate) have a method named
msg
which is different from the one from ContextSource.
In these classes $this->msg() will simply output the escaped text of the message.
Examples of
correct
usage:
wfMessage
'key'
->
numParams
567
->
text
();
$this
->
msg
'key'
->
numParams
567
->
parse
();
Examples of
incorrect
usage:
wfMessage
'key'
345
->
parseInline
();
# Number is not formatted correctly
$this
->
msg
'key'
345
->
numParams
234
->
plain
()
# Plural syntax is not converted in plain format
Using messages in JavaScript
See also:
ResourceLoader/Core modules#mediaWiki.message
This page only deals with MediaWiki core. See the specific documentation instead for the
jquery.i18n
module.
Getting the messages to the client
To use the messages, we need to make sure that the messages are available at client side first.
This can be done using either a ResourceLoader module (most common) or an API query from JavaScript (rare).
Using a ResourceLoader module
See also:
Manual:$wgResourceModules
This is the most common method of delivering messages. You should use this unless you have a good reason not to.
We are going to use
ResourceLoader
to make sure that the messages are available at the client side.
For this, in your ResourceLoader modules, define the messages to be exported to the client side.
If you plan to use the
mw.message(…).parse()
to generate HTML from wikitext in interface messages, then it is important to load the
mediawiki.jqueryMsg
module.
Example (extension.json):
"ResourceModules"
"ext.abuseFilter.edit"
"scripts"
"ext.abuseFilter.edit.js"
"messages"
"abusefilter-edit-syntaxok"
"abusefilter-edit-syntaxerr"
"abusefilter-http-error"
"abusefilter-edit-throttle-placeholder"
"abusefilter-edit-tag-placeholder"
"abusefilter-edit-warn-leave"
"unknown-error"
"jan"
"feb"
"mar"
],
"dependencies"
"mediawiki.util"
"mediawiki.api"
"mediawiki.confirmCloseWindow"
"jquery.textSelection"
"jquery.spinner"
"oojs-ui-core"
"oojs-ui-widgets"
Using an API query from JavaScript
This is not a common way of loading messages. You should only use this if there is a good reason why you can't use
the ResourceLoader module method above
You can use the following code:
MediaWiki version:
1.27
// When: The 'mediawiki.api' module is loaded, and, the page is ready
when
mw
loader
using
'mediawiki.api'
'mediawiki.jqueryMsg'
),
ready
// Then: Load the messages that you need (if they are not yet loaded)
then
()
=>
new
mw
Api
().
loadMessagesIfMissing
'january'
'february'
'march'
// Then: Do stuff with them
then
doStuff
);
To get the messages in some language other than the
UserLanguage
language, use getMessages instead of loadMessagesIfMissing, and supply the target language as the "amlang" field of the optional second parameter, like so:
// When: The 'mediawiki.api' module is loaded. No need to wait for the page to be ready.
when
mw
loader
using
'mediawiki.api'
// Then: get some messages in French (language code 'fr')
then
()
=>
new
mw
Api
().
getMessages
'january'
'february'
'march'
],
amlang
'fr'
// Then: Do stuff with them
then
doStuff
);
// doStuff is a function that will receive as its first parameter an object that looks like so:
// { february: "février", january: "janvier", march: "mars" }
Use of the messages
The messages defined in the above example will be available at client side and can be accessed by
mw.message( 'message-key-name' )
For example:
$(
'
'
).
text
( mw.message(
'translate-msggroupselector-projects'
).
text
() );
Note how we use jQuery
text
method to escape our output properly when using mw.message
text
format.
If your message contains wikitext formatting, you can instead use the following:
$(
'
'
).
append
( mw.message(
'translate-msggroupselector-projects'
).
parseDom
() );
Here we use jQuery
append
method to insert the DOM nodes returned by mw.message
parseDom
format.
In older code you might also encounter the following: (
parseDom
was not available until MediaWiki 1.27)
$(
'
'
).
html
( mw.message(
'translate-msggroupselector-projects'
).
escaped
() );
$(
'
'
).
html
( mw.message(
'translate-msggroupselector-projects'
).
parse
() );
There are other correct combinations, but whenever possible, stick to the patterns above to avoid XSS vulnerabilities and make your code easier to understand for others.
We can also pass the dynamic parameters to the message (i.e. the values for $1, $2, etc.) as shown below.
'
'
).
text
mw
message
'hello-user'
username
).
text
()
);
In the above examples, note that the message should be defined in an i18n file.
If the message key is not found in any i18n file, the result will be the message key in curved angle brackets U+29FC/U+29FD (part of mathematical symbols), like
⧼message-key-foo⧽
In older versions of MediaWiki, the message key was returned in ASCII angle brackets, like

, and this could generate invalid or fake HTML elements.
In the case where the message key does not exists, the
.exists()
method of the returned message object will also return false instead of true.
To use a message that must not go through the parser (e.g. when passing JSON data as messages, or when the message will be used as
preloaded text
of a page), use:
mw
message
'foobar'
).
plain
()
Format options
If you don't specify the output format, mw.message just returns a Message object.
To output the message itself, you should specify an output format.
The formats are mostly the same as in PHP side:
mw.message( 'foobar' ).plain()
Returns the message text as-is; only parameters are substituted.
mw.message( 'foobar' ).text()
Transforms the message text (all supported
{{}}
blocks are replaced with transformed results). See
#Feature support in JavaScript
for details of what is supported. For example, certain keywords (
{{int:}}
{{GENDER}}
{{SITENAME}}
etc.) work without parameters, but tranclusion (e.g.
{{MediaWiki:}}
) and server-side
Magic words
such as {{NUMBEROFEDITS}} or {{ns:Project}} do not work,
mw.message( 'foobar' ).escaped()
HTML escaped version of
text
mw.message( 'foobar' ).parse()
Parses the message text from wikitext to HTML. This supports everything from
text
mode, as well as most links, and allow listed HTML.
mw.message( 'foobar' ).parseDom()
Like
parse()
, but returns a jQuery collection instead of a HTML string.
Warning:
If the mediawiki.jqueryMsg module is not loaded, all of the above methods behave essentially like
plain()
with possible escaping.
There is no equivalent of parseAsBlock. Where necessary, wrap the output in a block element yourself.
Parameters
Parameters can be specified as additional arguments to
mw.message()
They can be passed as strings or as DOM nodes / jQuery collections.
Unlike in PHP, wikitext in the parameters is
not parsed
Effectively, all string parameters behave like
plaintextParams()
DOM/jQuery parameters can be used to achieve the equivalent of
rawParams()
There is no support for other parameter formats.
Don't use the
formatnum
magic word in messages.
Always format the numbers in code.
In JavaScript, instead of
numParams()
, you must format numbers before passing them as parameters, using
mw.language.convertNumber()
'
'
).
text
mw
message
'translate-msggroupselector-view-subprojects'
mw
language
convertNumber
count
).
text
()
);
Feature support in JavaScript
Warning:
Wikitext support in JS messages requires the
mediawiki.jqueryMsg
module to be loaded, otherwise these features will be silently ignored.
JavaScript messages only support a small subset of wikitext syntax. Supported features include:
Internal links (except
pipe trick
Explicit external links (no auto-numbered and free links)
The magic words SITENAME, PAGENAME, PAGENAMEE; since MW 1.38: SERVERNAME; since MW 1.43: CONTENTLANGUAGE
The parser functions PLURAL, GENDER, GRAMMAR, int, ns, formatnum, lc, uc, lcfirst, ucfirst; since MW 1.44: fullurl
HTML tags which are allowed in wikitext (HTML must be well-formed)
HTML entities
'
"
<
>
&
The
‎<
nowiki
tag
Notable wikitext syntax that is
not
supported:
Templates
Non-local interwiki links
All other parser functions and magic words
Modules (for example
Module:String
All other XML-like tags (extension tags)
Bold and italic
'''
''
(use
‎<
‎<
instead)
Lists using
(use
‎<
ul
or
‎<
ol
‎<
li
instead)
Definition lists / indents using
(use
‎<
dl
‎<
dt
‎<
dd
instead)
Multiple paragraphs (use
‎<
instead)
Comments

Some types of nesting (e.g.
{{PLURAL:$1|
strong
$1
strong
}}
The
doc-jqueryMsg template
can be used to
document
such messages, to let translators know which wikitext restrictions apply.
mw.msg
The
mw.msg()
function is commonly used as a shortcut for
mw.message().text()
Exporting messages through ResourceLoader callbacks
If you need to process a message on the server and send the result to the client (e.g. because you need to parse the message using parsing features that aren't supported in JS), you can do that with a
package files callback
in your ResourceLoader module.
When you do this, take care to use
$context
->
msg
()
, because using
wfMessage()
will
cause errors
Using messages in Lua
Modules written in Lua using
Scribunto
run similarly to templates and have access to MediaWiki messages.
The MediaWiki Lua library includes the mw.message class for processing messages.
Refer to the full
Lua message library
documentation for the full API.
Here is a simple example:
local
{}
function
nmembers
frame
local
nmembersMsg
mw
message
new
'nmembers'
nmembersMsg
numParams
-- This ensures number localization
-- Show the message in the language of the wiki. frame:preprocess expands the {{plural}} clause.
return
frame
preprocess
nmembersMsg
plain
()
end
return
Using messages in Vue.js
See also:
Vue.js#Internationalization
Notes about gender, grammar, plural
See also
#Switches in messages…
; the syntax itself is documented at
Help:Magic words#Localization
and related.
In general, GENDER, GRAMMAR and PLURAL magic words work identically in both PHP and JavaScript sides.
You must use
text
escaped
parse
or
parseAsBlock
output formats
for them to work.
In PHP, you can use wfMessage or
$this->msg
In JavaScript, make sure your resource loader module depends on
jqueryMsg
(see
#Using messages in JavaScript
).
You need to pass the relevant parameter as normal parameter to the message.
The parameter is the number for PLURAL; the plain text or wikitext-escaped username for GENDER in PHP; the gender from preferences or a user object for GENDER in JavaScript (
see below
).
For enabling plural and correct number localization in PHP, you need to use
numParams
for the number, see also
#Chaining
For enabling plural and correct number localization in JavaScript, you need to use
mw.language.convertNumber
for the number
PLURAL syntax example
# Simple plural
'key'
=>
'$1 crying {{PLURAL:$1|baby|babies}}'
GENDER in JavaScript
This needs explicit
jqueryMsg
, see
#Using messages in JavaScript
If you have a message, say,
"message-key-gender-foo": "{{GENDER:$1|he|she|they}} created an article"
, in JavaScript, you can use it as given below:
mw
message
'message-key-gender-foo'
'male'
).
text
();
// returns 'he created an article'
mw
message
'message-key-gender-foo'
'female'
).
text
();
// returns 'she created an article'
mw
message
'message-key-gender-foo'
'unknown'
).
text
();
// returns 'they created an article'
Instead of passing the gender directly, we can pass any "User-like" object with a gender option.
For example, the current user object
mw.user
var
user
mw
user
// current user
mw
message
'message-key-gender-foo'
user
).
text
();
// The message returned will be based on the gender of the current user.
If the gender passed is invalid or unknown, the gender neutral form will be used as defined for each language.
Pass
'unknown'
if you intentionally want the neutral form.
Finally, if you want to use the gender of the current user, you can pass an empty string:
// the following line illustrates the message content, you can run this snippet on developer console
mw
messages
set
'message-key-gender-foo'
'{{GENDER:$1|male|female|unknown}}'
);
mw
user
options
values
gender
'female'
// temporarily manipulate your gender preference
mw
message
'message-key-gender-foo'
''
).
text
();
// return value depends on your gender preference
PLURAL in JavaScript
This needs explicit
jqueryMsg
, see
#Using messages in JavaScript
If you have a message, say
'message-key-plural-foo' => 'There {{PLURAL:$1|is $1 item|are $1 items}}'
, in JavaScript, you can use it as given below:
mw
message
'message-key-plural-foo'
count
).
text
();
// returns 'There is 1 item' if count = 1
// returns 'There are 6 items' if count = 6
See also
API:Allmessages
Help:HTML in wikitext
Message class documentation
Notes
While using this mode to display HTML content is possible, it is recommended to use wikitext and use the parse() mode to transform it into HTML.
More in general, use $this->msg() in non-static functions of IContextSource objects.
Magic words and
Parser functions
Behaviour switches
Current
TOC
__FORCETOC__
__NOTOC__
__TOC__
Editing
__NEWSECTIONLINK__
__NOEDITSECTION__
__NONEWSECTIONLINK__
Categories
__EXPECTUNUSEDCATEGORY__
__HIDDENCAT__
__NOGALLERY__
Language conversion
__NOCONTENTCONVERT__
__NOCC__
__NOTITLECONVERT__
__NOTC__
Other
__EXPECTUNUSEDTEMPLATE__
__INDEX__
__NOINDEX__
__STATICREDIRECT__
Former
__END__
__START__
Variables
Current
Date and time
{{
CURRENTDAY
}}
{{
CURRENTDAY2
}}
{{
CURRENTDAYNAME
}}
{{
CURRENTDOW
}}
{{
CURRENTHOUR
}}
{{
CURRENTMONTH
}}/{{
CURRENTMONTH2
}}
{{
CURRENTMONTH1
}}
{{
CURRENTMONTHABBREV
}}
{{
CURRENTMONTHNAME
}}
{{
CURRENTMONTHNAMEGEN
}}
{{
CURRENTTIME
}}
{{
CURRENTTIMESTAMP
}}
{{
CURRENTWEEK
}}
{{
CURRENTYEAR
}}
{{
LOCALDAY
}}
{{
LOCALDAY2
}}
{{
LOCALDAYNAME
}}
{{
LOCALDOW
}}
{{
LOCALHOUR
}}
{{
LOCALMONTH
}}/{{
LOCALMONTH2
}}
{{
LOCALMONTH1
}}
{{
LOCALMONTHABBREV
}}
{{
LOCALMONTHNAME
}}
{{
LOCALMONTHNAMEGEN
}}
{{
LOCALTIME
}}
{{
LOCALTIMESTAMP
}}
{{
LOCALYEAR
}}
{{
LOCALWEEK
}}
Site metadata
{{
ARTICLEPATH
}}
{{
CONTENTLANGUAGE
}}/{{
CONTENTLANG
}}
{{
CURRENTVERSION
}}
{{
DIRECTIONMARK
}}/{{
DIRMARK
}}
{{
SCRIPTPATH
}}
{{
SERVER
}}
{{
SERVERNAME
}}
{{
SITENAME
}}
{{
STYLEPATH
}}
Page metadata
{{
CASCADINGSOURCES
}}
{{
PAGEID
}}
{{
PAGELANGUAGE
}}
{{
PROTECTIONEXPIRY
}}
{{
PROTECTIONLEVEL
}}
{{
TRANSLATABLEPAGE
}}
Viewed page
{{
REVISIONDAY
}}
{{
REVISIONDAY2
}}
{{
REVISIONID
}}
{{
REVISIONMONTH
}}
{{
REVISIONMONTH1
}}
{{
REVISIONSIZE
}}
{{
REVISIONTIMESTAMP
}}
{{
REVISIONUSER
}}
{{
REVISIONYEAR
}}
Affect page content
{{
DEFAULTSORT
}}
{{
DISPLAYTITLE
}}
Localisation
{{
USERLANGUAGE
}}
Statistics
{{
NUMBERINGROUP
}}/{{
NUMINGROUP
}}
{{
NUMBEROFACTIVEUSERS
}}
{{
NUMBEROFADMINS
}}
{{
NUMBEROFARTICLES
}}
{{
NUMBEROFEDITS
}}
{{
NUMBEROFFILES
}}
{{
NUMBEROFPAGES
}}
{{
NUMBEROFUSERS
}}
{{
PAGESINCATEGORY
}}/{{
PAGESINCAT
}}
{{
PAGESINNAMESPACE
}}/{{
PAGESINNS
}}
Page names
{{
ARTICLEPAGENAME
}}
{{
ARTICLEPAGENAMEE
}}
{{
BASEPAGENAME
}}
{{
BASEPAGENAMEE
}}
{{
FULLPAGENAME
}}
{{
FULLPAGENAMEE
}}
{{
PAGENAME
}}
{{
PAGENAMEE
}}
{{
ROOTPAGENAME
}}
{{
ROOTPAGENAMEE
}}
{{
SUBJECTPAGENAME
}}
{{
SUBJECTPAGENAMEE
}}
{{
SUBPAGENAME
}}
{{
SUBPAGENAMEE
}}
{{
TALKPAGENAME
}}
{{
TALKPAGENAMEE
}}
Namespaces
{{
ARTICLESPACE
}}
{{
ARTICLESPACEE
}}
{{
NAMESPACE
}}
{{
NAMESPACEE
}}
{{
NAMESPACENUMBER
}}
{{
SUBJECTSPACE
}}
{{
SUBJECTSPACEE
}}
{{
TALKSPACE
}}
{{
TALKSPACEE
}}
Escaped chars
{{!}}
{{=}}
Former
{{
NUMBEROFVIEWS
}}
Parser functions
Metadata of another page
{{
CASCADINGSOURCES:
}}
{{
#contentmodel:
}}
{{
PAGEID:
}}
{{
PAGESIZE:
}}
{{
PROTECTIONEXPIRY:
}}
{{
PROTECTIONLEVEL:
}}
{{
REVISIONDAY:
}}
{{
REVISIONDAY2:
}}
{{
REVISIONID:
}}
{{
REVISIONMONTH:
}}
{{
REVISIONMONTH1:
}}
{{
REVISIONTIMESTAMP:
}}
{{
REVISIONUSER:
}}
{{
REVISIONYEAR:
}}
URL data
{{
anchorencode
}}
{{
canonicalurl
}}
{{
canonicalurle
}}
{{
filepath
}}
{{
fullurl
}}
{{
fullurle
}}
{{
localurl
}}
{{
localurle
}}
{{
urlencode
}}
Namespaces
{{
ns
}}
{{
nse
}}
Formatting
{{
bidi
}}
{{
#dateformat:
}}/{{
#formatdate:
}}
{{
formatnum
}}
{{
lc
}}
{{
lcfirst
}}
{{
padleft
}}
{{
padright
}}
{{
uc
}}
{{
ucfirst
}}
Localisation
{{
bcp47
}}
{{
#dir
}}
{{
#FORMAL:
}}
{{
gender
}}
{{
grammar
}}
{{
int
}}
{{
#language
:}}
{{
plural
}}
Transclusion modifiers
{{:}}
{{
int:
}}
{{
msg
}}
{{
raw
}}
{{
msgnw
}}
{{
subst
}}
{{
safesubst
}}
Misc
{{
#interlanguagelink
:}}
{{
#interwikilink
:}}
{{
#isbn:
}}
{{
#special
:}}
{{
#speciale
:}}
{{
#tag:
}}
From extensions
Babel
: {{
#babel:
}}
CategoryTree
: {{
#categorytree:
}}
GeoData
: {{
#coordinates:
}}
Labeled Section Transclusion
: {{
#lst:
}} {{
#lstx:
}}
LiquidThreads
: {{
#lqtpagelimit:
}} {{
#useliquidthreads:
}}
ParserFunctions
: {{
#expr:
}} {{
#if:
}} {{
#ifeq:
}} {{
#iferror:
}} {{
#ifexist:
}} {{
#ifexpr:
}} {{
#rel2abs:
}} {{
#switch:
}} {{
#time:
}} {{
#timel:
}} {{
#timef:
}} {{
#timefl:
}} {{
#titleparts:
}}
Scribunto
: {{
#invoke:
}}
Translate
: {{
#translation:
}}
Wikidata
: {{
#property:
}} {{
#statements:
}}
See also
Help:Extension:ParserFunctions
Help:Parser functions in templates
Parser extension tags
Parser function extensions
Parser function hooks
Translate this navigation box
Retrieved from "
Categories
MediaWiki code
Localisation
Manual
Messages API
Add topic