How to become a MediaWiki hacker/zh

这篇文章用以帮助开发者学习开发MediaWik 内核和MediaWiki扩展的基础技能. 请注意，多数情况下，你并不想去随便删改MediaWiki的内核，除非你真的知道你在干什么！

入门Wikimedia开发的主要方式就是给那些有新手指导的Wikimedia项目做贡献. 另一种毋须指导的替代方案则是去debug.

如果你是一个有经验的开发者，已经熟悉了使用MediaWiki，请访问.

对于其他的方式涉足维基媒体社区，参见.

概覽
MediaWiki是维基百科，與其姐妹项目，还有世界各地数以千计的维基网站使用的软件.

MediaWiki由PHP语言编写. 它使用jQuery作为JavaScript的客户端库.

MediaWiki首先是为LAMP平台编写 ，并且在多数操作系统中是可用的. MediaWiki首要使用MySQL与MariaDB数据库服务器.

MediaWiki在开源环境下开发. 代码的调整大多在网上完成，并受到维基媒体基金会的支持，不过志愿者为之付出甚多.


 * 开发讨论可以在各种邮件列表和IRC 频道中进行. 主要开发者名单在此：wikitech-l.  主要的开发者IRC频道为#mediawiki和#wikimedia-dev.
 * 源代码是使用Git修改控制系统管理的.
 * 代码复审可以在中进行. 遵守教程来创立Git与Gerrit以提交补丁.
 * 漏洞报告与任务是在Phabricator中管理的.

本页可以帮助您成为MediaWiki的贡献者. 此非入門教學，而是引導您至不同任何您覺得必要學習的內容.

配置您的开发环境
大多数项目使用Git和Gerrit. 按照Gerrit指南来创建您的开发者帐号. 然後你可以去下載我們的代碼，做出改變，測試他們，然後提交補丁. 有两种方法配置您的开发环境：使用预配置的虚拟机安装（Vagrant或Docker），或手动配置途径.

虛擬機器與Vargant

 * 安裝Vagrant——這些步驟會安裝MediaWiki伺服器於所有符合需求的Linux虛擬機器（可用於Linux、Windows，或Mac hosts）

Docker开发环境

 * MediaWiki Docker：利用Docker运行MediaWiki（支持Linux、Windows和macOS主机）.

手动安装

 * 安裝需求 — 檢查硬體需求後，請安裝LAMP、MAMP或WAMP伺服器（Linux、Mac或Windows、plus Apache、MySQL/MariaDB與PHP）.


 * — 於Git下載最新版的原始碼.
 * — 繼續安裝與初始化設定.
 * 架設不同的偵錯模式於您的環境，以提早顯示警告與錯誤.

您不必下載維基百科數據庫資料即可開發MediaWiki功能. 實際上，大部分情況下使用一個幾乎為空的數據庫，裡面只有一些特定的測試頁，會更簡單. 然而，如果由於某種原因你仍想複製維基百科，你可以下載資料.

Communication tips and guidelines


回饋、問題與支援
Do not ask to assign a task to you. 不要在我们的社交频道使用私人电子邮件或者发布支持请求. 
 * 您应该首先自己做一些基础研究：查看代码、尝试了解它应该做什么、阅读相关文档、尝试找到您需要进行更改的可能位置以便修复bug.
 * In a Phabricator task, see the project tags in the side bar to find out which code repository a task is about.
 * 如果您有与您想要处理的特定任务无关的一般性问题，请使用IRC聊天或邮件列表等通用渠道，但不要使用特定任务. Questions how to set up your development environment or how to use Gerrit are out of scope for a task.
 * 如果您对错误本身有特定问题，请在相应的错误报告中进行评论（通常是中的任务）. “你能给我更多信息来解决这个错误吗？” 不是一个很好的问题：问题越具体，人们就越有可能快速回答.  如果您根本不知道如何修复错误，也许这个错误（还）不适合您，请考虑先找一个更简单的错误.
 * 在询问时，解释一下你已尝试过并已经发现的内容，以便其他人可以在适当的级别提供帮助. 具体例如，复制并粘贴您的命令及其输出结果（如果不是太长），而不是用您自己的话来复述.  这避免了误解.
 * Do not ask if you can work on a task.
 * 在寻求意见和建议时要耐心等待. 在IRC上, 有什么问题直接问，无须问有没有人在: 在IRC上的多数问题通常也可以被其他社区成员解决（即使有人不在）.  如果没人回答，请基于漏洞报告与问题相关的维基页面继续提问，不要放弃.

告訴別人你正在做这件事
不要问你是否可以完成任务. 在开始处理错误之前，您不需要宣布您的计划，但这将是受欢迎的. Do not ask to assign a task to you. You do not need to announce your plans before you start working on a bug, but it would be welcome. 欢迎您将自己设置为任务中的受让人：使用Phabricator中的下拉菜单“添加操作...→分配/声明”. 最近，当您即将为该任务提出补丁时，最好在评论中宣布您正在处理它. 您的宣告可以帮助其他人同时处理错误并且不会重复工作.

另请注意，如果任务已经有一个最新的Gerrit补丁链接，并且在Phabricator中关联了项目“Patch-For-Review”，请选择其他任务来处理以避免重复工作. 如果在Gerrit上已存在補丁，並且未被合併且很久沒有看到任何更新，你也可以基於Gerrit和任務中的反饋，選擇現有補丁並對其進行改進.

如果您停止处理任务，请将自己移除为任务的受让人，以便其他人知道他们可以处理该任务，并且不希望您仍在使用该任务.

通过早期沟通，您将获得社区成员的更多关注，反馈和帮助. 

PHP
MediaWiki由PHP编写,所以你需要了解并熟悉PHP才可以熟练使用MediaWiki的核心代码.


 * 學習PHP
 * PHP指导 — 在许多不同语言中都可用. 如果你不会用PHP且也不会用其他对象导向语言，PHP会这些语言中你容易学的.
 * PHP Programming at Wikibooks.
 * PHP topic at Wikiversity.


 * PHP资源:
 * PHP手册 — 在许多不同语言里可用.
 * MediaWiki社区内部的PHP编程条例.


 * 需要知道的员工:
 * MediaWiki中的脚本 提供了一个基本的包含MediaWiki对象与分级的PHP编译器.
 * 此外，MediaWiki中的脚本 是基于PsySH的 的替代，参见Manual:Shell.php.

数据库
许多特性需要对数据库做出一定程度的修改，所以你常常需要熟悉MySQL/MariaDB.


 * 学习MySQL或MariaDB
 * MySQL指导 — 来自MySQL 5.0参考手册.
 * MySQL at Wikibooks.


 * MySQL/MariaDB资源
 * MySQL参考手册 — 在许多不同语言里可用.
 * MariaDB知识库
 * MediaWiki社区内部的数据库编码条例.


 * 要知道的东西:
 * 用MySQL/MariaDB測試你的代碼.
 * MediaWiki目前使用MySQL和MariaDB作为主数据库后端. 它同样支持其他DBMS,例如PostgreSQL和SQLite.  但是，几乎所有开发人员都使用MySQL/MariaDB而不测试其他数据库，因此会定期中断.  因此，建议您在测试补丁时使用MySQL/MariaDB，除非您专门尝试改进对其他数据库的支持.  在后一种情况下，请确保您小心不要破坏MySQL/MariaDB（或编写非常低效的查询），因为MySQL/MariaDB是其他人使用的.

JavaScript和CSS
JavaScript和CSS在前端代码中无处不在. 您不必熟悉使用MediaWiki的JavaScript、jQuery和CSS，但您可能需要，具体取决于您选择的工作方式.


 * 学习JavaScript和CSS
 * JavaScript and CSS at Wikibooks.
 * 入门jQuery — jQuery指导
 * Learning JavaScript — references and sources.


 * JavaScript和CSS资源
 * MediaWiki社区中的JavaScript编码约定.
 * MediaWiki社区中的CSS编码约定.

MediaWiki
MediaWiki代码库很大，有些部分很难看，不要被它淹没. 当您第一次开始时，目标是编写功能或修复只触及一小部分代码的错误.


 * MediaWiki基礎知識和必讀內容:
 *  — MediaWiki的主要元件及它們之間如何相互配合的高級概述.
 *  — 為何要以及如何編寫安全代碼的概述.


 * MediaWiki资源:
 * — A list of important files and links to more detailed information.
 * — A list of hooks. If you're trying to find what part of the codebase does something, often a good place to start is by searching for the related hooks.
 * — An overview of general coding conventions within the MediaWiki community.


 * 代码文档 (類別參考) — Automatically generated documentation from the code and code comments.
 * — A guide to debugging MediaWiki.
 * — A tool to interact with MediaWiki objects live.

MediaWiki扩展
If you choose to work on MediaWiki extensions code, the following links provide more information.


 * MediaWiki擴充功能基礎知識：
 * 開發擴充功能 — 如何撰寫MediaWiki的擴充功能.
 * 扩展写作教程


 * MediaWiki扩展手册：
 * 最佳实践活动
 * A brief introduction to MediaWiki extension development — A video presentation about how to create a MediaWiki extension (slides).
 * Making a MediaWiki extension — Covers how to develop an extension for MediaWiki, best practices, and how to engage the MediaWiki community. 从2011年2月开始.
 * 开发者小屋中的开发者帮助

參見

 * Search for code across repositories
 * – 如果你已经把这篇文章读完了，是时候去看看开发者小屋了.
 * – 相关页面的集合