Skip to content

Commit 5ca1bf1

Browse files
author
web3blind
committed
Fix missing game UI translations
1 parent 4af0898 commit 5ca1bf1

4 files changed

Lines changed: 41 additions & 5 deletions

File tree

app/js/i18n/en.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,7 @@ var LangEN = {
119119
char_intellect: 'Intellect',
120120
char_fortune: 'Fortune',
121121
char_core: 'Magic Core',
122-
char_stats_growth_hint: 'Stats grow from level, Core power, equipment, enchantments, and rare trophies. To improve one specific stat, find or craft items with that stat in the bag and workshop.',
123-
char_stats_growth_hint: 'Stats grow from level, Core power, equipment, enchantments, and rare trophies. To improve one specific stat, find or craft items with that stat in the bag and workshop.',
122+
char_stats_growth_hint: 'Stats grow from level, Core power, equipment, enchantments, and rare trophies. To improve one specific stat, find or craft items with that stat in the bag and workshop.',
124123
char_core_power: 'Core Power',
125124
char_core_per_stat: 'Core Power / 5: +{value} to each main stat',
126125
char_mana_regen: 'Mana Regeneration',
@@ -141,6 +140,12 @@ var LangEN = {
141140
spell_grand_covenant_desc: 'The ultimate healing spell. Full restoration and shield.',
142141
char_achievements: 'Achievements',
143142
char_strengthen_core: 'Strengthen Core',
143+
char_level_up: 'Level up',
144+
stat_pot: 'Potency',
145+
stat_res: 'Resilience',
146+
stat_swf: 'Swiftness',
147+
stat_int: 'Intellect',
148+
stat_for: 'Fortune',
144149

145150
// Hunt
146151
hunt_title: 'Hunt',
@@ -334,6 +339,11 @@ var LangEN = {
334339
narrator_duel_challenge: '{opponent} challenges you to a duel!',
335340
narrator_duel_won: 'You won the duel!',
336341
narrator_duel_lost: 'You lost the duel.',
342+
duel_narrator_pre: 'Duel with {opponent}. Best of 3 rounds.',
343+
duel_narrator_seal: 'Seal phase. Choose your spell. {seconds} seconds.',
344+
duel_narrator_sealed: 'Sealed. Waiting for opponent.',
345+
duel_narrator_waiting: 'Waiting for opponent\'s move.',
346+
duel_narrator_reveal: 'Reveal. {myIntent} versus {oppIntent}. {result}.',
337347

338348
// Rarity
339349
rarity_common: 'Common',
@@ -398,6 +408,8 @@ var LangEN = {
398408
guild_joined: 'You joined the guild!',
399409
guild_created: 'Guild created!',
400410
guild_not_member: 'You are not in a guild. Create your own or join an existing one.',
411+
guild_join_requirements: 'You can request to join public guilds from level {level}.',
412+
guild_join_locked: 'Requires level {level}',
401413
guild_sync_hint: 'Syncing with the World. Guilds and invites will appear after sync completes.',
402414
guild_recommended: 'Recommended Guilds',
403415
guild_members: 'Members',

app/js/i18n/ru.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ var LangRU = {
140140
spell_grand_covenant_desc: 'Величайшее исцеляющее заклинание. Полное восстановление и щит.',
141141
char_achievements: 'Достижения',
142142
char_strengthen_core: 'Усилить Ядро',
143+
char_level_up: 'Новый уровень',
144+
stat_pot: 'Сила',
145+
stat_res: 'Защита',
146+
stat_swf: 'Скорость',
147+
stat_int: 'Дух',
148+
stat_for: 'Удача',
143149

144150
// Hunt
145151
hunt_title: 'Охота',
@@ -333,6 +339,11 @@ var LangRU = {
333339
narrator_duel_challenge: '{opponent} вызывает тебя на дуэль!',
334340
narrator_duel_won: 'Ты победил в дуэли!',
335341
narrator_duel_lost: 'Ты проиграл дуэль.',
342+
duel_narrator_pre: 'Дуэль с {opponent}. Лучшая из 3 раундов.',
343+
duel_narrator_seal: 'Фаза печати. Выбери заклинание. {seconds} секунд.',
344+
duel_narrator_sealed: 'Запечатано. Ожидание противника.',
345+
duel_narrator_waiting: 'Ожидание хода противника.',
346+
duel_narrator_reveal: 'Раскрытие. {myIntent} против {oppIntent}. {result}.',
336347

337348
// Rarity
338349
rarity_common: 'Обычный',
@@ -397,6 +408,8 @@ var LangRU = {
397408
guild_joined: 'Вы вступили в гильдию!',
398409
guild_created: 'Гильдия создана!',
399410
guild_not_member: 'Вы не состоите в гильдии. Создайте свою или вступите в существующую.',
411+
guild_join_requirements: 'Подать заявку в открытую гильдию можно с {level} уровня.',
412+
guild_join_locked: 'Нужен уровень {level}',
400413
guild_sync_hint: 'Идёт синхронизация с Миром. Гильдии и приглашения появятся после завершения загрузки.',
401414
guild_recommended: 'Рекомендуемые Гильдии',
402415
guild_members: 'Участники',

app/sw.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Viz Magic — Service Worker
2-
var CACHE_NAME = 'viz-magic-v10';
2+
var CACHE_NAME = 'viz-magic-v11';
33
var ASSETS = [
44
'/',
55
'/index.html',

tests/player-bug-regressions.test.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,22 @@ test('chronicle keeps loaded tabs visible and shows sent blessings immediately',
124124

125125
test('guild joining explains and enforces preparation requirements', function () {
126126
assert.ok(/var GUILD_JOIN_MIN_LEVEL = 4/.test(guildJs), 'guild join level gate should be explicit');
127-
assert.ok(/guild_join_requirements/.test(guildJs + ruJs + enJs), 'guild screen should explain join requirements');
128-
assert.ok(/guild_join_locked/.test(guildJs + ruJs + enJs), 'locked join button copy missing');
127+
assert.ok(/guild_join_requirements/.test(guildJs), 'guild screen should explain join requirements');
128+
assert.ok(/guild_join_requirements:\s*'[^']*\{level\}/.test(enJs), 'English guild join requirements copy missing');
129+
assert.ok(/guild_join_requirements:\s*'[^']*\{level\}/.test(ruJs), 'Russian guild join requirements copy missing');
130+
assert.ok(/guild_join_locked/.test(guildJs), 'locked join button key missing');
131+
assert.ok(/guild_join_locked:\s*'[^']*\{level\}/.test(enJs), 'English locked join button copy missing');
132+
assert.ok(/guild_join_locked:\s*'[^']*\{level\}/.test(ruJs), 'Russian locked join button copy missing');
129133
assert.ok(/character\.level < GUILD_JOIN_MIN_LEVEL/.test(guildJs), 'join handler should guard low-level direct clicks');
130134
});
131135

136+
test('high-traffic UI narration and inventory stat labels are translated', function () {
137+
['char_level_up', 'stat_pot', 'stat_res', 'stat_swf', 'stat_int', 'stat_for', 'duel_narrator_pre', 'duel_narrator_seal', 'duel_narrator_sealed', 'duel_narrator_waiting', 'duel_narrator_reveal'].forEach(function (key) {
138+
assert.ok(enJs.indexOf(key + ':') !== -1, 'English translation missing: ' + key);
139+
assert.ok(ruJs.indexOf(key + ':') !== -1, 'Russian translation missing: ' + key);
140+
});
141+
});
142+
132143
test('leaderboard has local character fallback while 24h scan is empty or slow', function () {
133144
assert.ok(/function _fallbackRowsFromState/.test(leaderboardJs), 'leaderboard should expose local fallback rows');
134145
assert.ok(/rows = _fallbackRowsFromState\(\)/.test(leaderboardJs), 'leaderboard should use fallback when snapshot rows are empty');

0 commit comments

Comments
 (0)