Module:User Wikimedia project translatable
Module documentation
[create]
-- This is an experimental fork of Module:User Wikimedia project
-- to test the Translatable modules feature.
-- Please don't use unless you are very very sure that you know
-- what you are doing.
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local langSwitch = require('Module:Fallback')._langSwitch
local userbox = require('Module:Userbox').userbox
function is_wikimania_number_prefix(prefix)
local function is_prefix(wm)
return mw.ustring.sub(prefix, 1, mw.ustring.len(wm)) and mw.ustring.len(prefix) > mw.ustring.len(wm) and tonumber(mw.ustring.sub(prefix, mw.ustring.len(wm) + 1, -1))
end
return is_prefix('wm') or is_prefix('wikimania')
end
function project_name(prefix)
if is_wikimania_number_prefix(prefix) then
return 'Wikimania ' .. mw.ustring.sub(prefix, -4, -1)
end
local names = {
['b'] = 'Wikibooks',
['wikibooks'] = 'Wikibooks',
['c'] = 'Wikimedia Commons',
['commons'] = 'Wikimedia Commons',
['d'] = 'Wikidata',
['wikidata'] = 'Wikidata',
['f'] = 'Wikifunctions',
['wikifunctions'] = 'Wikifunctions',
['incubator'] = 'Incubator',
['m'] = 'Wikimedia MetaWiki',
['metawiki'] = 'Wikimedia MetaWiki',
['metawikimedia'] = 'Wikimedia MetaWiki',
['metawikipedia'] = 'Wikimedia MetaWiki',
['mw'] = 'MediaWiki',
['n'] = 'Wikinews',
['wikinews'] = 'Wikinews',
['q'] = 'Wikiquote',
['wikiquote'] = 'Wikiquote',
['s'] = 'Wikisource',
['wikisource'] = 'Wikisource',
['species'] = 'Wikispecies',
['wikispecies'] = 'Wikispecies',
['v'] = 'Wikiversity',
['wikiversity'] = 'Wikiversity',
['voy'] = 'Wikivoyage',
['wikivoyage'] = 'Wikivoyage',
['w'] = 'Wikipedia',
['wikipedia'] = 'Wikipedia',
['wikt'] = 'Wiktionary',
['wiktionary'] = 'Wiktionary',
['outreach'] = 'Wikimedia Outreach',
['wikitech'] = 'Wikitech',
['wm'] = 'Wikimania',
['wikimania'] = 'Wikimania'
}
return names[prefix] or prefix
end
function project_has_lang(prefix)
local no_lang_projects = {
['Wikimedia Commons'] = true,
['Incubator'] = true,
['Wikimedia MetaWiki'] = true,
['MediaWiki'] = true,
['Wikispecies'] = true,
['Wikimedia Outreach'] = true,
['Wikitech'] = true,
['Wikimania'] = true,
['Wikidata'] = true,
['Wikifunctions'] = true
}
return no_lang_projects[project_name(prefix)] ~= true and not is_wikimania_number_prefix(prefix)
end
function localized_project_name(prefix, lang_code, display_lang)
local name = project_name(prefix)
local project_names = {
['ang'] = {
['Wikipedia'] = 'Wicipædie'
},
['eo'] = {
['Wikipedia'] = 'Vikipedio'
},
['es'] = {
['Wikibooks'] = 'Wikilibros',
['Incubator'] = 'la Incubadora de Wikimedia',
['Wikinews'] = 'Wikinoticias',
['Wikispecies'] = 'Wikiespecies',
['Wikiversity'] = 'la Wikiversidad',
['Wikivoyage'] = 'Wikiviajes',
['Wiktionary'] = 'Wikcionario',
['Wikimania'] = 'Wikimanía'
},
['fa'] = {
['Wikisource'] = 'ویکینبشته '
},
['fi'] = {
['Wikidata'] = 'Wikidatassa',
['Wikiquote'] = 'Wikisitaateissa',
['Wikipedia'] = 'Wikipediassa'
},
['fr'] = {
['Wiktionary'] = 'Wiktionnaire',
['Wikipedia'] = 'Wikipédia'
},
['he'] = {
['Wikidata'] = 'ראשי',
['Wikimedia Commons'] = 'עמוד ראשי',
['Wikimedia MetaWiki'] = 'במטא-ויקי',
['Wiktionary'] = 'וויקימילון',
['Wikisource'] = 'וויקיטקסט'
},
['hr'] = {
['Wikipedia'] = 'Wikipediji'
},
['hu'] = {
['Wikipedia'] = 'Wikipédián'
},
['ja'] = {
['Wikidata'] = 'ウィキデータ',
['Wikimedia Commons'] = 'ウィキメディア・コモンズ',
['Wikimedia MetaWiki'] = 'メタウィキ',
['Wikivoyage'] = 'ウィキボヤージュ',
['Wikiversity'] = 'ウィキバーシティ',
['Wikispecies'] = 'ウィキスピーシーズ',
['Wikiquote'] = 'ウィキクオート',
['Wiktionary'] = 'ウィクショナリー',
['Wikisource'] = 'ウィキソース',
['Wikipedia'] = 'ウィキペディア'
},
['ko'] = {
['Wikimedia Commons'] = '위키미디어 공용',
['Wikimedia MetaWiki'] = '위키미디어 메타',
['Wikiversity'] = '위키배움터'
},
['pa'] = {
['Wikimedia Commons'] = 'ਵਿਕੀਮੀਡੀਆ ਕਾਮਨਜ਼',
['Wikimedia MetaWiki'] = 'ਵਿਕੀਮੀਡੀਆ ਮੈਟਾ-ਵਿਕੀ',
['Wikidata'] = 'ਵਿਕੀਡਾਟਾ',
['Wikisource'] = 'ਵਿਕੀਸਰੋਤ',
['Wikipedia'] = 'ਵਿਕੀਪੀਡੀਆ'
},
['ta'] = {
['Wikipedia'] = 'விக்கிப்பீடியாது',
},
['tr'] = {
['Wikidata'] = 'Vikiveri',
['Wikimedia MetaWiki'] = 'Wikimedia Meta Viki',
['Wikispecies'] = 'Vikitür',
['Wiktionary'] = 'Vikisözlük'
},
['uk'] = {
['Wikipedia'] = 'Вікіпедії'
},
['vec'] = {
['Wikipedia'] = 'Wikipèdia'
}
}
local localized_name = name
if project_names[display_lang] then
if project_names[display_lang][name] then
localized_name = project_names[display_lang][name]
elseif mw.ustring.sub(name, 1, 9) == 'Wikimania' and project_names[display_lang]['Wikimania'] then
localized_name = string.gsub(name, 'Wikimania', project_names[display_lang]['Wikimania'])
end
end
if project_has_lang(prefix) and lang_code then
local language_adjectives = {
['ang'] = {
['ang'] = 'Engliscan'
},
['en'] = {
['ang'] = 'Old English',
['ar'] = 'Arabic',
['az'] = 'Azerbaijani',
['bn'] = 'Bengali',
['br'] = 'Breton',
['cs'] = 'Czech',
['da'] = 'Danish',
['de'] = 'German',
['en'] = 'English',
['eo'] = 'Esperanto',
['es'] = 'Spanish',
['fa'] = 'Persian',
['fi'] = 'Finnish',
['fr'] = 'French',
['gl'] = 'Galician',
['he'] = 'Hebrew',
['hi'] = 'Hindi',
['hr'] = 'Croatian',
['hu'] = 'Hungarian',
['hy'] = 'Armenian',
['id'] = 'Indonesian',
['it'] = 'Italian',
['ja'] = 'Japanese',
['ko'] = 'Korean',
['ml'] = 'Malayalam',
['nl'] = 'Dutch',
['no'] = 'Norwegian (Bokmål)',
['pa'] = 'Punjabi',
['pl'] = 'Polish',
['ro'] = 'Romanian',
['ru'] = 'Russian',
['simple'] = 'Simple English',
['sk'] = 'Slovak',
['sq'] = 'Albanian',
['sv'] = 'Swedish',
['ta'] = 'Tamil',
['tr'] = 'Turkish',
['uk'] = 'Ukrainian',
['vec'] = 'Venetian',
['vi'] = 'Vietnamese',
['zh'] = 'Chinese'
},
['eo'] = {
['fr'] = 'Franca'
},
['es'] = {
['ang'] = {['m'] = 'anglosajón', ['f'] = 'anglosajona'},
['ar'] = {['m'] = 'árabe', ['f'] = 'árabe'},
['az'] = {['m'] = 'azerí', ['f'] = 'azerí'},
['bn'] = {['m'] = 'bengalí', ['f'] = 'bengalí'},
['br'] = {['m'] = 'bretón', ['f'] = 'bretona'},
['cs'] = {['m'] = 'checo', ['f'] = 'checa'},
['da'] = {['m'] = 'danés', ['f'] = 'danesa'},
['de'] = {['m'] = 'alemán', ['f'] = 'alemana'},
['en'] = {['m'] = 'inglés', ['f'] = 'inglesa'},
['eo'] = {['m'] = 'en esperanto', ['f'] = 'en esperanto'},
['es'] = {['m'] = 'español', ['f'] = 'española'},
['fa'] = {['m'] = 'persa', ['f'] = 'persa'},
['fi'] = {['m'] = 'finés', ['f'] = 'finesa'},
['fr'] = {['m'] = 'francés', ['f'] = 'francesa'},
['gl'] = {['m'] = 'gallego', ['f'] = 'gallega'},
['he'] = {['m'] = 'hebreo', ['f'] = 'hebrea'},
['hi'] = {['m'] = 'hindi', ['f'] = 'hindi'},
['hr'] = {['m'] = 'croata', ['f'] = 'croata'},
['hu'] = {['m'] = 'húngaro', ['f'] = 'húngara'},
['hy'] = {['m'] = 'armenio', ['f'] = 'armenia'},
['id'] = {['m'] = 'indonesio', ['f'] = 'indonesia'},
['it'] = {['m'] = 'italiano', ['f'] = 'italiana'},
['ja'] = {['m'] = 'japonés', ['f'] = 'japonesa'},
['ko'] = {['m'] = 'coreano', ['f'] = 'coreana'},
['ml'] = {['m'] = 'malayalam', ['f'] = 'malayalam'},
['nl'] = {['m'] = 'holandés', ['f'] = 'holandesa'},
['no'] = {['m'] = 'en noruego (bokmål)', ['f'] = 'en noruego (bokmål)'},
['pa'] = {['m'] = 'punjabi', ['f'] = 'punjabi'},
['pl'] = {['m'] = 'polaco', ['f'] = 'polaca'},
['ro'] = {['m'] = 'rumano', ['f'] = 'rumana'},
['ru'] = {['m'] = 'ruso', ['f'] = 'rusa'},
['simple'] = {['m'] = 'en inglés simple', ['f'] = 'en inglés simple'},
['sk'] = {['m'] = 'eslovaco', ['f'] = 'eslovaca'},
['sq'] = {['m'] = 'albanés', ['f'] = 'albanesa'},
['sv'] = {['m'] = 'sueco', ['f'] = 'sueca'},
['ta'] = {['m'] = 'támil', ['f'] = 'támil'},
['tr'] = {['m'] = 'turco', ['f'] = 'turca'},
['uk'] = {['m'] = 'ucraniano', ['f'] = 'ucraniana'},
['vec'] = {['m'] = 'véneto', ['f'] = 'véneta'},
['vi'] = {['m'] = 'vietnamita', ['f'] = 'vietnamita'},
['zh'] = {['m'] = 'chino', ['f'] = 'china'}
},
['fi'] = {
['fi'] = 'suomenkielisessä',
['fr'] = 'ranskankielisessä'
},
['fr'] = {
['fr'] = 'Français'
},
['ja'] = {
['ang'] = '古英語版',
['ar'] = 'アラビア語版',
['az'] = 'アゼルバイジャン語版',
['bn'] = 'ベンガル語版',
['br'] = 'ブルトン語版',
['cs'] = 'チェコ語版',
['da'] = 'デンマーク語版',
['de'] = 'ドイツ語版',
['en'] = '英語版',
['eo'] = 'エスペラント語版',
['es'] = 'スペイン語版',
['fa'] = 'ペルシア語版',
['fi'] = 'フィンランド語版',
['fr'] = 'フランス語版',
['gl'] = 'ガリシア語版',
['he'] = 'ヘブライ語版',
['hi'] = 'ヒンディー語版',
['hr'] = 'クロアチア語版',
['hu'] = 'ハンガリー語版',
['hy'] = 'アルメニア語版',
['id'] = 'インドネシア語版',
['it'] = 'イタリア語版',
['ja'] = '日本語版',
['ko'] = '韓国語版',
['ml'] = 'マラヤーラム語版',
['nl'] = 'オランダ語版',
['no'] = 'ノルウェー語版 (Bokmål)',
['pa'] = 'パンジャブ語版',
['pl'] = 'ポーランド語版',
['ro'] = 'ルーマニア語版',
['ru'] = 'ロシア語版',
['simple'] = 'シンプル英語版',
['sk'] = 'スロバキア語版',
['sq'] = 'アルバニア語版',
['sv'] = 'スウェーデン語版',
['ta'] = 'タミル語版',
['tr'] = 'トルコ語版',
['uk'] = 'ウクライナ語版',
['vec'] = 'ヴェネト語版',
['vi'] = 'ベトナム語版',
['zh'] = '中国語版'
},
['pa'] = {
['pa'] = 'ਪੰਜਾਬੀ'
},
['ta'] = {
['ta'] = 'தமிழ்'
}
}
if language_adjectives[display_lang] and language_adjectives[display_lang][lang_code] then
if display_lang == 'en' then
localized_name = 'the ' .. language_adjectives[display_lang][lang_code] .. " " .. localized_name
elseif display_lang == 'ang' then
localized_name = 'þæm ' .. language_adjectives[display_lang][lang_code] .. " " .. localized_name
elseif display_lang == 'eo' then
localized_name = 'la ' .. language_adjectives[display_lang][lang_code] .. " " .. localized_name
elseif display_lang == 'es' then
if localized_name == 'la Incubadora de Wikimedia' or localized_name == 'la Wikiversidad' then
localized_name = localized_name .. ' ' .. language_adjectives[display_lang][lang_code]['f']
elseif localized_name == 'Wikinoticias' or localized_name == 'Wikiespecies' or localized_name == 'Wikimanía' then
localized_name = 'la ' .. localized_name .. ' ' .. language_adjectives[display_lang][lang_code]['f']
else
localized_name = 'el ' .. localized_name .. ' ' .. language_adjectives[display_lang][lang_code]['m']
end
elseif display_lang == 'fi' or display_lang == 'ta' then
localized_name = language_adjectives[display_lang][lang_code] .. " " .. localized_name
elseif display_lang == 'fr' then
localized_name = 'le ' .. localized_name .. ' ' .. language_adjectives[display_lang][lang_code]
end
else
localized_name = lang_code .. '-' .. localized_name
end
end
return localized_name
end
function project_link_prefix(prefix, lang_code)
if project_name(prefix) == 'Wikimedia MetaWiki' then
return 'm:'
else
local link_prefix = prefix
if project_has_lang(prefix) and lang_code then
link_prefix = link_prefix .. ':' .. lang_code
end
link_prefix = link_prefix .. ':'
return link_prefix
end
end
function project_userpage_link(prefix, lang_code, username)
return project_link_prefix(prefix, lang_code) .. 'User:' .. username
end
function project_project_link(prefix, lang_code)
local link_target = project_link_prefix(prefix, lang_code) .. 'Special:MyLanguage/'
if prefix == 'wikidata' then
return link_target .. 'Wikidata:Main_Page'
else
return link_target .. 'Main_Page'
end
end
function project_text(prefix, lang_code, username, gender, display_lang, frame)
local tmb = require 'mw.ext.translate.messageBundle'
local this_user_key = 'this-user-has'
local mb_page_title = 'User:Amire80/User Wikimedia project mb'
local lang1 = lang_code
local mb_lang1 = tmb.new( mb_page_title, lang1 )
local this_user_translation_lang1 = frame:preprocess(mb_lang1:t( this_user_key ):params(
username,
project_userpage_link(prefix, lang_code, username),
project_project_link(prefix, lang_code),
localized_project_name(prefix, lang_code, display_lang)
):plain())
if lang1 == 'simple' or not lang_code then
lang1 = 'en'
end
local lang2 = display_lang or mw.getCurrentFrame():preprocess("{{Int:Lang}}")
if lang2 == 'simple' then
lang2 = 'en'
end
local mb_lang2 = tmb.new( mb_page_title, lang2 )
local this_user_translation_lang2 = frame:preprocess(mb_lang2:t( this_user_key ):params(
username,
project_userpage_link(prefix, lang_code, username),
project_project_link(prefix, lang_code),
localized_project_name(prefix, lang_code, display_lang)
):plain())
local lang2_object = mw.language.new( lang2 )
local lang2_dir = lang2_object:getDir()
if lang1 == lang2 or not project_has_lang(prefix) then
return '<p lang="' .. lang2 .. '" dir="' .. lang2_dir .. '">' .. this_user_translation_lang2 .. '</p>'
else
local lang1_object = mw.language.new( lang1 )
local lang1_dir = lang1_object:getDir()
return '<p lang="' .. lang1 .. '" dir="' .. lang1_dir .. '">' .. this_user_translation_lang1 .. '</p>\n----\n<p lang="' .. lang2 .. '" dir="' .. lang2_dir .. '">' .. this_user_translation_lang2 .. '</p>'
end
end
function project_image(prefix)
local filename
local name = project_name(prefix)
if name == 'Wikimedia MetaWiki' then
filename = 'Wikimedia Community Logo.svg'
elseif name == 'Wikimedia Commons' then
filename = 'Commons-logo.svg'
elseif name == 'Wikimedia Outreach' then
filename = 'Wikimedia-logo.svg'
elseif name == 'Wikitech' then
filename = 'Wikitech-2021-blue-icon.svg'
elseif name == 'MediaWiki' then
filename = 'MediaWiki-2020-icon.svg'
elseif name == 'Wikiversity' then
filename = 'Wikiversity logo 2017.svg'
elseif name == 'Wikimania' or is_wikimania_number_prefix(prefix) then
filename = 'Wikimania.svg'
else
filename = mw.title.makeTitle('File', name .. '-logo.svg').text
end
return '[[File:' .. filename .. '|40px]]'
end
function p._user_wikimedia_project(args, frame)
local prefix = string.lower(args[1] or args.prefix or "metawiki")
local lang_code = args[2] or args.lang_code or args['lang code'] or 'en'
local username = args[3] or args.username or mw.title.getCurrentTitle().rootText
local gender = args.gender or username
local display_lang = args.display_lang or args['display lang']
local userbox_args = {
['border-c'] = '#bbbbbb',
['id'] = args.image or project_image(prefix),
['id-c'] = '#ffffff',
['info'] = project_text(prefix, lang_code, username, gender, display_lang, frame),
['info-c'] = '#f6f6f6',
['usercategory'] = args.usercategory,
['usercategory2'] = args.usercategory2,
['usercategory3'] = args.usercategory3,
['nocat'] = args.nocat
}
return mw.getCurrentFrame():expandTemplate {
['title'] = 'Userbox sister project',
['args'] = userbox_args
}
--return userbox(userbox_args)
end
function p.user_wikimedia_project(frame)
return p._user_wikimedia_project(getArgs(frame), frame)
end
return p