잔글편집 요약 없음 |
Minejango2 (토론 | 기여) 잔글편집 요약 없음 |
||
(사용자 4명의 중간 판 33개는 보이지 않습니다) | |||
4번째 줄: | 4번째 줄: | ||
local item = mw.loadData( '모듈:Autolink/Item' ) |
local item = mw.loadData( '모듈:Autolink/Item' ) |
||
local other = mw.loadData( '모듈:Autolink/Other' ) |
local other = mw.loadData( '모듈:Autolink/Other' ) |
||
+ | local exclusive = mw.loadData( '모듈:Autolink/Exclusive' ) |
||
− | local colors = { 'white ', 'orange ', 'magenta ', 'light blue ', 'yellow ', 'lime ', 'pink ', 'gray ', 'light gray ', 'cyan ', 'purple ', 'blue ', 'brown ', 'green ', 'red ', 'black ' } |
||
+ | local earth = mw.loadData( '모듈:Autolink/Earth' ) |
||
− | local colorc = { '하얀색 ', '주황색 ', '자홍색 ', '하늘색 ', '노란색 ', '연두색 ', '분홍색 ', '회색 ', '회백색 ', '청록색 ', '보라색 ', '파란색 ', '갈색 ', '초록색 ', '빨간색 ', '검은색 ' } |
||
+ | local dungeons = mw.loadData( '모듈:Autolink/Dungeons' ) |
||
+ | local colors = { 'white ', 'orange ', 'magenta ', 'light blue ', 'yellow ', 'lime ', 'pink ', 'gray ', 'light gray ', 'cyan ', 'purple ', 'blue ', 'brown ', 'green ', 'red ', 'black ', 'silver ' } |
||
+ | local colork = { '하얀색 ', '주황색 ', '자홍색 ', '하늘색 ', '노란색 ', '연두색 ', '분홍색 ', '회색 ', '회백색 ', '청록색 ', '보라색 ', '파란색 ', '갈색 ', '초록색 ', '빨간색 ', '검은색 ' } |
||
local function Set (list) |
local function Set (list) |
||
− | + | local set = {} |
|
− | + | for _, l in ipairs(list) do set[l] = true end |
|
− | + | return set |
|
end |
end |
||
− | local coloredItems = Set { 'firework star', 'hardened clay', 'stained clay', 'banner', 'carpet', 'concrete', 'concrete powder', 'glazed terracotta', |
+ | local coloredItems = Set { 'firework star', 'hardened clay', 'stained clay', 'banner', 'carpet', 'concrete', 'concrete powder', 'glazed terracotta', |
+ | 'terracotta', 'shield', 'shulker box', 'stained glass', 'stained glass pane', 'wool', 'bed', 'hardened glass', 'hardened stained glass', 'balloon', |
||
+ | 'glow stick', 'hardened glass pane', 'hardened glass', 'sparkler', 'candle' } |
||
+ | -- used by templates, called via #invoke |
||
function p.link( f ) |
function p.link( f ) |
||
− | + | local args = f |
|
− | if f == mw.getCurrentFrame() then |
+ | if f == mw.getCurrentFrame() then |
− | args = require( ' |
+ | args = require( '모듈:ProcessArgs' ).merge( true ) |
end |
end |
||
− | + | return p.invlink( args[1] , args[2] , args[3] ) |
|
− | arg = string.lower(arg) |
||
− | local color |
||
− | for i, c in ipairs( colors ) do |
||
− | if string.find(arg, c) == 1 then |
||
− | local item = string.sub(arg, string.len(c)+1) |
||
− | if coloredItems[item] then |
||
− | color = colorc[i] |
||
− | arg = item |
||
− | end |
||
− | end |
||
− | end |
||
− | local result = block[arg] |
||
− | if result == nil then |
||
− | result = item[arg] |
||
− | end |
||
− | if result == nil then |
||
− | --check for spawn egg |
||
− | if string.find(arg,'spawn ',0,true) == nil or string.len(arg) < 7 then |
||
− | result = other[arg] |
||
− | else |
||
− | local mob = other[string.sub(arg,7)] |
||
− | index = string.find(mob,'|',0,true) |
||
− | if index ~= nil then |
||
− | mob = string.sub(mob, index+1) |
||
− | end |
||
− | result = "스폰 알|스폰 " .. mob |
||
− | end |
||
− | end |
||
− | local index |
||
− | if result == nil then |
||
− | result = args[1] |
||
− | index = string.find(result,'|',0,true) |
||
− | else |
||
− | if color then |
||
− | result = result .. '|' .. color .. result |
||
− | end |
||
− | index = string.find(result,'|',0,true) |
||
− | if pe then |
||
− | if index then |
||
− | result = result .. '(포켓 에디션)' |
||
− | else |
||
− | result = result .. '|' .. result .. '(포켓 에디션)' |
||
− | end |
||
− | end |
||
− | end |
||
− | local mode = args[2] |
||
− | if mode and index then |
||
− | -- return the fully translated part |
||
− | if mode == 'nolink' then |
||
− | result = string.sub(result, index+1) |
||
− | end |
||
− | -- return the page link part |
||
− | if mode == 'linkonly' then |
||
− | result = string.sub(result, 1 , index-1) |
||
− | end |
||
− | end |
||
− | return result |
||
end |
end |
||
− | function p. |
+ | function p.invlink( str , mode, type ) |
+ | local arg = string.lower(string.gsub(str , "-" , " ")) |
||
− | if str == nil then |
||
+ | -- check for spawn egg |
||
− | return nil |
||
+ | if string.find(arg, ' spawn egg', -10, true) then |
||
− | end |
||
− | + | local mob = other['EntitySprite'][string.sub(arg, 0, -11)] |
|
− | + | if mob == nil then |
|
+ | error('존재하지 않는 몹 엔트리: ' .. string.sub(arg, 0, -11)) |
||
− | mode = 'default' |
||
− | + | end |
|
+ | index = string.find(mob, '|', 0, true) |
||
− | local pe |
||
+ | if index then |
||
− | if string.sub(arg, -3) == ' pe' then |
||
+ | mob = string.sub(mob, index+1) |
||
− | pe = 1 |
||
+ | end |
||
− | arg = string.sub(arg, 0, -4) |
||
+ | return p.mode('생성 알|' .. mob .. ' 생성 알', mode) |
||
− | end |
||
+ | end |
||
− | local color |
||
+ | |||
− | for i, c in ipairs( colors ) do |
||
+ | local be |
||
− | if string.find(arg, c) == 1 then |
||
+ | local lce |
||
− | local item = string.sub(arg, string.len(c)+1) |
||
+ | -- check for version postfix |
||
− | if coloredItems[item] then |
||
+ | if string.sub(arg, -3) == ' pe' or string.sub(arg, -3) == ' be' then |
||
− | color = colorc[i] |
||
+ | be = 1 |
||
− | arg = item |
||
+ | arg = string.sub(arg, 0, -4) |
||
− | end |
||
− | + | end |
|
+ | if string.sub(arg, -4) == ' lce' then |
||
− | end |
||
+ | lce = 1 |
||
− | local result = block[arg] |
||
+ | arg = string.sub(arg, 0, -5) |
||
− | if result == nil then |
||
+ | end |
||
− | result = item[arg] |
||
+ | |||
− | end |
||
+ | -- check for 'spawn' |
||
− | if result == nil then |
||
+ | if string.match(arg, '^spawn ') then |
||
− | --check for spawn egg |
||
+ | local mob = other['EntitySprite'][string.sub(arg, 7)] |
||
− | if string.find(arg,'spawn ',0,true) == nil or string.len(arg) < 7 then |
||
+ | if mob then |
||
− | result = other[arg] |
||
+ | index = string.find(mob, '|', 0, true) |
||
− | else |
||
+ | if index then |
||
− | local mob = other[string.sub(arg,7)] |
||
− | + | mob = string.sub(mob, index+1) |
|
+ | end |
||
− | if index ~= nil then |
||
+ | local name = '생성 알|생성 ' .. mob |
||
− | mob = string.sub(mob, index+1) |
||
+ | if be then |
||
− | end |
||
+ | return p.mode(name, mode, '(Bedrock Edition)') |
||
− | result = "스폰 알|스폰 " .. mob |
||
− | + | end |
|
+ | if lce then |
||
− | end |
||
+ | return p.mode(name, mode, '(Legacy Console Edition)') |
||
− | local index |
||
+ | end |
||
− | if result == nil then |
||
+ | return p.mode(name, mode) |
||
− | result = str |
||
+ | end |
||
− | index = string.find(result,'|',0,true) |
||
+ | end |
||
− | else |
||
+ | |||
− | if color then |
||
+ | -- check for color prefix |
||
− | result = result .. '|' .. color .. result |
||
+ | local color |
||
− | end |
||
+ | for i, c in ipairs( colors ) do |
||
− | index = string.find(result,'|',0,true) |
||
− | + | if string.find(arg, c) == 1 then |
|
+ | local item = string.sub(arg, string.len(c) + 1) |
||
− | if index then |
||
+ | if coloredItems[item] then |
||
− | result = result .. '(포켓 에디션)' |
||
+ | color = colork[i] |
||
− | else |
||
+ | arg = item |
||
− | result = result .. '|' .. result .. '(포켓 에디션)' |
||
+ | end |
||
− | index = string.find(result,'|',0,true) |
||
− | + | end |
|
− | + | end |
|
+ | local result |
||
− | end |
||
+ | if type and other[type] then |
||
− | |||
+ | result = other[type][arg] |
||
− | if index then |
||
+ | end |
||
− | -- return the fully translated part |
||
− | + | if result == nil and type and earth[type] then |
|
+ | result = earth[type][arg] |
||
− | result = string.sub(result, index+1) |
||
− | + | end |
|
+ | if result == nil and type and dungeons[type] then |
||
− | -- return the page link part |
||
+ | result = dungeons[type][arg] |
||
− | if mode == 'linkonly' then |
||
+ | end |
||
− | result = string.sub(result, 1 , index-1) |
||
+ | if result == nil then |
||
− | end |
||
+ | result = block[arg] or item[arg] |
||
− | end |
||
+ | end |
||
− | return result |
||
+ | if result == nil and string.sub(arg, -1) == 's' then |
||
+ | local singular = string.sub(arg, 0, -2) |
||
+ | result = block[singular] or item[singular] |
||
+ | end |
||
+ | if result == nil then |
||
+ | for _, list in pairs( other ) do |
||
+ | result = list[arg] |
||
+ | if result then |
||
+ | break |
||
+ | end |
||
+ | end |
||
+ | end |
||
+ | if result == nil then |
||
+ | for _, list in pairs( dungeons ) do |
||
+ | result = list[arg] |
||
+ | if result then |
||
+ | break |
||
+ | end |
||
+ | end |
||
+ | end |
||
+ | |||
+ | if result == nil then |
||
+ | result = exclusive[arg] or str |
||
+ | end |
||
+ | |||
+ | if color then |
||
+ | result = result .. '|' .. color .. result |
||
+ | end |
||
+ | |||
+ | if be then |
||
+ | return p.mode(result, mode, '(베드락 에디션)') |
||
+ | end |
||
+ | if lce then |
||
+ | return p.mode(result, mode, '(콘솔 에디션)') |
||
+ | end |
||
+ | |||
+ | return p.mode(result, mode) |
||
+ | end |
||
+ | |||
+ | function p.mode( str, mode, suffix ) |
||
+ | if suffix then |
||
+ | if string.find(str, '|', 0, true) then |
||
+ | str = str .. suffix |
||
+ | else |
||
+ | str = str .. '|' .. str .. suffix |
||
+ | end |
||
+ | end |
||
+ | index = string.find(str, '|', 0, true) |
||
+ | -- return the translated part |
||
+ | if index then |
||
+ | if mode == 'nolink' then |
||
+ | return string.sub(str, index+1) |
||
+ | end |
||
+ | -- return the page link part |
||
+ | if mode == 'linkonly' then |
||
+ | return string.sub(str, 1 , index-1) |
||
+ | end |
||
+ | end |
||
+ | return str |
||
+ | end |
||
+ | |||
+ | -- list out all entries with the type |
||
+ | function p.list( f ) |
||
+ | local args = f |
||
+ | if f == mw.getCurrentFrame() then |
||
+ | args = require( '모듈:ProcessArgs' ).merge( true ) |
||
+ | end |
||
+ | local type = args[1] |
||
+ | type = string.lower(type) |
||
+ | local sprite = nil |
||
+ | local list = nil |
||
+ | if type == 'block' then |
||
+ | list = block |
||
+ | sprite = 'BlockSprite' |
||
+ | elseif type == 'item' then |
||
+ | list = item |
||
+ | sprite = 'ItemSprite' |
||
+ | elseif type == 'entity' then |
||
+ | list = other['EntitySprite'] |
||
+ | sprite = 'EntitySprite' |
||
+ | elseif type == 'dungeonsitem' then |
||
+ | list = dungeons['DungeonsItemSprite'] |
||
+ | sprite = 'DungeonsItemSprite' |
||
+ | elseif type == 'dungeonsentity' then |
||
+ | list = dungeons['DungeonsEntitySprite'] |
||
+ | sprite = 'DungeonsEntitySprite' |
||
+ | elseif type == 'dungeonsenchantment' then |
||
+ | list = dungeons['DungeonsEnchantmentSprite'] |
||
+ | sprite = 'DungeonsEnchantmentSprite' |
||
+ | elseif type == 'dungeonslevel' then |
||
+ | list = dungeons['DungeonsLevelSprite'] |
||
+ | sprite = 'DungeonsLevelSprite' |
||
+ | end |
||
+ | if list == nil then |
||
+ | return '' |
||
+ | end |
||
+ | |||
+ | local spriteids = mw.loadData( '모듈:' .. sprite ).ids |
||
+ | |||
+ | local result = '' |
||
+ | local t = {} |
||
+ | |||
+ | for k, _ in pairs(list) do |
||
+ | table.insert(t, k) |
||
+ | end |
||
+ | |||
+ | table.sort(t) |
||
+ | |||
+ | local limit = 50 |
||
+ | local count = 0 |
||
+ | |||
+ | local frame = mw.getCurrentFrame() |
||
+ | |||
+ | local table = nil |
||
+ | local header = mw.html.create('tr') |
||
+ | header:tag('th'):wikitext('아이콘') |
||
+ | header:tag('th'):wikitext('영어 명칭') |
||
+ | header:tag('th'):wikitext('한국어 명칭') |
||
+ | |||
+ | for _, v in ipairs(t) do |
||
+ | if count == 0 then |
||
+ | if itemlist ~= nil then |
||
+ | result = result .. tostring(itemlist) |
||
+ | end |
||
+ | itemlist = mw.html.create('table'):attr('align', 'left'):css('float', 'left'):css('margin', '2px'):css('border', '1px solid silver'):css('text-align', 'center'):css('background-color', '#fff'):node(header) |
||
+ | end |
||
+ | |||
+ | local row = mw.html.create('tr') |
||
+ | if spriteids[v] or spriteids[mw.ustring.lower( v ):gsub( '[%s%+]', '-' )] then |
||
+ | row:tag('td'):wikitext(frame:preprocess( '{{' .. sprite .. '|' .. v .. '}}' )) |
||
+ | else |
||
+ | row:tag('td') |
||
+ | end |
||
+ | words = {} |
||
+ | v:gsub('[^%s]+', function(w) table.insert(words, w) end) |
||
+ | for k, w in ipairs(words) do |
||
+ | if w ~= 'of' and w ~= 'or' and w ~= 'o\'' then |
||
+ | words[k] = w:gsub('(%l)(.+)', function(a, b) return a:upper() .. b end) |
||
+ | end |
||
+ | end |
||
+ | row:tag('td'):wikitext(tostring(table.concat(words, ' '))) |
||
+ | row:tag('td'):wikitext(p.mode(list[v], 'nolink')) |
||
+ | itemlist:node(row) |
||
+ | count = count + 1 |
||
+ | if count == limit then |
||
+ | count = 0 |
||
+ | end |
||
+ | end |
||
+ | |||
+ | result = result .. tostring(itemlist) |
||
+ | return result |
||
end |
end |
||
2021년 1월 5일 (화) 13:46 판
Autolink(자동번역) 모듈은 틀 내의 게임 아이템 이름을 자동으로 번역해줍니다. 용어 번역용인 만큼 영어 위키는 사용하지 않으며, 유지보수 시 보통 일본판 코드를 참조합니다.
쓰임새
{{BlockLink}}
,{{ItemLink}}
등에서 아이템 이름을 영어로 입력했을 때 결과물이 한국어로 변환됩니다.- 모듈 입력값은 영어지만 출력값이 한국어여야 할 때 사용됩니다.
같이 보기
- /Block - 에디션 공통 블록
- /Item - 에디션 공통 아이템
- /Other - 기타
- /Exclusive - 각 에디션 전용 기능
- /Dungeons - Minecraft Dungeons 관련 용어
- /Earth - Minecraft Earth 관련 용어
[보기 | 편집 | 역사 | 캐시 제거]위 설명문서는 모듈:Autolink/doc에서 왔습니다.
local p = {}
local block = mw.loadData( '모듈:Autolink/Block' )
local item = mw.loadData( '모듈:Autolink/Item' )
local other = mw.loadData( '모듈:Autolink/Other' )
local exclusive = mw.loadData( '모듈:Autolink/Exclusive' )
local earth = mw.loadData( '모듈:Autolink/Earth' )
local dungeons = mw.loadData( '모듈:Autolink/Dungeons' )
local colors = { 'white ', 'orange ', 'magenta ', 'light blue ', 'yellow ', 'lime ', 'pink ', 'gray ', 'light gray ', 'cyan ', 'purple ', 'blue ', 'brown ', 'green ', 'red ', 'black ', 'silver ' }
local colork = { '하얀색 ', '주황색 ', '자홍색 ', '하늘색 ', '노란색 ', '연두색 ', '분홍색 ', '회색 ', '회백색 ', '청록색 ', '보라색 ', '파란색 ', '갈색 ', '초록색 ', '빨간색 ', '검은색 ' }
local function Set (list)
local set = {}
for _, l in ipairs(list) do set[l] = true end
return set
end
local coloredItems = Set { 'firework star', 'hardened clay', 'stained clay', 'banner', 'carpet', 'concrete', 'concrete powder', 'glazed terracotta',
'terracotta', 'shield', 'shulker box', 'stained glass', 'stained glass pane', 'wool', 'bed', 'hardened glass', 'hardened stained glass', 'balloon',
'glow stick', 'hardened glass pane', 'hardened glass', 'sparkler', 'candle' }
-- used by templates, called via #invoke
function p.link( f )
local args = f
if f == mw.getCurrentFrame() then
args = require( '모듈:ProcessArgs' ).merge( true )
end
return p.invlink( args[1] , args[2] , args[3] )
end
function p.invlink( str , mode, type )
local arg = string.lower(string.gsub(str , "-" , " "))
-- check for spawn egg
if string.find(arg, ' spawn egg', -10, true) then
local mob = other['EntitySprite'][string.sub(arg, 0, -11)]
if mob == nil then
error('존재하지 않는 몹 엔트리: ' .. string.sub(arg, 0, -11))
end
index = string.find(mob, '|', 0, true)
if index then
mob = string.sub(mob, index+1)
end
return p.mode('생성 알|' .. mob .. ' 생성 알', mode)
end
local be
local lce
-- check for version postfix
if string.sub(arg, -3) == ' pe' or string.sub(arg, -3) == ' be' then
be = 1
arg = string.sub(arg, 0, -4)
end
if string.sub(arg, -4) == ' lce' then
lce = 1
arg = string.sub(arg, 0, -5)
end
-- check for 'spawn'
if string.match(arg, '^spawn ') then
local mob = other['EntitySprite'][string.sub(arg, 7)]
if mob then
index = string.find(mob, '|', 0, true)
if index then
mob = string.sub(mob, index+1)
end
local name = '생성 알|생성 ' .. mob
if be then
return p.mode(name, mode, '(Bedrock Edition)')
end
if lce then
return p.mode(name, mode, '(Legacy Console Edition)')
end
return p.mode(name, mode)
end
end
-- check for color prefix
local color
for i, c in ipairs( colors ) do
if string.find(arg, c) == 1 then
local item = string.sub(arg, string.len(c) + 1)
if coloredItems[item] then
color = colork[i]
arg = item
end
end
end
local result
if type and other[type] then
result = other[type][arg]
end
if result == nil and type and earth[type] then
result = earth[type][arg]
end
if result == nil and type and dungeons[type] then
result = dungeons[type][arg]
end
if result == nil then
result = block[arg] or item[arg]
end
if result == nil and string.sub(arg, -1) == 's' then
local singular = string.sub(arg, 0, -2)
result = block[singular] or item[singular]
end
if result == nil then
for _, list in pairs( other ) do
result = list[arg]
if result then
break
end
end
end
if result == nil then
for _, list in pairs( dungeons ) do
result = list[arg]
if result then
break
end
end
end
if result == nil then
result = exclusive[arg] or str
end
if color then
result = result .. '|' .. color .. result
end
if be then
return p.mode(result, mode, '(베드락 에디션)')
end
if lce then
return p.mode(result, mode, '(콘솔 에디션)')
end
return p.mode(result, mode)
end
function p.mode( str, mode, suffix )
if suffix then
if string.find(str, '|', 0, true) then
str = str .. suffix
else
str = str .. '|' .. str .. suffix
end
end
index = string.find(str, '|', 0, true)
-- return the translated part
if index then
if mode == 'nolink' then
return string.sub(str, index+1)
end
-- return the page link part
if mode == 'linkonly' then
return string.sub(str, 1 , index-1)
end
end
return str
end
-- list out all entries with the type
function p.list( f )
local args = f
if f == mw.getCurrentFrame() then
args = require( '모듈:ProcessArgs' ).merge( true )
end
local type = args[1]
type = string.lower(type)
local sprite = nil
local list = nil
if type == 'block' then
list = block
sprite = 'BlockSprite'
elseif type == 'item' then
list = item
sprite = 'ItemSprite'
elseif type == 'entity' then
list = other['EntitySprite']
sprite = 'EntitySprite'
elseif type == 'dungeonsitem' then
list = dungeons['DungeonsItemSprite']
sprite = 'DungeonsItemSprite'
elseif type == 'dungeonsentity' then
list = dungeons['DungeonsEntitySprite']
sprite = 'DungeonsEntitySprite'
elseif type == 'dungeonsenchantment' then
list = dungeons['DungeonsEnchantmentSprite']
sprite = 'DungeonsEnchantmentSprite'
elseif type == 'dungeonslevel' then
list = dungeons['DungeonsLevelSprite']
sprite = 'DungeonsLevelSprite'
end
if list == nil then
return ''
end
local spriteids = mw.loadData( '모듈:' .. sprite ).ids
local result = ''
local t = {}
for k, _ in pairs(list) do
table.insert(t, k)
end
table.sort(t)
local limit = 50
local count = 0
local frame = mw.getCurrentFrame()
local table = nil
local header = mw.html.create('tr')
header:tag('th'):wikitext('아이콘')
header:tag('th'):wikitext('영어 명칭')
header:tag('th'):wikitext('한국어 명칭')
for _, v in ipairs(t) do
if count == 0 then
if itemlist ~= nil then
result = result .. tostring(itemlist)
end
itemlist = mw.html.create('table'):attr('align', 'left'):css('float', 'left'):css('margin', '2px'):css('border', '1px solid silver'):css('text-align', 'center'):css('background-color', '#fff'):node(header)
end
local row = mw.html.create('tr')
if spriteids[v] or spriteids[mw.ustring.lower( v ):gsub( '[%s%+]', '-' )] then
row:tag('td'):wikitext(frame:preprocess( '{{' .. sprite .. '|' .. v .. '}}' ))
else
row:tag('td')
end
words = {}
v:gsub('[^%s]+', function(w) table.insert(words, w) end)
for k, w in ipairs(words) do
if w ~= 'of' and w ~= 'or' and w ~= 'o\'' then
words[k] = w:gsub('(%l)(.+)', function(a, b) return a:upper() .. b end)
end
end
row:tag('td'):wikitext(tostring(table.concat(words, ' ')))
row:tag('td'):wikitext(p.mode(list[v], 'nolink'))
itemlist:node(row)
count = count + 1
if count == limit then
count = 0
end
end
result = result .. tostring(itemlist)
return result
end
return p