模块:Lyrics
该模块提供了一种简便的创建大段带翻译歌词的方法。
该模块便会为您按照行一一对应的关系生成原文和译文的对照。在高分辨率情况下,这会是左右对齐的对照。在低分辨率,原文译文会各占一行。
参数
该模块目前有6个参数
- original: 歌词原文。
- translated: 歌词译文。歌词原文和译文的行数需要匹配。
- llang: 原文语言。不指定时默认为日语。语言格式与{{lang}}相同。
- rlang: 译文语言。不指定是默认为中文。语言格式与{{lang}}相同。
- lstyle: 原文部分的样式。颜色等样式可以在这里指定。
- rstyle: 译文部分的样式。颜色等样式可以在这里指定。
使用方法
基础使用
使用该模块十分简单。该模块只包含一个函数lyrics
,您只需在页面中写上
{{#invoke:Lyrics|lyrics|original= 原文 |translated= 译文 }}
通过模板使用
除了直接使用该模块,你也可以用{{LyricsKai}}来使用该模块。
{{LyricsKai|lstyle=color:左边颜色;|rstyle=color:右边颜色;|original= 原文 |translated= 译文 }}
使用方法完全一致,你可以把{{LyricsKai}}当作{{#invoke:Lyrics|lyrics}}
的缩写。
例子
local p = {} local getArgs = require('Module:Arguments').getArgs local lang = require('Module:Lang') function p._lyrics(args) local orig = mw.text.split(args.original or '', '\n') local tran = mw.text.split(args.translated or '', '\n') local llang = args.llang or 'ja' local rlang = args.rlang or 'zh' local lstyle = 'width:49.85%;min-width:360px;display:inline-block;white-space:pre-wrap;' .. (args.lstyle or '') local rstyle = 'width:49.85%;min-width:360px;display:inline-block;white-space:pre-wrap;' .. (args.rstyle or '') if args.original:match('<ruby') then lstyle = 'line-height:2.1;' .. lstyle rstyle = 'line-height:2.1;' .. rstyle else lstyle = 'vertical-align:top;' .. lstyle rstyle = 'vertical-align:top;' .. rstyle end local html = mw.html.create() for i, v in pairs(orig) do html: tag('div') :tag('div') :cssText(lstyle) :tag('div') :css('max-width', '100vw') :node(lang.wrap(v, llang)) :done() :done() :tag('div') :cssText(rstyle) :tag('div') :css('max-width', '100vw') :node(lang.wrap(tran[i], rlang)) :done() :done() end -- Clear the floating html:tag('div'):cssText('clear:both') return tostring(html) end function p.lyrics(frame) local args = getArgs(frame, {wrappers='Template:LyricsKai'}) return p._lyrics(args) end return p