该模块提供了一种简便的创建大段带翻译歌词的方法。
该模板便会为您按照行一一对应的关系生成原文和译文的对照。在高分辨率情况下,这会是左右对齐的对照。在低分辨率,原文译文会各占一行。该模块对应的模板是{{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