Tooltips/TimeFMT

* use strings from globalstrings.lua to format time in item and spell tooltips
 * fixed item filter ItemCooldown
 * fixed timeAgo format
 * move item duration to correct position in tooltip
This commit is contained in:
Sarjuuk
2023-03-18 21:30:55 +01:00
parent 6ee0d63766
commit d77e459da3
11 changed files with 273 additions and 40 deletions

View File

@@ -942,7 +942,7 @@ abstract class Filter
public function getExtraCols() public function getExtraCols()
{ {
return $this->formData['extraCols']; return array_unique($this->formData['extraCols']);
} }
public function getSetCriteria() public function getSetCriteria()

View File

@@ -604,16 +604,6 @@ class ItemList extends BaseType
$x .= '<br />'.sprintf(Lang::item($limit['isGem'] ? 'uniqueEquipped' : 'unique', 2), Util::localizedString($limit, 'name'), $limit['count']); $x .= '<br />'.sprintf(Lang::item($limit['isGem'] ? 'uniqueEquipped' : 'unique', 2), Util::localizedString($limit, 'name'), $limit['count']);
} }
// max duration
if ($dur = $this->curTpl['duration'])
{
$rt = '';
if ($this->curTpl['flagsCustom'] & 0x1)
$rt = $interactive ? ' ('.sprintf(Util::$dfnString, 'LANG.tooltip_realduration', Lang::item('realTime')).')' : ' ('.Lang::item('realTime').')';
$x .= "<br />".Lang::game('duration').Lang::main('colon').Util::formatTime(abs($dur) * 1000).$rt;
}
// required holiday // required holiday
if ($eId = $this->curTpl['eventId']) if ($eId = $this->curTpl['eventId'])
if ($hName = DB::Aowow()->selectRow('SELECT h.* FROM ?_holidays h JOIN ?_events e ON e.holidayId = h.id WHERE e.id = ?d', $eId)) if ($hName = DB::Aowow()->selectRow('SELECT h.* FROM ?_holidays h JOIN ?_events e ON e.holidayId = h.id WHERE e.id = ?d', $eId))
@@ -875,6 +865,16 @@ class ItemList extends BaseType
if ($dur = $this->curTpl['durability']) if ($dur = $this->curTpl['durability'])
$x .= sprintf(Lang::item('durability'), $dur, $dur).'<br />'; $x .= sprintf(Lang::item('durability'), $dur, $dur).'<br />';
// max duration
if ($dur = $this->curTpl['duration'])
{
$rt = '';
if ($this->curTpl['flagsCustom'] & 0x1)
$rt = $interactive ? ' ('.sprintf(Util::$dfnString, 'LANG.tooltip_realduration', Lang::item('realTime')).')' : ' ('.Lang::item('realTime').')';
$x .= Lang::formatTime(abs($dur) * 1000, 'item', 'duration').$rt."<br />";
}
$jsg = []; $jsg = [];
// required classes // required classes
if ($classes = Lang::getClassString($this->curTpl['requiredClass'], $jsg)) if ($classes = Lang::getClassString($this->curTpl['requiredClass'], $jsg))
@@ -959,12 +959,18 @@ class ItemList extends BaseType
$extra = []; $extra = [];
if ($cd >= 5000) if ($cd >= 5000)
$extra[] = Lang::game('cooldown', [Util::formatTime($cd, true)]); {
$pt = Util::parseTime($cd);
if (count(array_filter($pt)) == 1) // simple time: use simple method
$extra[] = Lang::formatTime($cd, 'item', 'cooldown');
else // build block with generic time
$extra[] = Lang::item('cooldown', 0, [Lang::formatTime($cd, 'game', 'timeAbbrev', true)]);
}
if ($this->curTpl['spellTrigger'.$j] == 2) if ($this->curTpl['spellTrigger'.$j] == 2)
if ($ppm = $this->curTpl['spellppmRate'.$j]) if ($ppm = $this->curTpl['spellppmRate'.$j])
$extra[] = Lang::spell('ppm', [$ppm]); $extra[] = Lang::spell('ppm', [$ppm]);
$itemSpellsAndTrigger[$this->curTpl['spellId'.$j]] = [$this->curTpl['spellTrigger'.$j], $extra ? ' ('.implode(', ', $extra).')' : '']; $itemSpellsAndTrigger[$this->curTpl['spellId'.$j]] = [$this->curTpl['spellTrigger'.$j], $extra ? ' '.implode(', ', $extra) : ''];
} }
} }
@@ -2437,7 +2443,7 @@ class ItemListFilter extends Filter
$cr[2] *= 1000; // field supplied in milliseconds $cr[2] *= 1000; // field supplied in milliseconds
$this->formData['extraCols'][] = $cr[0]; $this->formData['extraCols'][] = $cr[0];
$this->extraOpts['is']['s'][] = ', IF(spellCooldown1 > 1, spellCooldown1, IF(spellCooldown2 > 1, spellCooldown2, IF(spellCooldown3 > 1, spellCooldown3, IF(spellCooldown4 > 1, spellCooldown4, IF(spellCooldown5 > 1, spellCooldown5,))))) AS cooldown'; $this->extraOpts['is']['s'][] = ', GREATEST(spellCooldown1, spellCooldown2, spellCooldown3, spellCooldown4, spellCooldown5) AS cooldown';
return [ return [
'OR', 'OR',

View File

@@ -1123,10 +1123,7 @@ class SpellList extends BaseType
case 'D': // todo (med): min/max?; /w unit? case 'D': // todo (med): min/max?; /w unit?
$base = $srcSpell->getField('duration'); $base = $srcSpell->getField('duration');
if ($base <= 0) $result[2] = Lang::formatTime($srcSpell->getField('duration'), 'spell', 'duration');
$result[2] = Lang::spell('untilCanceled');
else
$result[2] = Util::formatTime($base, true);
if (in_array($op, $signs) && is_numeric($oparg) && is_numeric($base)) if (in_array($op, $signs) && is_numeric($oparg) && is_numeric($base))
eval("\$base = $base $op $oparg;"); eval("\$base = $base $op $oparg;");
@@ -1907,7 +1904,7 @@ class SpellList extends BaseType
// duration // duration
if ($this->curTpl['duration'] > 0) if ($this->curTpl['duration'] > 0)
$x .= '<span class="q">'.sprintf(Lang::spell('remaining'), Util::formatTime($this->curTpl['duration'])).'<span>'; $x .= '<span class="q">'.Lang::formatTime($this->curTpl['duration'], 'spell', 'timeRemaining').'<span>';
$x .= '</td></tr></table>'; $x .= '</td></tr></table>';

View File

@@ -573,7 +573,7 @@ abstract class Util
return $money; return $money;
} }
private static function parseTime(int $msec) : array public static function parseTime(int $msec) : array
{ {
$time = [0, 0, 0, 0, 0]; $time = [0, 0, 0, 0, 0];
@@ -671,7 +671,7 @@ abstract class Util
else if ($h) // hours, minutes ago else if ($h) // hours, minutes ago
return Lang::main('timeAgo', [$h . ' ' . Lang::timeUnits('ab', 4) . ' ' . $m . ' ' . Lang::timeUnits('ab', 5)]); return Lang::main('timeAgo', [$h . ' ' . Lang::timeUnits('ab', 4) . ' ' . $m . ' ' . Lang::timeUnits('ab', 5)]);
else if ($m) // minutes, seconds ago else if ($m) // minutes, seconds ago
return Lang::main('timeAgo', [$m . ' ' . Lang::timeUnits('ab', 5) . ' ' . $m . ' ' . Lang::timeUnits('ab', 6)]); return Lang::main('timeAgo', [$m . ' ' . Lang::timeUnits('ab', 5) . ' ' . $s . ' ' . Lang::timeUnits('ab', 6)]);
else // seconds ago else // seconds ago
return Lang::main('timeAgo', [$s . ' ' . Lang::timeUnits($s == 1 ? 'sg' : 'pl', 6)]); return Lang::main('timeAgo', [$s . ' ' . Lang::timeUnits($s == 1 ? 'sg' : 'pl', 6)]);
} }

View File

@@ -487,8 +487,39 @@ class Lang
return Util::ucFirst(self::game(Type::getFileString($type))); return Util::ucFirst(self::game(Type::getFileString($type)));
} }
public static function formatTime(int $msec, string $prop = 'game', string $src = 'timeAbbrev', bool $concat = false) : string
{
if ($msec < 0)
$msec = 0;
private static function vspf($var, $args) [$ms, $s, $m, $h, $d] = Util::parseTime($msec);
$ref = [];
$result = [];
if (is_array(self::$$prop[$src]))
$ref = &self::$$prop[$src];
else
{
trigger_error('Lang::formatTime - tried to access undefined property Lang::$'.$prop, E_USER_WARNING);
return '';
}
if ($d >= 1)
$result[] = self::vspf($ref[4], [$d + $h / 24]);
if ($h >= 1 && ($concat || !$result))
$result[] = self::vspf($ref[3], [$h + $m / 60]);
if ($m >= 1 && ($concat || !$result))
$result[] = self::vspf($ref[2], [$m + $s / 60]);
if ($s >= 1 && ($concat || !$result))
$result[] = self::vspf($ref[1], [$s]);
if (!$result)
$result[] = self::vspf($ref[0]);
return implode(', ', $result);
}
private static function vspf($var, array $args = [])
{ {
if (is_array($var)) if (is_array($var))
{ {

View File

@@ -358,6 +358,13 @@ $lang = array(
'modes' => [-1 => "Beliebig", "Normal / Normal 10", "Heroisch / Normal 25", "Heroisch 10", "Heroisch 25"], 'modes' => [-1 => "Beliebig", "Normal / Normal 10", "Heroisch / Normal 25", "Heroisch 10", "Heroisch 25"],
'expansions' => ["Classic", "The Burning Crusade", "Wrath of the Lich King"], 'expansions' => ["Classic", "The Burning Crusade", "Wrath of the Lich King"],
'stats' => ["Stärke", "Beweglichkeit", "Ausdauer", "Intelligenz", "Willenskraft"], 'stats' => ["Stärke", "Beweglichkeit", "Ausdauer", "Intelligenz", "Willenskraft"],
'timeAbbrev' => array(
'',
"%d |4Sek.:Sek.;",
"%d |4Min.:Min.;",
"%d |4Std.:Std.;",
"%d |4Tag:Tage;"
),
'sources' => array( 'sources' => array(
"Unbekannt", "Hergestellt", "Drop", "PvP", "Quest", "Händler", "Unbekannt", "Hergestellt", "Drop", "PvP", "Quest", "Händler",
"Lehrer", "Entdeckung", "Einlösung", "Talent", "Startausrüstung", "Ereignis", "Lehrer", "Entdeckung", "Einlösung", "Talent", "Startausrüstung", "Ereignis",
@@ -1445,12 +1452,10 @@ $lang = array(
'_transfer' => 'Dieser Zauber wird mit <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> vertauscht, wenn Ihr zur <span class="icon-%s">%s</span> wechselt.', '_transfer' => 'Dieser Zauber wird mit <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> vertauscht, wenn Ihr zur <span class="icon-%s">%s</span> wechselt.',
'currentArea' => '&lt;Momentanes Gebiet&gt;', 'currentArea' => '&lt;Momentanes Gebiet&gt;',
'discovered' => "Durch Geistesblitz erlernt", 'discovered' => "Durch Geistesblitz erlernt",
'ppm' => "%s Auslösungen pro Minute", 'ppm' => "(%s Auslösungen pro Minute)",
'procChance' => "Procchance", 'procChance' => "Procchance",
'starter' => "Basiszauber", 'starter' => "Basiszauber",
'trainingCost' => "Trainingskosten", 'trainingCost' => "Trainingskosten",
'remaining' => "Noch %s",
'untilCanceled' => "bis Abbruch",
'castIn' => "Wirken in %s Sek.", 'castIn' => "Wirken in %s Sek.",
'instantPhys' => "Sofort", 'instantPhys' => "Sofort",
'instantMagic' => "Spontanzauber", 'instantMagic' => "Spontanzauber",
@@ -1467,6 +1472,20 @@ $lang = array(
'stackGroup' => "Stack Gruppierung", 'stackGroup' => "Stack Gruppierung",
'linkedWith' => "Verknüpft mit", 'linkedWith' => "Verknüpft mit",
'_scaling' => "Skalierung", '_scaling' => "Skalierung",
'duration' => array(
"bis Abbruch",
"%.2G Sek.",
"%.2G Min.",
"%.2G |4Stunde:Stunden;",
"%.2G |4Tag:Tage;"
),
'timeRemaining' => array(
"",
"Noch %d |4Sekunde:Sekunden;",
"Noch %d |4Minute:Minuten;",
"Noch %d |4Stunde:Stunden;",
"Noch %d |4Tag:Tage;"
),
'scaling' => array( 'scaling' => array(
'directSP' => "+%.2f%% der Zaubermacht zum direkten Effekt", 'directAP' => "+%.2f%% der Angriffskraft zum direkten Effekt", 'directSP' => "+%.2f%% der Zaubermacht zum direkten Effekt", 'directAP' => "+%.2f%% der Angriffskraft zum direkten Effekt",
'dotSP' => "+%.2f%% der Zaubermacht pro Tick", 'dotAP' => "+%.2f%% der Angriffskraft pro Tick" 'dotSP' => "+%.2f%% der Zaubermacht pro Tick", 'dotAP' => "+%.2f%% der Angriffskraft pro Tick"
@@ -1783,6 +1802,20 @@ $lang = array(
'uniqueEquipped'=> ["Einzigartig anlegbar", null, "Einzigartig angelegt: %s (%d)"], 'uniqueEquipped'=> ["Einzigartig anlegbar", null, "Einzigartig angelegt: %s (%d)"],
'speed' => "Tempo", 'speed' => "Tempo",
'dps' => "(%.1f Schaden pro Sekunde)", 'dps' => "(%.1f Schaden pro Sekunde)",
'duration' => array( // ITEM_DURATION_*
'',
"Dauer: %d Sek.",
"Dauer: %d Min.",
"Dauer: %d |4Stunde:Stunden;",
"Dauer: %d |4Tag:Tage;"
),
'cooldown' => array( // ITEM_COOLDOWN_TOTAL*
'(%s Abklingzeit)',
"(%d Sek. Abklingzeit)",
"(%d Min. Abklingzeit)",
"(%d |4Stunde:Stunden; Abklingzeit)",
"(%d |4Tag:Tage; Abklingzeit)"
),
'damage' => array( // *DAMAGE_TEMPLATE* 'damage' => array( // *DAMAGE_TEMPLATE*
// basic, basic /w school, add basic, add basic /w school // basic, basic /w school, add basic, add basic /w school
'single' => ['%d Schaden', '%1$d %2$sschaden', '+ %1$d Schaden', '+ %1$d %2$sschaden' ], 'single' => ['%d Schaden', '%1$d %2$sschaden', '+ %1$d Schaden', '+ %1$d %2$sschaden' ],

View File

@@ -358,6 +358,13 @@ $lang = array(
'modes' => [-1 => "Any", "Normal / Normal 10", "Heroic / Normal 25", "Heroic 10", "Heroic 25"], 'modes' => [-1 => "Any", "Normal / Normal 10", "Heroic / Normal 25", "Heroic 10", "Heroic 25"],
'expansions' => ["Classic", "The Burning Crusade", "Wrath of the Lich King"], 'expansions' => ["Classic", "The Burning Crusade", "Wrath of the Lich King"],
'stats' => ["Strength", "Agility", "Stamina", "Intellect", "Spirit"], 'stats' => ["Strength", "Agility", "Stamina", "Intellect", "Spirit"],
'timeAbbrev' => array( // <time>S_ABBR
'',
"%d |4Sec:Sec;",
"%d |4Min:Min;",
"%d |4Hr:Hr;",
"%d |4Day:Days;"
),
'sources' => array( 'sources' => array(
"Unknown", "Crafted", "Drop", "PvP", "Quest", "Vendor", "Unknown", "Crafted", "Drop", "PvP", "Quest", "Vendor",
"Trainer", "Discovery", "Redemption", "Talent", "Starter", "Event", "Trainer", "Discovery", "Redemption", "Talent", "Starter", "Event",
@@ -1445,12 +1452,10 @@ $lang = array(
'_transfer' => 'This spell will be converted to <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> if you transfer to <span class="icon-%s">%s</span>.', '_transfer' => 'This spell will be converted to <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> if you transfer to <span class="icon-%s">%s</span>.',
'currentArea' => '&lt;current area&gt;', 'currentArea' => '&lt;current area&gt;',
'discovered' => "Learned via discovery", 'discovered' => "Learned via discovery",
'ppm' => "%s procs per minute", 'ppm' => "(%s procs per minute)",
'procChance' => "Proc chance", 'procChance' => "Proc chance",
'starter' => "Starter spell", 'starter' => "Starter spell",
'trainingCost' => "Training cost", 'trainingCost' => "Training cost",
'remaining' => "%s remaining", // SPELL_TIME_REMAINING_*
'untilCanceled' => "until cancelled", // SPELL_DURATION_UNTIL_CANCELLED
'castIn' => "%s sec cast", // SPELL_CAST_TIME_SEC 'castIn' => "%s sec cast", // SPELL_CAST_TIME_SEC
'instantPhys' => "Instant", // SPELL_CAST_TIME_INSTANT_NO_MANA 'instantPhys' => "Instant", // SPELL_CAST_TIME_INSTANT_NO_MANA
'instantMagic' => "Instant cast", // SPELL_CAST_TIME_INSTANT 'instantMagic' => "Instant cast", // SPELL_CAST_TIME_INSTANT
@@ -1467,6 +1472,20 @@ $lang = array(
'stackGroup' => "Stack Group", 'stackGroup' => "Stack Group",
'linkedWith' => "Linked with", 'linkedWith' => "Linked with",
'_scaling' => "Scaling", '_scaling' => "Scaling",
'duration' => array( // SPELL_DURATION_*
"until cancelled",
"%.2G sec",
"%.2G min",
"%.2G |4hour:hrs;",
"%.2G |4day:days;"
),
'timeRemaining' => array( // SPELL_TIME_REMAINING_*
"",
"%d |4second:seconds; remaining",
"%d |4minute:minutes; remaining",
"%d |4hour:hours; remaining",
"%d |4day:days; remaining"
),
'scaling' => array( 'scaling' => array(
'directSP' => "+%.2f%% of spell power to direct component", 'directAP' => "+%.2f%% of attack power to direct component", 'directSP' => "+%.2f%% of spell power to direct component", 'directAP' => "+%.2f%% of attack power to direct component",
'dotSP' => "+%.2f%% of spell power per tick", 'dotAP' => "+%.2f%% of attack power per tick" 'dotSP' => "+%.2f%% of spell power per tick", 'dotAP' => "+%.2f%% of attack power per tick"
@@ -1783,6 +1802,20 @@ $lang = array(
'uniqueEquipped'=> ["Unique-Equipped", null, "Unique-Equipped: %s (%d)"], // ITEM_UNIQUE_EQUIPPABLE, null, ITEM_LIMIT_CATEGORY_MULTIPLE 'uniqueEquipped'=> ["Unique-Equipped", null, "Unique-Equipped: %s (%d)"], // ITEM_UNIQUE_EQUIPPABLE, null, ITEM_LIMIT_CATEGORY_MULTIPLE
'speed' => "Speed", // SPEED 'speed' => "Speed", // SPEED
'dps' => "(%.1f damage per second)", // DPS_TEMPLATE 'dps' => "(%.1f damage per second)", // DPS_TEMPLATE
'duration' => array( // ITEM_DURATION_*
'',
"Duration: %d sec",
"Duration: %d min",
"Duration: %d |4hour:hrs;",
"Duration: %d |4day:days;"
),
'cooldown' => array( // ITEM_COOLDOWN_TOTAL*
"(%s Cooldown)",
"(%d Sec Cooldown)",
"(%d Min Cooldown)",
"(%d |4Hour:Hours; Cooldown)",
"(%d |4Day:Days; Cooldown)"
),
'damage' => array( // *DAMAGE_TEMPLATE* 'damage' => array( // *DAMAGE_TEMPLATE*
// basic, basic /w school, add basic, add basic /w school // basic, basic /w school, add basic, add basic /w school
'single' => ["%d Damage", "%d %s Damage", "+ %d Damage", "+%d %s Damage" ], 'single' => ["%d Damage", "%d %s Damage", "+ %d Damage", "+%d %s Damage" ],

View File

@@ -358,6 +358,13 @@ $lang = array(
'modes' => [-1 => "Cualquiera", "Normal / Normal 10", "Heroico / Normal 25", "Heróico 10", "Heróico 25"], 'modes' => [-1 => "Cualquiera", "Normal / Normal 10", "Heroico / Normal 25", "Heróico 10", "Heróico 25"],
'expansions' => ["World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"], 'expansions' => ["World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"],
'stats' => ["Fuerza", "Agilidad", "Aguante", "Intelecto", "Espíritu"], 'stats' => ["Fuerza", "Agilidad", "Aguante", "Intelecto", "Espíritu"],
'timeAbbrev' => array(
'',
"%d |4s:s;",
"%d |4min:min;",
"%d |4h:h;",
"%d |4Día:Días;"
),
'sources' => array( 'sources' => array(
"Desconocido", "Creado", "Encontrado", "JcJ", "Misión", "Vendedor", "Desconocido", "Creado", "Encontrado", "JcJ", "Misión", "Vendedor",
"Entrenador", "Descubierto", "Redención", "Talento", "Habilidad Inicial", "Evento", "Entrenador", "Descubierto", "Redención", "Talento", "Habilidad Inicial", "Evento",
@@ -1445,12 +1452,10 @@ $lang = array(
'_transfer' => 'Este hechizo será convertido a <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> si lo transfieres a la <span class="icon-%s">%s</span>.', '_transfer' => 'Este hechizo será convertido a <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> si lo transfieres a la <span class="icon-%s">%s</span>.',
'currentArea' => '&lt;current area&gt;', 'currentArea' => '&lt;current area&gt;',
'discovered' => "Aprendido via descubrimiento", 'discovered' => "Aprendido via descubrimiento",
'ppm' => "%s procs por minuto", 'ppm' => "(%s procs por minuto)",
'procChance' => "Probabilidad de que accione", 'procChance' => "Probabilidad de que accione",
'starter' => "Hechizo inicial", 'starter' => "Hechizo inicial",
'trainingCost' => "Costo de enseñanza", 'trainingCost' => "Costo de enseñanza",
'remaining' => "%s restantes",
'untilCanceled' => "hasta que se cancela",
'castIn' => "Hechizo de %s seg", 'castIn' => "Hechizo de %s seg",
'instantPhys' => "Instante", 'instantPhys' => "Instante",
'instantMagic' => "Hechizo instantáneo", 'instantMagic' => "Hechizo instantáneo",
@@ -1467,6 +1472,20 @@ $lang = array(
'stackGroup' => "Grupo de aplilamiento", 'stackGroup' => "Grupo de aplilamiento",
'linkedWith' => "Asociado con", 'linkedWith' => "Asociado con",
'_scaling' => "Escala", '_scaling' => "Escala",
'duration' => array(
"hasta cancelación",
"%.2G s",
"%.2G min",
"%.2G |4hora:horas;",
"%.2G |4día:días;"
),
'timeRemaining' => array(
"",
"%d |4segundo restante:segundos restantes;",
"%d |4minuto restante:minutos restantes;",
"%d |4hora restante:horas restantes;",
"%d |4día restante:días restantes;"
),
'scaling' => array( 'scaling' => array(
'directSP' => "+%.2f%% del poder de hechizo al componente directo", 'directAP' => "+%.2f%% del poder de ataque al componente directo", 'directSP' => "+%.2f%% del poder de hechizo al componente directo", 'directAP' => "+%.2f%% del poder de ataque al componente directo",
'dotSP' => "+%.2f%% del poder de hechizo por tick", 'dotAP' => "+%.2f%% del poder de ataque por tick" 'dotSP' => "+%.2f%% del poder de hechizo por tick", 'dotAP' => "+%.2f%% del poder de ataque por tick"
@@ -1783,6 +1802,20 @@ $lang = array(
'uniqueEquipped'=> ["Único-Equipado", null, "Único-Equipado: %s (%d)"], 'uniqueEquipped'=> ["Único-Equipado", null, "Único-Equipado: %s (%d)"],
'speed' => "Veloc.", 'speed' => "Veloc.",
'dps' => "(%.1f daño por segundo)", 'dps' => "(%.1f daño por segundo)",
'duration' => array(
'',
"Duración: %d s",
"Duración: %d min",
"Duración: %d |4h:h;",
"Duración: %d |4día:días;"
),
'cooldown' => array(
"(%s tiempo de reutilización)",
"(Tiempo de reutilización: %d s)",
"(Tiempo de reutilización: %d min)",
"(%d |4Hora:Horas; Tiempo de reutilización)",
"(%d |4Día:Días; Tiempo de reutilización)"
),
'damage' => array( // *DAMAGE_TEMPLATE* 'damage' => array( // *DAMAGE_TEMPLATE*
// basic, basic /w school, add basic, add basic /w school // basic, basic /w school, add basic, add basic /w school
"single" => ["%d Daño", "%d %s Daño", "+ %d daño", "+%d %s daños" ], "single" => ["%d Daño", "%d %s Daño", "+ %d daño", "+%d %s daños" ],

View File

@@ -358,6 +358,13 @@ $lang = array(
'modes' => [-1 => "Tout", "Standard / Normal 10", "Héroïque / Normal 25", "10 héroïque", "25 héroïque"], 'modes' => [-1 => "Tout", "Standard / Normal 10", "Héroïque / Normal 25", "10 héroïque", "25 héroïque"],
'expansions' => ["Classique", "The Burning Crusade", "Wrath of the Lich King"], 'expansions' => ["Classique", "The Burning Crusade", "Wrath of the Lich King"],
'stats' => ["Force", "Agilité", "Endurance", "Intelligence", "Esprit"], 'stats' => ["Force", "Agilité", "Endurance", "Intelligence", "Esprit"],
'timeAbbrev' => array(
'',
"%d |4sec:sec;",
"%d |4min:min;",
"%d |4h:h;",
"%d |4jour:jours;"
),
'sources' => array( 'sources' => array(
"Inconnu", "Fabriqué", "Butin", "JcJ", "Quête", "Vendeur", "Inconnu", "Fabriqué", "Butin", "JcJ", "Quête", "Vendeur",
"Maître", "Découverte", "Échange d'un code", "Talent", "Débutant", "Événement", "Maître", "Découverte", "Échange d'un code", "Talent", "Débutant", "Événement",
@@ -1445,12 +1452,10 @@ $lang = array(
'_transfer' => 'Cet sort sera converti en <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> si vous transférez en <span class="icon-%s">%s</span>.', '_transfer' => 'Cet sort sera converti en <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a> si vous transférez en <span class="icon-%s">%s</span>.',
'currentArea' => '&lt;current area&gt;', 'currentArea' => '&lt;current area&gt;',
'discovered' => "Appris via une découverte", 'discovered' => "Appris via une découverte",
'ppm' => "%s déclenchements par minute", 'ppm' => "(%s déclenchements par minute)",
'procChance' => "Chance", 'procChance' => "Chance",
'starter' => "Sortilège initiaux", 'starter' => "Sortilège initiaux",
'trainingCost' => "Coût d'entraînement", 'trainingCost' => "Coût d'entraînement",
'remaining' => "%s restantes",
'untilCanceled' => "jusquà annulation",
'castIn' => "%s s d'incantation", 'castIn' => "%s s d'incantation",
'instantPhys' => "Incantation immédiate", 'instantPhys' => "Incantation immédiate",
'instantMagic' => "Instantanée", 'instantMagic' => "Instantanée",
@@ -1467,6 +1472,20 @@ $lang = array(
'stackGroup' => "[Stack Group]", 'stackGroup' => "[Stack Group]",
'linkedWith' => "[Linked with]", 'linkedWith' => "[Linked with]",
'_scaling' => "[Scaling]", '_scaling' => "[Scaling]",
'duration' => array(
"jusquà annulation",
"%.2G sec.",
"%.2G min",
"%.2G h",
"%.2G |4jour:jours;"
),
'timeRemaining' => array(
"",
"%d |4seconde restante:secondes restantes;",
"%d |4minute restante:minutes restantes;",
"%d |4heure restante:heures restantes;",
"%d |4jour restant:jours restants;"
),
'scaling' => array( 'scaling' => array(
'directSP' => "+%.2f%% de la puissance des sorts directe", 'directAP' => "+%.2f%% de la puissance d'attaque directe", 'directSP' => "+%.2f%% de la puissance des sorts directe", 'directAP' => "+%.2f%% de la puissance d'attaque directe",
'dotSP' => "+%.2f%% de la puissance des sorts par tick", 'dotAP' => "+%.2f%% de la puissance d'attaque par tick" 'dotSP' => "+%.2f%% de la puissance des sorts par tick", 'dotAP' => "+%.2f%% de la puissance d'attaque par tick"
@@ -1783,6 +1802,20 @@ $lang = array(
'uniqueEquipped'=> ["Unique - Equipé", null, "Unique - Equipé: %s (%d)"], // ITEM_UNIQUE_EQUIPPABLE, null, ITEM_LIMIT_CATEGORY_MULTIPLE 'uniqueEquipped'=> ["Unique - Equipé", null, "Unique - Equipé: %s (%d)"], // ITEM_UNIQUE_EQUIPPABLE, null, ITEM_LIMIT_CATEGORY_MULTIPLE
'speed' => "Vitesse", 'speed' => "Vitesse",
'dps' => "(%.1f dégâts par seconde)", 'dps' => "(%.1f dégâts par seconde)",
'duration' => array(
'',
"Durée : %d sec",
"Durée : %d min",
"Durée : %d |4heure:heures;",
"Durée : %d |4jour:jours;"
),
'cooldown' => array(
"(%s de recharge)",
"(%d sec. de recharge)",
"(%d min de recharge)",
"(%d |4heure:heures; de recharge)",
"(%d |4jour:jours; de recharge)"
),
'damage' => array( // *DAMAGE_TEMPLATE* 'damage' => array( // *DAMAGE_TEMPLATE*
// basic, basic /w school, add basic, add basic /w school // basic, basic /w school, add basic, add basic /w school
'single' => ["%d Dégâts", "%d points de dégâts (%s)", "+ %d points de dégâts", "+ %d points de dégâts (%s)" ], 'single' => ["%d Dégâts", "%d points de dégâts (%s)", "+ %d points de dégâts", "+ %d points de dégâts (%s)" ],

View File

@@ -358,6 +358,13 @@ $lang = array(
'modes' => [-1 => "Все", "Обычный / 10-норм.", "Героический / 25-норм.", "10-героич", "25-героич"], 'modes' => [-1 => "Все", "Обычный / 10-норм.", "Героический / 25-норм.", "10-героич", "25-героич"],
'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"), 'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"),
'stats' => array("к силе", "к ловкости", "к выносливости", "к интеллекту", "к духу"), 'stats' => array("к силе", "к ловкости", "к выносливости", "к интеллекту", "к духу"),
'timeAbbrev' => array(
'',
"%d с.",
"%d мин.",
"%d ч.",
"%d д."
),
'sources' => array( 'sources' => array(
"Неизвестно", "Ремесло", "Добыча", "PvP", "Задание", "Продавец", "Неизвестно", "Ремесло", "Добыча", "PvP", "Задание", "Продавец",
"Тренер", "Открытие", "Рекламная акция", "Талант", "Начальное заклинание", "Мероприятие", "Тренер", "Открытие", "Рекламная акция", "Талант", "Начальное заклинание", "Мероприятие",
@@ -1445,12 +1452,10 @@ $lang = array(
'_transfer' => 'Этот предмет превратится в <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a>, если вы перейдете за <span class="icon-%s">%s</span>.', '_transfer' => 'Этот предмет превратится в <a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a>, если вы перейдете за <span class="icon-%s">%s</span>.',
'currentArea' => '&lt;current area&gt;', 'currentArea' => '&lt;current area&gt;',
'discovered' => "Изучается путём освоения местности", 'discovered' => "Изучается путём освоения местности",
'ppm' => "Срабатывает %s раз в минуту", 'ppm' => "(Срабатывает %s раз в минуту)",
'procChance' => "Шанс срабатывания", 'procChance' => "Шанс срабатывания",
'starter' => "Начальное заклинание", 'starter' => "Начальное заклинание",
'trainingCost' => "Цена обучения", 'trainingCost' => "Цена обучения",
'remaining' => "Осталось: %s",
'untilCanceled' => "до отмены",
'castIn' => "Применение: %s сек.", 'castIn' => "Применение: %s сек.",
'instantPhys' => "Мгновенное действие", 'instantPhys' => "Мгновенное действие",
'instantMagic' => "Мгновенное действие", 'instantMagic' => "Мгновенное действие",
@@ -1467,6 +1472,20 @@ $lang = array(
'stackGroup' => "[Stack Group]", 'stackGroup' => "[Stack Group]",
'linkedWith' => "[Linked with]", 'linkedWith' => "[Linked with]",
'_scaling' => "[Scaling]", '_scaling' => "[Scaling]",
'duration' => array(
"до отмены",
"%.2G сек",
"%.2G мин",
"%.2G ч",
"%.2G д"
),
'timeRemaining' => array(
"",
"Осталось: %d |4секунда:секунды:секунд;",
"Осталось: %d |4минута:минуты:минут;",
"Осталось: %d |4час:часа:часов;",
"Осталось: %d |4день:дня:дней;"
),
'scaling' => array( 'scaling' => array(
'directSP' => "[+%.2f%% of spell power to direct component]", 'directAP' => "[+%.2f%% of attack power to direct component]", 'directSP' => "[+%.2f%% of spell power to direct component]", 'directAP' => "[+%.2f%% of attack power to direct component]",
'dotSP' => "[+%.2f%% of spell power per tick]", 'dotAP' => "[+%.2f%% of attack power per tick]" 'dotSP' => "[+%.2f%% of spell power per tick]", 'dotAP' => "[+%.2f%% of attack power per tick]"
@@ -1783,6 +1802,21 @@ $lang = array(
'uniqueEquipped'=> ["Уникальный использующийся", null, "Уникальный использующийся предмет: %s (%d)"], 'uniqueEquipped'=> ["Уникальный использующийся", null, "Уникальный использующийся предмет: %s (%d)"],
'speed' => "Скорость", 'speed' => "Скорость",
'dps' => "(%.1f ед. урона в секунду)", 'dps' => "(%.1f ед. урона в секунду)",
'duration' => array(
'',
"Срок действия: %d |4секунда:секунды:секунд;",
"Срок действия: %d |4минута:минуты:минут;",
"Исчезнет через %d ч.",
"Исчезнет через %d д."
),
'cooldown' => array(
"(Восстановление: %s)",
"(Восстановление: %d сек.)",
"(Восстановление: %d мин.)",
"(Восстановление: %d |4час:часа:часов;)",
"(Восстановление: %d |4день:дня:дней;)"
),
'damage' => array( // *DAMAGE_TEMPLATE* 'damage' => array( // *DAMAGE_TEMPLATE*
// basic, basic /w school, add basic, add basic /w school // basic, basic /w school, add basic, add basic /w school
'single' => ["Урон: %d", "%d ед. |3-6(%s)", "+ %d ед. урона", "+%d ед. урона (%s)" ], 'single' => ["Урон: %d", "%d ед. |3-6(%s)", "+ %d ед. урона", "+%d ед. урона (%s)" ],

View File

@@ -357,6 +357,13 @@ $lang = array(
'modes' => [-1 => "任何", "普通 / 普通 10人", "英雄 / 普通 25人", "英雄 10人", "英雄 25人"], 'modes' => [-1 => "任何", "普通 / 普通 10人", "英雄 / 普通 25人", "英雄 10人", "英雄 25人"],
'expansions' => ["经典旧世", "燃烧的远征", "巫妖王之怒"], 'expansions' => ["经典旧世", "燃烧的远征", "巫妖王之怒"],
'stats' => ["力量", "敏捷", "耐力", "智力", "精神"], 'stats' => ["力量", "敏捷", "耐力", "智力", "精神"],
'timeAbbrev' => array(
'',
"%d|4秒:秒;",
"%d|4分钟:分钟;",
"%d|4小时:小时;",
"%d|4天:天;"
),
'sources' => array( 'sources' => array(
"未知", "已制造", "掉落", "PvP", "任务", "未知", "已制造", "掉落", "PvP", "任务",
"商人", "训练师", "发现", "救赎", "天赋", "商人", "训练师", "发现", "救赎", "天赋",
@@ -1444,12 +1451,10 @@ $lang = array(
'_transfer' => '这个法术将被转换到<a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a>,如果你转移到<span class="icon-%s">%s</span>。', '_transfer' => '这个法术将被转换到<a href="?spell=%d" class="q%d icontiny tinyspecial" style="background-image: url('.STATIC_URL.'/images/wow/icons/tiny/%s.gif)">%s</a>,如果你转移到<span class="icon-%s">%s</span>。',
'currentArea' => '&lt;current area&gt;', 'currentArea' => '&lt;current area&gt;',
'discovered' => "Learned via discovery", 'discovered' => "Learned via discovery",
'ppm' => "%s每分钟触发几率", 'ppm' => "(%s每分钟触发几率)",
'procChance' => "触发几率", 'procChance' => "触发几率",
'starter' => "Starter spell", 'starter' => "Starter spell",
'trainingCost' => "训练成本", 'trainingCost' => "训练成本",
'remaining' => "持续%s",
'untilCanceled' => "直到主动取消",
'castIn' => "%s秒施法时间", 'castIn' => "%s秒施法时间",
'instantPhys' => "瞬发", 'instantPhys' => "瞬发",
'instantMagic' => "瞬发", 'instantMagic' => "瞬发",
@@ -1466,6 +1471,20 @@ $lang = array(
'stackGroup' => "Stack Group", 'stackGroup' => "Stack Group",
'linkedWith' => "Linked with", 'linkedWith' => "Linked with",
'_scaling' => "缩放比例", '_scaling' => "缩放比例",
'duration' => array(
"直到主动取消",
"%.2G秒",
"%.2G分钟",
"%.2G小时",
"%.2G天"
),
'timeRemaining' => array(
"",
"剩余%d秒",
"剩余%d分钟",
"剩余%d小时",
"剩余%d天"
),
'scaling' => array( 'scaling' => array(
'directSP' => "+%.2f%% of spell power to direct component", 'directAP' => "+%.2f%% of attack power to direct component", 'directSP' => "+%.2f%% of spell power to direct component", 'directAP' => "+%.2f%% of attack power to direct component",
'dotSP' => "+%.2f%% of spell power per tick", 'dotAP' => "+%.2f%% of attack power per tick" 'dotSP' => "+%.2f%% of spell power per tick", 'dotAP' => "+%.2f%% of attack power per tick"
@@ -1782,6 +1801,20 @@ $lang = array(
'uniqueEquipped'=> ["装备唯一", null, "装备唯一:%s %d"], 'uniqueEquipped'=> ["装备唯一", null, "装备唯一:%s %d"],
'speed' => "速度", 'speed' => "速度",
'dps' => "(每秒伤害%.1f", 'dps' => "(每秒伤害%.1f",
'duration' => array(
'',
"持续时间:%d秒",
"持续时间:%d分钟",
"持续时间:%d小时",
"持续时间:%d天"
),
'cooldown' => array(
"%s冷却",
"(%d秒冷却时间)",
"(%d分钟冷却时间)",
"(%d小时冷却时间)",
"(%d天冷却时间)"
),
'damage' => array( 'damage' => array(
// basic, basic /w school, add basic, add basic /w school // basic, basic /w school, add basic, add basic /w school
'single' => ["%d点伤害", "%d点%s伤害", "+ %d伤害", "+%d %s伤害" ], 'single' => ["%d点伤害", "%d点%s伤害", "+ %d伤害", "+%d %s伤害" ],