Модуль:Lang-zh

![]() | Цей модуль позначений як К:реліз, готовий до загального вжитку (242). Він досягнув стадії готовності й вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна згадувати на довідкових сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його потрібно вдосконалювати через тестування у пісочниці[en], а не через застосування спроб і помилок. |
![]() | Цей модуль позначено як К:такий, що потребує захищеного статусу (114). Завершені модулі використовуються в дуже великій кількості статей, або часто використовуються як підстановки. Позаяк акти вандалізму або помилки можуть вплинути на багато сторінок і навіть незначне редагування призведе до істотного навантаження на сервери, вони підлягають захисту від редагувань. |
![]() | Цей модуль Lua використовується на близько 4900 сторінках і його зміни будуть дуже помітними. Будь ласка, перевіряйте будь-які зміни на підсторінках /пісочниці та /тестів цього модуля, або у вашій пісочниці модуля, та зважайте на обговорення змін на сторінці обговорення перед їхнім впровадженням. |
![]() | Цей модуль залежить від наступних модулів: |
Використання
Це модуль для шаблону {{Lang-zh}}. Його основними особливостями є те, що описано на сторінці документації, зверніться до неї, щоб дізнатися як його використовувати в статтях. Ця документація описує певні особливості модуля.
Перша таблиця в модулі перераховує статті, в яких шаблон розміщуватиме спершу традиційну китайську. Додавайте статті до цього списку таким самим чином як інші в таблиці (порядок не має значення), щоб включити їх. Якщо ви не можете редагувати модуль, бо він захищений, то використайте шаблон {{Editsemiprotected}} на його сторінці обговорення, щоб зробити запит на зміну.
Використання в інших модулях
Модуль можна викликати напряму в іншому модулі, а також у шаблоні. Щоб зробити це спершу завантажте модуль
local Zh = require("Module:Lang-zh")._Zh
Тоді зробіть виклик наступним чином із аргументами в таблиці
local output = Zh{["c"] = "中国", ["p"] = "zhōngguó"}
Категорії спостереження
Документація вище включена з Модуль:Lang-zh/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього модуля. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
require('strict')
local p = {}
-- статті, де традиційна китайська попереду спрощеної китайської
local t1st = {
["Китайський календар"] = true,
}
-- скорочення, що виводиться в тексті статті
local labels = {
["c"] = "кит.",
["s"] = "спрощ.",
["t"] = "кит. трад.",
["p"] = "піньїнь",
["tp"] = "т. піньїнь",
["w"] = "Вейд-Джайлз",
["j"] = "ютпхін",
["cy"] = "єл.",
["sl"] = "Сідні Лау",
["poj"] = "певедзі",
["zhu"] = "чжуїнь",
["l"] = "досл.",
["uk"] = "акад.", -- аналогічно до [[Шаблон:Китайська]]
}
-- вікіпосилання
local wlinks = {
["c"] = "Китайська мова",
["s"] = "Спрощені ієрогліфи",
["t"] = "Традиційні китайські ієрогліфи",
["p"] = "Піньїнь",
["tp"] = "Тун'юн-піньїнь",
["w"] = "Система Вейда-Джайлза",
["j"] = "Ютпхін",
["cy"] = "Єльські системи латинізації#Кантонська",
["sl"] = "Латинізація Сідней Лау",
["poj"] = "Певедзі",
["zhu"] = "Чжуїнь",
["l"] = "Дослівний переклад",
["uk"] = "Академічна система транскрибування китайських слів та власних назв українською мовою",
}
-- ISO-коди для мов
local ISOlang = {
["c"] = "zh",
["t"] = "zh-Hant",
["s"] = "zh-Hans",
["p"] = "zh-Latn-pinyin",
["tp"] = "zh-Latn",
["w"] = "zh-Latn-wadegile",
["j"] = "yue-jyutping",
["cy"] = "yue",
["sl"] = "yue",
["poj"] = "nan",
["zhu"] = "zh-Bopo",
["uk"] = "zh-Cyrl",
}
local italic = {
["p"] = true,
["tp"] = true,
["w"] = true,
["j"] = true,
["cy"] = true,
["sl"] = true,
["poj"] = true,
["uk"] = true, -- аналогічно до lang-uk
}
local superscript = {
["w"] = true,
["sl"] = true,
}
-- категорії для різних видів китайського тексту
local cats = {
["c"] = "[[Категорія:Статті з китайськими ієрогліфами]]",
["s"] = "[[Категорія:Статті зі спрощеними китайськими ієрогліфами]]",
["t"] = "[[Категорія:Статті з традиційними китайськими ієрогліфами]]",
}
function p.Zh(frame)
-- завантащення модуля arguments для спрощення обробки даних
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._Zh(args)
end
function p._Zh(args)
local uselinks = not (args["links"] == "no") -- whether to add links
local uselabels = not (args["labels"] == "no") -- whether to have labels
local capfirst = args["scase"] ~= nil
local t1 = false -- можливість проставлення традиційної китайської спочатку
local j1 = false -- можливість проставлення кантонської латинизації спочатку
local testChar
if (args["first"]) then
for testChar in mw.ustring.gmatch(args["first"], "%a+") do
if (testChar == "t") then
t1 = true
end
if (testChar == "j") then
j1 = true
end
end
end
if (t1 == false) then
local title = mw.title.getCurrentTitle()
t1 = t1st[title.text] == true
end
-- базові налаштування порядку відображення мов
local orderlist = {"c", "s", "t", "p", "tp", "w", "j", "cy", "sl", "poj", "zhu", "l", "uk"}
if (t1) then
orderlist[2] = "t"
orderlist[3] = "s"
end
if (j1) then
orderlist[4] = "j"
orderlist[5] = "cy"
orderlist[6] = "sl"
orderlist[7] = "p"
orderlist[8] = "tp"
orderlist[9] = "w"
end
local body = "" -- the output string
local params -- for creating HTML spans
local label -- the label, i.e. the bit preceeding the supplied text
local val -- the supplied text
-- go through all possible fields in loop, adding them to the output
for i, part in ipairs(orderlist) do
if (args[part]) then
-- build label
label = ""
if (uselabels) then
label = labels[part]
if (capfirst) then
label = mw.language.getContentLanguage():ucfirst(label)
capfirst = false
end
if (uselinks) then
label = "[[" .. wlinks[part] .. "|" .. label .. "]]"
end
label = label .. ": "
end
-- build value
val = args[part]
if (cats[part]) and mw.title.getCurrentTitle().namespace == 0 then
-- if has associated category AND current page in article namespace, add category
val = cats[part] .. val
end
if (ISOlang[part]) then
-- add span for language if needed
params = {["lang"] = ISOlang[part], ["xml:lang"] = ISOlang[part]}
val = mw.text.tag({name="span",attrs=params, content=val})
elseif (part == "l") then
-- put literals in quotes
val = "«" .. val .. "»"
end
if (italic[part]) then
-- italicise
val = "<i>" .. val .. "</i>"
end
if string.match(val, "</?sup>") then val = val.."[[Категорія:Сторінки, що використовують параметр sup шаблону zh]]" end
if (superscript[part]) then
-- superscript
val = val:gsub("(%d)", "<sup>%1</sup>"):gsub("(%d)</sup>%*<sup>(%d)", "%1*%2"):gsub("<sup><sup>([%d%*]+)</sup></sup>", "<sup>%1</sup>")
end
-- add both to body
body = body .. label .. val .. "; "
end
end
if (body > "") then -- check for empty string
return string.sub(body, 1, -3) -- chop off final semicolon and space
else --no named parameters; see if there's a first parameter, ignoring its name
if (args[1]) then
-- if there is treat it as Chinese
label = ""
if (uselabels) then
label = labels["c"]
if (uselinks) then
label = "[[" .. wlinks["c"] .. "|" .. label .. "]]"
end
label = label .. ": "
end
-- default to show links and labels as no options given
if mw.title.getCurrentTitle().namespace == 0 then
-- if current page in article namespace
val = cats["c"] .. args[1]
else
val = args[1]
end
params = {["lang"] = ISOlang["c"], ["xml:lang"] = ISOlang["c"]}
val = mw.text.tag({name="span",attrs=params, content=val})
return label .. val
end
return ""
end
end
return p