Editing Module:LangGive feedback
Jump to navigation
Jump to search
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 7: | Line 7: | ||
-- the expected key does not have a localization entry | -- the expected key does not have a localization entry | ||
local KEY_OVERRIDES = { | local KEY_OVERRIDES = { | ||
MoveSlowPercent_label = 'MovementSlow_label', | MoveSlowPercent_label = 'MovementSlow_label', | ||
BonusHealthRegen_label = 'HealthRegen_label', | BonusHealthRegen_label = 'HealthRegen_label', | ||
| Line 23: | Line 21: | ||
PostInvisBuffDuration_label = 'BuffDuration_label', | PostInvisBuffDuration_label = 'BuffDuration_label', | ||
PostInvisBuffDuration_postfix = 'BuffDuration_postfix', | PostInvisBuffDuration_postfix = 'BuffDuration_postfix', | ||
SelfBuffDuration_label = 'BuffDuration_label', | SelfBuffDuration_label = 'BuffDuration_label', | ||
SelfBuffDuration_postfix = 'BuffDuration_postfix', | SelfBuffDuration_postfix = 'BuffDuration_postfix', | ||
| Line 33: | Line 29: | ||
MoveSlowDuration_label = 'SlowDuration_label', | MoveSlowDuration_label = 'SlowDuration_label', | ||
MoveSlowDuration_postfix = 'SlowDuration_postfix', | MoveSlowDuration_postfix = 'SlowDuration_postfix', | ||
} | } | ||
| Line 59: | Line 49: | ||
local function process_html_tags(text, frame) | local function process_html_tags(text, frame) | ||
if not text or type(text) ~= "string" then return text end | if not text or type(text) ~= "string" then return text end | ||
local replacements = { | local replacements = { | ||
BonusFireRate = {icon='{{Icon/Brown|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
BonusMoveSpeed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Move speed|20px]]}}', label_color='#ffefd7', link='Move speed'}, | |||
BonusSprintSpeed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Sprint speed|20px]]}}', label_color='#ffefd7', link='Sprint speed'}, | |||
BonusSpiritDamage = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
BonusWeaponDamage = {icon='{{Icon/NoColor|[[File:Bullet Damage.png|link=Weapon Damage|20px]]}}', label_color='#ec981a', link='Weapon Damage'}, | |||
bullet_armor_up = {icon='{{Icon/White|[[File:Barrier.png|link=Barrier|20px]]}}', label_color='#ffefd7', link='Barrier'}, | |||
bullet_damage = {icon='{{Icon/Brown|[[File:Damage.png|link=Weapon Damage|20px]]}}', label_color='#ec981a', link='Weapon Damage'}, | |||
BulletResist = {icon='{{Icon/Brown|[[File:Bullet_Armor.png|link=Damage_Resistance|20px]]}}', label_color='#ec981a', link='Damage_Resistance'}, | |||
cast = {icon='{{Icon/White|[[File:Cast.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
CombatBarrier = {icon='{{Icon/White|[[File:Bullet Armor (item).png|link=Damage_Resistance|20px]]}}', label_color='#ffefd7', link='Barrier'}, | |||
cooldown = {icon='{{Icon/White|[[File:AttributeIconTechDuration.png|link=Ability Cooldown|20px]]}}', label_color='#ffefd7', link='Ability Cooldown'}, | |||
damage = {icon='{{Icon/NoColor|[[File:Damage heart.png|link=Damage|20px]]}}', label_color='#ec981a', link='Damage'}, | |||
FireRate = {icon='{{Icon/White|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
fire_rate = {icon='{{Icon/White|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
Heal = {icon='{{Icon/Green|[[File:Healing.png|link=Health_Regen|20px]]}}', label_color='#13f278', link='Health_Regen'}, | |||
Healing = {icon='{{Icon/Green|[[File:Healing.png|link=Healing|20px]]}}', label_color='#13f278', link='Healing'}, | |||
Immobilize = {icon='{{Icon/White|[[File:Immobilize.png|link=Status Effects#Immobilized|20px]]}}', label_color='#ffefd7', link='Status Effects#Immobilized'}, | |||
invisible = {icon='{{Icon/White|[[File:Invisible.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
KnockBack = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
KnockUp = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
MaxHealth = {icon='{{Icon/Green|[[File:Healing.png|link=Health|20px]]}}', label_color='#13f278', link='Health'}, | |||
MeleeDamage = {icon='{{Icon/Brown|[[File:Melee damage.png|link=Melee Damage|20px]]}}', label_color='#ec981a', link='Melee Damage'}, | |||
MoveSpeed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Move speed|20px]]}}', label_color='#ffefd7', link='Move speed'}, | |||
move_speed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Move speed|20px]]}}', label_color='#ffefd7', link='Move speed'}, | |||
Pull = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
Pulling = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
Pulls = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
ReducedFireRate = {icon='{{Icon/Brown|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
Regen = {icon='{{Icon/Green|[[File:Healing.png|link=Health_Regen|20px]]}}', label_color='#13f278', link='Health_Regen'}, | |||
revealed = {icon='{{Icon/White|[[File:Revealed.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
silence = {icon='{{Icon/White|[[File:Silence.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
Silence = {icon='{{Icon/Purple|[[File:Silence.png|link=Silence|20px]]}}', label_color='#bc8ee8', link='Silence'}, | |||
Slow = {icon='{{Icon/White|[[File:MoveSlow.png|link=Movement_Slow|20px]]}}', label_color='#ffefd7', link='Movement_Slow'}, | |||
slow = {icon='{{Icon/White|[[File:MoveSlow.png|link=Movement_Slow|20px]]}}', label_color='#ffefd7', link='Movement_Slow'}, | |||
SlowResistance = {icon='{{Icon/White|[[File:MoveSlow.png|link=Movement_Slow#Movement_Slow_Resist|20px]]}}', label_color='#ffefd7', link='Movement_Slow#Movement_Slow_Resist'}, | |||
Spirit = {icon='{{Icon/NoColor|[[File:Spirit_icon.png|link=Spirit Power|20px]]}}', label_color='#bc8ee8', link='Spirit Power'}, | |||
SpiritDamage = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
SpiritDPS = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
SpiritIcon = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', link='Spirit Damage'}, | |||
SpiritResist = {icon='{{Icon/Purple|[[File:Spirit_Armor.png|link=Damage_Resistance|20px]]}}', label_color='#bc8ee8', link='Damage_Resistance'}, | |||
StatDesc_TechPower = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
Stun = {icon='{{Icon/White|[[File:Status_Stun.png|link=Stun|20px]]}}', link='Stun'}, | |||
stun = {icon='{{Icon/White|[[File:Stun.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
tech_armor_up = {icon='{{Icon/White|[[File:Barrier.png|link=Barrier|20px]]}}', label_color='#ffefd7', link='Barrier'}, | |||
tech_damage = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', link='Spirit Damage'}, | |||
WeaponDamage = {icon='{{Icon/NoColor|[[File:Bullet Damage.png|link=Weapon Damage|20px]]}}', label_color='#ec981a', link='Weapon Damage'}, | |||
} | |||
-- 1. Highlight, diminish | |||
text = text:gsub('<span class="highlight">(.-)</span>', "<span style='font-weight:bold'>%1</span>") | |||
text = text:gsub('<span class="highlight_spirit">(.-)</span>', '<span style="font-weight:bold; color:#bc8ee8">%1</span>') | text = text:gsub('<span class="highlight_spirit">(.-)</span>', '<span style="font-weight:bold; color:#bc8ee8">%1</span>') | ||
text = text:gsub('<span class="diminish">(.-)</span>', '<span style="font-style:italic;color:#C0C0C0">%1</span>') | |||
text = text:gsub('<span class="diminish">(.-)</span>', '<span style="font-style: italic;color:#C0C0C0">%1</span>') | |||
-- 2. InlineAttributeName | |||
text = text:gsub('< | text = text:gsub('<span class="InlineAttributeName (%w+)">(.-)</span>', function(key, inner) | ||
local replacement = replacements[key] | local replacement = replacements[key] | ||
local label_color = replacement and replacement.label_color or '#ffefd7' | |||
local translated | |||
if inner and inner ~= '' then | |||
translated = inner | |||
else | else | ||
translated = frame:preprocess('{{#invoke:Lang|get_string|InlineAttribute_' .. key .. '}}') | |||
end | end | ||
return string.format('<span style="font-weight:bold; color:%s;">%s</span>', label_color, translated) | |||
end) | end) | ||
-- | |||
-- 3. AbilityPropertyIcon | |||
text = text:gsub('<[Pp]anel class="AbilityPropertyIcon prop_(.-)"[^>]->', function(key) | |||
local replacement = replacements[key] | |||
if replacement then | |||
local icon = replacement.icon or '' | |||
local label_color = replacement.label_color or 'inherit' | |||
local link = replacement.link or '' | |||
local translated = frame:preprocess('{{#invoke:Lang|get_string|InlineAttribute_' .. key .. '}}') | |||
if translated == '' then | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s</span>', label_color, icon) | |||
else | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s [[%s|%s]]</span>', label_color, icon, link, translated) | |||
end | |||
else | |||
return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end | |||
end) | |||
-- 4. InlineAttributeIcon | |||
text = text:gsub('<[Pp]anel class="InlineAttributeIcon (%w+)"[^>]->', function(key) | |||
local replacement = replacements[key] | local replacement = replacements[key] | ||
if replacement then | if replacement then | ||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s</span>', replacement.label_color or 'inherit', replacement.icon or '') | |||
else | else | ||
return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red; | return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | ||
end | end | ||
end) | end) | ||
-- | |||
-- 5. citadel_inline_attribute | |||
text = text:gsub("{g:citadel_inline_attribute:'(.-)'}", function(key) | |||
local replacement = replacements[key] | |||
if replacement then | |||
local icon = replacement.icon or '' | |||
local label_color = replacement.label_color or 'inherit' | |||
local link = replacement.link or '' | |||
local translated = frame:preprocess('{{#invoke:Lang|get_string|InlineAttribute_' .. key .. '}}') | |||
local | if translated == '' then | ||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s</span>', label_color, icon) | |||
else | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s [[%s|%s]]</span>', label_color, icon, link, translated) | |||
end | |||
else | else | ||
return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red; | return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | ||
end | end | ||
end) | |||
-- Force spaces around keybinds | -- 6. Удаляем закрывающие теги panel | ||
text = text:gsub('</[Pp]anel>', '') | |||
-- 7. Keybinds | |||
local KEYBINDS = { | |||
MoveForward = "'''Move Forward button'''", | |||
MoveBackwards = "'''Move Backward button'''", | |||
MoveLeft = "'''Move Left button'''", | |||
MoveRight = "'''Move Right button'''", | |||
Mantle = "'''Jump button'''", | |||
Zipline = "'''Zipline button'''", | |||
Roll = "'''Dash button'''", | |||
Crouch = "'''Crouch button'''", | |||
MoveDown = "'''Fly Down button'''", | |||
MoveUp = "'''Fly Up button'''", | |||
Attack = "'''Fire button'''", | |||
ADS = "'''Alt-Fire button'''", | |||
Reload = "'''Reload button'''", | |||
AbilityMelee = "'''Melee button'''", | |||
HeldItem = "'''Melee Parry/Throw Held Item button'''", | |||
Ability1 = "'''Ability 1 button'''", | |||
Ability2 = "'''Ability 2 button'''", | |||
Ability3 = "'''Ability 3 button'''", | |||
Ability4 = "'''Ability 4 button'''", | |||
AltCast = "'''Alternate Cast'''", | |||
OpenHeroSheet = "'''Open Shop button'''", | |||
PurchaseQuickbuy = "'''Purchase Quickbuy button'''", | |||
Scoreboard = "'''Scoreboard button'''", | |||
OpenMainMenu = "'''Open Main Menu button'''", | |||
PushToTalk = "'''Voice Chat button'''", | |||
Pause = "'''Pause button'''", | |||
ReplayDeath = "'''Replay Death button'''", | |||
HideoutUse = "'''Interact with an object in the Hideout button'''", | |||
HideoutCancelMatchmaking = "'''Cancel Matchmaking button'''", | |||
} | |||
text = text:gsub("{g:citadel_binding:'(.-)'}", function(key) | |||
return KEYBINDS[key] or '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end) | |||
text = text:gsub("{g:citadel_keybind:'(.-)'}", function(key) | |||
return KEYBINDS[key] or '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end) | |||
-- Force spaces around keybinds | |||
text = text:gsub("'''([a-zA-Z])", "''' %1") | text = text:gsub("'''([a-zA-Z])", "''' %1") | ||
text = text:gsub("'''%s+:", "''':") | text = text:gsub("'''%s+:", "''':") | ||
return frame:preprocess(text) | |||
end | end | ||
| Line 204: | Line 222: | ||
local frame | local frame | ||
if type(key) == "table" and key.args then | if type(key) == "table" and key.args then | ||
frame = | frame = key | ||
key = frame.args[1] | |||
lang_code_override = frame.args["lang_code_override"] | |||
fallback_str = frame.args["fallback_str"] | |||
lang_code_override = args["lang_code_override"] | remove_var_index = frame.args["remove_var_index"] | ||
fallback_str = args["fallback_str"] | item_name = frame.args["item_name"] | ||
remove_var_index = args["remove_var_index"] | |||
item_name = args["item_name"] | |||
else | else | ||
frame = mw.getCurrentFrame() | frame = mw.getCurrentFrame() | ||
| Line 279: | Line 295: | ||
-- If value exists, remove non-number symbols (but keep + and -) | -- If value exists, remove non-number symbols (but keep + and -) | ||
if value then | if value then | ||
value = value:gsub("[^0-9+- | value = value:gsub("[^0-9+-]", "") | ||
-- Return empty string if nothing left, otherwise return the filtered value | -- Return empty string if nothing left, otherwise return the filtered value | ||
return value ~= "" and value or variable_name | return value ~= "" and value or variable_name | ||