手册:Interwiki

This page is a translated version of the page Manual:Interwiki and the translation is 95% complete.
Outdated translations are marked like this.

跨wiki链接(英语:Interwiki links)是指向其他项目的页面的链接,使用前缀内部链接样式。

跨wiki链接可以链接到(例如)维基百科、维基教科书、维基新闻等的页面或你需要的不同语言的wiki项目。 (See 手册:Wiki农场 .)

形如[[Wikipedia:Main Page]]的链接将这样出现:Wikipedia:Main Page,并将您重定向至维基百科的首页。

Interwiki链接到其他專案

資料表與 API 查詢

跨 wiki 链接依靠在 MediaWiki 資料库的 interwiki 表中。 您可以使用 API 查询,以 meta 項目為 siteinfo ,屬性為“interwikimap”,检索出跨 wiki 列表,换句话说,通过发出如下API请求 api.php?action=query&meta=siteinfo&siprop=interwikimap

預設

預設情况下,有幾個维基媒体專案(以及其他项目)已經準備好了进行跨wiki链接,因此您可以在不编辑資料库的情况下使用它们。

以下是一些預設情况下可用的跨 wiki 前缀的示例(维基百科在 1.10 版本以後也可以用):

前缀 目标网址 用例
commons https://commons.wikimedia.org/wiki/ [[commons:MediaWiki]]
mediazilla http://bugzilla.wikimedia.org/ [[mediazilla:1209]]
metawikimedia (before version 1.23: metawikipedia) https://meta.wikimedia.org/wiki/ [[metawikimedia:Main Page]]

省略部分列表,完整列表可在 maintenance/interwiki.list 中找到

請參看 m:Help:Interwiki linking 以了解跨 wiki 連結的完整信息。

在某些安装中,这些都没预安装。 这种情况下请尝试[[metawikipedia:Main Page]]

在跨 wiki 链接中添加新网站

  • 跨 Wiki 链接在資料库的interwiki表中设定。
  • 要修改这些,您需要依下面的方式编辑資料库。

建议使用“Interwiki”扩展,这样可以简化过程。

由于 Wikipedia 在1.10版本之前預設為未设置,您可能希望添加它(以及您想要的其他專案)。

下述的示例展示了如何设置w:为到英文维基百科的链接。

請在表中插入一行:

('prefix', 'URL format string', 1, 0)

interwiki表中。

单筆

高级用户可以使用如下命令:

  • MySQL 与 PostgreSQL
MediaWiki版本:
1.10 – 1.16
INSERT INTO interwiki (iw_prefix, iw_url, iw_local, iw_trans) VALUES ('w', 'https://en.wikipedia.org/wiki/$1', 1, 0);

较新版本的 MediaWiki 需要一些额外的欄位,如:iw_wikiid

匯出、添加及再匯入

另外,您可以使用下面多个步骤,匯出 interwiki 表,添加一行,然後再次匯入:

  • 匯出資料库表 interwiki
  • 在表的最後一行之後添加(使用英文维基百科为例):
('w', 'https://en.wikipedia.org/wiki/$1', 1, 0);
在上面的代碼中,必須在命令行的末尾加上半形分號「;」。 在命令中其他行的末尾只有半形逗號「,」。
  • 匯入資料库表 interwiki

進行测试

要测试配置:

  • 前往您的网站,
  • 创建一个带有以下内容的页面:
    [[w:Wikipedia:Village pump|]]

這應該會顯示一個連結,此連結將鏈接到 en.Wikipedia.org 上的 'Village pump' 頁面(網址 https://en.wikipedia.org/wiki/Wikipedia:Village_pump)

欄位說明

以下詳細介紹, interwiki 資料庫表的欄位:

  • iw_prefix:選用一個前綴,用於跨 wiki 鏈接,例如「wikipedia」用於鏈接到維基百科。
    前缀必须全部小写。
  • iw_url:輸入專案的 URL,例如 https://en.wikipedia.org/wiki/$1 用於維基百科。 不要漏掉 $1 ,因為它會替換為您鏈接到的頁名([[Wikipedia:Main Page]] 鏈接到 https://en.wikipedia.org/wiki/Main_Page)。
    如果 iw_url 是二進制 BLOB 欄位(SVN 版本,但也出現在版本 1.11.0,bug?)就不會作用。 您必須將其以二進制輸入。 有兩種可能的解決方案: 1.你把 url 保存在一個純文本檔案中,然後用 phpmyadmin 匯入。 2.你可以直接輸入 SQL 指令。
  • iw_local:如果欄值為 1,您的 wiki 會以 iw_prefix:title 的形式重定向到外部鏈接,而不只是能鏈接到本 wiki 自身的頁面;如果您想使用 wiki 的外部重定向功能鏈接到到其他 wiki (如 w:en:fr:Wikipédia:Accueil),則需要此功能。 請參閱 m:Help:Interwiki linking#Non-local interwikis。需要在 iw_url 中指定協議。
  • iw_trans:跨 wiki 嵌入,如果您想使用來自其他 wiki 的頁面作為模板,請將欄值設置為 1。 您同時必須在 LocalSettings.php 中設 $wgEnableScaryTranscluding = true 。也須在 iw_url 中指定協議。
  • iw_api:MediaWiki API 的 URL,例如 https://en.wikipedia.org/w/api.php(可選)。
  • iw_wikiid:wiki 的資料庫名稱(如果可以訪問到本地的資料庫)。 可用於跨 wiki 嵌入。(可選的)(某些較新的版本須設定)


  维基管理员技巧: MediaWiki.org 的「手冊」名字空間中有幾個說明頁面。 要讓這些說明頁面鏈接在您的本地 wiki 上生效,請添加一個帶有 iw_prefix=manualiw_url=http://www.mediawiki.org/wiki/Manual:$1 的跨 wiki 鏈接


  维基管理员技巧: 如果要讓新的跨 wiki 設定生效,你應該在 LocalSettings.php 中設定好 $wgTranscludeCacheExpiry (跨 wiki 嵌入快取的到期時間,預設值為 3600) 或者,您也可以刷新本地 wiki 上的 transcache 表。

跨 wiki 链接到其他语言

 
其他语言的跨 wiki 链接

如果您安裝了 Wiki family ,您能夠將英文頁鏈接到德文頁(如果您也有德語的專案項目)。 您可以设置 MediaWiki ,讓侧边栏的工具選單下方,显示出这些链接。

在您的 MediaWiki 安装檔案系统中,有一个名为「languages」的子資料夹。 參看其中的 Names.php ,其中包含了已知語言及其前綴的列表。 例如,如果您想添加您的德語項目,請在 Names.php 中找出 Deutsch 並記下前綴為 de 。

如果知道了正確前綴,請通過向資料表 interwiki 添加新行來編輯您的數據庫:

  • iw_prefix:語言前綴(例如德語的 de ),列表在 Names.php
  • iw_url:您的 wiki 專案的 URL(例如 http://de.example.org/index.php/$1)
  • iw_local:同上「添加更多」
  • iw_trans:同上「添加更多」

现在,您可以将頁链接到其他语言但相同頁名的頁了。 加上 [[de:Hauptseite]] 在您的英語 Main_Page 上,將在工具箱下方創建一個鏈接「Deutsch」,該鏈接指向德語 wiki (Hauptseite) 的 Main_Page。

請注意,此鏈接「只」顯示在側邊欄的部分,而不是在文章內部。 如果要在頁內創建鏈接,則必須在前綴前添加半形冒號「:」 [[:de:Hauptseite]] 或將 $wgInterwikiMagic 設置為 false 。

從 wiki 匯出 interwiki 資料表

以下 JavaScript 代码执行 API 查询,以检索现有 Wiki 的跨维基地图,然后显示 SQL INSERT 语句以在新 wiki 上補充跨维基資料表。例如,您可以通过通过浏览器的开发人员工具注入代码,或将其放置在Special:MyPage/skinname.js 中进行预览并运行它。

function ExtractInterwikiMapTable() {
	$.getJSON(mw.config.get('wgScriptPath') + '/api.php?action=query&meta=siteinfo&siprop=interwikimap&format=json', function(data) {
		var iw_prefix, iw_url, iw_local, iw_api, re_escape = /(')/g, result = '';
		for (var i = 0, iwm = data.query.interwikimap; i < iwm.length; i++) {
			iw_prefix = "'" + iwm[i].prefix.replace(re_escape, '\\$1') + "'";
			iw_url = "'" + iwm[i].url.replace(re_escape, '\\$1') + "'";
			iw_local = (typeof iwm[i].local == 'string') ? '1' : '0';
			iw_api = "'" + (iwm[i].iw_api || '').replace(re_escape, '\\$1') + "'";
			result += 'INSERT INTO interwiki (iw_prefix, iw_url, iw_local, iw_trans, iw_api) VALUES ('+iw_prefix+', '+iw_url+', '+iw_local+', 0, '+iw_api+');\n'
		}
		$('<textarea style="width:800px;height:400px;"/>').val(result).appendTo(document.body);
	});
}

$(ExtractInterwikiMapTable);

参见