Módulo:Interwiki
Purpose. This module provides a way to supply interwiki links to pages that cannot be fully served by Wikidata for a variety of reasons, such as:
- Two pages are substantially identical, but only one can be directly linked to Wikidata.
- Example: most Hebrew-script pages on this wiki, which are substantially identical to corresponding Latin-script pages.
- Pages that have exact analogues in only a few wikis, but near analogues in many wikis.
- This commonly happens in Template (Xablón), Project/Wikipedia (Vikipedya), and Help (Ayudo) name spaces.
- Page does not have its own entry in Wikidata.
- All pages are allowed to have entries in Wikidata, but in some of the cases above, it may or may not seem entirely necessary to create them.
Instructions
trocarIn case of reason 1 above
trocar- Open tabs in your browser for the following pages:
- The page having Wikidata links (example: Astronomiya)
- The substantially identical page without its own Wikidata links (example: אסטרונומייה)
- The Wikidata item of the first page (example: d:Q333)
- The Wikidata item of the second page (example: d:Q20819872)
- In the Wikidata item of the second page, add the following to "Statements": "permanent duplicated item" with the value of the Wikidata item of the first page. (Note: "permanent duplicated item" is property d:Property:P2959.)
- Ideally, also add "instance of (P31)" "Wikimedia permanent duplicated page (d:Q21286738)" to that Wikidata item.
- Edit the second page on this Wiki with the following code, at the bottom, just before categories. (If the page is a template, be sure this code is included within the <noinclude></noinclude> tags.)
{{#invoke:Interwiki|interwiki}}
- Ideally, in the Wikidata item of the first page, add "permanent duplicated item" with the value of the Wikidata item of the second page.
- Save all changes.
The second page should now include all the interwiki links of the first page.
If you have any questions, please contact User:StevenJ81, who will be glad to help.
In case of reason 2 above
trocar- Open tabs in your browser for the following pages:
- The page having just a few Wikidata links (example: Xablón:Interwiki paez)
- The near-analogue page with many Wikidata links (example: Xablón:InterWiki)
- The Wikidata item of the near-analogue page (example: d:Q6275256)
- Edit the first page on this Wiki with the following code, at the bottom, just before categories. (If the page is a template, be sure this code is included within the <noinclude></noinclude> tags.)
{{#invoke:Interwiki|interwiki|qid=Qnnnnnnn}}
, where Qnnnnnnn is the Wikidata item number of the near-analogue page.
- Save all changes.
The first page should now include all the interwiki links of the second page, except where an exact analogue already exists in the first page's own Wikidata item.
In case of reason 3 above
trocar- Consider creating a Wikidata item for the page, and proceed as in reason 1 above.
- Otherwise, proceed as in reason 2 above.
local p = { }
thiswiki = 'ladwiki' -- the code of this wiki, HAVE TO BE CHANGED WHEN COPYING MODULE
thislanguage = 'lad' -- the code of the present language
-- language-codes with underscore '_', have to be translated to '-', to be readable for MediaWiki
-- add more codes, when new are added to the Wikimedia-family
local langcode = {
['bat_smg'] = 'bat-smg',
['be_x_old'] = 'be-x-old',
['cbk_zam'] = 'cbk-zam',
['fiu_vro'] = 'fiu-vro',
['map_bms'] = 'map-bms',
['nds_nl'] = 'nds-nl',
['roa_rup'] = 'roa-rup',
['roa_tara'] = 'roa-tara',
['zh_classical'] = 'zh-classical',
['zh_min_nan'] = 'zh-min-nan', -- a comma have to be added when new lines are added
['zh_yue'] = 'zh-yue'
}
p460 = function(entity) -- access the first valid value of P2959 and thereafter P460
if entity and entity.claims and entity.claims["P2959"] then
for i, j in pairs(entity:getBestStatements( "P2959" )) do
if j.mainsnak.snaktype == 'value' then
return 'Q' .. j.mainsnak.datavalue.value['numeric-id']
end
end
end
if entity and entity.claims and entity.claims["P460"] then
for i, j in pairs(entity:getBestStatements( "P460" )) do
if j.mainsnak.snaktype == 'value' then
return 'Q' .. j.mainsnak.datavalue.value['numeric-id']
end
end
end
return nil
end
p.interwiki = function(frame)
local s = {}
local entity = mw.wikibase.getEntity()
local qid = frame.args.qid or p460(entity) -- uses parameter qid of the module if it exists, otherwise follow P460
if frame.args.qid == '' then
qid = p460(entity)
end
if qid then
local entity2 = mw.wikibase.getEntity(qid)
if entity2 and entity2.sitelinks then
for i, j in pairs(entity2.sitelinks) do
if j.site ~= thiswiki and j.site ~= 'wikidatawiki' and j.site ~= 'commonswiki' and j.site ~= 'specieswiki' and j.site ~= 'metawiki' and j.site ~= 'mediawikiwiki' then -- excludes the own wiki and some wikiprojects that are not Wikipedia, even if their code ends with 'wiki'
if mw.ustring.sub( j.site, mw.ustring.len(j.site) - 3 ) == 'wiki' then -- excludes Wikisource, Wikiquote, Wikivoyage etc
local lang = langcode[mw.ustring.sub( j.site, 1, mw.ustring.len(j.site) - 4 )] or mw.ustring.sub( j.site, 1, mw.ustring.len(j.site) - 4 )
if (entity and not entity.sitelinks[j.site]) or not entity then -- excludes interwiki to projects that already have sitelinks in the present page
table.insert(s, '[[' .. lang .. ':' .. j.title .. ']]' ) -- put together a interwiki-link to other projects
end
end
end
end
end
end
return table.concat(s, '')
end
return p