模块: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}}的缩写。

例子

U&I 是一个现成的使用{{LyricsKai}}的例子。


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