Repository navigation
Translation audit: fr/ru/es/de/pt/chi for the 33 plugins with phrase files + typo fixes #5
Description
Hi! I went through every sm-plugin-* repo that ships a .phrases.txt (33 of them) and prepared one patch per repo:
- every phrase now has en, fr, ru, es, de, pt, chi (existing extra languages such as
zho,fi,ar… are kept, never removed) - spelling/grammar fixes in existing languages, including English, plus a few stale translations that no longer matched the English text
- no code change: phrase names,
#formatlines,{N}parameters, color tags,%s/\nescapes, encoding, BOM and CRLF/LF are untouched (checked by a script against the original files: 0 errors on all 38 files; PropWatch gets newfr/es/de/pt/chi/subfolder files like the existingru/one)
Patches (git am-ready, one per repo): https://gist.github.com/WareZ57/76680446b96d69fc8cf11aee20ce96e1
curl -sL https://gist.githubusercontent.com/WareZ57/76680446b96d69fc8cf11aee20ce96e1/raw/KnockbackRestrict.patch | git amCustomChatColors is shipped base64-encoded (CustomChatColors.patch.b64) because allchat.phrases.txt contains raw \x01/\x03 color bytes that gists reject: base64 -d CustomChatColors.patch.b64 | git am.
Repos covered
BlockerPasses, BoostAlert, BossHUD, CustomChatColors, Extend, FixMemoryLeak, FunModes, GlowColors, HideTeammates, HitMarker, KnockbackRestrict, NameFilter, NoBlock, NoShake, Prop, PropWatch, RadioSpamBlock, RenderDistance, ResetScore, Shop_CreditsDistributor, Shop_MathCredits, Shop_Paintball, Shop_ZRSkins, ShowDamage, StopSound, TopDefenders, TopInfectors, TriggerWatcher, VIP_Test, VIP_Tracers, VIP_VIPsOnline, ZR_LaserMines, ZR_RepeatKillDetector
Notable fixes to existing text
- HideTeammates (ru): 8 phrases were stale after the en rewording (still said "Включено", "Всей карте" for All Teammates, typo "Диапозон"); stray
{green}removed - VIP_Test (fr): "Les fonctionnalités VIP sera disponible…" → wrong agreement and meaning; fi rewritten too
- VIP_VIPsOnline: cze
PANEL_CLOSEwas still English ("Exit"), de said "Verlassen" instead of "Schließen" - FixMemoryLeak: en "has not be set"; zho/chi typos 以→已, 在→再, 一→已; ru Scheduled/Canceled turned into verbs since they're inserted mid-sentence
- RadioSpamBlock (ru) "новго", Shop_Paintball (ru) "ууль", GlowColors (ru) "доступка", Shop_MathCredits (ru) missing half sentence
- Prop / ResetScore (en): "reseted" → "reset"; TopDefenders (en): "have" → "has" (admin name is prepended)
- HitMarker (zho): simplified 弹 in the traditional line
- FunModes
VIPMode_VIPDeathLaser(en): "Refusing Killing All humans!" → "Humans will not be killed!" (matchesRemoveClientVIP(client, false)) - French typography/accents in TriggerWatcher, BoostAlert, BossHUD, NoShake ("Le Map" → "La map")
Code issues found along the way (not in the patches)
- FunModes
VIPMode.sp:300:RemoveClientVIP(client, false)is called without a translation, thenRemoveClientVIPrunsCPrintToChatAll("%s %t", tag, "", client)→Language phrase "" not founderror on every laser death of a VIP. - BossHUD
BossHUD.sp:811: "Show health has been" is followed by raw EnglishEnabled/Disabled, so the message is half-English in every language. - KnockbackRestrict
KnockbackRestrict.sp:1212-1220: the "Minutes"/"Hours" phrase names are passed as plain%s, so the time left inRestrictTimeLeftis always English. - Prop: phrases "Enabled"/"Disabled" are unused.
Partially addresses srcdslab/sm-plugin-HideTeammates#1 ("Better translations").
Open question: ~55 other plugins still print hard-coded English (SprayManager, ExtraCommands, SelfMute…). Happy to help convert them to %t if you want that, one repo at a time.
Activity
Rushaway commentedon Nov 1, 2026
Thanks a lot for this audit, it was really useful. Everything is now up as PRs, and you are co-author of every commit.
Your 33 patches
They are applied, reviewed and completed, one PR per repo:
srcdslab/sm-plugin-BlockerPasses#16, srcdslab/sm-plugin-BoostAlert#37, srcdslab/sm-plugin-BossHUD#61, srcdslab/sm-plugin-CustomChatColors#107, srcdslab/sm-plugin-Extend#33, srcdslab/sm-plugin-FixMemoryLeak#43, srcdslab/sm-plugin-FunModes#55, srcdslab/sm-plugin-GlowColors#43, srcdslab/sm-plugin-HideTeammates#28, srcdslab/sm-plugin-HitMarker#35, srcdslab/sm-plugin-KnockbackRestrict#68, srcdslab/sm-plugin-NameFilter#34, srcdslab/sm-plugin-NoBlock#33, srcdslab/sm-plugin-NoShake#36, srcdslab/sm-plugin-Prop#4, srcdslab/sm-plugin-PropWatch#27, srcdslab/sm-plugin-RadioSpamBlock#29, srcdslab/sm-plugin-RenderDistance#29, srcdslab/sm-plugin-ResetScore#27, srcdslab/sm-plugin-Shop_CreditsDistributor#20, srcdslab/sm-plugin-Shop_MathCredits#20, srcdslab/sm-plugin-Shop_Paintball#29, srcdslab/sm-plugin-Shop_ZRSkins#33, srcdslab/sm-plugin-StopSound#37, srcdslab/sm-plugin-TopDefenders#65, srcdslab/sm-plugin-TopInfectors#48, srcdslab/sm-plugin-TriggerWatcher#38, srcdslab/sm-plugin-VIP_Test#37, srcdslab/sm-plugin-VIP_Tracers#30, srcdslab/sm-plugin-VIP_VIPsOnline#32, srcdslab/sm-plugin-ZR_LaserMines#29, srcdslab/sm-plugin-ZR_RepeatKillDetector#35, srcdslab/sm-plugin-ShowDamage#5
Compared with the gist:
allchat.phrases.txtlines had lost the raw\x01/\x03bytes ofen. They are restored byte for byte.smtranslate --languages en,fr,ru,es,de,pt,chiwith 0 errors and 0 warnings, and CI is green.The code issues you listed
%T, in one player's language.sm_subtracthpreply.RestrictedPermaOffline, which declared{2:N}but is given a name string, so the permanent offline kban announcement errored.The review found a few more translation bugs, fixed in the same PRs:
sm_forcerestartcmds.@alltarget names untranslated.Repos with phrase files that the audit did not cover
These had whole languages missing: srcdslab/sm-plugin-mapchooser-extended#130, srcdslab/sm-plugin-ZLeader#23, srcdslab/sm-plugin-entwatch-4#131, srcdslab/sm-plugin-MusicName#12, srcdslab/sm-plugin-autosilencer#26, srcdslab/sm-plugin-nativevotes#5, srcdslab/sm-plugin-QuakeSounds#47, srcdslab/sm-plugin-Shop-Core#17, srcdslab/sm-plugin-VIP-Core#36.
entwatch-4 also gets the 2 phrases its code uses but the file lacked. Shop-Core's release package now ships its translations, which it never did before.
Your open question: yes, and it's done
The plugins that printed hard-coded English now have a phrase file with the 7 languages, which CI lints and packages:
srcdslab/sm-plugin-ExtraCommands#40, srcdslab/sm-plugin-CommandBlocker#20, srcdslab/sm-plugin-ConVarEnforcer#4, srcdslab/sm-plugin-ConVarSuppression#26, srcdslab/sm-plugin-CommandHelper#25, srcdslab/sm-plugin-ConsoleChatManager#52, srcdslab/sm-plugin-FixHostTimeScale#23, srcdslab/sm-plugin-SMTextReplace#29, srcdslab/sm-plugin-DevZones#26, srcdslab/sm-plugin-SaveLevel#36, srcdslab/sm-plugin-Teleport#26, srcdslab/sm-plugin-stripper#20, srcdslab/sm-plugin-EntWatch-Maker#10, srcdslab/sm-plugin-FireCustomizer#4, srcdslab/sm-plugin-SelfMute#41, srcdslab/sm-plugin-SelfMuteRadio#29, srcdslab/sm-plugin-Spectate#51, srcdslab/sm-plugin-ThirdPerson#42, srcdslab/sm-plugin-TeamManager#47, srcdslab/sm-plugin-Parachute#14, srcdslab/sm-plugin-Laser#32, srcdslab/sm-plugin-ZR_PersonalSkins#43, srcdslab/sm-plugin-VScript-MakoReactor#32, srcdslab/sm-plugin-PotcVote#31, srcdslab/sm-plugin-TogsJumpStats#30, srcdslab/sm-plugin-AntiBhopCheat#42, srcdslab/sm-plugin-SelectiveBhop#28, srcdslab/sm-plugin-AdvancedTargeting#41, srcdslab/sm-plugin-LagCompensation#40, srcdslab/sm-plugin-Shop_Chat#30, srcdslab/sm-plugin-AFKManager#52, srcdslab/sm-plugin-ForceInputs#30, srcdslab/sm-plugin-ConnectAnnounce#68, srcdslab/sm-plugin-KnifeMode#53, srcdslab/sm-plugin-CallAdmin#56, srcdslab/sm-plugin-CancelKnife#27, srcdslab/sm-plugin-VIP_FreeVIPGiveaway#32, srcdslab/sm-plugin-CountryTags#40, srcdslab/sm-plugin-GrenadeManager#3, srcdslab/sm-plugin-ZR_Ammo#25, srcdslab/sm-plugin-AdvancedAdminList#43, srcdslab/sm-plugin-Shop_Nades#19, srcdslab/sm-plugin-Shop_Top10#27, srcdslab/sm-plugin-Shop_Trails#30, srcdslab/sm-plugin-Shop_Aura#23, srcdslab/sm-plugin-VIP_SourcemodFlags#32, srcdslab/sm-plugin-NoAloneInfectionNoArmor#4, srcdslab/sm-plugin-Shop_GrenadeTrails#19, srcdslab/sm-plugin-Shop_OnlineCredits#18, srcdslab/sm-plugin-Shop_Tracers#19, srcdslab/sm-plugin-Shop_WeaponColors#19, srcdslab/sm-plugin-SprayManager#68, srcdslab/sm-plugin-CIDR#34, srcdslab/sm-plugin-FamilyShareManager#38, srcdslab/sm-plugin-FixSprayExploit#39, srcdslab/sm-plugin-PlayerManager#55, srcdslab/sm-plugin-ProxyKiller#50, srcdslab/sm-plugin-ZEEliteDetector#52, srcdslab/sm-plugin-AutoRecorder#19
Skipped for now:
MultiColors'
CShowActivity2formatted the message once in the server language, so every translated admin-activity line reached all players in the server language. The fix is srcdslab/sm-plugin-MultiColors#5.Still left (not in these PRs)
Hard-coded English remains in plugins that already have phrase files:
WareZ57 commentedon Nov 1, 2026
Thanks for picking this up so fast! I checked all 81 translation PRs you opened against what I had prepared (CI-like build with spcomp 1.12 + a phrase linter that also flags phrases missing a language): all build, no phrase-file errors, and the typos / code issues listed above are fixed 👍
What was still missing is now up for review, without duplicating your work:
Follow-ups targeting your
feat/translationsbranches (only the additions show — hard-coded messages that your PR, which completes the existing phrase file, didn't convert):As patches (GitHub is rate-limiting fork creation on my account, so these 5 couldn't become PRs yet). Each is 2 commits (translation + version bump), builds with spcomp 1.12 and passes the phrase check:
feat/translations(#40): thesm_uptimereply to the server console was still English (text + the "%d Days … Seconds" value; the existing "Uptime Value" phrase has colour tags that would show raw in the console, so a colour-free one is added).master(no translation PR yet): hard-coded messages converted, new phrase file in en/fr/ru/es/de/pt/chi, CI packages translations. AdminRoom will conflict with the old #34 if that one is merged first.Apply with
git am(save the block to a file first).ExtraCommands.patch
AdminRoom.patch
BossHP.patch
BotManager.patch
VIP_Neon.patch
feat(i18n): complete fr, ru, es, de, pt, chi (#130)