Help:System message/zh

系统消息是纯文本、wiki语法、CSS或JavaScript代码片段，可以用来自定义页面和每种语言的外观和行为和区域设置. MediaWiki使用消息的任何面向用户界面的一部分，用于核心和扩展的MediaWiki UI的国际化和本地化. MediaWiki中使用的所有消息都在 消息文件 中.



覆盖Wiki上的消息
您可以通过在wiki上编辑消息来覆盖消息的默认值. 每条消息在MediaWiki命名空间中都有一个wiki页面，其消息键作为页面的名称. 例如，“aboutsite”消息存储在MediaWiki:aboutsite中. 默认情况下，除非用户具有“editinterface”权限，否则此命名空间将被禁止编辑. 可以在Special:AllMessages上找到所有消息页面的列表. 编辑界面消息通常很简单，就像编辑普通的wiki页面一样，但它仅限于具有editinterface权限的用户，默认情况下这个权限会分配给管理员（和界面管理员）. Special:AllMessages表包含两列：链接的接口名称和文本. 文本水平分割以显示上面的默认文本，以及下面的自定义文本. 如果自定义消息不存在，则仅显示默认消息. 要自定义消息，请单击左列中的上部链接（消息名称）. 如果正在使用默认文本，则此链接为红色，因为编辑页面为空.

左列单元格中的下部链接指向该消息的讨论页面.

只有在以下情况下，才建议覆盖维基上的消息：


 * 这条消息有一个严重的错误，必须尽快纠正. 在这种情况下，如果是英文的，建议在源代码中也修复这个错误，如果不是，建议在维基翻译网上的翻译中修复这个错误.  在部署更正时，应该删除具有本地自定义的页面.
 * 如果本地维基使用不同的术语. 例如，很多信息使用“页面（page）”一词，但英文维基百科经常使用“文章（article）”.
 * 本地消息正在尝试添加一些独特的功能，例如用于小工具或模板. （在这种情况下，仍然建议考虑更改源消息或将此功能封装在扩展中，以便其他Wiki能够方便地使用它，而不必手动复制定制. ）



查找消息和文档
根据消息文档指南，MediaWiki如何使用每条消息，可用的变量，使用的参数，限制等等可以在[//translatewiki.net/w/i.php?title=Special:Translate&task=reviewall&group=core&language=qqq&limit=5000&action=page&filter= qqq伪语言的完整文档]中找到解释. 对于旧版中的某些接口消息，可能存在一些较长的解释页面.

MediaWiki 1.18以后，你可以使用 或者 （如果已经存在 了）的URL指令来查看一个页面的系统消息来源（[ 示例]）. 所有引用自系统消息的内容都会被一个key代替，告诉你这个内容来自哪一个系统消息，使用内容语言显示的消息不会使用qqx显示.

介面的某些部分将 添加到使用qqx技巧时显示的字符串中. 例如，链接到主命名空间中的讨论页面的选项卡的标签显示为 ，但字符串实际上位于MediaWiki:Talk处.

如果页面使用例如标签，例如 特殊页面设置，你必须在 参数后面添加标签，例如.



本地化文件格式
MediaWiki中使用的所有消息都在 消息文件(MediaWiki命名空间) 中定义.

MediaWiki中有两种类型的消息文件：JSON和PHP. 截至2014年4月，核心MediaWiki和大多数维护的扩展已迁移到JSON格式. 您应该将JSON用于所有新开发. 有关迁移到JSON的更多信息，请参见 Requests for comment/Localisation format

JSON
从2013年底开始，引入了一种新的消息文件格式：JSON. JSON，非常常见的数据存数格式. 其中的每个键都是消息键，值是消息文本. 此外，特殊的  键用于存储有关翻译的信息，如翻译作者.

使用JSON使本地化文件更安全，因为它是不可执行的（JSON是纯文本）. 它还与jquery.i18n兼容，jquery.i18n是作为Project Milkshake的一部分开发的JavaScript库，它提供类似MediaWiki的前端本地化功能，并被一些希望减少对MediaWiki的依赖的扩展使用，如可视化编辑器和语言选择器.

由于更广泛的国际化和本地化工具被称为“Project Milkshake”，一些人将这种形式称为“香蕉”.



消息文件的所在位置
在MediaWiki核心中，本地化文件放在 目录中. MediaWiki扩展通常将它们的扩展放在 的子目录中. 如果一个项目中存在大量消息，为了便于维护，可能需要将这些消息拆分到两个或多个主题子目录中. 如果一个项目中存在大量消息，为了便于维护，可能需要将这些消息拆分到两个或多个主题子目录中. 以下是MediaWiki的 VisualEditor 扩展的一个例子：

您可以将新消息添加到英文“en”消息文件 ，并使用特殊的伪语言代码“qqq”&ndash； 将它们记录在消息文档文件中. 请看: 添加新消息.

元数据
目前，文件中使用以下元数据字段：


 * authors
 * 消息作者的JSON列表. 对于英文(en)和消息文档(qqq)，这些是在编辑消息文件时手动添加的.  对于所有其他语言，从translatewiki.net中导出消息文件时会自动插入此选项.  可以在translatewiki.net上编辑消息文档，文档编辑器也会自动插入到qqq.json文件中.


 * message-documentation
 * 这是用于存储消息文档的伪语言代码. 对于MediaWiki，这始终是qqq.  (这出现在一些扩展中，但实际上没有以任何方式进行处理.

这不是强制性的. )

公约
转义诸如换行符之类的特殊字符.

用不同字母表示字母的Unicode字符被存储为实际字符，而不是字符代码，因为这些文件有时会被人们读取，而且这会使文件变小( 而不是 ). 在任何情况下，开发人员几乎没有理由编辑除英语以外的任何语言的消息，因为这些消息通常是通过Translatewiki.net编辑的.

HTML代码也没有转义，因此是 而不是.

JSON文件使用制表符进行缩进.

PHP
较早的本地化文件格式是PHP. 这实质上是一个包含所有消息的PHP数组. In core MediaWiki each language resides in its own file in the languages/message directory of the MediaWiki source code. In the extensions all the languages and the message documentation (qqq) are in the same file: ExtensionName.i18n.php, usually in the main directory of the extension.

To migrate system messages from PHP to JSON, use the generateJsonI18n.php script. It will move the messages to JSON files and replace the text of the PHP file with a shim that points to the JSON files. This boilerplate code is needed for backwards compatibility with MediaWiki 1.19. It is not used in new extensions that do not require MediaWiki 1.19 compatibility.

Using messages
MediaWiki uses a central repository of messages which are referenced by keys in the code. This is different from, for example, the gettext system, which extracts the translatable strings from the source files. The key-based system makes some things easier, like refining the original texts and tracking changes to messages. The drawback is that the list of used messages and the list of source texts for those keys can get out of sync. In practice this isn't a big problem, and the only significant problem is that sometimes extra messages that are not used anymore still stay up for translation.

To make message keys more manageable and easier to search for, always write them completely and don't rely too much on creating them dynamically.

See also the coding conventions for dynamic identifiers.

To use a message in JavaScript, you have to list it in the definition of your ResourceLoader module, in the  property.

The detailed use of message functions in PHP and JavaScript is on. ''' This is an important documentation page, and you should read it before you write code that uses messages. '''

Message sources
Code looks up system messages from these sources:
 * The MediaWiki namespace. This allows wikis to adopt, or override, all of their messages, when standard messages do not fit or are not desired.
 * MediaWiki:Message-key is the default message,
 * MediaWiki:Message-key/language-code is the message to be used when a user has selected a language other than the wiki's default language.
 * From message files:
 * Core MediaWiki itself and most currently maintained extensions use a file per language, named, where zyx is the language code for the language.
 * Some older extensions use a combined message file holding all messages in all languages, usually named.
 * Many Wikimedia Foundation wikis access some messages from the extension, allowing them to standardise messages across WMF wikis without imposing them on every MediaWiki installation.
 * A few extensions use other techniques.

Caching
System messages are one of the more significant components of MediaWiki, primarily because it is used in every web request. The PHP message files are large, since they store thousands of message keys and values. Loading this file (and possibly multiple files, if the user's language is different from the content language) has a large memory and performance cost. An aggressive, layered caching system is used to reduce this performance impact.

MediaWiki has lots of caching mechanisms built in, which make the code somewhat more difficult to understand. Since 1.16 there is a new caching system, which caches messages either in cdb files or in the database. Customised messages are cached in the filesystem and in memcached (or alternative), depending on the configuration.

The table below gives an overview of the settings involved:

In MediaWiki 1.27.0 and 1.27.1, the autodetection was changed to favor the file backend. In case  (the default), the file backend is used with the path from. If this value is not set (which is the default), a temporary directory determined by the operating system is used. If a temporary directory cannot be detected, the database backend is used as a fallback. This was reverted from 1.27.2 and 1.28.0 because of conflict of files on shared hosts and security issues (see T127127 and T161453).

Function backtrace
To better visually depict the layers of caching, here is a function backtrace of what methods are called when retrieving a message. See the below sections for an explanation of each layer.



MessageCache
The  class is the top level of caching for messages. It is called from the Message class and returns the final raw contents of a message. This layer handles the following logic:


 * Checking for message overrides in the database
 * Caching over-ridden messages in, or whatever is set to
 * Resolving the remainder of the language fallback sequence

The last bullet is important. Language fallbacks allow MediaWiki to fall back on another language if the original does not have a message being asked for. As mentioned in the next section, most of the language fallback resolution occurs at a lower level. However, only the  layer checks the database for overridden messages. Thus integrating overridden messages from the database into the fallback chain is done here. If not using the database, this entire layer can be disabled.

LocalisationCache
See

LCStore
The  class is merely a back-end implementation used by the LocalisationCache class for actually caching and retrieving messages. Like the  class, which is used for general caching in MediaWiki, there are a number of different cache types (configured using ): The "file" option is used by the Wikimedia Foundation, and is recommended because it is faster than going to the database and more reliable than the APC cache, especially since APC is incompatible with PHP versions 5.5 or later.
 * "db" (default) - Caches messages in the database
 * "file" (default if  is set) - Uses CDB to cache messages in a local file
 * "accel" - Uses APC or another opcode cache to store the data



添加新消息


选择消息秘钥
请看：

消息密钥必须是全局唯一的. 这包括核心MediaWiki以及所有的扩展和皮肤.

在消息名称中坚持小写字母、数字和下划线；大多数其他字符不太实用或根本不起作用. 根据MediaWiki约定，第一个字符不区分大小写，其他字符区分大小写.

请遵循全球或本地的命名约定. 对于扩展名，请使用标准前缀，最好是小写的扩展名，后跟连字符(“-”). Exceptions are:


 * Messages used by the API
 * These must begin with,  ,  . After this prefix put the extension prefix. ( Note that these messages should be in a separate file, usually under includes/i18/api. )


 * Log-related messages
 * These must begin with,  ,.


 * User rights
 * The key for the name of the right as displayed on Special:ListGroupRights must begin with . The name of the action that completes the sentence "" must begin with.


 * Revisions tags
 * Revisions tags must begin with.


 * Special page titles
 * Special page titles must begin with.

Other things to note when creating messages

 * 1) Make sure that you are using suitable handling for the message (parsing,  -replacement, escaping for HTML, etc.)
 * 2) If your message is part of core, it should usually be added to , although some components, such as Installer, EXIF tags, and ApiHelp have their own message files.
 * 3) If your message is in an extension add it to the   file or the   file in the appropriate subdirectory. In particular, API messages that are only seen by developers and not by most end users are usually in a separate file, such as  . If an extension has a lot of messages, you may create subdirectories under  . All the message directories, including the default , must be listed in the   section in   or in the  variable.
 * 4) Take a pause and consider the wording of the message. Is it as clear as possible? Can it be misunderstood? Ask for comments from other developers or localisers if possible. Follow the Internationalisation hints.
 * 5) Add documentation to   in the same directory.
 * 6) The sequence of the messages in the file should roughly conform to the features of your project. Put messages from the same feature next to each other. This helps translators stay focused and be efficient and consistent.
 * 7) Put the messages that are expected to be the most basic and the most frequently used in the beginning of the file, and the messages that are rarer and more technically advanced towards the end.

Messages that should not be translated

 * 1) Ignored messages are those which should exist only in the English messages file. They are messages that should not need translation, because they reference only other messages or language-neutral features, e.g. a message of " ".
 * 2) Optional messages may be translated only if changed in the target language.

To flag such messages:


 * use the template in the  message documentation, that is respectively
 * or
 * tell the extension used on  what to do with the messages by submitting a patch listing them as appropriate (see also ):
 * for core, in add the message keys
 * under  or
 * under ;
 * for extensions, in add a line under the extension's name like
 * or
 * or

Removing existing messages
Remove it from  and. Don't bother with other languages. Updates from will handle those automatically.

In addition, check whether the message appears anywhere in translatewiki configuration, for example in the list of optional or most used messages (a simple git grep should be enough). Remove it from these lists if needed.

Changing existing messages

 * 1) Consider updating the  message documentation.
 * 2) Change the message key if old translations are not suitable for the new meaning. This also includes changes in message handling (parsing, escaping, parameters, etc.). Improving the phrasing of a message without technical changes is usually not a reason for changing a key. At translatewiki.net, the translations will be marked as outdated so that they can be targeted by translators. Changing a message key does not require talking to the i18n team or filing a support request. However, if you have special circumstances or questions, ask in  or in the support page at.
 * 3) If the extension is supported by, please only change the English source message and/or key, and the accompanying entry in  . If needed, the translatewiki.net team will take care of updating the translations, marking them as outdated, cleaning up the file or renaming keys where possible. This also applies when you're only changing things like HTML tags which you could change in other languages without speaking those languages. Most of these actions will take place in translatewiki.net and will reach Git with about one day of delay.

Message documentation
There is a pseudo-language code  for message documentation. It is one of the ISO 639 codes reserved for private use. There, we do not keep translations of each message, but collect English sentences about each message: telling us where it is used, giving hints about how to translate it, and enumerating and describing its parameters, link to related messages, and so on. In translatewiki.net, these hints are shown to translators when they edit messages.

Programmers must document each and every message. Message documentation is an essential resource – not just for translators, but for all the maintainers of the module. Whenever a message is added to the software, a corresponding  entry must be added as well; revisions which don't do so are marked " " until the documentation is added.

Documentation in  files should be edited directly only when adding new messages or when changing an existing English message in a way that requires a documentation change, for example adding or removing parameters. In other cases, documentation should usually be edited in translatewiki. Each documentation string is accessible at https://translatewiki.net/wiki/MediaWiki: message-key /qqq, as if it were a translation. These edits will be exported to the source repositories along with the translations.

Useful information that should be in the documentation includes:


 * 1) Message handling (parsing, escaping, plain text).
 * 2) Type of parameters with example values.
 * 3) Where the message is used (pages, locations in the user interface).
 * 4) How the message is used where it is used (a page title, button text, etc.).
 * 5) What other messages are used together with this message, or which other messages this message refers to.
 * 6) Anything else that could be understood when the message is seen on the context, but not when the message is displayed alone (which is the case when it is being translated).
 * 7) If applicable, notes about grammar. For example, "open" in English can be both a verb and an adjective. In many other languages the words are different and it's impossible to guess how to translate them without documentation.
 * 8) Adjectives that describe things, such as "disabled", "open" or "blocked", must always say what are they describing. In many languages adjectives must have the gender of the noun that they describe. It may also happen that different kinds of things need different adjectives.
 * 9) If the message has special properties, for example, if it is a page name, or if it should not be a direct translation, but adapted to the culture or the project.
 * 10) Whether the message appears near other message, for example in a list or a menu. The wording or the grammatical features of the words should probably be similar to the messages nearby. Also, items in a list may have to be properly related to the heading of the list.
 * 11) Parts of the message that must not be translated, such as generic namespace names, URLs or tags.
 * 12) Explanations of potentially unclear words, for example abbreviations, like "CTA", or specific jargon, like "template", "suppress" or "stub". (Note that it's best to avoid such words in the first place!)
 * 13) Screenshots are very helpful. Don't crop – an image of the full screen in which the message appears gives complete context and can be reused in several messages.

A few other hints:


 * Remember that very, very often translators translate the messages without actually using the software.
 * Most usually, translators do not have any context information, neither of your module, nor of other messages in it.
 * A rephrased message alone is useless in most circumstances.
 * Don't use designers' jargon like "hamburger", "nav", or "comps".
 * Consider writing a glossary of the technical terms that are used in your module. If you do it, link to it from the messages' documentation.

You can link to other messages by using. Please do this if parts of the messages come from other messages (if this cannot be avoided), or if some messages are shown together or in same context.

translatewiki.net provides some default templates for documentation:


 * - for  messages
 * - for  messages
 * - for messages around user groups (, ,  ,   and  )
 * - for  messages

Have a look at the template pages for more information.

Internationalisation hints
Besides documentation, translators ask developers to consider some hints so as to make their work easier and more efficient and to allow an actual and good localisation for all languages. Even if only adding or editing messages in English, one should be aware of the needs of all languages. Each message is translated into more than 300 languages and this should be done in the best possible way. Correct implementation of these hints will very often help you write better messages in English, too.

Localisation#Help_and_contact_info lists the main places where you can find the assistance of experienced and knowledgeable people regarding i18n.

Use Message parameters and switches properly
That's a prerequisite of a correct wording for your messages.

Avoid message re-use
The translators discourage message re-use. This may seem counter-intuitive, because copying and duplicating code is usually a bad practice, but in system messages it is often needed. Although two concepts can be expressed with the same word in English, this doesn't necessarily mean they can be expressed with the same word in every language. "OK" is a good example: in English this is used for a generic button label, but in some languages they prefer to use a button label related to the operation which will be performed by the button. Another example is practically any adjective: a word like "multiple" changes according to gender in many languages, so you cannot reuse it to describe several different things, and you must create several separate messages.

If you are adding multiple identical messages, please add message documentation to describe the differences in their contexts. Don't worry about the extra work for translators. Translation memory helps a lot in these while keeping the flexibility to have different translations if needed.

Avoid fragmented or 'patchwork' messages
Languages have varying word orders, and complex grammatical and syntactic rules. It's very hard to translate "lego" messages, that is messages formed by multiple pieces of text, possibly with some indirection (also called "string concatenation").

It is better to make every message a complete phrase. Several sentences can usually be combined much more easily into a text block, if needed. When you want to combine several strings in one message, pass them in as parameters, as translators can order them correctly for their language when translating.

Messages quoting each other
An exception from the rule may be messages referring to one another: 'Enter the original author's name in the field labelled " " and click "  " when done'. This makes the message consistent when a software developer or wiki operator alters the messages "name" or "proceed" later. Without the int-trick, developers and operators would have to be aware of all related messages needing adjustment, when they alter one.

Don't use terms and templates that are specific to particular projects
MediaWiki is used by very diverse people, within the Wikimedia movement and outside of it. Even though it was originally built for an encyclopedia, it is now used for various kinds of content. Therefore, use general terms. For example, avoid terms like "article", and use "page" instead, unless you are absolutely sure that the feature you are developing will only be used on a site where pages are called "articles". Don't use "village pump", which is the name of an English Wikipedia community page, and use a generic term, such as "community discussion page", instead.

Don't assume that a certain template exists on all wikis. Templates are local to wikis. This applies to both the source messages and to their translations. If messages use templates, they will only work if a template is created on each wiki where the feature is deployed. It's best to avoid using templates in messages completely. If you really have to use them, you must document this clearly in the message documentation and in the extension installation instructions.

Separate times from dates in sentences
Some languages have to insert something between a date and a time which grammatically depends on other words in a sentence. Thus, they will not be able to use date/time combined. Others may find the combination convenient, thus it is usually the best choice to supply three parameter values (date/time, date, time) in such cases, and in each translation leave either the first one or last two unused as needed.

Avoid in messages
has several disadvantages. It can be anything (acronym, word, short phrase, etc.) and, depending on language, may need the use of  on each occurrence. No matter what, each message having  will need review in most wiki languages for each new wiki on which your code is installed. In the majority of cases, when there is not a general  configuration for a language, wiki operators will have to add or amend PHP code so as to get   for   working. This requires both more skills, and more understanding, than otherwise. It is more convenient to have generic references like "this wiki". This does not keep installations from locally altering these messages to use, but at least they don't have to, and they can postpone message adaption until the wiki is already running and used.

Avoid references to visual layout and positions
What is rendered where depends on skins. Most often screen layouts of languages written from left-to-right are mirrored compared to those used for languages written from right-to-left, but not always, and for some languages and wikis, not entirely. Handheld devices, narrow windows, and so on may show blocks underneath each other, that would appear side-by-side on larger displays. Since site- and user-written JavaScript scripts and gadgets can, and do, hide parts, or move things around in unpredictable ways, there is no reliable way of knowing the actual layout.

It is wrong to tie layout information to content languages, since the user interface language may not be the page's content language, and layout may be a mixture of the two depending on circumstances. Non-visual user agents like acoustic screen readers and other auxiliary devices do not even have a concept of visual layout. Thus, you should not refer to visual layout positions in the majority of cases, though semantic layout terms may still be used ("previous steps in the form", etc.).

MediaWiki does not support showing different messages or message fragments based on the current directionality of the interface (see T30997).

The upcoming browser and MediaWiki support for East and North Asian top-down writing will make screen layouts even more unpredictable, with at least eight possible layouts (left/right starting position, top/bottom starting position, and which happens first).

Avoid references to screen colours
The colour in which something is rendered depends on many factors, including skins, site- and user-written JavaScript scripts and gadgets, and local user agent over-rides for reasons of accessibility or technological limitations. Non-visual user agents like acoustic screen readers and other auxiliary devices do not even have a concept of colour. Thus, you should not refer to screen colours. (You should also not rely on colour alone as a mechanism for informing the user of state, for the same reason.)

Avoid untranslated HTML markup in messages
HTML markup not requiring translation, such as enclosing s, rulers above or below, and similar, should usually not be part of messages. They unnecessarily burden translators, increase message file size, and pose the risk to accidentally being altered or skipped in the translation process. In general, avoid raw HTML in messages if you can.

Messages are often longer than you think!
Skimming foreign language message files, you almost never find messages shorter than Chinese ones, rarely shorter than English ones, and usually much longer than English ones.

Especially in forms, in front of input fields, English messages tend to be terse, and short. That is often not kept in translations. Languages may lack the technical vocabulary present in English, and may require multiple words or even complete sentences to explain some concepts. For example, the brief English message "TSV file:" may have to be translated in a language as literally: " Please type a name here which denotes a collection of computer data that is comprised of a sequentially organised series of typewritten lines which themselves are organised as a series of informational fields each, where said fields of information are fenced, and the fences between them are single signs of the kind that slips a typewriter carriage forward to the next predefined position each. Here we go: _____ (thank you) " This is, admittedly, an extreme example, but you get the trait. Imagine this sentence in a column in a form where each word occupies a line of its own, and the input field is vertically centered in the next column. :-(

Avoid using very close, similar, or identical words to denote different things, or concepts
For example, pages may have older revisions (of a specific date, time, and edit), comprising past versions of said page. The words revision, and version can be used interchangeably. A problem arises, when versioned pages are revised, and the revision, i.e. the process of revising them, is being mentioned, too. This may not pose a serious problem when the two synonyms of "revision" have different translations. Do not rely on that, however. It is better to avoid the use of "revision" aka "version" altogether, then, so as to avoid it being misinterpreted.

Basic words may have unforeseen connotations, or not exist at all
There are some words that are hard to translate because of their very specific use in MediaWiki. Some may not be translated at all. For example, there is no word "user" relating to "someone who uses something" in several languages. Similarly, in Kölsch the English words "namespace" and "apartment" translate the same word. Also, in Kölsch, they say "corroborator and participant" in one word since any reference to "use" would too strongly imply "abuse". The term "wiki farm" is translated as "stable full of wikis", since a single-crop farm would be a contradiction in terms in the language, and not understood, etc..

Use, , and tags where needed
When talking about technical parameters, values, or keyboard inputs, mark them appropriately as such using the HTML tags, , or. Thus they are typographically set off form the normal text. That clarifies their sense to readers, avoiding confusion, errors and mis-representations. Ensure that your message handler allows such markup.

Symbols, colons, brackets, etc. are parts of messages
Many symbols are localisable, too. Some scripts have other kinds of brackets than the Latin script has. A colon may not be appropriate after a label or input prompt in some languages. Having those symbols included in messages helps to make better and less Anglo-centric translations, and also reduces code clutter.

For example, there are different quotation mark conventions used in «Norwegian», ”Swedish”, »Danish«, „German“, and 「Japanese」.

If you need to wrap some text in localized parentheses, brackets, or quotation marks, you can use the   or    or    messages like so:

Do not expect symbols and punctuation to survive translation
Languages written from right to left (as opposed to English) usually swap arrow symbols being presented with "next" and "previous" links, and their placement relative to a message text may, or may not, be inverted as well. Ellipsis may be translated to "etc.", or to words. Question marks, exclamation marks, colons will be placed other than at the end of a sentence, not at all, or twice. As a consequence, always include all of those in the text of your messages, and never try to insert them programmatically.

Use full stops
Do terminate normal sentences with full stops. This is often the only indicator for a translator to know that they are not headlines or list items, which may need to be translated differently.

Wikitext of links
Link anchors can be put into messages in several technical ways:

…  …, …   …, or
 * 1) via wikitext:
 * 1) via wikitext:
 * 1) the anchor text is a message in the MediaWiki namespace. Avoid it!

The latter is often hard or impossible to handle for translators, avoid fragmented or 'patchwork' messages here, too. Make sure that " " does not contain spaces.

Use meaningful link anchors
Take care with your wording. Link anchors play an important role in search engine assessment of pages – both the words linked, and the target anchor. Make sure that the anchor describes the target page well. Always avoid commonplace and generic words. For example, "Click here" is an absolute no-go, since target pages are almost never about "click here". Do not put that in sentences around links either, because "here" was not the place to click. Instead, Use precise action words telling what a user will get to when following the link, such as "You can upload a file if you wish."

See also Help users predict where they are going, and mystery meat navigation, and The main reasons why we shouldn't use click here as link text.

Avoid jargon and slang
Avoid developer and power user jargon in messages. Try to use a simple language whenever possible. Avoid saying "success", "successfully", "fail", "error occurred while", etc., when you want to notify the user that something happened or didn't happen. This comes from developers' perspective of seeing everything as true or false, but users usually just want to know what actually happened or didn't, and what they should do about it (if at all). So:


 * "The file was successfully renamed" -> "The file was renamed"
 * "File renaming failed" -> "There is a file with this name already. Please choose a different name."

Be aware of whitespace and line breaks
MediaWiki's localised messages usually get edited within the wiki, either by wiki operations on live wikis, or by the translators on translatewiki.net. You should be aware of how whitespace, especially at the beginning or end of your message, will affect editors:


 * Spaces and line breaks (newlines) at the end of the message are always automatically removed by the wikitext editor. Your message must not end with a space or line break, as it will be lost when it's edited on the wiki.
 * Spaces and line breaks at the beginning are not automatically removed, but they are likely to be removed by accident during editing, and should be avoided.

Start and end your message with active text; if you need a newline or paragraph break around it, your surrounding code should deal with adding it to the returned text.

There are some messages which require a space at the end, such as 'word-separator' (which consists of just a space character in most languages). To support such use cases, the following HTML entities are allowed in messages and transformed to the actual characters, even if the message otherwise doesn't allow wikitext or HTML formatting:


 * – space
 * or  – non-breaking space
 * – soft hyphen

On a related note, any other syntax elements affected by pre-save transforms also must not be used in messages, as they will be transformed when the message is edited on the wiki.

Use standard capitalisation
Capitalisation gives hints to translators as to what they are translating, such as single words, list or menu items, phrases, or full sentences. Correct (standard) capitalisation may also play a role in search engines' assessment of your pages. MediaWiki uses sentence case (The quick brown fox jumps over the lazy dog) in interface messages.

Always remember that many writing systems don't have capital letters at all, and some of those that do have them, use them differently from English. Therefore, don't use ALL-CAPS for emphasis. Use CSS, or HTML or  per below:

Emphasis
In normal text, emphasis like boldface or italics and similar should be part of message texts. Local conventions on emphasis often vary, especially some Asian scripts have their own. Translators must be able to adjust emphasis to their target languages and areas. Try to use "" and "" in your user interface to allow mark-up on a per language or per script basis.

In modern screen layouts of English and European styles, emphasis becomes less used. Do convey it in your still, as it may give valuable hints as to how to translate. Emphasis can and should be used in other cultural contexts as appropriate, provided that translators know about it. 

请看

 * FAQ
 * FAQ
 * FAQ
 * FAQ
 * FAQ
 * FAQ
 * FAQ