From 99d5cbd52e7281d435ded25a652b5fce34c2ac50 Mon Sep 17 00:00:00 2001 From: sindoring Date: Sun, 15 Mar 2026 17:10:33 +0400 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interface/GlueXML/CharacterCreate.lua | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/patch-ruRU-5/Interface/GlueXML/CharacterCreate.lua b/patch-ruRU-5/Interface/GlueXML/CharacterCreate.lua index 648e333..6fe0576 100644 --- a/patch-ruRU-5/Interface/GlueXML/CharacterCreate.lua +++ b/patch-ruRU-5/Interface/GlueXML/CharacterCreate.lua @@ -82,6 +82,38 @@ local classTooltips = {}; local detailedRaceTooltips = {}; local detailedClassTooltips = {}; +local function UTF8Chars(text) + return string.gmatch(text or "", "[%z\1-\127\194-\244][\128-\191]*") +end + +local function UTF8Length(text) + local length = 0 + for _ in UTF8Chars(text) do + length = length + 1 + end + return length +end + +local function UTF8Sub(text, startChar, endChar) + local chars = {} + local currentChar = 1 + + startChar = math.max(startChar or 1, 1) + endChar = endChar or UTF8Length(text) + + for char in UTF8Chars(text) do + if currentChar >= startChar and currentChar <= endChar then + chars[#chars + 1] = char + elseif currentChar > endChar then + break + end + + currentChar = currentChar + 1 + end + + return table.concat(chars) +end + local function HideAllTooltips() for button, tooltip in pairs(raceTooltips) do if tooltip then @@ -1056,16 +1088,16 @@ function CharacterCreateEnumerateClasses(...) if className == "Caballero de la Muerte" then button.nameFrame.text:SetText("Caballero\nde la Muerte"); - elseif string.len(className) > 12 then + elseif UTF8Length(className) > 12 then local spacePos = string.find(className, " ", 6) if spacePos then local firstPart = string.sub(className, 1, spacePos - 1); local secondPart = string.sub(className, spacePos + 1); button.nameFrame.text:SetText(firstPart .. "\n" .. secondPart); else - local midPoint = math.floor(string.len(className) / 2); - local firstPart = string.sub(className, 1, midPoint); - local secondPart = string.sub(className, midPoint + 1); + local midPoint = math.floor(UTF8Length(className) / 2); + local firstPart = UTF8Sub(className, 1, midPoint); + local secondPart = UTF8Sub(className, midPoint + 1); button.nameFrame.text:SetText(firstPart .. "-\n" .. secondPart); end else