Mô đun:ParameterAliasNormalizer
| Mô đun này được xếp loại beta. Nó được đánh giá là sẵn sàng để sử dụng rộng rãi, nhưng vì nó vẫn còn khá là mới, nên vẫn cần phải được sử dụng một cách thận trọng để đảm bảo rằng kết quả đạt được như mong đợi. |
Cách sử dụng
Mô đun ParameterAliasNormalizer được sử dụng để làm trung gian ánh xạ các tham số tiếng Việt, hoặc tham số cũ, đến các tham số tiếng Anh (tham số bản mẫu gốc), hoặc tham số hiện hành của bản mẫu được khai báo ban đầu. Mô đun này sẽ được chứa trong một bản mẫu (thường là bản mẫu chính).
Khi gọi một bản mẫu được nhúng mô đun này, toàn bộ tham số (gồm tên tham số và giá trị tham số) được cung cấp sẽ truyền về mô đun. Mô đun sẽ kiểm tra, nếu tên tham số nằm trong từ điển cho trước, thì sẽ tiến hành lấy giá trị của tham số đó gán cho tham số tương ứng với nó (là tham số gốc); nếu tên tham số không nằm trong từ điển, thì bỏ qua. Sau cùng, toàn bộ tham số đã được xử lý ánh xạ sẽ được truyền về bản mẫu gốc (như nằm trong trang con /main) để bung bản mẫu này hiển thị ra ngoài, tại trang đang nhúng bản mẫu chính.
Mã ví dụ của mô đun khi nhúng trong Bản mẫu:Thông tin chiến tranh:
<!-- Bản mẫu trung gian này nhằm mục đích ánh xạ tên tham số Tiếng Việt về tên tham số Tiếng Anh -->{{#invoke: ParameterAliasNormalizer | main| __template = Thông tin chiến tranh/main<!-- param aliases -->| conflict = tên| partof = một phần của| image = hình| image_size = cỡ hình| caption = ghi chú hình| date = thời gian| place = địa điểm| coordinates = tọa độ| action = hành động| casus = nguyên nhân| result = kết quả| status = tình trạng| territory = thay đổi lãnh thổ| combatant${1,3} = bên $| commander${1,3} = chỉ huy $| units${1,3} = thành phần $| strength${1,3} = lực lượng $| casualties${1,4} = thương vong $| notes = ghi chú<!-- old params --><!-- viwiki only params -->}}Mã ví dụ của mô đun khi nhúng trong Bản mẫu:Thông tin sông:
<!-- Bản mẫu trung gian này nhằm mục đích ánh xạ tên tham số Tiếng Việt về tên tham số Tiếng Anh -->{{#invoke: ParameterAliasNormalizer | main| __template = Thông tin sông/main<!-- param aliases -->| name = tên\\river_name\\tên sông| name_native = tên địa phương| map = image_map| image = hình\\tên ảnh\\tên hình\\image_name| image_size = cỡ hình| image_caption = chú thích hình\\tiêu đề\\caption| length = độ dài\\dài| discharge1 = lưu lượng\\discharge| mouth = cửa sông| mouth_elevation = cao độ cửa sông| source1 = origin\\thượng nguồn| source1_elevation = elevation\\cao độ thượng nguồn\\cao độ| source1_coordinates = tọa độ thượng nguồn| mouth_coordinates = tọa độ cửa sông| basin_size = watershed\\lưu vực| width_avg = độ rộng\\rộng| tributaries_left = left_tribs| tributaries_right = right_tribs<!-- old params -->| _countries = quốc gia\\các quốc gia lưu vực\\basin_countries| _provinces = các tỉnh lưu vực\\tỉnh<!-- viwiki only params -->| vi_branch = nhánh| vi_mouth_width = chiều rộng cửa sông| vi_distributaries = các chi lưu}}local ModuleObj = {}local getArgs = require("Module:Arguments").getArgs--[[ Hàm dùng để chuẩn bị dữ liệu--]]function ModuleObj.main(frame) local moduleArgs = getArgs(frame, {frameOnly = true}) local callerArgs = getArgs(frame, {parentOnly = true}) return ModuleObj._main(frame, moduleArgs, callerArgs)end--[[ Chuẩn hóa tên của tham số về tên gốc--]]function ModuleObj._main(frame, moduleArgs, callerArgs) -- Replace dấu dollar thành số nếu có replaceDollar(moduleArgs) -- Lowercase hóa key của bảng callerArgs callerArgs = lowerKey(callerArgs) -- Hàm kiểm tra chuỗi có rỗng không local function isEmpty(s) return s == nil or mw.text.trim(s) == '' end -- Lấy tên bản mẫu gốc local templateName = moduleArgs.__template moduleArgs.__template = nil; -- Lấy giá trị của đối số ánh xạ gán cho đối số gốc for baseParam, aliasesStr in pairs(moduleArgs) do for alias in mw.text.gsplit(aliasesStr, '\\', true) do alias = mw.ustring.lower(mw.text.trim(alias)) if callerArgs[alias] ~= nil then local value = callerArgs[alias] if isEmpty(value) == false then callerArgs[baseParam] = value end callerArgs[alias] = nil end end end -- Tạo bản mẫu với bảng đối số callerArgs local content = frame:expandTemplate{ title = templateName, args = callerArgs } return contentend--[[ Hàm lowercase hóa key của các pair trong một table--]]function lowerKey(table) local lowercased = {} for key, value in pairs(table) do lowercased[mw.ustring.lower(key)] = value end return lowercasedend--[[ Hàm thay dấu dollar thành số Ví dụ: "combatant${1,3} = bên $" sẽ sinh ra 3 đối số: "combatant1 = bên 1", "combatant2 = bên 2", "combatant3 = bên 3"--]]function replaceDollar(table) local temp = {} -- Tìm các key có pattern phù hợp, sinh các cặp key-value tương ứng -- và xóa cặp key-value ban đầu for key, value in pairs(table) do if (mw.ustring.match(key, "${(%d+,%d+)}")) then local points = mw.text.split(mw.ustring.match(key, "${(%d+,%d+)}"), ",", true) for i = points[1], points[2], 1 do local k = mw.ustring.gsub(key, "(${%d+,%d+})", i) local v = mw.ustring.gsub(value, "%$", i) temp[k] = v end table[key] = nil end end for key, value in pairs(temp) do table[key] = value endendreturn ModuleObj