該模塊提供了一種簡便的創建大段帶翻譯歌詞的方法。
該模板便會為您按照行一一對應的關係生成原文和譯文的對照。在高解析度情況下,這會是左右對齊的對照。在低解析度,原文譯文會各佔一行。該模塊對應的模板是{{LyricsKai}}。
若要在歌詞中使用多種顏色來分辨不同的演唱者,請參考使用{{LyricsKai/colors}}。注意:不建議在只有單個演唱者的歌曲條目中使用該模板。
若歌詞有多個翻譯版本歌詞,請參考使用{{LyricsKai/multi}}。
若需要全文添加羅馬字,請參考使用{{LyricsKai/Roma}}。
若要實現當指針懸停於歌詞上時改變歌詞背景顏色,請參考使用{{LyricsKai/hover}}。
該模板目前有以下參數
此外,還有與著作權標記相關的兩個參數:
※注意:如果你嘗試更改樣式(lstyle、rstyle、containerstyle),請注意使用半角冒號以及分號。
{{LyricsKai |lstyle=color:左邊字體顏色; |rstyle=color:右邊字體顏色; |original= 原文 |translated= 譯文 }}
上面一個例子示範了更改字體顏色,這個例子用於更改整個歌詞部分的背景色。
{{LyricsKai |containerstyle=background:背景顏色; |original= 原文 |translated= 譯文 }}
local p = {} local getArgs = require('Module:Arguments').getArgs local lang = require('Module:Lang') function p._lyrics(args, hookTrigger, customArgs) local original = args.original or '' local translated = args.translated or '' if hookTrigger then original, translated = hookTrigger('preSplit', original, translated, customArgs) end --mw.text.split的效率太低啦,我願稱之為shit local orig = {} local iter = mw.ustring.gmatch(original..'\n', '([^\n]*)\n') for val in iter do table.insert(orig, val) end local tran = {} local iter = mw.ustring.gmatch(translated..'\n', '([^\n]*)\n') for val in iter do table.insert(tran, val) end local llang = args.llang or 'ja' local rlang = args.rlang or 'zh' local lstyle = args.lstyle or '' local rstyle = args.rstyle or '' local html = mw.html.create('div') :addClass('Lyrics') :css('width', args.width) :cssText(args.containerstyle or '') if ((args['hasRuby'] or '') ~= '') or (not args.colorsMode and (args.original or ''):find('<ruby')) then html:addClass('Lyrics-has-ruby') else html:addClass('Lyrics-no-ruby') end local hastran = true if #tran == 1 and tran[1] == '' then hastran = false else html:addClass('Lyrics-has-translate') end if hookTrigger then hookTrigger('preParse', orig, hastran and tran or false, customArgs) end local lines = {} local len = math.max(#orig, #tran) for i=1, len do local line = mw.html.create('div'):addClass('Lyrics-line') :tag('div') :addClass('Lyrics-original') :cssText(lstyle) :node(lang.wrap(orig[i] or '', llang)) :done() if hastran then line:tag('div') :addClass('Lyrics-translated') :cssText(rstyle) :node(lang.wrap(tran[i] or '', rlang)) :done() end table.insert(lines, tostring(line)) end if hookTrigger then hookTrigger('postParse', lines, customArgs) end html:node(table.concat(lines)) -- Clear the floating html:tag('div'):cssText('clear:both') html = tostring(html) if hookTrigger then html = hookTrigger('preOutput', html, customArgs) end local copyright = '' local frame = mw.getCurrentFrame() local LDC = frame:callParserFunction{ name = '#var', args = { 'LDC', '0' } } if LDC ~= '1' and args.override ~= '1' then copyright = '<small>本段落中所使用的歌詞,其著作權屬於' .. (args.author or '原著作權人') .. ',僅以介紹為目的引用。</small>' elseif LDC == '1' and args.override == '1' then copyright = frame:expandTemplate{ title = 'ac', args = { '不必要使用override參數的音樂條目' } } end local css = frame:extensionTag{ name = 'templatestyles', args = { src = 'Template:LyricsKai/styles.css' } } return copyright .. css .. html end function p.lyrics(frame) local args = getArgs(frame, {wrappers='Template:LyricsKai'}) return p._lyrics(args) end return p