Terraria Wiki
Terraria Wiki
(sync en - rev 922745)
 
Aucun résumé des modifications
(6 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
  +
local cargo = mw.ext.cargo
 
local db = {}
 
local db = {}
   
Ligne 25 : Ligne 26 :
 
-- key: e.g. "BuffName.ManaRegeneration".
 
-- key: e.g. "BuffName.ManaRegeneration".
 
-- return string or table, nil when key is invalid.
 
-- return string or table, nil when key is invalid.
local get = function(key, lang)
+
local get -- for recursion
  +
get = function(key, lang)
 
lang = lang or 'en'
 
lang = lang or 'en'
 
if not db[lang] then
 
if not db[lang] then
Ligne 35 : Ligne 37 :
 
end
 
end
 
local data, result = db[lang], nil
 
local data, result = db[lang], nil
  +
if string.find(trim(key), '.', 0, true) then
for _, v in ipairs(explode('.', trim(key))) do
+
for _, v in ipairs(explode('.', trim(key))) do
if type(data) == 'table' then
+
if type(data) == 'table' then
v = tonumber(v) or v -- convert to number for pure number index.
+
v = tonumber(v) or v -- convert to number for pure number index.
result = data[v]
 
data = result
+
result = data[v]
  +
data = result
  +
else
 
break
  +
end
  +
end
  +
else
 
result = data[trim(key)]
  +
end
  +
if result then
  +
if type(result) == 'table' then
  +
arr = {}
  +
for _, v in pairs(result) do
  +
arr[#arr+1] = v
  +
end
  +
result = table.concat(arr, '₪') -- we must use a separator that is guaranteed not to be contained in any string. We can easily replace it in wikitext with any that we like
 
else
 
else
  +
-- for such as {$CommonItemTooltip.RightClickToOpen}
break
 
  +
result = string.gsub(result, "({%$(.-)})", function(s, ref) return get(ref, lang) end)
 
end
 
end
 
end
 
end
Ligne 49 : Ligne 67 :
 
-- args: tables for replacement, e.g.: { ["{0}"] = "Party Girl", ["<right>"] = "Right click" }
 
-- args: tables for replacement, e.g.: { ["{0}"] = "Party Girl", ["<right>"] = "Right click" }
 
local getText = function(key, lang, args)
 
local getText = function(key, lang, args)
  +
if not key then
local str = string.gsub(get(key, lang), "{%?.-}", "") -- "{?Homeless}"" -> ""
 
  +
return
  +
end
  +
local str = get(key, lang)
  +
-- en as fallback.
  +
if not str and lang ~= 'en' then
  +
str = get(key, 'en')
  +
end
  +
if not str then
  +
return ''
  +
end
 
local str = string.gsub(str, "{%?.-}", "") -- "{?Homeless}"" -> ""
 
if str and args then
 
if str and args then
 
str = string.gsub(str, "%b{}", args)
 
str = string.gsub(str, "%b{}", args)
Ligne 56 : Ligne 85 :
 
return str
 
return str
 
end
 
end
  +
  +
local query
  +
query = function(key, lang)
  +
lang = lang or 'en'
  +
local result = mw.ext.cargo.query('GameText', 'content', {
  +
where = 'lang='.. "'"..lang.."' AND name='"..key.."'",
  +
limit = 1,
  +
})
  +
local text
  +
for _, row in ipairs(result) do
  +
text = row['content']
  +
end
  +
if not text then
  +
return
  +
end
  +
return text
  +
end
  +
  +
local queryText = function(key, lang, args)
  +
if not key then
  +
return
  +
end
  +
local str = query(key, lang)
  +
-- en as fallback.
  +
if not str and lang ~= 'en' then
  +
str = query(key, 'en')
  +
end
  +
if not str then
  +
return ''
  +
end
  +
if str and args then
  +
str = string.gsub(str, "%b{}", args)
  +
str = string.gsub(str, "%b<>", args)
  +
end
  +
return str
  +
end
  +
   
 
return {
 
return {
Ligne 74 : Ligne 140 :
 
return getText(getArg(1), getArg('lang') or frame.args['lang'], args)
 
return getText(getArg(1), getArg('lang') or frame.args['lang'], args)
 
end,
 
end,
  +
  +
getRaw = function(frame)
  +
return getText(frame.args['key'], frame.args['lang'])
  +
end,
  +
  +
query = function(frame)
  +
args_table = frame:getParent().args -- cache
  +
local args
  +
for k, v in pairs(args_table) do
  +
string.gsub(k, '^x_(.+)', function(n)
  +
if not args then args = {} end
  +
args['{'..n..'}'] = v
  +
end)
  +
string.gsub(k, '^y_(.+)', function(n)
  +
if not args then args = {} end
  +
args['<'..n..'>'] = v
  +
end)
  +
end
  +
return queryText(getArg(1), getArg('lang') or frame.args['lang'], args)
  +
end,
 
 
 
listAll = function(frame)
 
listAll = function(frame)
Ligne 87 : Ligne 173 :
 
if frame.args[1] then
 
if frame.args[1] then
 
local output
 
local output
  +
if not db[lang][frame.args[1]] then
  +
return
  +
end
 
for k, v in pairs(db[lang][frame.args[1]]) do
 
for k, v in pairs(db[lang][frame.args[1]]) do
 
if output then
 
if output then
output = output .. '¦' .. k .. '</td><td>' .. v
+
output = output .. '¦' .. k .. '' .. v
 
else
 
else
output = k .. '</td><td>' .. v
+
output = k .. '' .. v
 
end
 
end
 
 
  +
end
  +
return output
  +
else
  +
local output
  +
for k, v in pairs(db[lang]) do
  +
if output then
  +
output = output .. '¦' .. k
  +
else
  +
output = k
  +
end
  +
end
  +
return output
  +
end
  +
end,
  +
  +
listKeys = function(frame)
  +
local lang = frame.args['lang'] or 'en'
  +
if not db[lang] then
  +
if lang == 'es' or lang == 'it' or lang =='zh' or lang == 'de' or lang == 'ru' or lang == 'fr' or lang == 'pl' or lang == 'pt' then
  +
db[lang] = mw.loadData("Module:GameText/db-"..lang)
  +
else
  +
db[lang] = mw.loadData("Module:GameText/db-en")
  +
end
  +
end
  +
  +
if frame.args[1] then
  +
local output
  +
if not db[lang][frame.args[1]] then
  +
return
  +
end
  +
for k, v in pairs(db[lang][frame.args[1]]) do
  +
if output then
  +
output = output .. '¦' .. k
  +
else
  +
output = k
  +
end
 
end
 
end
 
return output
 
return output

Version du 15 novembre 2020 à 19:19

Voir aussi la page anglaise du module : Module:GameText. Elle pourra contenir des informations plus complètes et actuelles.

Aucune sous-page de documentation n'existe déjà pour ce module. En créer une maintenant.


local cargo = mw.ext.cargo
local db = {}

local trim = mw.text.trim
-- credit: http://richard.warburton.it
-- this version is without trim.
local function explode(div,str) 
	if (div=='') then return false end
	local pos,arr = 0,{}
	-- for each divider found
	for st,sp in function() return string.find(str,div,pos,true) end do
		table.insert(arr,string.sub(str,pos,st-1)) -- Attach chars left of current divider
		pos = sp + 1 -- Jump past current divider
	end
	table.insert(arr, string.sub(str,pos)) -- Attach chars right of last divider
	return arr
end

local args_table -- cache
-- helper function
local getArg = function(key)
	local value = trim(args_table[key] or '')
	return (value ~= '') and value or nil
end

-- key: e.g.  "BuffName.ManaRegeneration".
-- return string or table, nil when key is invalid.
local get -- for recursion
get = function(key, lang)
	lang = lang or 'en'
	if not db[lang] then
		if lang == 'es' or lang == 'it' or lang =='zh' or lang == 'de' or lang == 'ru' or lang == 'fr' or lang == 'pl' or lang == 'pt' then
			db[lang] = mw.loadData("Module:GameText/db-"..lang)
		else
			db[lang] = mw.loadData("Module:GameText/db-en")
		end
	end
	local data, result = db[lang], nil
	if string.find(trim(key), '.', 0, true) then
		for _, v in ipairs(explode('.', trim(key))) do
			if type(data) == 'table' then
				v = tonumber(v) or v -- convert to number for pure number index.
				result = data[v]
				data = result
			else
				break
			end
		end
	else
		result = data[trim(key)]
	end
	if result then
		if type(result) == 'table' then
			arr = {}
			for _, v in pairs(result) do
				arr[#arr+1] = v
			end
			result = table.concat(arr, '₪') -- we must use a separator that is guaranteed not to be contained in any string. We can easily replace it in wikitext with any that we like
		else
			-- for such as {$CommonItemTooltip.RightClickToOpen}
			result = string.gsub(result, "({%$(.-)})", function(s, ref) return get(ref, lang) end)
		end
	end
	return result
end

-- args: tables for replacement, e.g.: { ["{0}"] = "Party Girl", ["<right>"] = "Right click" }
local getText = function(key, lang, args)
	if not key then
		return
	end
	local str = get(key, lang)
	-- en as fallback.
	if not str and lang ~= 'en' then
		str = get(key, 'en')
	end
	if not str then
		return ''
	end
	local str = string.gsub(str, "{%?.-}", "") -- "{?Homeless}"" -> ""
	if str and args then
		str = string.gsub(str, "%b{}", args)
		str = string.gsub(str, "%b<>", args)
	end
	return str
end

local query
query = function(key, lang)
	lang = lang or 'en'
	local result = mw.ext.cargo.query('GameText', 'content', {
		where = 'lang='.. "'"..lang.."' AND name='"..key.."'",
		limit = 1,
	})
	local text
	for _, row in ipairs(result) do
		text = row['content']
	end
	if not text then 
		return
	end
	return text
end

local queryText = function(key, lang, args)
	if not key then
		return
	end
	local str = query(key, lang)
	-- en as fallback.
	if not str and lang ~= 'en' then
		str = query(key, 'en')
	end
	if not str then
		return ''
	end
	if str and args then
		str = string.gsub(str, "%b{}", args)
		str = string.gsub(str, "%b<>", args)
	end
	return str
end


return {
	---------- for template ----------------
	get = function(frame)
		args_table = frame:getParent().args -- cache
		local args
		for k, v in pairs(args_table) do
			string.gsub(k, '^x_(.+)', function(n) 
				if not args then args = {} end
				args['{'..n..'}'] = v
			end)
			string.gsub(k, '^y_(.+)', function(n) 
				if not args then args = {} end
				args['<'..n..'>'] = v
			end)
		end
		return getText(getArg(1), getArg('lang') or frame.args['lang'], args)
	end,

	getRaw = function(frame)
		return getText(frame.args['key'], frame.args['lang'])
	end,
	
	query = function(frame)
		args_table = frame:getParent().args -- cache
		local args
		for k, v in pairs(args_table) do
			string.gsub(k, '^x_(.+)', function(n) 
				if not args then args = {} end
				args['{'..n..'}'] = v
			end)
			string.gsub(k, '^y_(.+)', function(n) 
				if not args then args = {} end
				args['<'..n..'>'] = v
			end)
		end
		return queryText(getArg(1), getArg('lang') or frame.args['lang'], args)
	end,	
	
	listAll = function(frame)
		local lang = frame.args['lang'] or 'en'
		if not db[lang] then
			if lang == 'es' or lang == 'it' or lang =='zh' or lang == 'de' or lang == 'ru' or lang == 'fr' or lang == 'pl' or lang == 'pt' then
				db[lang] = require("Module:GameText/db-"..lang)
			else
				db[lang] = require("Module:GameText/db-en")
			end
		end

		if frame.args[1] then
			local output
			if not db[lang][frame.args[1]] then
				return
			end
			for k, v in pairs(db[lang][frame.args[1]]) do
				if output then
					output = output .. '¦' ..  k .. '₪' .. v
				else
					output = k .. '₪' .. v
				end
				
			end
			return output
		else
			local output
			for k, v in pairs(db[lang]) do
				if output then
					output = output .. '¦' ..  k
				else
					output = k
				end
			end
			return output
		end
	end,

	listKeys = function(frame)
		local lang = frame.args['lang'] or 'en'
		if not db[lang] then
			if lang == 'es' or lang == 'it' or lang =='zh' or lang == 'de' or lang == 'ru' or lang == 'fr' or lang == 'pl' or lang == 'pt' then
				db[lang] = mw.loadData("Module:GameText/db-"..lang)
			else
				db[lang] = mw.loadData("Module:GameText/db-en")
			end
		end

		if frame.args[1] then
			local output
			if not db[lang][frame.args[1]] then
				return
			end
			for k, v in pairs(db[lang][frame.args[1]]) do
				if output then
					output = output .. '¦' ..  k
				else
					output = k
				end
			end
			return output
		else
			local output
			for k, v in pairs(db[lang]) do
				if output then
					output = output .. '¦' ..  k
				else
					output = k
				end
			end
			return output
		end
	end,

	---------- for module ----------------
	getText = getText,

}