Difference between revisions of "Module:Backpack item/format"

From Team Fortress Wiki
Jump to: navigation, search
(Helper module which contains all the ordering strings (which will therefore be much easier to translate))
 
m (Darkid moved page Module:Backpack item formats to Module:Backpack item/format without leaving a redirect: Subpages allow for a natural 'back' arrow)
(No difference)

Revision as of 02:18, 13 June 2019

Documentation for this module may be created at Module:Backpack item/format/doc

--[[
These are the order of parameters in different languages.
When the template is evaluated, the english text here will be replaced with language-appropriate strings.
Please note the missing spaces are intentional, as some languages concatenate words together.
The raw strings for these words live in Template:Dictionary/common_strings, in the Module:Backpack item section.
Note that extra spaces, empty parenthesis, and extra dashes will be cleaned up automatically.
--]]

-- Missing translations: ar, cs
-- Self translated: none
local item_name_format = {
  ['da']      = 'quality filter festivized killstreak item_name',
  ['de']      = 'item_name - quality filter killstreak - festivized',
  ['en']      = 'quality filter festivized killstreak item_name',
  ['es']      = 'item_name quality filter festivized killstreak',
  ['fi']      = 'qualityfilter killstreak festivizeditem_name',
  ['fr']      = 'item_name festivized (quality filter killstreak)',
  ['hu']      = 'qualityfilter festivizedkillstreak item_name',
  ['it']      = 'item_name (festivized) (quality filter killstreak)',
  ['ja']      = 'quality filter killstreak festivized item_name',
  ['ko']      = 'quality filter festivized killstreak item_name',
  ['nl']      = 'qualityfilter festivizedkillstreakitem_name',
  ['no']      = 'quality filter festivized killstreak item_name',
  ['pl']      = 'item_name (quality filter festivized killstreak)',
  ['pt']      = 'item_name filter (festivized) (quality killstreak)',
  ['pt-br']   = 'item_name filter (festivized) (quality killstreak)',
  ['ro']      = 'qualityfilter festivizedkillstreakitem_name',
  ['ru']      = 'item_name killstreak festivized quality filter',
  ['sv']      = 'quality filter festivized killstreakitem_name',
  ['tr']      = 'qualityfitler festivizedkillstreak item_name',
  ['zh-hans'] = 'quality filter festivizedkillstreak item_name',
  ['zh-hant'] = 'qualityfilter festivizedkillstreakitem_name',
}

-- Missing translations: fi, fr (limited is missing), pl
-- Self translated: none
local item_desc_format_strange = {
  ['cs']      = 'limited strange_rank_name item_kind rankson',
  ['da']      = 'limited item_kind strange_rank_name rankson',
  ['de']      = 'limited item_kind strange_rank_name rankson',
  ['en']      = 'limited strange_rank_name item_kind rankson',
  ['es']      = 'item_kind strange_rank_name limited rankson',
  ['fr']      = 'item_kind strange_rank_name rankson',
  ['hu']      = 'limitedstrange_rank_name item_kind rankson',
  ['it']      = 'item_kind - limited strange_rank_name rankson',
  ['ja']      = 'limited strange_rank_name item_kind rankson',
  ['ko']      = 'limited strange_rank_name item_kind rankson',
  ['nl']      = 'limitedstrange_rank_name item_kind rankson',
  ['no']      = 'limiteditem_kind strange_rank_name rankson',
  ['pt']      = 'item_kind strange_rank_name limited rankson',
  ['pt-br']   = 'item_kind strange_rank_name limited rankson',
  ['ro']      = 'limitedstrange_rank_name item_kind rankson',
  ['ru']      = 'item_kind strange_rank_name limited rankson',
  ['sv']      = 'limitedstrange_rank_name item_kind rankson',
  ['tr']      = 'limitedstrange_rank_name item_kind rankson',
  ['zh-hans'] = 'limitedstrange_rank_name item_kind rankson',
  ['zh-hant'] = 'limitedstrange_rank_name item_kind rankson',
}

-- A list of strings which mean "don't show" rather than "use me"
local negatives = {
  ['none'] = true,
  ['no'] = true,
  ['0'] = true,
  ['false'] = true,
  ['hide'] = true,
  ['negative'] = true,
  [''] = true,
}

-- Note that order must be
function format_string(order, args)
  assert(type(order) == 'table', 'You must call Lang() on the format before passing it to this function')

  -- Step 1: Split out prefix/suffix
  local idx = string.find(order, 'item_name')
  local prefix = string.sub(order, 0, idx - 1)
  local suffix = string.sub(order, idx + 9)

  -- Step 2: Replace parameters with their actual values
  for arg_name, arg_text in pairs(args) do
    prefix = string.gsub(prefix, arg_name, arg_text)
    suffix = string.gsub(prefix, arg_name, arg_text)
  end

  -- Step 3: Replace prefix/suffix as needed
  if negatives[args['prefix']] then
    prefix = ''
  elseif args['prefix'] ~= nil then
    prefix = args['prefix'] .. ' '
  end
  if negatives[args['suffix']] then
    suffix = ''
  elseif args['suffix'] ~= nil then
    suffix = ' ' .. args['suffix']
  end

  -- Step 4: Recombine strings and clean up extra characters
  local output_string = prefix .. item_name .. suffix
  output_string = string.gsub(output_string, '%( *', '(') -- Extra spaces in parenthesis
  output_string = string.gsub(output_string, ' *%)', ')') -- Extra spaces in parenthesis
  output_string = string.gsub(output_string, '%(%)', '') -- Empty parentheticals

  output_string = string.gsub(output_string, '- *-', '-') -- Double dashes
  output_string = string.gsub(output_string, '- *$', '') -- Trailing dashes
  output_string = string.gsub(output_string, '^ *-', '') -- Leading dashes

  output_string = string.gsub(output_string, '  +', ' ') -- Double spaces
  output_string = string.gsub(output_string, '^ ', '') -- Extra space at start
  output_string = string.gsub(output_string, ' $', '') -- Extra space at end

  return output_string
end