모듈:Langname

--[[

This module provides a language name handling operations based on ISO 639 and Unicode CLDR information.

- ChongDae

]]

local lang = {}

local langdata = mw.loadData('Module:Langname/data')
local lang_name = langdata.lang_name
local lang_autonym = langdata.lang_autonym
local lang_article = langdata.lang_article
local lang_wikipedia = langdata.lang_wikipedia

--[[
-- Helper functions
--]]
local function getCldrName(code)

local name = mw.language.fetchLanguageName(code, 'ko')
if name == then
return nil
elseif string.match(name, '[(),A-Za-z]') then -- 이름에 영문자나 괄호, 쉼표가 들어간 경우는 오류 처리함.
return nil
else
return name
end

end

function getCldrAutonym(code)

local lang = string.match(code, '([a-z]+)') -- get 'en' from 'en-us'
return lang_autonym[code] or mw.language.fetchLanguageName(code, lang)

end

local function getLanguageName(code)

return lang_name[code] or getCldrName(code)

end

function lang.name(frame)

local code = string.lower(frame.args.code)

return getLanguageName(code) or '언어 오류(' .. code .. ')'
end

function lang.autonym(frame)

local code = string.lower(frame.args.code)
return getCldrAutonym(code) or '언어 오류(' .. code .. ')'

end

function lang.article(frame)

local code = string.lower(frame.args.code)

return lang_article[code] or getLanguageName(code) or '언어 오류'
end

function lang.wikipedia(frame)

local code = string.lower(frame.args.code)

return lang_wikipedia[code] or getLanguageName(code) or '언어 오류(' .. code .. ')'
end

function lang.link(frame)

local code = string.lower(frame.args.code)
local link = frame.args.link
local article = lang_article[code]
local name = getLanguageName(code)
if link == 'no' then
return name or '언어 오류(' .. code .. ')'
elseif article then
return '' .. name .. ''
elseif name then
return '' .. name .. ''
else
return '언어 오류(' .. code .. ')'
end

end

return lang