implemented generic filters

- what which index does needs to be implemented in the implementation
- differences to wowhead
   * strings in criteria are more lenient and will also work with partial matches
   * the ? and * wildcards are supported
This commit is contained in:
Sarjuuk
2013-03-23 14:50:01 +01:00
parent 58316679bf
commit c045fe1081
22 changed files with 3312 additions and 2072 deletions

254
includes/class.filter.php Normal file
View File

@@ -0,0 +1,254 @@
<?php
if(!defined('AOWOW_REVISION'))
die("illegal access");
abstract class Filter
{
private static $pattern = "/[^\p{L}0-9\s\-\'\?\*]/ui";// delete any char not in unicode, number, hyphen, single quote or common wildcard
private static $wildcards = ['*' => '%', '?' => '_'];
private static $criteria = ['cr', 'crs', 'crv']; // [cr]iterium, [cr].[s]ign, [cr].[v]alue
private $fiData = ['c' => [], 'v' =>[]];
private $query = '';
private $form = []; // unsanitized: needed to preselect form-fields
private $setCr = []; // unsanitized: needed to preselect criteria
public $error = false; // erronous search fields
// parse the provided request into a usable format; recall self with GET-params if nessecary
public function init()
{
// prefer POST over GET, translate to url
if (!empty($_POST))
{
foreach ($_POST as $k => $v)
{
if (is_array($v)) // array -> max depths:1
{
if ($k == 'cr' && empty($v[0]))
continue;
$sub = [];
foreach ($v as $sk => $sv)
{
$sv = str_replace("'", "\'", stripslashes($sv));
$sub[$sk] = is_numeric($sv) ? (int)$sv : urlencode($sv);
}
if (!empty($sub) && in_array($k, Filter::$criteria))
$this->fiData['c'][$k] = $sub;
else if (!empty($sub))
$this->fiData['v'][$k] = $sub;
}
else // stings and integer
{
$v = str_replace("'", "\'", stripslashes($v));
if (in_array($k, Filter::$criteria))
$this->fiData['c'][$k] = is_numeric($v) ? (int)$v : urlencode($v);
else
$this->fiData['v'][$k] = is_numeric($v) ? (int)$v : urlencode($v);
}
}
// create get-data
$tmp = [];
foreach (array_merge($this->fiData['c'], $this->fiData['v']) as $k => $v)
{
if ($v == '')
continue;
else if (is_array($v))
$tmp[$k] = $k."=".implode(':', $v);
else
$tmp[$k] = $k."=".$v;
}
// do get request
$this->redirect(implode(';', $tmp));
}
// sanitize input and build sql
else if (!empty($_GET['filter']))
{
$tmp = explode(';', $_GET['filter']);
$cr = $crs = $crv = [];
foreach (Filter::$criteria as $c)
{
foreach ($tmp as $i => $term)
{
if (strpos($term, $c.'=') === 0)
{
$$c = explode(':', explode('=', $term)[1]);
$this->setCr[$c] = json_encode($$c, JSON_NUMERIC_CHECK);
unset($tmp[$i]);
}
}
}
for ($i = 0; $i < max(count($cr), count($crv), count($crs)); $i++)
{
if (!isset($cr[$i]) || !isset($crs[$i]) || !isset($crv[$i]) ||
!intVal($cr[$i]) || $crs[$i] == '' || $crv[$i] == '')
{
$this->error = true;
continue;
}
$this->sanitize($crv[$i]);
if ($crv[$i] != '')
{
$this->fiData['c']['cr'][] = intVal($cr[$i]);
$this->fiData['c']['crs'][] = $crs[$i];
$this->fiData['c']['crv'][] = $crv[$i];
}
else
$this->error = true;
}
foreach ($tmp as $v)
{
$w = explode('=', $v);
if (strstr($w[1], ':'))
{
$tmp2 = explode(':', $w[1]);
$this->form[$w[0]] = $tmp2;
array_walk($tmp2, function(&$v) { $v = intVal($v); });
$this->fiData['v'][$w[0]] = $tmp2;
}
else
{
$this->form[$w[0]] = $w[1];
$this->sanitize($w[1]);
if ($w[1] != '')
$this->fiData['v'][$w[0]] = is_numeric($w[1]) ? (int)$w[1] : $w[1];
else
$this->error = true;
}
}
return $this->fiData;
}
}
public function buildQuery()
{
if (!empty($this->query))
return $this->query;
$parts = [];
// values
$parts = $this->createSQLForValues($this->fiData['v']);
// criteria
$c = &$this->fiData['c'];
if (!empty($c))
{
if (is_array($c['cr']))
{
for ($i = 0; $i < count($c['cr']); $i++)
$parts[] = $this->createSQLForCriterium(array($c['cr'][$i], $c['crs'][$i], $c['crv'][$i]));
}
else
$parts[] = $this->createSQLForCriterium(array($c['cr'], $c['crs'], $c['crv']));
}
$this->query = empty($parts) ? '' : '('.implode(empty($this->fiData['v']['ma']) ? ' AND ' : ' OR ', $parts).')';
return $this->query;
}
public function getQuery()
{
return $this->query;
}
public function getForm()
{
return $this->form;
}
public function getSetCriteria()
{
if (!empty($this->setCr['cr']))
return sprintf(Util::$setCriteriaString, $this->setCr['cr'], $this->setCr['crs'], $this->setCr['crv']);
else
return null;
}
// santas little helper..
protected function int2Op($int)
{
switch ($int)
{
case 1: return '>';
case 2: return '>=';
case 3: return '=';
case 4: return '<=';
case 5: return '<';
default: die('invalid op');
}
}
protected function int2Bool($int)
{
switch ($int)
{
case 1: return true;
case 2: return false;
default: die('invalid op');
}
}
protected function list2Mask($list)
{
$mask = 0x0;
if (is_array($list))
{
foreach ($list as $itm)
$mask += (1 << intVal($itm));
}
else
$mask = (1 << intVal($list));
return $mask;
}
private function sanitize(&$str)
{
$str = preg_replace(Filter::$pattern, '', trim($str));
$str = strtr($str, Filter::$wildcards);
}
// if called with POST-data, convert to GET request and call self
private function redirect($get)
{
header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace('index.php', '', $_SERVER['PHP_SELF']).'?'.$_SERVER['QUERY_STRING'].'='.$get);
}
protected function createSQLForCommunity($cr)
{
switch ($cr[0])
{
case 14: // has Comments [y|n]
return ''; // IN / NOT IN (select Ids FROM aowow_comments ON type = X AND id Y and flags = valid)
case 15: // has Screenshots [y|n]
return ''; // IN / NOT IN (select Ids FROM aowow_screenshots ON type = X AND id Y and flags = valid)
case 16: // has Videos [y|n]
return ''; // IN / NOT IN (select Ids FROM aowow_videos ON type = X AND id Y and flags = valid)
}
}
// apply Util::sqlEscape() and intVal() in the implementation of these
abstract protected function createSQLForCriterium($cr);
abstract protected function createSQLForValues($vl);
}
?>

View File

@@ -503,7 +503,7 @@ class ItemList extends BaseType
// required skill // required skill
if ($this->curTpl['RequiredSkill']) if ($this->curTpl['RequiredSkill'])
{ {
$skillText = DB::Aowow()->selectRow('SELECT * FROM ?_skill WHERE skillId = ?d', $this->curTpl['RequiredSkill']); $skillText = DB::Aowow()->selectRow('SELECT * FROM ?_skill WHERE skillID = ?d', $this->curTpl['RequiredSkill']);
$x .= '<br />'.Lang::$game['requires'].' <a class="q1" href="?skill='.$this->curTpl['RequiredSkill'].'">'.Util::localizedString($skillText, 'name').'</a>'; $x .= '<br />'.Lang::$game['requires'].' <a class="q1" href="?skill='.$this->curTpl['RequiredSkill'].'">'.Util::localizedString($skillText, 'name').'</a>';
if ($this->curTpl['RequiredSkillRank']) if ($this->curTpl['RequiredSkillRank'])
$x .= ' ('.$this->curTpl['RequiredSkillRank'].')'; $x .= ' ('.$this->curTpl['RequiredSkillRank'].')';
@@ -832,8 +832,9 @@ class ItemList extends BaseType
{ {
$eqpSplList = new SpellList(array(['id', $equipSpells])); $eqpSplList = new SpellList(array(['id', $equipSpells]));
$stats = $eqpSplList->getStatGain(); $stats = $eqpSplList->getStatGain();
foreach ($stats as $mId => $qty)
if ($qty > 0) foreach ($stats as $stat)
foreach ($stat as $mId => $qty)
@$this->itemMods[$this->id][$mId] += $qty; @$this->itemMods[$this->id][$mId] += $qty;
} }

View File

@@ -8,12 +8,12 @@ class ItemsetList extends BaseType
private $classes = []; // used to build g_classes private $classes = []; // used to build g_classes
public $pieceToSet = []; // used to build g_items and search public $pieceToSet = []; // used to build g_items and search
protected $setupQuery = 'SELECT *, id AS ARRAY_KEY FROM ?_itemset WHERE [filter] [cond] ORDER BY maxlevel ASC'; protected $setupQuery = 'SELECT *, id AS ARRAY_KEY FROM ?_itemset WHERE [filter] [cond] ORDER BY maxlevel DESC';
protected $matchQuery = 'SELECT COUNT(1) FROM ?_itemset WHERE [filter] [cond]'; protected $matchQuery = 'SELECT COUNT(1) FROM ?_itemset WHERE [filter] [cond]';
public function __construct($data) public function __construct($data, $applyFilter = false)
{ {
parent::__construct($data); parent::__construct($data, $applyFilter);
// post processing // post processing
while ($this->iterate()) while ($this->iterate())
@@ -62,7 +62,8 @@ class ItemsetList extends BaseType
'heroic' => $this->curTpl['heroic'] == 1, // we want to be bool 'heroic' => $this->curTpl['heroic'] == 1, // we want to be bool
'reqclass' => $this->curTpl['classMask'], 'reqclass' => $this->curTpl['classMask'],
'classes' => $this->curTpl['classes'], 'classes' => $this->curTpl['classes'],
'pieces' => $this->curTpl['pieces'] 'pieces' => $this->curTpl['pieces'],
'heroic' => $this->curTpl['heroic']
); );
} }
@@ -75,7 +76,7 @@ class ItemsetList extends BaseType
(new CharClassList(array(['id', $this->classes])))->addGlobalsToJscript($refs); (new CharClassList(array(['id', $this->classes])))->addGlobalsToJscript($refs);
if ($this->pieceToSet) if ($this->pieceToSet)
(new ItemList(array(['i.entry', array_keys($this->pieceToSet)])))->addGlobalsToJscript($refs); (new ItemList(array(['i.entry', array_keys($this->pieceToSet)], 0)))->addGlobalsToJscript($refs);
} }
public function addRewardsToJScript(&$ref) { } public function addRewardsToJScript(&$ref) { }

View File

@@ -14,9 +14,9 @@ class SpellList extends BaseType
protected $setupQuery = 'SELECT *, id AS ARRAY_KEY FROM ?_spell WHERE [filter] [cond] GROUP BY Id ORDER BY Id ASC'; protected $setupQuery = 'SELECT *, id AS ARRAY_KEY FROM ?_spell WHERE [filter] [cond] GROUP BY Id ORDER BY Id ASC';
protected $matchQuery = 'SELECT COUNT(1) FROM ?_spell WHERE [filter] [cond]'; protected $matchQuery = 'SELECT COUNT(1) FROM ?_spell WHERE [filter] [cond]';
public function __construct($conditions) public function __construct($conditions, $applyFilter = false)
{ {
parent::__construct($conditions); parent::__construct($conditions, $applyFilter);
if ($this->error) if ($this->error)
return; return;
@@ -50,10 +50,12 @@ class SpellList extends BaseType
// required for itemSet-bonuses and socket-bonuses // required for itemSet-bonuses and socket-bonuses
public function getStatGain() public function getStatGain()
{ {
$stats = []; $data = [];
while ($this->iterate()) while ($this->iterate())
{ {
$stats = [];
for ($i = 1; $i <= 3; $i++) for ($i = 1; $i <= 3; $i++)
{ {
if (!in_array($this->curTpl["effect".$i."AuraId"], [13, 22, 29, 34, 35, 83, 84, 85, 99, 124, 135, 143, 158, 161, 189, 230, 235, 240, 250])) if (!in_array($this->curTpl["effect".$i."AuraId"], [13, 22, 29, 34, 35, 83, 84, 85, 99, 124, 135, 143, 158, 161, 189, 230, 235, 240, 250]))
@@ -216,9 +218,11 @@ class SpellList extends BaseType
break; break;
} }
} }
$data[$this->id] = $stats;
} }
return $stats; return $data;
} }
// description-, buff-parsing component // description-, buff-parsing component
@@ -247,7 +251,7 @@ class SpellList extends BaseType
} }
// description-, buff-parsing component // description-, buff-parsing component
private function resolveVariableString($variable, $level) private function resolveVariableString($variable, $level, $interactive)
{ {
$signs = ['+', '-', '/', '*', '%', '^']; $signs = ['+', '-', '/', '*', '%', '^'];
@@ -323,7 +327,7 @@ class SpellList extends BaseType
} }
// Aura end // Aura end
if ($rType) if ($rType && $interactive)
$str .= '<!--rtg'.$rType.'-->'.$base."&nbsp;<small>(".Util::setRatingLevel($level, $rType, $base).")</small>"; $str .= '<!--rtg'.$rType.'-->'.$base."&nbsp;<small>(".Util::setRatingLevel($level, $rType, $base).")</small>";
else else
$str .= $base; $str .= $base;
@@ -439,7 +443,7 @@ class SpellList extends BaseType
} }
// Aura end // Aura end
if ($rType) if ($rType && $interactive)
return '<!--rtg'.$rType.'-->'.abs($base)."&nbsp;<small>(".Util::setRatingLevel($level, $rType, abs($base)).")</small>"; return '<!--rtg'.$rType.'-->'.abs($base)."&nbsp;<small>(".Util::setRatingLevel($level, $rType, abs($base)).")</small>";
else else
return $base; return $base;
@@ -549,7 +553,7 @@ class SpellList extends BaseType
} }
// Aura end // Aura end
if ($rType && $equal) if ($rType && $equal && $interactive)
return '<!--rtg'.$rType.'-->'.$min."&nbsp;<small>(".Util::setRatingLevel($level, $rType, $min).")</small>"; return '<!--rtg'.$rType.'-->'.$min."&nbsp;<small>(".Util::setRatingLevel($level, $rType, $min).")</small>";
else else
return $min . (!$equal ? Lang::$game['valueDelim'] . $max : null); return $min . (!$equal ? Lang::$game['valueDelim'] . $max : null);
@@ -603,7 +607,7 @@ class SpellList extends BaseType
} }
// description-, buff-parsing component // description-, buff-parsing component
private function resolveFormulaString($formula, $precision = 0, $level) private function resolveFormulaString($formula, $precision = 0, $level, $interactive)
{ {
// step 1: formula unpacking redux // step 1: formula unpacking redux
while (($formStartPos = strpos($formula, '${')) !== false) while (($formStartPos = strpos($formula, '${')) !== false)
@@ -639,7 +643,7 @@ class SpellList extends BaseType
++$formCurPos; // for some odd reason the precision decimal survives if wo dont increment further.. ++$formCurPos; // for some odd reason the precision decimal survives if wo dont increment further..
} }
$formOutStr = $this->resolveFormulaString($formOutStr, $formPrecision, $level); $formOutStr = $this->resolveFormulaString($formOutStr, $formPrecision, $level, $interactive);
$formula = substr_replace($formula, $formOutStr, $formStartPos, ($formCurPos - $formStartPos)); $formula = substr_replace($formula, $formOutStr, $formStartPos, ($formCurPos - $formStartPos));
} }
@@ -663,7 +667,7 @@ class SpellList extends BaseType
continue; continue;
} }
$pos += strlen($result[0]); $pos += strlen($result[0]);
$str .= $this->resolveVariableString($result, $level); $str .= $this->resolveVariableString($result, $level, $interactive);
} }
$str .= substr($formula, $pos); $str .= substr($formula, $pos);
$str = str_replace('#', '$', $str); // reset marks $str = str_replace('#', '$', $str); // reset marks
@@ -676,7 +680,7 @@ class SpellList extends BaseType
// should probably used only once to create ?_spell. come to think of it, it yields the same results every time.. it absolutely has to! // should probably used only once to create ?_spell. come to think of it, it yields the same results every time.. it absolutely has to!
// although it seems to be pretty fast, even on those pesky test-spells with extra complex tooltips (Ron Test Spell X)) // although it seems to be pretty fast, even on those pesky test-spells with extra complex tooltips (Ron Test Spell X))
public function parseText($type = 'description', $level = MAX_LEVEL) public function parseText($type = 'description', $level = MAX_LEVEL, $interactive = false)
{ {
// oooo..kaaayy.. parsing text in 6 or 7 easy steps // oooo..kaaayy.. parsing text in 6 or 7 easy steps
// we don't use the internal iterator here. This func has to be called for the individual template. // we don't use the internal iterator here. This func has to be called for the individual template.
@@ -902,7 +906,7 @@ class SpellList extends BaseType
++$formCurPos; // for some odd reason the precision decimal survives if wo dont increment further.. ++$formCurPos; // for some odd reason the precision decimal survives if wo dont increment further..
} }
$formOutStr = $this->resolveFormulaString($formOutStr, $formPrecision, $level); $formOutStr = $this->resolveFormulaString($formOutStr, $formPrecision, $level, $interactive);
$data = substr_replace($data, $formOutStr, $formStartPos, ($formCurPos - $formStartPos)); $data = substr_replace($data, $formOutStr, $formStartPos, ($formCurPos - $formStartPos));
} }
@@ -929,7 +933,7 @@ class SpellList extends BaseType
$pos += strlen($result[0]); $pos += strlen($result[0]);
$resolved = $this->resolveVariableString($result, $level); $resolved = $this->resolveVariableString($result, $level, $interactive);
$str .= intVal($resolved) ? abs($resolved) : $resolved; $str .= intVal($resolved) ? abs($resolved) : $resolved;
} }
$str .= substr($data, $pos); $str .= substr($data, $pos);

View File

@@ -106,6 +106,11 @@ define('ITEMINFO_LOOT', 0x8);
define('MAX_LEVEL', 80); define('MAX_LEVEL', 80);
// Sides
define('SIDE_ALLIANCE', 1);
define('SIDE_HORDE', 2);
define('SIDE_BOTH', 3);
// ClassMask // ClassMask
define('CLASS_WARRIOR', 0x1); define('CLASS_WARRIOR', 0x1);
define('CLASS_PALADIN', 0x2); define('CLASS_PALADIN', 0x2);

View File

@@ -20,7 +20,7 @@ require 'includes/class.database.php';
// autoload any List-Classes // autoload any List-Classes
spl_autoload_register(function ($class) { spl_autoload_register(function ($class) {
if (strpos($class, 'List')) if (strpos($class, 'List') && !strpos($class, 'Filter'))
require 'includes/class.'.strtr($class, ['List' => '']).'.php'; require 'includes/class.'.strtr($class, ['List' => '']).'.php';
}); });

View File

@@ -35,20 +35,20 @@ abstract class BaseType
* results in * results in
* WHERE id = 45 OR name NOT LIKE %test% LIMIT 5; * WHERE id = 45 OR name NOT LIKE %test% LIMIT 5;
*/ */
public function __construct($conditions = []) public function __construct($conditions = [], $applyFilter = false)
{ {
global $AoWoWconf; // yes i hate myself.. global $AoWoWconf; // yes i hate myself..
$sql = []; $sql = [];
$linking = ' AND '; $linking = ' AND ';
$limit = ' LIMIT '.$AoWoWconf['sqlLimit']; $limit = ' LIMIT '.$AoWoWconf['sqlLimit'];
$className = strtr(get_class($this), ['List' => '']); $className = get_class($this);
if (!$this->setupQuery || !$this->matchQuery) if (!$this->setupQuery || !$this->matchQuery)
return; return;
// may be called without filtering // may be called without filtering
if (class_exists($className.'Filter')) if ($applyFilter && class_exists($className.'Filter'))
{ {
$fiName = $className.'Filter'; $fiName = $className.'Filter';
$this->filter = new $fiName(); $this->filter = new $fiName();
@@ -78,20 +78,29 @@ abstract class BaseType
if (is_array($c[1])) if (is_array($c[1]))
{ {
$val = implode(',', Util::sqlEscape($c[1]));
if (!$val)
continue;
$op = (isset($c[2]) && $c[2] == '!') ? 'NOT IN' : 'IN'; $op = (isset($c[2]) && $c[2] == '!') ? 'NOT IN' : 'IN';
$val = '('.implode(',', Util::sqlEscape($c[1])).')'; $val = '('.$val.')';
} }
else if (is_string($c[1])) else if (is_string($c[1]))
{ {
$op = (isset($c[2]) && $c[2] == '!') ? 'NOT LIKE' : 'LIKE'; $val = Util::sqlEscape($c[1]);
$val = '"%'.Util::sqlEscape($c[1]).'%"'; if (!$val)
continue;
$op = (isset($c[2]) && $c[2] == '!') ? 'NOT LIKE' : 'LIKE';
$val = '"%'.$val.'%"';
} }
else if (is_int($c[1])) else if (is_int($c[1]))
{ {
$op = (isset($c[2]) && $c[2] == '!') ? '<>' : '='; $op = (isset($c[2]) && $c[2] == '!') ? '<>' : '=';
$val = Util::sqlEscape($c[1]); $val = Util::sqlEscape($c[1]);
} }
else // null for example
continue;
if (isset($c[2]) && $c[2] != '!') if (isset($c[2]) && $c[2] != '!')
$op = $c[2]; $op = $c[2];
@@ -104,16 +113,15 @@ abstract class BaseType
$limit = $c > 0 ? ' LIMIT '.$c : ''; $limit = $c > 0 ? ' LIMIT '.$c : '';
else else
continue; // ignore other possibilities continue; // ignore other possibilities
} }
// todo: add strings propperly without them being escaped by simpleDB..? // todo: add strings propperly without them being escaped by simpleDB..?
$this->setupQuery = str_replace('[filter]', $this->filter && $this->filter->buildFilterQuery() ? $this->filter->query.' AND ' : NULL, $this->setupQuery); $this->setupQuery = str_replace('[filter]', $this->filter && $this->filter->buildQuery() ? $this->filter->getQuery().' AND ' : NULL, $this->setupQuery);
$this->setupQuery = str_replace('[cond]', empty($sql) ? '1' : '('.implode($linking, $sql).')', $this->setupQuery); $this->setupQuery = str_replace('[cond]', empty($sql) ? '1' : '('.implode($linking, $sql).')', $this->setupQuery);
$this->setupQuery .= $limit; $this->setupQuery .= $limit;
$this->matchQuery = str_replace('[filter]', $this->filter && $this->filter->buildFilterQuery() ? $this->filter->query.' AND ' : NULL, $this->matchQuery); $this->matchQuery = str_replace('[filter]', $this->filter && $this->filter->buildQuery() ? $this->filter->getQuery().' AND ' : NULL, $this->matchQuery);
$this->matchQuery = str_replace('[cond]', empty($sql) ? '1' : '('.implode($linking, $sql).')', $this->matchQuery); $this->matchQuery = str_replace('[cond]', empty($sql) ? '1' : '('.implode($linking, $sql).')', $this->matchQuery);
$rows = DB::Aowow()->Select($this->setupQuery); $rows = DB::Aowow()->Select($this->setupQuery);
if (!$rows) if (!$rows)
@@ -162,10 +170,10 @@ abstract class BaseType
return $this->curTpl[$field]; return $this->curTpl[$field];
} }
public function filterGetJs() public function filterGetSetCriteria()
{ {
if ($this->filter && isset($this->filter->fiData['c']['cr'])) if ($this->filter)
return "fi_setCriteria([".@implode(',',$this->filter->fiData['c']['cr'])."], [".@implode(',',$this->filter->fiData['c']['crs'])."], ['".@implode('\', \'',$this->filter->fiData['c']['crv'])."']);"; return $this->filter->getSetCriteria();
else else
return null; return null;
} }
@@ -173,11 +181,19 @@ abstract class BaseType
public function filterGetForm() public function filterGetForm()
{ {
if ($this->filter) if ($this->filter)
return $this->filter->form; return $this->filter->getForm();
else else
return []; return [];
} }
public function filterGetError()
{
if ($this->filter)
return $this->filter->error;
else
return false;
}
// should return data required to display a listview of any kind // should return data required to display a listview of any kind
// this is a rudimentary example, that will not suffice for most Types // this is a rudimentary example, that will not suffice for most Types
abstract public function getListviewData(); abstract public function getListviewData();
@@ -233,14 +249,15 @@ class Lang
public static $main; public static $main;
public static $search; public static $search;
public static $game; public static $game;
public static $filter;
public static $error; public static $error;
public static $account; public static $account;
public static $achievement; public static $achievement;
public static $compare; public static $compare;
public static $currency;
public static $event; public static $event;
public static $item; public static $item;
public static $itemset;
public static $maps; public static $maps;
public static $spell; public static $spell;
public static $talent; public static $talent;
@@ -411,7 +428,7 @@ class SmartyAoWoW extends Smarty
$this->left_delimiter = '{'; $this->left_delimiter = '{';
$this->right_delimiter = '}'; $this->right_delimiter = '}';
$this->caching = false; // Total Cache, this site does not work $this->caching = false; // Total Cache, this site does not work
$this->assign('app_name', $config['page']['name']); $this->assign('appName', $config['page']['name']);
$this->assign('AOWOW_REVISION', AOWOW_REVISION); $this->assign('AOWOW_REVISION', AOWOW_REVISION);
$this->_tpl_vars['page'] = array( $this->_tpl_vars['page'] = array(
'reqJS' => [], // <[string]> path to required JSFile 'reqJS' => [], // <[string]> path to required JSFile
@@ -438,18 +455,14 @@ class SmartyAoWoW extends Smarty
public function display($tpl) public function display($tpl)
{ {
// since it's the same for every page, except index.. // since it's the same for every page, except index..
if (!$this->_tpl_vars['query'][0]) if ($this->_tpl_vars['query'][0] && !preg_match('/[^a-z]/i', $this->_tpl_vars['query'][0]))
return; {
$ann = DB::Aowow()->Select('SELECT * FROM ?_announcements WHERE flags & 0x10 AND (page = ?s OR page = "*")', $this->_tpl_vars['query'][0]);
foreach ($ann as $k => $v)
$ann[$k]['text'] = Util::localizedString($v, 'text');
// sanitize $this->_tpl_vars['announcements'] = $ann;
if (preg_match('/[^a-z]/i', $this->_tpl_vars['query'][0])) }
return;
$ann = DB::Aowow()->Select('SELECT * FROM ?_announcements WHERE flags & 0x10 AND (page = ?s OR page = "*")', $this->_tpl_vars['query'][0]);
foreach ($ann as $k => $v)
$ann[$k]['text'] = Util::localizedString($v, 'text');
$this->_tpl_vars['announcements'] = $ann;
parent::display($tpl); parent::display($tpl);
} }
@@ -597,6 +610,7 @@ class Util
public static $filterResultString = 'sprintf(%s, %s, %s) + LANG.dash + LANG.lvnote_tryfiltering.replace(\'<a>\', \'<a href="javascript:;" onclick="fi_toggle()">\')'; public static $filterResultString = 'sprintf(%s, %s, %s) + LANG.dash + LANG.lvnote_tryfiltering.replace(\'<a>\', \'<a href="javascript:;" onclick="fi_toggle()">\')';
public static $narrowResultString = 'sprintf(%s, %s, %s) + LANG.dash + LANG.lvnote_trynarrowing'; public static $narrowResultString = 'sprintf(%s, %s, %s) + LANG.dash + LANG.lvnote_trynarrowing';
public static $setCriteriaString = "fi_setCriteria(%s, %s, %s);\n";
public static $expansionString = array( // 3 & 4 unused .. obviously public static $expansionString = array( // 3 & 4 unused .. obviously
null, 'bc', 'wotlk', 'cata', 'mop' null, 'bc', 'wotlk', 'cata', 'mop'
@@ -1232,18 +1246,14 @@ class Util
return 0; return 0;
} }
private static function db_conform_array_callback(&$item, $key) public static function sqlEscape($data)
{ {
$item = Util::sqlEscape($item); if (!is_array($data))
} return mysql_real_escape_string(trim($data));
public static function sqlEscape($string) array_walk($data, function(&$item, $key) { $item = Util::sqlEscape($item); });
{
if (!is_array($string))
return mysql_real_escape_string(trim($string));
array_walk($string, 'Util::db_conform_array_callback'); return $data;
return $string;
} }
public static function jsEscape($string) public static function jsEscape($string)
@@ -1260,16 +1270,26 @@ class Util
public static function localizedString($data, $field) public static function localizedString($data, $field)
{ {
$sqlLocales = ['EN', 2 => 'FR', 3 => 'DE', 6 => 'ES', 8 => 'RU'];
// default back to enUS if localization unavailable // default back to enUS if localization unavailable
// default case: selected locale available // default case: selected locale available
if (!empty($data[$field.'_loc'.User::$localeId])) if (!empty($data[$field.'_loc'.User::$localeId]))
return $data[$field.'_loc'.User::$localeId]; return $data[$field.'_loc'.User::$localeId];
// dbc-case
else if (!empty($data[$field.$sqlLocales[User::$localeId]]))
return $data[$field.$sqlLocales[User::$localeId]];
// locale not enUS; aowow-type localization available; add brackets // locale not enUS; aowow-type localization available; add brackets
else if (User::$localeId != LOCALE_EN && isset($data[$field.'_loc0']) && !empty($data[$field.'_loc0'])) else if (User::$localeId != LOCALE_EN && isset($data[$field.'_loc0']) && !empty($data[$field.'_loc0']))
return '['.$data[$field.'_loc0'].']'; return '['.$data[$field.'_loc0'].']';
// dbc-case
else if (User::$localeId != LOCALE_EN && isset($data[$field.$sqlLocales[0]]) && !empty($data[$field.$sqlLocales[0]]))
return '['.$data[$field.$sqlLocales[0]].']';
// locale not enUS; TC localization; add brackets // locale not enUS; TC localization; add brackets
else if (User::$localeId != LOCALE_EN && isset($data[$field]) && !empty($data[$field])) else if (User::$localeId != LOCALE_EN && isset($data[$field]) && !empty($data[$field]))
return '['.$data[$field].']'; return '['.$data[$field].']';
@@ -1367,11 +1387,12 @@ class Util
break; break;
case 3: case 3:
case 7: case 7:
$spl = new SpellList(array(['id', (int)$enchant['object'.$h]])); $spl = new SpellList(array(['id', (int)$enchant['object'.$h]]));
$gain = $spl->getStatGain(); $gains = $spl->getStatGain();
foreach ($gain as $k => $v) // array_merge screws up somehow... foreach ($gains as $gain)
@$jsonStats[$k] += $v; foreach ($gain as $k => $v) // array_merge screws up somehow...
@$jsonStats[$k] += $v;
break; break;
case 4: case 4:
switch ($enchant['object'.$h]) switch ($enchant['object'.$h])

View File

@@ -18,7 +18,6 @@ $lang = array(
'profiles' => "Deine Charaktere", 'profiles' => "Deine Charaktere",
'links' => "Links", 'links' => "Links",
'pageNotFound' => "Diese|Dieser|Dieses %s existiert nicht.", // todo: dämliche Fälle... 'pageNotFound' => "Diese|Dieser|Dieses %s existiert nicht.", // todo: dämliche Fälle...
'both' => "Beide",
'gender' => "Geschlecht", 'gender' => "Geschlecht",
'sex' => [null, 'Mann', 'Frau'], 'sex' => [null, 'Mann', 'Frau'],
'quickFacts' => "Kurzübersicht", 'quickFacts' => "Kurzübersicht",
@@ -50,61 +49,20 @@ $lang = array(
// pwd_err = Gib bitte dein Passwort ein // pwd_err = Gib bitte dein Passwort ein
// signin_msg = Gib bitte deinen Accountnamen ein // signin_msg = Gib bitte deinen Accountnamen ein
// c_pwd = Passwort wiederholen // c_pwd = Passwort wiederholen
// create_filter = Filter erstellen
// loading = Lädt ...
// soldby = Verkauft von
// droppedby = Gedroppt von
// containedinobject = Enthalten in
// containedinitem = Enthalten in Item
// contain = Enthält
// objectiveof = Ziel von
// rewardof = Belohnung von
// facts = Übersicht // facts = Übersicht
// pickpocketingloot = Gestohlen von
// prospectedfrom = Sondiert aus
// canbeplacedin = Kann abgelegt werden in
// minedfromobject = Abgebaut aus
// gatheredfromobject = Gesammelt von
// items = Gegenstände
// objects = Objekte
// quests = Quests
// npcs = NPCs
// drop = Drop
// starts = Startet
// ends = Beendet
// skinning = Kürschnerei
// pickpocketing = Taschendiebstahl
// sells = Verkauft
// reputationwith = Ruf mit der Fraktion
// experience = Erfahrung
// uponcompletionofthisquestyouwillgain = Bei Abschluss dieser Quest erhaltet Ihr
// reagentfor = Reagenz für
// skinnedfrom = Gekürschnert von
// disenchanting = Entzaubern
// This_Object_cant_be_found = Der Standort dieses Objekts ist nicht bekannt. // This_Object_cant_be_found = Der Standort dieses Objekts ist nicht bekannt.
// itemsets = Sets
// Spells = Zauber
// Items = Gegenstände
// Quests = Quests
// Factions = Fraktionen
// Item_Sets = Sets
// Compare = Gegenstandsvergleichswerkzeug
// NPCs = NPCs
// Objects = Objekte
// My_account = Mein Account
// Comments = Kommentare
// Latest_Comments = Neuste Kommentare
// day = Tag.
// hr = Std.
// min = Min.
// sec = Sek.
// Respawn = Respawn
// Class = Klasse
// class = Klasse
// race = Volk
// Race = Volk
// Races = Völker
// filter
'extSearch' => "Erweiterte Suche",
'addFilter' => "Weiteren Filter hinzufügen",
'match' => "Verwendete Filter",
'allFilter' => "Alle Filters",
'oneFilter' => "Mindestens einer",
'applyFilter' => "Filter anwenden",
'resetForm' => "Formular zurücksetzen",
'refineSearch' => "Tipp: Präzisiere deine Suche mit Durchsuchen einer <a href=\"javascript:;\" id=\"fi_subcat\">Unterkategorie</a>.",
// infobox
'disabled' => "Deaktiviert", 'disabled' => "Deaktiviert",
'disabledHint' => "Kann nicht erhalten oder abgeschlossen werden.", 'disabledHint' => "Kann nicht erhalten oder abgeschlossen werden.",
'serverside' => "Serverseitig", 'serverside' => "Serverseitig",
@@ -117,10 +75,10 @@ $lang = array(
'tryAgain' => "Bitte versucht es mit anderen Suchbegriffen oder überprüft deren Schreibweise.", 'tryAgain' => "Bitte versucht es mit anderen Suchbegriffen oder überprüft deren Schreibweise.",
), ),
'game' => array( 'game' => array(
'alliance' => "Allianz",
'horde' => "Horde",
'class' => "Klasse", 'class' => "Klasse",
'classes' => "Klassen", 'classes' => "Klassen",
'currency' => "Währung",
'currencies' => "Währungen",
'races' => "Völker", 'races' => "Völker",
'title' => "Titel", 'title' => "Titel",
'titles' => "Titel", 'titles' => "Titel",
@@ -128,15 +86,18 @@ $lang = array(
'event' => "Weltereigniss", 'event' => "Weltereigniss",
'events' => "Weltereignisse", 'events' => "Weltereignisse",
'cooldown' => "%s Abklingzeit", 'cooldown' => "%s Abklingzeit",
'itemset' => "Ausrüstungsset",
'itemsets' => "Ausrüstungssets",
'requires' => "Benötigt", 'requires' => "Benötigt",
'reqLevel' => "Benötigt Stufe %s", 'reqLevel' => "Benötigt Stufe %s",
'reqLevelHlm' => "Benötigt Stufe %s", 'reqLevelHlm' => "Benötigt Stufe %s",
'valueDelim' => " - ", // " bis " 'valueDelim' => " - ", // " bis "
'si' => array(-2 => "Nur für Horde", -1 => "Nur für Allianz", null, "Allianz", "Horde", "Beide"),
'resistances' => array(null, 'Heiligwiderstand', 'Feuerwiderstand', 'Naturwiderstand', 'Frostwiderstand', 'Schattenwiderstand', 'Arkanwiderstand'), 'resistances' => array(null, 'Heiligwiderstand', 'Feuerwiderstand', 'Naturwiderstand', 'Frostwiderstand', 'Schattenwiderstand', 'Arkanwiderstand'),
'sc' => array("Körperlich", "Heilig", "Feuer", "Natur", "Frost", "Schatten", "Arkan"), 'sc' => array("Körperlich", "Heilig", "Feuer", "Natur", "Frost", "Schatten", "Arkan"),
'di' => array(null, "Magie", "Fluch", "Krankheit", "Gift", "Verstohlenheit", "Unsichtbarkeit", null, null, "Wut"), 'di' => array(null, "Magie", "Fluch", "Krankheit", "Gift", "Verstohlenheit", "Unsichtbarkeit", null, null, "Wut"),
'cl' => array("UNK_CL0", "Krieger", "Paladin", "Jäger", "Schurke", "Priester", "Todesritter", "Schamane", "Magier", "Hexenmeister", 'UNK_CL10', "Druide"), 'cl' => array(null, "Krieger", "Paladin", "Jäger", "Schurke", "Priester", "Todesritter", "Schamane", "Magier", "Hexenmeister", null, "Druide"),
'ra' => array(-2 => "Horde", -1 => "Allianz", "Beide", "Mensch", "Orc", "Zwerg", "Nachtelf", "Untoter", "Taure", "Gnom", "Troll", 'UNK_RA9', "Blutelf", "Draenei"), 'ra' => array(-2 => "Horde", -1 => "Allianz", "Beide", "Mensch", "Orc", "Zwerg", "Nachtelf", "Untoter", "Taure", "Gnom", "Troll", null, "Blutelf", "Draenei"),
'rep' => array("Hasserfüllt", "Feindselig", "Unfreundlich", "Neutral", "Freundlich", "Wohlwollend", "Respektvoll", "Ehrfürchtig"), 'rep' => array("Hasserfüllt", "Feindselig", "Unfreundlich", "Neutral", "Freundlich", "Wohlwollend", "Respektvoll", "Ehrfürchtig"),
'st' => array( 'st' => array(
null, "Katzengestalt", "Baum des Lebens", "Reisegestalt", "Wassergestalt", null, "Katzengestalt", "Baum des Lebens", "Reisegestalt", "Wassergestalt",
@@ -155,18 +116,6 @@ $lang = array(
"Marschall / Kriegsherr", "Feldmarschall / Kriegsfürst", "Großmarschall / Oberster Kriegsfürst" "Marschall / Kriegsherr", "Feldmarschall / Kriegsfürst", "Großmarschall / Oberster Kriegsfürst"
), ),
), ),
'filter' => array(
'extSearch' => "Erweiterte Suche",
'onlyAlliance' => "Nur für Allianz",
'onlyHorde' => "Nur für Horde",
'addFilter' => "Weiteren Filter hinzufügen",
'match' => "Verwendete Filter",
'allFilter' => "Alle Filters",
'oneFilter' => "Mindestens einer",
'applyFilter' => "Filter anwenden",
'resetForm' => "Formular zurücksetzen",
'refineSearch' => "Tipp: Präzisiere deine Suche mit Durchsuchen einer <a href=\"javascript:;\" id=\"fi_subcat\">Unterkategorie</a>.",
),
'error' => array( 'error' => array(
'errNotFound' => "Seite nicht gefunden", 'errNotFound' => "Seite nicht gefunden",
'errPage' => "Was? Wie hast du... vergesst es!\n<br>\n<br>\nAnscheinend konnte die von Euch angeforderte Seite nicht gefunden werden. Wenigstens nicht in dieser Dimension.\n<br>\n<br>\nVielleicht lassen einige Justierungen an der\n<span class=\"q4\">\n<ins>[WH-799 Großkonfabulierungsmaschine]</ins>\n</span>\ndie Seite plötzlich wieder auftauchen!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOder, Ihr könnt es auch \n<a href=\"/?aboutus#contact\">uns melden</a>\n- die Stabilität des WH-799 ist umstritten, und wir möchten gern noch so ein Problem vermeiden...", 'errPage' => "Was? Wie hast du... vergesst es!\n<br>\n<br>\nAnscheinend konnte die von Euch angeforderte Seite nicht gefunden werden. Wenigstens nicht in dieser Dimension.\n<br>\n<br>\nVielleicht lassen einige Justierungen an der\n<span class=\"q4\">\n<ins>[WH-799 Großkonfabulierungsmaschine]</ins>\n</span>\ndie Seite plötzlich wieder auftauchen!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOder, Ihr könnt es auch \n<a href=\"/?aboutus#contact\">uns melden</a>\n- die Stabilität des WH-799 ist umstritten, und wir möchten gern noch so ein Problem vermeiden...",
@@ -264,6 +213,27 @@ $lang = array(
'Allgemein', 'Spieler gegen Spieler', 'Ruf', 'Dungeon & Schlachtzug', 'Quests', 'Berufe', 'Weltereignisse' 'Allgemein', 'Spieler gegen Spieler', 'Ruf', 'Dungeon & Schlachtzug', 'Quests', 'Berufe', 'Weltereignisse'
) )
), ),
'currency' => array(
'cat' => array(
1 => "Verschiedenes", 2 => "Spieler gegen Spieler", 4 => "Classic", 21 => "Wrath of the Lich King", 22 => "Dungeon und Schlachtzug", 23 => "Burning Crusade", 41 => "Test", 3 => "Unbenutzt"
)
),
'itemset' => array(
'notes' => array(
null, "Dungeon-Set 1", "Dungeon-Set 2", "Tier 1 Raid-Set",
"Tier 2 Raid-Set", "Tier 3 Raid-Set", "Level 60 PvP-Set (Rar)", "Level 60 PvP-Set (Rar, alt)",
"Level 60 PvP-Set (Episch)", "Set der Ruinen von Ahn'Qiraj", "Set des Tempels von Ahn'Qiraj", "Set von Zul'Gurub",
"Tier 4 Raid-Set", "Tier 5 Raid-Set", "Dungeon-Set 3", "Set des Arathibeckens",
"Level 70 PvP-Set (Rar)", "Arena-Set Saison 1", "Tier 6 Raid-Set", "Arena-Set Saison 2",
"Arena-Set Saison 3", "Level 70 PvP-Set 2 (Rar)", "Arena-Set Saison 4", "Tier 7 Raid-Set",
"Arena-Set Saison 5", "Tier 8 Raid-Set", "Arena-Set Saison 6", "Tier 9 Raid-Set",
"Arena-Set Saison 7", "Tier 10 Raid-Set", "Arena-Set Saison 8"
),
'types' => array(
null, "Stoff", "Leder", "Schwere R\u00fcstung", "Platte", "Dolch", "Ring",
"Faustwaffe", "Einhandaxt", "Einhandstreitkolben", "Einhandschwert", "Schmuck", "Amulett"
)
),
'spell' => array( 'spell' => array(
'remaining' => "Noch %s", 'remaining' => "Noch %s",
'untilCanceled' => "bis Abbruch", 'untilCanceled' => "bis Abbruch",
@@ -317,6 +287,10 @@ $lang = array(
'socket' => array ( 'socket' => array (
"Metasockel", "Roter Sockel", "Gelber Sockel", "Blauer Sockel", -1 => "Prismatischer Sockel" "Metasockel", "Roter Sockel", "Gelber Sockel", "Blauer Sockel", -1 => "Prismatischer Sockel"
), ),
'quality' => array (
"Schlecht", "Verbreitet", "Selten", "Rar",
"Episch", "Legendär", "Artefakt", "Erbstücke",
),
'trigger' => array ( 'trigger' => array (
"Benutzen: ", "Anlegen: ", "Chance bei Treffer: ", null, null, "Benutzen: ", "Anlegen: ", "Chance bei Treffer: ", null, null,
null, null null, null

View File

@@ -18,7 +18,6 @@ $lang = array(
'profiles' => "Your Characters", 'profiles' => "Your Characters",
'links' => "Links", 'links' => "Links",
'pageNotFound' => "This %s doesn't exist.", 'pageNotFound' => "This %s doesn't exist.",
'both' => "Both",
'gender' => "Gender", 'gender' => "Gender",
'sex' => [null, 'Male', 'Female'], 'sex' => [null, 'Male', 'Female'],
'quickFacts' => "Quick Facts", 'quickFacts' => "Quick Facts",
@@ -49,63 +48,20 @@ $lang = array(
// pwd_err = Enter your password // pwd_err = Enter your password
// signin_msg = Enter your game account // signin_msg = Enter your game account
// c_pwd = Repeat password // c_pwd = Repeat password
// create_filter = Create a filter
// loading = Loading ...
// soldby = Sold by
// droppedby = Dropped by
// containedinobject = Contained in
// containedinitem = Contained in item
// contain = Contains
// objectiveof = Objective of
// rewardof = Reward of
// facts = Facts // facts = Facts
// pickpocketingloot = Pickpocketing
// prospectedfrom = Prospect from
// canbeplacedin = Can be placed in
// minedfromobject = Mined from
// gatheredfromobject = Gathered from
// items = Items
// objects = Objects
// quests = Quests
// npcs = NPCs
// drop = Drop
// starts = Starts
// ends = Ends
// skinning = Skinning
// pickpocketing = Pickpocketing
// sells = Sells
// reputationwith = Reputation with
// experience = experience
// uponcompletionofthisquestyouwillgain = Upon completion of quests, get
// reagentfor = Reagent for
// skinnedfrom = Skinned from
// disenchanting = Disenchanting
// This_Object_cant_be_found = Object map not available, Object may be spawned via a script // This_Object_cant_be_found = Object map not available, Object may be spawned via a script
// itemsets = Item Sets
// Spells = Spells // filter
// Items = Items 'extSearch' => "Extended search",
// Quests = Quests 'addFilter' => "Add another Filter",
// Factions = Factions 'match' => "Match",
// Item_Sets = Item sets 'allFilter' => "All filters",
// NPCs = NPCs 'oneFilter' => "At least one",
// Objects = Objects 'applyFilter' => "Apply filter",
// Compare = Item Comparison Tool 'resetForm' => "Reset Form",
// My_account = My account 'refineSearch' => "Tip: Refine your search by browsing a <a href=\"javascript:;\" id=\"fi_subcat\">subcategory</a>.",
// Comments = Comments
// Latest_Comments = Latest comments // infobox
// day = days
// hr = hr
// min = min
// sec = sec
// Respawn = Respawn
// Class = Class
// class = class
// race = race
// Race = Race
// Races = Races
// name = name
// Name = Name
// slain = slain
'name' => "Name", 'name' => "Name",
'disabled' => "Disabled", 'disabled' => "Disabled",
'disabledHint' => "Cannot be attained or completed", 'disabledHint' => "Cannot be attained or completed",
@@ -119,10 +75,10 @@ $lang = array(
'tryAgain' => "Please try some different keywords or check your spelling.", 'tryAgain' => "Please try some different keywords or check your spelling.",
), ),
'game' => array( 'game' => array(
'alliance' => "Alliance",
'horde' => "Horde",
'class' => "class", 'class' => "class",
'classes' => "Classes", 'classes' => "Classes",
'currency' => "currency",
'currencies' => "Currencies",
'races' => "Races", 'races' => "Races",
'title' => "title", 'title' => "title",
'titles' => "Titles", 'titles' => "Titles",
@@ -130,15 +86,18 @@ $lang = array(
'event' => "World Event", 'event' => "World Event",
'events' => "World Events", 'events' => "World Events",
'cooldown' => "%s cooldown", 'cooldown' => "%s cooldown",
'itemset' => "item Set",
'itemsets' => "Item Sets",
'requires' => "Requires", 'requires' => "Requires",
'reqLevel' => "Requires Level %s", 'reqLevel' => "Requires Level %s",
'reqLevelHlm' => "Requires Level %s", 'reqLevelHlm' => "Requires Level %s",
'valueDelim' => " to ", 'valueDelim' => " to ",
'si' => array(-2 => "Horde only", -1 => "Alliance only", null, "Alliance", "Horde", "Both"),
'resistances' => array(null, 'Holy Resistance', 'Fire Resistance', 'Nature Resistance', 'Frost Resistance', 'Shadow Resistance', 'Arcane Resistance'), 'resistances' => array(null, 'Holy Resistance', 'Fire Resistance', 'Nature Resistance', 'Frost Resistance', 'Shadow Resistance', 'Arcane Resistance'),
'di' => array(null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"), 'di' => array(null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"),
'sc' => array("Physical", "Holy", "Fire", "Nature", "Frost", "Shadow", "Arcane"), 'sc' => array("Physical", "Holy", "Fire", "Nature", "Frost", "Shadow", "Arcane"),
'cl' => array("UNK_CL0", "Warrior", "Paladin", "Hunter", "Rogue", "Priest", "Death Knight", "Shaman", "Mage", "Warlock", 'UNK_CL10', "Druid"), 'cl' => array(null, "Warrior", "Paladin", "Hunter", "Rogue", "Priest", "Death Knight", "Shaman", "Mage", "Warlock", null, "Druid"),
'ra' => array(-2 => "Horde", -1 => "Alliance", "Both", "Human", "Orc", "Dwarf", "Night Elf", "Undead", "Tauren", "Gnome", "Troll", 'UNK_RA9', "Blood Elf", "Draenei"), 'ra' => array(-2 => "Horde", -1 => "Alliance", "Both", "Human", "Orc", "Dwarf", "Night Elf", "Undead", "Tauren", "Gnome", "Troll", null, "Blood Elf", "Draenei"),
'rep' => array("Hated", "Hostile", "Unfriendly", "Neutral", "Friendly", "Honored", "Revered", "Exalted"), 'rep' => array("Hated", "Hostile", "Unfriendly", "Neutral", "Friendly", "Honored", "Revered", "Exalted"),
'st' => array( 'st' => array(
null, "Cat Form", "Tree of Life", "Travel Form", "Aquatic Form", null, "Cat Form", "Tree of Life", "Travel Form", "Aquatic Form",
@@ -157,18 +116,6 @@ $lang = array(
"Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord"
), ),
), ),
'filter' => array(
'extSearch' => "Extended search",
'onlyAlliance' => "Alliance only",
'onlyHorde' => "Horde only",
'addFilter' => "Add another Filter",
'match' => "Match",
'allFilter' => "All filters",
'oneFilter' => "At least one",
'applyFilter' => "Apply filter",
'resetForm' => "Reset Form",
'refineSearch' => "Tip: Refine your search by browsing a <a href=\"javascript:;\" id=\"fi_subcat\">subcategory</a>.",
),
'error' => array( 'error' => array(
'errNotFound' => "Page not found", 'errNotFound' => "Page not found",
'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", 'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...",
@@ -266,6 +213,27 @@ $lang = array(
'General', 'Player vs. Player', 'Reputation', 'Dungeons & Raids', 'Quests', 'Professions', 'World Events' 'General', 'Player vs. Player', 'Reputation', 'Dungeons & Raids', 'Quests', 'Professions', 'World Events'
) )
), ),
'currency' => array(
'cat' => array(
1 => "Miscellaneous", 2 => "Player vs. Player", 4 => "Classic", 21 => "Wrath of the Lich King", 22 => "Dungeon and Raid", 23 => "Burning Crusade", 41 => "Test", 3 => "Unused"
)
),
'itemset' => array(
'notes' => array(
null, "Dungeon Set 1", "Dungeon Set 2", "Tier 1 Raid Set",
"Tier 2 Raid Set", "Tier 3 Raid Set", "Level 60 PvP Rare Set", "Level 60 PvP Rare Set (Old)",
"Level 60 PvP Epic Set", "Ruins of Ahn'Qiraj Set", "Temple of Ahn'Qiraj Set", "Zul'Gurub Set",
"Tier 4 Raid Set", "Tier 5 Raid Set", "Dungeon Set 3", "Arathi Basin Set",
"Level 70 PvP Rare Set", "Arena Season 1 Set", "Tier 6 Raid Set", "Arena Season 2 Set",
"Arena Season 3 Set", "Level 70 PvP Rare Set 2", "Arena Season 4 Set", "Tier 7 Raid Set",
"Arena Season 5 Set", "Tier 8 Raid Set", "Arena Season 6 Set", "Tier 9 Raid Set",
"Arena Season 7 Set", "Tier 10 Raid Set", "Arena Season 8 Set"
),
'types' => array(
null, "Cloth", "Leather", "Mail", "Plate", "Dagger", "Ring",
"Fist Weapon", "One-Handed Axe", "One-Handed Mace", "One-Handed Sword", "Trinket", "Amulet"
)
),
'spell' => array( 'spell' => array(
'remaining' => "%s remaining", 'remaining' => "%s remaining",
'untilCanceled' => "until canceled", 'untilCanceled' => "until canceled",
@@ -319,6 +287,10 @@ $lang = array(
'socket' => array( 'socket' => array(
"Meta Socket", "Red Socket", "Yellow Socket", "Blue Socket", -1 => "Prismatic Socket" "Meta Socket", "Red Socket", "Yellow Socket", "Blue Socket", -1 => "Prismatic Socket"
), ),
'quality' => array (
"Poor", "Common", "Uncommon", "Rare",
"Epic", "Legendary", "Artifact", "Heirloom"
),
'trigger' => array ( 'trigger' => array (
"Use: ", "Equip: ", "Chance on hit: ", null, null, "Use: ", "Equip: ", "Chance on hit: ", null, null,
null, null null, null

View File

@@ -18,7 +18,6 @@ $lang = array(
'profiles' => "Tus personajes", // translate.google :x 'profiles' => "Tus personajes", // translate.google :x
'links' => "Enlaces", 'links' => "Enlaces",
'pageNotFound' => "Este %s no existe.", 'pageNotFound' => "Este %s no existe.",
'both' => "Ambos",
'gender' => "Género", 'gender' => "Género",
'sex' => [null, 'Hombre', 'Mujer'], 'sex' => [null, 'Hombre', 'Mujer'],
'quickFacts' => "Notas rápidas", 'quickFacts' => "Notas rápidas",
@@ -46,6 +45,17 @@ $lang = array(
'millisecsAbbr' => "[ms]", 'millisecsAbbr' => "[ms]",
'name' => "Nombre", 'name' => "Nombre",
// filter
'extSearch' => "Extender búsqueda",
'addFilter' => "Añadir otro filtro",
'match' => "Aplicar",
'allFilter' => "Todos los filtros",
'oneFilter' => "Por lo menos uno",
'applyFilter' => "Aplicar filtro",
'resetForm' => "Reiniciar formulario",
'refineSearch' => "Sugerencia: Refina tu búsqueda llendo a una <a href=\"javascript:;\" id=\"fi_subcat\">subcategoría</a>.",
// infobox
'disabled' => "[Disabled]", 'disabled' => "[Disabled]",
'disabledHint' => "[Cannot be attained or completed]", 'disabledHint' => "[Cannot be attained or completed]",
'serverside' => "[Serverside]", 'serverside' => "[Serverside]",
@@ -58,10 +68,10 @@ $lang = array(
'tryAgain' => "Por favor, introduzca otras palabras claves o verifique el término ingresado.", 'tryAgain' => "Por favor, introduzca otras palabras claves o verifique el término ingresado.",
), ),
'game' => array( 'game' => array(
'alliance' => "Alianza",
'horde' => "Horda",
'class' => "clase", 'class' => "clase",
'classes' => "Clases", 'classes' => "Clases",
'currency' => "monedas",
'currencies' => "Monedas",
'races' => "Razas", 'races' => "Razas",
'title' => "título", 'title' => "título",
'titles' => "Títulos", 'titles' => "Títulos",
@@ -69,15 +79,18 @@ $lang = array(
'event' => "Suceso mundial ", 'event' => "Suceso mundial ",
'events' => "Eventos del mundo", 'events' => "Eventos del mundo",
'cooldown' => "%s de reutilización", 'cooldown' => "%s de reutilización",
'itemset' => "conjunto de objetos",
'itemsets' => "Conjuntos de objetos",
'requires' => "Requiere", 'requires' => "Requiere",
'reqLevel' => "Necesitas ser de nivel %s", 'reqLevel' => "Necesitas ser de nivel %s",
'reqLevelHlm' => "Necesitas ser de nivel %s", 'reqLevelHlm' => "Necesitas ser de nivel %s",
'valueDelim' => " - ", 'valueDelim' => " - ",
'si' => array(-2 => "Horda solamente", -1 => "Alianza solamente", null, "Alianza", "Horda", "Ambos"),
'resistances' => array(null, 'Resistencia a lo Sagrado', 'v', 'Resistencia a la Naturaleza', 'Resistencia a la Escarcha', 'Resistencia a las Sombras', 'Resistencia a lo Arcano'), 'resistances' => array(null, 'Resistencia a lo Sagrado', 'v', 'Resistencia a la Naturaleza', 'Resistencia a la Escarcha', 'Resistencia a las Sombras', 'Resistencia a lo Arcano'),
'sc' => array("Física", "Sagrado", "Fuego", "Naturaleza", "Escarcha", "Sombras", "Arcano"), 'sc' => array("Física", "Sagrado", "Fuego", "Naturaleza", "Escarcha", "Sombras", "Arcano"),
'di' => array(null, "Magia", "Maldición", "Enfermedad", "Veneno", "Sigilo", "Invisibilidad", null, null, "Enfurecer"), 'di' => array(null, "Magia", "Maldición", "Enfermedad", "Veneno", "Sigilo", "Invisibilidad", null, null, "Enfurecer"),
'cl' => array("UNK_CL0", "Guerrero", "Paladín", "Cazador", "Pícaro", "Sacerdote", "Caballero de la Muerte", "Chamán", "Mago", "Brujo", 'UNK_CL10', "Druida"), 'cl' => array(null, "Guerrero", "Paladín", "Cazador", "Pícaro", "Sacerdote", "Caballero de la Muerte", "Chamán", "Mago", "Brujo", null, "Druida"),
'ra' => array(-2 => "Horda", -1 => "Alianza", "Ambos", "Humano", "Orco", "Enano", "Elfo de la noche", "No-muerto", "Tauren", "Gnomo", "Trol ", 'UNK_RA9', "Blood Elf", "Elfo de sangre"), 'ra' => array(-2 => "Horda", -1 => "Alianza", "Ambos", "Humano", "Orco", "Enano", "Elfo de la noche", "No-muerto", "Tauren", "Gnomo", "Trol ", null, "Blood Elf", "Elfo de sangre"),
'rep' => array("Odiado", "Hostil", "Adverso", "Neutral", "Amistoso", "Honorable", "Reverenciado", "Exaltado"), 'rep' => array("Odiado", "Hostil", "Adverso", "Neutral", "Amistoso", "Honorable", "Reverenciado", "Exaltado"),
'st' => array( 'st' => array(
null, "Forma felina", "Árbol de vida", "Forma de viaje", "Forma acuática", null, "Forma felina", "Árbol de vida", "Forma de viaje", "Forma acuática",
@@ -96,18 +109,6 @@ $lang = array(
"Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord"
), ),
), ),
'filter' => array(
'extSearch' => "Extender búsqueda",
'onlyAlliance' => "Alianza solamente",
'onlyHorde' => "Horda solamente",
'addFilter' => "Añadir otro filtro",
'match' => "Aplicar",
'allFilter' => "Todos los filtros",
'oneFilter' => "Por lo menos uno",
'applyFilter' => "Aplicar filtro",
'resetForm' => "Reiniciar formulario",
'refineSearch' => "Sugerencia: Refina tu búsqueda llendo a una <a href=\"javascript:;\" id=\"fi_subcat\">subcategoría</a>.",
),
'error' => array( 'error' => array(
'errNotFound' => "Page not found", 'errNotFound' => "Page not found",
'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", 'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...",
@@ -165,6 +166,27 @@ $lang = array(
'General', 'Jugador contra Jugador', 'Reputación', 'Mazmorras y bandas', 'Misiones', 'Profesiones', 'Eventos del mundo' 'General', 'Jugador contra Jugador', 'Reputación', 'Mazmorras y bandas', 'Misiones', 'Profesiones', 'Eventos del mundo'
) )
), ),
'currency' => array(
'cat' => array(
1 => "Miscelánea", 2 => "Jugador contra Jugador", 4 => "Clásico", 21 => "Wrath of the Lich King", 22 => "Mazmorra y banda", 23 => "Burning Crusade", 41 => "Prueba", 3 => "No las uso"
)
),
'itemset' => array(
'notes' => array(
null, "Set de mazmorra 1", "Set de mazmorra 2", "Set de banda tier 1",
"Set de banda tier 2", "Set de banda tier 3", "Set JcJ nivel 60 superior", "Set JcJ nivel 60 superior (obsoleto)",
"Set JcJ nivel 60 épico", "Set de las Ruinas de Ahn'Qiraj", "Set del Templo de Ahn'Qiraj", "Set de Zul'Gurub",
"Set de banda tier 4", "Set de banda tier 5", "Set de mazmorra 3", "Set de la Cuenca de Arathi",
"Set JcJ nivel 70 superior", "Set de la Temporada de Arenas 1", "Set de banda tier 6", "Set de la Temporada de Arenas 2",
"Set de la Temporada de Arenas 3", "Set JcJ nivel 70 superior 2", "Set de la Temporada de Arenas 4", "Set de banda tier 7",
"Set de la Temporada de Arenas 5", "Set de banda tier 8", "Set de la Temporada de Arenas 6", "Set de banda tier 9",
"Set de la Temporada de Arenas 7", "Set de banda tier 10", "Set de la Temporada de Arenas 8"
),
'types' => array(
null, "Tela", "Cuero", "Malla", "Placas", "Daga", "Anillo",
"Arma de puño", "Hacha de uno mano", "Maza de uno mano", "Espada de uno mano", "Abalorio", "Amuleto"
)
),
'spell' => array( 'spell' => array(
'remaining' => "%s restantes", 'remaining' => "%s restantes",
'untilCanceled' => "hasta que se cancela", 'untilCanceled' => "hasta que se cancela",
@@ -218,6 +240,10 @@ $lang = array(
'socket' => array( 'socket' => array(
"Ranura meta", "Ranura roja", "Ranura amarilla", "Ranura azul", -1 => "Ranura prismática " "Ranura meta", "Ranura roja", "Ranura amarilla", "Ranura azul", -1 => "Ranura prismática "
), ),
'quality' => array (
"Pobre", "Común", "Poco Común", "Raro",
"Épica", "Legendaria", "Artefacto", "Reliquia"
),
'trigger' => array ( 'trigger' => array (
"Uso: ", "Equipar: ", "Probabilidad al acertar: ", null, null, "Uso: ", "Equipar: ", "Probabilidad al acertar: ", null, null,
null, null null, null

View File

@@ -18,7 +18,6 @@ $lang = array(
'profiles' => "Vos personnages", // translate.google :x 'profiles' => "Vos personnages", // translate.google :x
'links' => "Liens", 'links' => "Liens",
'pageNotFound' => "Ce %s n'existe pas.", 'pageNotFound' => "Ce %s n'existe pas.",
'both' => "Les deux",
'gender' => "Genre", 'gender' => "Genre",
'sex' => [null, 'Homme', 'Femme'], 'sex' => [null, 'Homme', 'Femme'],
'quickFacts' => "En bref", 'quickFacts' => "En bref",
@@ -46,6 +45,17 @@ $lang = array(
'millisecsAbbr' => "[ms]", 'millisecsAbbr' => "[ms]",
'name' => "Nom", 'name' => "Nom",
// filter
'extSearch' => "Recherche avancée",
'addFilter' => "Ajouter un autre filtre",
'match' => "Critère",
'allFilter' => "Tous les filtres",
'oneFilter' => "Au moins un",
'applyFilter' => "Appliquer le filtre",
'resetForm' => "Rétablir",
'refineSearch' => "Astuce : Affinez votre recherche en utilisant une <a href=\"javascript:;\" id=\"fi_subcat\">sous-catégorie</a>.",
// infobox
'disabled' => "[Disabled]", 'disabled' => "[Disabled]",
'disabledHint' => "[Cannot be attained or completed]", 'disabledHint' => "[Cannot be attained or completed]",
'serverside' => "[Serverside]", 'serverside' => "[Serverside]",
@@ -58,10 +68,10 @@ $lang = array(
'tryAgain' => "Veuillez essayer d'autres mots ou vérifiez l'orthographe des termes de recherche.", 'tryAgain' => "Veuillez essayer d'autres mots ou vérifiez l'orthographe des termes de recherche.",
), ),
'game' => array ( 'game' => array (
'alliance' => "Alliance",
'horde' => "Horde",
'class' => "classe", 'class' => "classe",
'classes' => "Classes", 'classes' => "Classes",
'currency' => "monnaies",
'currencies' => "Monnaies",
'races' => "Races", 'races' => "Races",
'title' => "titre", 'title' => "titre",
'titles' => "Titres", 'titles' => "Titres",
@@ -69,15 +79,18 @@ $lang = array(
'event' => "Évènement mondial", 'event' => "Évènement mondial",
'events' => "Évènements mondiaux", 'events' => "Évènements mondiaux",
'cooldown' => "%s de recharge", 'cooldown' => "%s de recharge",
'itemset' => "ensemble d'objets",
'itemsets' => "Ensembles d'objets",
'requires' => "Requiert", 'requires' => "Requiert",
'reqLevel' => "Niveau %s requis", 'reqLevel' => "Niveau %s requis",
'reqLevelHlm' => "Requiert Niveau %s", 'reqLevelHlm' => "Requiert Niveau %s",
'valueDelim' => " - ", 'valueDelim' => " - ",
'si' => array(-2 => "Horde seulement", -1 => "Alliance seulement", null, "Alliance", "Horde", "Les deux"),
'resistances' => array(null, 'Résistance au Sacré', 'Résistance au Feu', 'Résistance à la Nature', 'Résistance au Givre', 'Résistance à l\'Ombre', 'Résistance aux Arcanes'), 'resistances' => array(null, 'Résistance au Sacré', 'Résistance au Feu', 'Résistance à la Nature', 'Résistance au Givre', 'Résistance à l\'Ombre', 'Résistance aux Arcanes'),
'di' => array(null, "Magie", "Malédiction", "Maladie", "Poison", "Camouflage", "Invisibilité", null, null, "Enrager"), 'di' => array(null, "Magie", "Malédiction", "Maladie", "Poison", "Camouflage", "Invisibilité", null, null, "Enrager"),
'sc' => array("Physique", "Sacré", "Feu", "Nature", "Givre", "Ombre", "Arcane"), 'sc' => array("Physique", "Sacré", "Feu", "Nature", "Givre", "Ombre", "Arcane"),
'cl' => array("UNK_CL0", "Guerrier", "Paladin", "Chasseur", "Voleur", "Prêtre", "DeathChevalier de la mort", "Chaman", "Mage", "Démoniste", 'UNK_CL10', "Druide"), 'cl' => array(null, "Guerrier", "Paladin", "Chasseur", "Voleur", "Prêtre", "DeathChevalier de la mort", "Chaman", "Mage", "Démoniste", null, "Druide"),
'ra' => array(-2 => "Horde", -1 => "Alliance", "Les deux", "Humain", "Orc", "Nain", "Elfe de la nuit", "Mort-vivant", "Tauren", "Gnome", "Troll", 'UNK_RA9', "Elfe de sang", "Draeneï"), 'ra' => array(-2 => "Horde", -1 => "Alliance", "Les deux", "Humain", "Orc", "Nain", "Elfe de la nuit", "Mort-vivant", "Tauren", "Gnome", "Troll", null, "Elfe de sang", "Draeneï"),
'rep' => array("Détesté", "Hostile", "Inamical", "Neutre", "Amical", "Honoré", "Révéré", "Exalté"), 'rep' => array("Détesté", "Hostile", "Inamical", "Neutre", "Amical", "Honoré", "Révéré", "Exalté"),
'st' => array( 'st' => array(
null, "Forme de félin", "Arbre de vie", "Forme de voyage", "Aquatic Form", null, "Forme de félin", "Arbre de vie", "Forme de voyage", "Aquatic Form",
@@ -96,18 +109,6 @@ $lang = array(
"Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord"
), ),
), ),
'filter' => array(
'extSearch' => "Recherche avancée",
'onlyAlliance' => "Alliance seulement",
'onlyHorde' => "Horde seulement",
'addFilter' => "Ajouter un autre filtre",
'match' => "Critère",
'allFilter' => "Tous les filtres",
'oneFilter' => "Au moins un",
'applyFilter' => "Appliquer le filtre",
'resetForm' => "Rétablir",
'refineSearch' => "Astuce : Affinez votre recherche en utilisant une <a href=\"javascript:;\" id=\"fi_subcat\">sous-catégorie</a>.",
),
'error' => array( 'error' => array(
'errNotFound' => "Page not found", 'errNotFound' => "Page not found",
'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", 'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...",
@@ -165,6 +166,27 @@ $lang = array(
'Général', 'Joueur ctr. Joueur', 'Réputation', 'Donjons & raids', 'Quêtes', 'Métiers', 'Évènements mondiaux' 'Général', 'Joueur ctr. Joueur', 'Réputation', 'Donjons & raids', 'Quêtes', 'Métiers', 'Évènements mondiaux'
) )
), ),
'currency' => array(
'cat' => array(
1 => "Divers", 2 => "JcJ", 4 => "Classique", 21 => "Wrath of the Lich King", 22 => "Raid", 23 => "Burning Crusade", 41 => "Test", 3 => "Inutilisées"
)
),
'itemset' => array(
'notes' => array(
null, "Ensemble de donjon 1", "Ensemble de donjon 2", "Ensemble de raid palier 1",
"Ensemble de raid palier 2", "Ensemble de raid palier 3", "Ensemble JcJ niveau 60 supérieur", "Ensemble JcJ niveau 60 supérieur (désuet)",
"Ensemble JcJ niveau 60 épique", "Ensemble des ruines d'Ahn'Qiraj", "Ensemble d'Ahn'Qiraj", "Ensemble de Zul'Gurub",
"Ensemble de raid palier 4", "Ensemble de raid palier 5", "Ensemble de donjon 3", "Ensemble du bassin d'Arathi",
"Ensemble JcJ niveau 70 supérieur", "Ensemble d'arène saison 1", "Ensemble de raid palier 6", "Ensemble d'arène saison 2",
"Ensemble d'arène saison 3", "Ensemble JcJ niveau 70 supérieur 2", "Ensemble d'arène saison 4", "Ensemble de raid palier 7",
"Ensemble d'arène saison 5", "Ensemble de raid palier 8", "Ensemble d'arène saison 6", "Ensemble de raid palier 9",
"Ensemble d'arène saison 7", "Ensemble de raid palier 10", "Set d'Arena de la Saison 8"
),
'types' => array(
null, "Tissu", "Cuir", "Mailles", "Plaques", "Dague", "Anneau",
"Arme de pugilat", "Hache à une main", "Masse à une main", "Épée à une main", "Bijou", "Amulette"
)
),
'spell' => array( 'spell' => array(
'remaining' => "%s restantes", 'remaining' => "%s restantes",
'untilCanceled' => "jusquà annulation", 'untilCanceled' => "jusquà annulation",
@@ -218,6 +240,10 @@ $lang = array(
'socket' => array( 'socket' => array(
"Méta-châsse", "Châsse rouge", "Châsse jaune", "Châsse bleue", -1 => "Châsse prismatique" "Méta-châsse", "Châsse rouge", "Châsse jaune", "Châsse bleue", -1 => "Châsse prismatique"
), ),
'quality' => array (
"Médiocre", "Classique", "Bonne", "Rare",
"Épique", "Légendaire", "Artefact", "Héritage"
),
'trigger' => array ( 'trigger' => array (
"Utilise: ", "Équipé : ", "Chances quand vous touchez : ", null, null, "Utilise: ", "Équipé : ", "Chances quand vous touchez : ", null, null,
null, null null, null

View File

@@ -18,7 +18,6 @@ $lang = array(
'profiles' => "Ваши персонажи", // translate.google :x 'profiles' => "Ваши персонажи", // translate.google :x
'links' => "Ссылки", 'links' => "Ссылки",
'pageNotFound' => "Такое %s не существует.", 'pageNotFound' => "Такое %s не существует.",
'both' => "Обе",
'gender' => "Пол", 'gender' => "Пол",
'sex' => [null, 'Мужчина', 'Женщина'], 'sex' => [null, 'Мужчина', 'Женщина'],
'quickFacts' => "Краткая информация", 'quickFacts' => "Краткая информация",
@@ -46,6 +45,17 @@ $lang = array(
'millisecsAbbr' => "[ms]", 'millisecsAbbr' => "[ms]",
'name' => "Название", 'name' => "Название",
// filter
'extSearch' => "Расширенный поиск",
'addFilter' => "Добавить другой фильтр",
'match' => "Совпадение",
'allFilter' => "Все фильтры",
'oneFilter' => "Любое совпадение",
'applyFilter' => "Применить фильтр",
'resetForm' => "Очистить форму",
'refineSearch' => "Совет: Уточните поиск, добавив <a href=\"javascript:;\" id=\"fi_subcat\">подкатегорию</a>.",
// infobox
'disabled' => "[Disabled]", 'disabled' => "[Disabled]",
'disabledHint' => "[Cannot be attained or completed]", 'disabledHint' => "[Cannot be attained or completed]",
'serverside' => "[Serverside]", 'serverside' => "[Serverside]",
@@ -58,10 +68,10 @@ $lang = array(
'tryAgain' => "Пожалуйста, попробуйте другие ключевые слова или проверьте правильность запроса.", 'tryAgain' => "Пожалуйста, попробуйте другие ключевые слова или проверьте правильность запроса.",
), ),
'game' => array( 'game' => array(
'alliance' => "Альянс",
'horde' => "Орда",
'class' => "класс", 'class' => "класс",
'classes' => "Классы", 'classes' => "Классы",
'currency' => "валюта",
'currencies' => "Валюта",
'races' => "Расы", 'races' => "Расы",
'title' => "звание", 'title' => "звание",
'titles' => "Звания", 'titles' => "Звания",
@@ -69,15 +79,18 @@ $lang = array(
'event' => "Событие", 'event' => "Событие",
'events' => "Игровые события", 'events' => "Игровые события",
'cooldown' => "Восстановление: %s", 'cooldown' => "Восстановление: %s",
'itemset' => "комплект",
'itemsets' => "Комплекты",
'requires' => "Требует:", 'requires' => "Требует:",
'reqLevel' => "Требуется уровень: %s", 'reqLevel' => "Требуется уровень: %s",
'reqLevelHlm' => "Требуется уровень: %s", 'reqLevelHlm' => "Требуется уровень: %s",
'valueDelim' => " - ", 'valueDelim' => " - ",
'si' => array(-2 => "Орда только", -1 => "Альянс только", null, "Альянс", "Орда", "Обе"),
'resistances' => array(null, 'Сопротивление светлой магии', 'Сопротивление огню', 'Сопротивление силам природы', 'Сопротивление магии льда', 'Сопротивление темной магии', 'Сопротивление тайной магии'), 'resistances' => array(null, 'Сопротивление светлой магии', 'Сопротивление огню', 'Сопротивление силам природы', 'Сопротивление магии льда', 'Сопротивление темной магии', 'Сопротивление тайной магии'),
'di' => array(null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"), 'di' => array(null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"),
'sc' => array("Физический урон", "Свет", "Огонь", "природа", "Лед", "Тьма", "Тайная магия"), 'sc' => array("Физический урон", "Свет", "Огонь", "природа", "Лед", "Тьма", "Тайная магия"),
'cl' => array("UNK_CL0", "Воин", "Паладин", "Охотник", "Разбойник", "Жрец", "Рыцарь смерти", "Шаман", "Маг", "Чернокнижник", 'UNK_CL10', "Друид"), 'cl' => array(null, "Воин", "Паладин", "Охотник", "Разбойник", "Жрец", "Рыцарь смерти", "Шаман", "Маг", "Чернокнижник", null, "Друид"),
'ra' => array(-2 => "Орда", -1 => "Альянс", "Обе", "Человек", "Орк", "Дворф", "Ночной эльф", "Нежить", "Таурен", "Гном", "Тролль", 'UNK_RA9', "Эльф крови", "Дреней"), 'ra' => array(-2 => "Орда", -1 => "Альянс", "Обе", "Человек", "Орк", "Дворф", "Ночной эльф", "Нежить", "Таурен", "Гном", "Тролль", null, "Эльф крови", "Дреней"),
'rep' => array("Ненависть", "Враждебность", "Неприязнь", "Равнодушие", "Дружелюбие", "Уважение", "Почтение", "Превознесение"), 'rep' => array("Ненависть", "Враждебность", "Неприязнь", "Равнодушие", "Дружелюбие", "Уважение", "Почтение", "Превознесение"),
'st' => array( 'st' => array(
null, "Облик кошки", "TОблик Древа жизни", "Походный облик", "Водный облик", null, "Облик кошки", "TОблик Древа жизни", "Походный облик", "Водный облик",
@@ -96,18 +109,6 @@ $lang = array(
"Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord"
), ),
), ),
'filter' => array(
'extSearch' => "Расширенный поиск",
'onlyAlliance' => "Альянс только",
'onlyHorde' => "Орда только",
'addFilter' => "Добавить другой фильтр",
'match' => "Совпадение",
'allFilter' => "Все фильтры",
'oneFilter' => "Любое совпадение",
'applyFilter' => "Применить фильтр",
'resetForm' => "Очистить форму",
'refineSearch' => "Совет: Уточните поиск, добавив <a href=\"javascript:;\" id=\"fi_subcat\">подкатегорию</a>.",
),
'error' => array( 'error' => array(
'errNotFound' => "Page not found", 'errNotFound' => "Page not found",
'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", 'errPage' => "What? How did you... nevermind that!\n<br>\n<br>\nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n<br>\n<br>\nPerhaps a few tweaks to the <span class=\"q4\">[WH-799 Major Confabulation Engine]</span> may result in the page suddenly making an appearance!\n<div class=\"pad\"></div>\n<div class=\"pad\"></div>\nOr, you can try \n<a href=\"http://www.wowhead.com/?aboutus#contact\">contacting us</a>\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...",
@@ -165,6 +166,27 @@ $lang = array(
'Общее', 'PvP', 'Репутация', 'Подземелья и рейды', 'Задания', 'Профессии', 'Игровые события' 'Общее', 'PvP', 'Репутация', 'Подземелья и рейды', 'Задания', 'Профессии', 'Игровые события'
) )
), ),
'currency' => array(
'cat' => array(
1 => "Разное", 2 => "PvP", 4 => "World of Warcraft", 21 => "Wrath of the Lich King", 22 => "Подземелья и рейды", 23 => "Burning Crusade", 41 => "Test", 3 => "Неактивно"
)
),
'itemset' => array(
'notes' => array(
null, "Комплект подземелий 1", "Комплект подземелий 2", "Рейдовый комплект Tier 1",
"Рейдовый комплект Tier 2", "Рейдовый комплект Tier 3", "PvP Комплект для 60 уровня", "PvP Комплект для 60 уровня (старая версия)",
"Эпический PvP Комплект для 60 уровня", "Комплект из Руин Ан'Киража", "Комплект из Храма Ан'Киража", "Комплект Зул'Гуруба",
"Рейдовый комплект Tier 4", "Рейдовый комплект Tier 5", "Комплект подземелий 3", "Комплект Низин Арати",
"Редкий PvP Комплект для 70 уровня", "Комплект Арены 1 сезона", "Рейдовый комплект Tier 6", "Комплект Арены 2 сезона",
"Комплект Арены 3 сезона", "PvP Комплект для 70 уровня 2", "Комплект Арены 4 сезона", "Рейдовый комплект Tier 7",
"Комплект Арены 5 сезона", "Рейдовый комплект Tier 8", "Комплект Арены 6 сезона", "Рейдовый комплект Tier 9",
"Комплект Арены 7 сезона", "Рейдовый комплект Tier 10", "Комплект Арены 8 сезона"
),
'types' => array(
null, "Ткань", "Кожа", "Кольчуга", "Латы", "Кинжал", "Кольцо",
"Кистевое оружие", "Одноручный топор", "Одноручное дробящее", "Одноручный меч", "Аксессуар", "Амулет"
)
),
'spell' => array( 'spell' => array(
'remaining' => "Осталось: %s", 'remaining' => "Осталось: %s",
'untilCanceled' => "до отмены", 'untilCanceled' => "до отмены",
@@ -218,6 +240,10 @@ $lang = array(
'socket' => array( 'socket' => array(
"Особое гнездо", "Красное гнездо", "Желтое гнездо", "Синее гнездо", -1 => "Бесцветное гнездо" "Особое гнездо", "Красное гнездо", "Желтое гнездо", "Синее гнездо", -1 => "Бесцветное гнездо"
), ),
'quality' => array (
"Низкий", "Обычный", "Необычный", "Редкий",
"Эпический", "Легендарный", "Артефакт", "Фамильная черта"
),
'trigger' => array ( 'trigger' => array (
"Использование: ", "Если на персонаже: ", "Возможный эффект при попадании: ", null, "Использование: ", "Если на персонаже: ", "Возможный эффект при попадании: ", null,
null, null, null null, null, null

View File

@@ -48,7 +48,7 @@ if ($compareString)
$pageData['summary'] = json_encode($outSet, JSON_NUMERIC_CHECK); $pageData['summary'] = json_encode($outSet, JSON_NUMERIC_CHECK);
$iList = new ItemList(array(['i.entry', $items])); $iList = new ItemList(array(['i.entry', $items]));
$data = $iList->getListviewData(ITEMINFO_SUBITEMS | ITEMINFO_JSON); $data = $iList->getListviewData(ITEMINFO_SUBITEMS | ITEMINFO_JSON);
foreach ($data as $id => $item) foreach ($data as $id => $item)
{ {
while ($iList->id != $id) while ($iList->id != $id)

View File

@@ -22,12 +22,12 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
$infobox = []; $infobox = [];
$colon = User::$localeId == LOCALE_FR ? ' : ' : ': '; // Je suis un prick! <_< $colon = User::$localeId == LOCALE_FR ? ' : ' : ': '; // Je suis un prick! <_<
if ($title->getField('side') == 1) if ($title->getField('side') == SIDE_ALLIANCE)
$infobox[] = Lang::$main['side'].$colon.'[span class=alliance-icon]'.Lang::$game['alliance'].'[/span]'; $infobox[] = Lang::$main['side'].$colon.'[span class=alliance-icon]'.Lang::$game['si'][SIDE_ALLIANCE].'[/span]';
else if ($title->getField('side') == 2) else if ($title->getField('side') == SIDE_HORDE)
$infobox[] = Lang::$main['side'].$colon.'[span class=horde-icon]'.Lang::$game['horde'].'[/span]'; $infobox[] = Lang::$main['side'].$colon.'[span class=horde-icon]'.Lang::$game['si'][SIDE_HORDE].'[/span]';
else else
$infobox[] = Lang::$main['side'].$colon.Lang::$main['both']; $infobox[] = Lang::$main['side'].$colon.Lang::$game['si'][SIDE_BOTH];
if ($g = $title->getField('gender')) if ($g = $title->getField('gender'))
$infobox[] = Lang::$main['gender'].$colon.'[span class='.($g == 2 ? 'female' : 'male').'-icon]'.Lang::$main['sex'][$g].'[/span]'; $infobox[] = Lang::$main['gender'].$colon.'[span class='.($g == 2 ? 'female' : 'male').'-icon]'.Lang::$main['sex'][$g].'[/span]';

View File

@@ -232,7 +232,7 @@ if ($searchMask & 0x10)
if ($data = $money->getListviewData()) if ($data = $money->getListviewData())
{ {
while ($money->iterate()) while ($money->iterate())
$data[$money->id]['param1'] = strToLower($money->getField('iconString')); $data[$money->id]['param1'] = '"'.strToLower($money->getField('iconString')).'"';
$found['currency'] = array( $found['currency'] = array(
'type' => TYPE_CURRENCY, 'type' => TYPE_CURRENCY,
@@ -249,7 +249,7 @@ if ($searchMask & 0x10)
// 6 Itemsets // 6 Itemsets
if ($searchMask & 0x20) if ($searchMask & 0x20)
{ {
$sets = new ItemsetList(array($maxResults, ['name_loc'.User::$localeId, $query])); $sets = new ItemsetList(array($maxResults, ['item1', 0, '!'], ['name_loc'.User::$localeId, $query])); // remove empty sets from search
$sets->addGlobalsToJscript($jsGlobals); $sets->addGlobalsToJscript($jsGlobals);
if ($data = $sets->getListviewData()) if ($data = $sets->getListviewData())
@@ -274,19 +274,21 @@ if ($searchMask & 0x20)
if ($searchMask & 0x40) if ($searchMask & 0x40)
{ {
if (($searchMask & SEARCH_TYPE_JSON) && $type == TYPE_ITEMSET && isset($found['itemset'])) if (($searchMask & SEARCH_TYPE_JSON) && $type == TYPE_ITEMSET && isset($found['itemset']))
$conditions = [['i.entry', array_keys($found['itemset']['pcsToSet'])]]; $conditions = [['i.entry', array_keys($found['itemset']['pcsToSet'])], 0];
else if (($searchMask & SEARCH_TYPE_JSON) && $type == TYPE_ITEM) else if (($searchMask & SEARCH_TYPE_JSON) && $type == TYPE_ITEM)
$conditions = [['i.class', [2, 4]], [User::$localeId ? 'name_loc'.User::$localeId : 'name', $query], $AoWoWconf['sqlLimit']]; $conditions = [['i.class', [2, 4]], [User::$localeId ? 'name_loc'.User::$localeId : 'name', $query], $AoWoWconf['sqlLimit']];
else else
$conditions = [[User::$localeId ? 'name_loc'.User::$localeId : 'name', $query], $maxResults]; $conditions = [[User::$localeId ? 'name_loc'.User::$localeId : 'name', $query], $maxResults];
$items = new ItemList($conditions, @$found['itemset']['pcsToSet']); $items = new ItemList($conditions, @$found['itemset']['pcsToSet']);
$items->addGlobalsToJscript($jsGlobals); $items->addGlobalsToJscript($jsGlobals);
if ($data = $items->getListviewData($searchMask & SEARCH_TYPE_JSON ? (ITEMINFO_SUBITEMS | ITEMINFO_JSON) : 0)) if ($data = $items->getListviewData($searchMask & SEARCH_TYPE_JSON ? (ITEMINFO_SUBITEMS | ITEMINFO_JSON) : 0))
{ {
while ($items->iterate()) while ($items->iterate())
{ {
$data[$items->id]['name'] = substr($data[$items->id]['name'], 1);
$data[$items->id]['param1'] = '"'.$items->getField('icon').'"'; $data[$items->id]['param1'] = '"'.$items->getField('icon').'"';
$data[$items->id]['param2'] = $items->getField('Quality'); $data[$items->id]['param2'] = $items->getField('Quality');
} }

File diff suppressed because it is too large Load Diff

View File

@@ -4461,6 +4461,24 @@ Listview.prototype = {
ae(m, b); ae(m, b);
ae(m, ct(")")) ae(m, ct(")"))
} }
if (this._errors) {
var
sp = ce('small'),
b = ce('b');
b.className = 'q10 report-icon';
if (m.innerHTML) {
b.style.marginLeft = '10px';
}
g_addTooltip(sp, LANG.lvnote_witherrors, 'q')
st(b, LANG.error);
ae(sp, b);
ae(m, sp);
}
if (!m.firstChild && this.mode != Listview.MODE_CHECKBOX) { if (!m.firstChild && this.mode != Listview.MODE_CHECKBOX) {
ae(m, ct(String.fromCharCode(160))) ae(m, ct(String.fromCharCode(160)))
} }

View File

@@ -1125,52 +1125,55 @@ var g_item_subsubclasses = {
} }
} }
}; };
var g_itemset_types = { var g_itemset_types = {
1:"Stoff", 1: "Stoff",
2:"Leder", 2: "Leder",
3:"Schwere R\u00fcstung", 3: "Schwere R\u00fcstung",
4:"Platte", 4: "Platte",
5:"Dolch", 5: "Dolch",
6:"Ring", 6: "Ring",
7:"Faustwaffe", 7: "Faustwaffe",
8:"Einhandaxt", 8: "Einhandaxt",
9:"Einhandstreitkolben", 9: "Einhandstreitkolben",
10:"Einhandschwert", 10: "Einhandschwert",
11:"Schmuck", 11: "Schmuck",
12:"Amulett" 12: "Amulett"
}; };
var g_itemset_notes = { var g_itemset_notes = {
1:"Dungeon-Set 1", 1: "Dungeon-Set 1",
2:"Dungeon-Set 2", 2: "Dungeon-Set 2",
14:"Dungeon-Set 3", 14: "Dungeon-Set 3",
3:"Tier 1 Raid-Set", 3: "Tier 1 Raid-Set",
4:"Tier 2 Raid-Set", 4: "Tier 2 Raid-Set",
5:"Tier 3 Raid-Set", 5: "Tier 3 Raid-Set",
12:"Tier 4 Raid-Set", 12: "Tier 4 Raid-Set",
13:"Tier 5 Raid-Set", 13: "Tier 5 Raid-Set",
18:"Tier 6 Raid-Set", 18: "Tier 6 Raid-Set",
23:"Tier 7 Raid-Set", 23: "Tier 7 Raid-Set",
25:"Tier 8 Raid-Set", 25: "Tier 8 Raid-Set",
27:"Tier 9 Raid-Set", 27: "Tier 9 Raid-Set",
29:"Tier 10 Raid-Set", 29: "Tier 10 Raid-Set",
6:"Level 60 PvP-Set (Rar)", 6: "Level 60 PvP-Set (Rar)",
7:"Level 60 PvP-Set (Rar, alt)", 7: "Level 60 PvP-Set (Rar, alt)",
8:"Level 60 PvP-Set (Episch)", 8: "Level 60 PvP-Set (Episch)",
16:"Level 70 PvP-Set (Rar)", 16: "Level 70 PvP-Set (Rar)",
21:"Level 70 PvP-Set 2 (Rar)", 21: "Level 70 PvP-Set 2 (Rar)",
17:"Arena-Set Saison 1", 17: "Arena-Set Saison 1",
19:"Arena-Set Saison 2", 19: "Arena-Set Saison 2",
20:"Arena-Set Saison 3", 20: "Arena-Set Saison 3",
22:"Arena-Set Saison 4", 22: "Arena-Set Saison 4",
24:"Arena-Set Saison 5", 24: "Arena-Set Saison 5",
26:"Arena-Set Saison 6", 26: "Arena-Set Saison 6",
28:"Arena-Set Saison 7", 28: "Arena-Set Saison 7",
30:"Arena-Set Saison 8", 30: "Arena-Set Saison 8",
15:"Set des Arathibeckens", 15: "Set des Arathibeckens",
9:"Set der Ruinen von Ahn'Qiraj", 9: "Set der Ruinen von Ahn'Qiraj",
10:"Set des Tempels von Ahn'Qiraj", 10: "Set des Tempels von Ahn'Qiraj",
11:"Set von Zul'Gurub" 11: "Set von Zul'Gurub"
}; };
var g_npc_classifications = { var g_npc_classifications = {
0:"Normal", 0:"Normal",
1:"Elite", 1:"Elite",
@@ -2096,6 +2099,7 @@ var LANG = {
hyphen: " - ", hyphen: " - ",
colon: ": ", colon: ": ",
qty: " ($1)", qty: " ($1)",
error: "Fehler",
date: "Datum", date: "Datum",
date_colon: "Datum: ", date_colon: "Datum: ",
@@ -2294,6 +2298,7 @@ var LANG = {
lvnote_tryfiltering: "Versucht es mit <a>gefilterten</a> Suchergebnissen.", lvnote_tryfiltering: "Versucht es mit <a>gefilterten</a> Suchergebnissen.",
lvnote_trynarrowing: "Versucht, Eure Suche weiter einzugrenzen", lvnote_trynarrowing: "Versucht, Eure Suche weiter einzugrenzen",
lvnote_upgradesfor: 'Sucht nach Verbesserungen f\u00fcr <a href="?item=$1" class="q$2"><b>$3</b></a>.', lvnote_upgradesfor: 'Sucht nach Verbesserungen f\u00fcr <a href="?item=$1" class="q$2"><b>$3</b></a>.',
lvnote_witherrors: "Einige Filter in Eurer Suche waren nicht gültig und wurden ignoriert.",
lvnote_itemsfound: "$1 Gegenst\u00e4nde gefunden ($2 angezeigt)", lvnote_itemsfound: "$1 Gegenst\u00e4nde gefunden ($2 angezeigt)",
lvnote_itemsetsfound: "$1 Sets gefunden ($2 angezeigt)", lvnote_itemsetsfound: "$1 Sets gefunden ($2 angezeigt)",
@@ -2730,37 +2735,51 @@ var LANG = {
myaccount_purged: "Gel\u00f6scht", myaccount_purged: "Gel\u00f6scht",
myaccount_purgefailed: "L\u00f6schen fehlgeschlagen :(", myaccount_purgefailed: "L\u00f6schen fehlgeschlagen :(",
myaccount_purgesuccess: "Bekanntmachungsdaten wurden erfolgreich gel\u00f6scht!", myaccount_purgesuccess: "Bekanntmachungsdaten wurden erfolgreich gel\u00f6scht!",
types: {
1: ["NPC", "NPC", "NPCs", "NPCs"], types: {
2: ["Objekt", "Objekt", "Objekte", "Objekte"], 1: ["NPC", "NPC" , "NPCs", "NPCs"],
3: ["Gegenstand", "Gegenstand", "Gegenst\u00e4nde", "Gegenst\u00e4nde"], 2: ["Objekt", "Objekt", "Objekte", "Objekte"],
4: ["Set", "Set", "Sets", "Sets"], 3: ["Gegenstand", "Gegenstand", "Gegenstände", "Gegenstände"],
5: ["Quest", "Quest", "Quests", "Quests"], 4: ["Ausrüstungsset", "Ausrüstungsset", "Ausrüstungssets", "Ausrüstungssets"],
6: ["Zauber", "Zauber", "Zauber", "Zauber"], 5: ["Quest", "Quest", "Quests", "Quests"],
7: ["Zone", "Zone", "Gebiete", "Gebiete"], 6: ["Zauber", "Zauber", "Zauber", "Zauber"],
8: ["Fraktion", "fraktion", "Fraktionen", "Fraktionen"], 7: ["Zone", "Zone", "Gebiete", "Gebiete"],
9: ["Begleiter", "Begleiter", "Begleiter", "Begleiter"], 8: ["Fraktion", "Fraktion", "Fraktionen", "Fraktionen"],
10: ["Erfolg", "Erfolg", "Erfolge", "Erfolge"], 9: ["Begleiter", "Begleiter", "Begleiter", "Begleiter"],
11: ["Titel", "Titel", "Titel", "Titel"], 10: ["Erfolg", "Erfolg", "Erfolge", "Erfolge"],
12: ["Weltereignis", "Weltereignis", "Weltereignisse", "Weltereignisse"], 11: ["Titel", "Titel", "Titel", "Titel"],
13: ["Klasse", "Klasse", "Klassen", "Klassen"], 12: ["Weltereignis", "Weltereignis", "Weltereignisse", "Weltereignisse"],
14: ["Volk", "Volk", "V\u00f6lker", "V\u00f6lker"], 13: ["Klasse", "Klasse", "Klassen", "Klassen"],
15: ["Fertigkeit", "Fertigkeit", "Fertigkeiten", "Fertigkeiten"], 14: ["Volk", "Volk", "Völker", "Völker"],
16: ["Statistik", "Statistik", "Statistiken", "Statistiken"] 15: ["Fertigkeit", "Fertigkeit", "Fertigkeiten", "Fertigkeiten"],
}, 16: ["Statistik", "Statistik", "Statistiken", "Statistiken"],
timeunitssg: ["Jahr", "Monat", "Woche", "Tag", "Stunde", "Minute", "Sekunde"], 17: ["Währung", "Währung", "Währungen", "Währungen"]
timeunitspl: ["Jahre", "Monate", "Wochen", "Tagen", "Stunden", "Minuten", "Sekunden"], },
timeunitssg: ["Jahr", "Monat", "Woche", "Tag", "Stunde", "Minute", "Sekunde"],
timeunitspl: ["Jahre", "Monate", "Wochen", "Tagen", "Stunden", "Minuten", "Sekunden"],
timeunitsab: ["J.", "M.", "W.", "Tag", "Std.", "Min", "Sek."], timeunitsab: ["J.", "M.", "W.", "Tag", "Std.", "Min", "Sek."],
fishow: "Filter erstellen",
fihide: "Filteroptionen ausblenden", fishow: "Filter erstellen",
fiany: "Beliebig", fihide: "Filteroptionen ausblenden",
finone: "Nichts",
firemove: "entfernen", fiany: "Beliebig",
ficlear: "leeren", finone: "Nichts",
fishowdetails: "Details anzeigen",
fihidedetails: "Details ausblenden", firemove: "entfernen",
message_fillsomecriteria: "Bitte gebt einige Kriterien ein.", ficlear: "leeren",
tooltip_jconlygems: "Wenn aktiviert, werden auch spezielle<br />\nJuwelenschleifer-Edelsteine für die<br />\nGewichtung von Werten in Betracht gezogen.", ficustom: "Individuell",
fishowdetails: "Details anzeigen",
fihidedetails: "Details ausblenden",
fisavescale: "Speichern",
fideletescale: "Löschen",
message_fillsomecriteria: "Bitte gebt einige Kriterien ein.",
tooltip_jconlygems: "Wenn aktiviert, werden auch spezielle<br />\nJuwelenschleifer-Edelsteine für die<br />\nGewichtung von Werten in Betracht gezogen.",
tooltip_genericrating: "<span class=\"q2\">Anlegen: Erhöht Eure $1 um <!--rtg$2-->$3&nbsp;<small>(<!--rtg%$2-->0&nbsp;@&nbsp;L<!--lvl-->0)</small>.</span><br />",
fidropdowns: { fidropdowns: {
yn: [[1, "Ja"], [2, "Nein"]], yn: [[1, "Ja"], [2, "Nein"]],
num: [[1, ">"], [2, ">="], [3, "="], [4, "<="], [5, "<"]], num: [[1, ">"], [2, ">="], [3, "="], [4, "<="], [5, "<"]],

File diff suppressed because one or more lines are too long

View File

@@ -1125,52 +1125,55 @@ var g_item_subsubclasses = {
} }
} }
}; };
var g_itemset_types = { var g_itemset_types = {
1:"Tela", 1: "Tela",
2:"Cuero", 2: "Cuero",
3:"Malla", 3: "Malla",
4:"Placas", 4: "Placas",
5:"Daga", 5: "Daga",
6:"Anillo", 6: "Anillo",
7:"Arma de puño", 7: "Arma de puño",
8:"Hacha de uno mano", 8: "Hacha de uno mano",
9:"Maza de uno mano", 9: "Maza de uno mano",
10:"Espada de uno mano", 10: "Espada de uno mano",
11:"Abalorio", 11: "Abalorio",
12:"Amuleto" 12: "Amuleto"
}; };
var g_itemset_notes = { var g_itemset_notes = {
1:"Set de mazmorra 1", 1: "Set de mazmorra 1",
2:"Set de mazmorra 2", 2: "Set de mazmorra 2",
14:"Set de mazmorra 3", 14: "Set de mazmorra 3",
3:"Set de banda tier 1", 3: "Set de banda tier 1",
4:"Set de banda tier 2", 4: "Set de banda tier 2",
5:"Set de banda tier 3", 5: "Set de banda tier 3",
12:"Set de banda tier 4", 12: "Set de banda tier 4",
13:"Set de banda tier 5", 13: "Set de banda tier 5",
18:"Set de banda tier 6", 18: "Set de banda tier 6",
23:"Set de banda tier 7", 23: "Set de banda tier 7",
25:"Set de banda tier 8", 25: "Set de banda tier 8",
27:"Set de banda tier 9", 27: "Set de banda tier 9",
29:"Set de banda tier 10", 29: "Set de banda tier 10",
6:"Set JcJ nivel 60 superior", 6: "Set JcJ nivel 60 superior",
7:"Set JcJ nivel 60 superior (obsoleto)", 7: "Set JcJ nivel 60 superior (obsoleto)",
8:"Set JcJ nivel 60 épico", 8: "Set JcJ nivel 60 épico",
16:"Set JcJ nivel 70 superior", 16: "Set JcJ nivel 70 superior",
21:"Set JcJ nivel 70 superior 2", 21: "Set JcJ nivel 70 superior 2",
17:"Set de la Temporada de Arenas 1", 17: "Set de la Temporada de Arenas 1",
19:"Set de la Temporada de Arenas 2", 19: "Set de la Temporada de Arenas 2",
20:"Set de la Temporada de Arenas 3", 20: "Set de la Temporada de Arenas 3",
22:"Set de la Temporada de Arenas 4", 22: "Set de la Temporada de Arenas 4",
24:"Set de la Temporada de Arenas 5", 24: "Set de la Temporada de Arenas 5",
26:"Set de la Temporada de Arenas 6", 26: "Set de la Temporada de Arenas 6",
28:"Set de la Temporada de Arenas 7", 28: "Set de la Temporada de Arenas 7",
30:"Set de la Temporada de Arenas 8", 30: "Set de la Temporada de Arenas 8",
15:"Set de la Cuenca de Arathi", 15: "Set de la Cuenca de Arathi",
9:"Set de las Ruinas de Ahn'Qiraj", 9: "Set de las Ruinas de Ahn'Qiraj",
10:"Set del Templo de Ahn'Qiraj", 10: "Set del Templo de Ahn'Qiraj",
11:"Set de Zul'Gurub" 11: "Set de Zul'Gurub"
}; };
var g_npc_classifications = { var g_npc_classifications = {
0:"Normal", 0:"Normal",
1:"Élite", 1:"Élite",
@@ -2088,13 +2091,15 @@ var g_socket_names = {
8:"Ranura azul", 8:"Ranura azul",
14:"Ranura prismática" 14:"Ranura prismática"
}; };
var LANG = {and:" y ", var LANG = {
comma:", ", and: " y ",
ellipsis:"…", comma: ", ",
dash:" ", ellipsis: "",
hyphen:" - ", dash: " ",
colon:": ", hyphen: " - ",
qty:" ($1)", colon: ": ",
qty: " ($1)",
error: "Error",
date: "Fecha", date: "Fecha",
date_colon: "Fecha: ", date_colon: "Fecha: ",
@@ -2294,9 +2299,10 @@ var LANG = {and:" y ",
lvnodata_vi2:"¡Sé el primero en <a>sugerir un vídeo</a> para esta página!", lvnodata_vi2:"¡Sé el primero en <a>sugerir un vídeo</a> para esta página!",
lvnodata_vi3:"Por favor <a>inicia sesión</a> para sugerir un vídeo, o <a>crea tu cuenta</a> si aun no tienes una.", lvnodata_vi3:"Por favor <a>inicia sesión</a> para sugerir un vídeo, o <a>crea tu cuenta</a> si aun no tienes una.",
lvnote_tryfiltering: "Trata de filtrar tus resultados", lvnote_tryfiltering: "Trata de <a>filtrar</a> tus resultados",
lvnote_trynarrowing: "Trata de ser más específica(o) en tu búsqueda", lvnote_trynarrowing: "Trata de ser más específica(o) en tu búsqueda",
lvnote_upgradesfor: 'Buscando mejoras para <a href="?item=$1" class="q$2"><b>$3</b></a>.', lvnote_upgradesfor: 'Buscando mejoras para <a href="?item=$1" class="q$2"><b>$3</b></a>.',
lvnote_witherrors: "Algunos filtros en tus búsquedas eran inválidos y han sido ignorados.",
lvnote_itemsfound: "$1 objetos encontrados (mostrando $2)", lvnote_itemsfound: "$1 objetos encontrados (mostrando $2)",
lvnote_itemsetsfound: "$1 conjuntos de objetos encontrados (mostrando $2)", lvnote_itemsetsfound: "$1 conjuntos de objetos encontrados (mostrando $2)",
@@ -2802,23 +2808,27 @@ var LANG = {and:" y ",
myaccount_purged:"Purgado", myaccount_purged:"Purgado",
myaccount_purgefailed:"La purga ha fallado :(", myaccount_purgefailed:"La purga ha fallado :(",
myaccount_purgesuccess:"¡Se han purgado los datos de los anuncios correctamente!", myaccount_purgesuccess:"¡Se han purgado los datos de los anuncios correctamente!",
types:{
1:["PNJ","PNJ","PNJs","PNJs"], types:{
2:["Entidad","entidad","Entidades","entidades"], 1: ["PNJ", "PNJ" , "PNJs", "PNJs"],
3:["Objeto","objeto","Objetos","objetos"], 2: ["Entidad", "entidad", "Entidades", "entidades"],
4:["Conjunto de objetos","conjunto de objetos","Conjuntos de objetos","conjuntos de objetos"], 3: ["Objeto", "objeto", "Objetos", "objetos"],
5:["Misión","misión","Misiones","misiones"], 4: ["Conjunto de objetos", "conjunto de objetos", "Conjuntos de objetos", "conjuntos de objetos"],
6:["Hechizo","hechizo","Hechizos","hechizos"], 5: ["Misión", "misión", "Misiones", "misiones"],
7:["Zona","zona","Zonas","zonas"], 6: ["Hechizo", "hechizo", "Hechizos", "hechizos"],
8:["Facción","facción","Facciones","facciones"], 7: ["Zona", "zona", "Zonas", "zonas"],
9:["Mascota","mascota","Mascotas","mascotas"], 8: ["Facción", "facción", "Facciones", "facciones"],
10:["Logro","logro","Logros","logros"], 9: ["Mascota", "mascota", "Mascotas", "mascotas"],
11:["Título","título","Títulos","títulos"], 10: ["Logro", "logro", "Logros", "logros"],
12:["Suceso mundial","evento del mundo","Eventos del mundo","eventos del mundo"], 11: ["Título", "título", "Títulos", "títulos"],
13:["Clase","Clase","Clases","Clases"], 12: ["Suceso mundial", "evento del mundo", "Eventos del mundo", "eventos del mundo"],
14:["Raza","raza","Razas","razas"], 13: ["Clase", "Clase", "Clases", "Clases"],
15:["Habilidad","habilidad","Habilidades","habilidades"] 14: ["Raza", "raza", "Razas", "razas"],
15: ["Habilidad", "habilidad", "Habilidades", "habilidades"],
16: ["Atributo", "atributo", "Atributos", "atributos"],
17: ["Monedas", "monedas", "Monedas", "monedas"]
}, },
timeunitssg:["año","mes","semana","día","hora","minuto","segundo"], timeunitssg:["año","mes","semana","día","hora","minuto","segundo"],
timeunitspl:["años","meses","semanas","dias","horas","minutos","segundos"], timeunitspl:["años","meses","semanas","dias","horas","minutos","segundos"],
timeunitsab:["año","mes","sem","","h","min","seg"], timeunitsab:["año","mes","sem","","h","min","seg"],
@@ -2942,16 +2952,27 @@ var LANG = {and:" y ",
sta:["Aguante","Agu","Agu"], sta:["Aguante","Agu","Agu"],
str:["Fuerza","Fue","Fue"] str:["Fuerza","Fue","Fue"]
}, },
fishow:"Crear un filtro",
fihide:"Esconder opciones de filtros", fishow: "Crear un filtro",
fiany:"Cualquiera", fihide: "Esconder opciones de filtros",
finone:"Ninguno",
firemove:"remover", fiany: "Cualquiera",
ficlear:"borrar", finone: "Ninguno",
fishowdetails:"mostrar detalles",
fihidedetails:"ocultar detalles", firemove: "remover",
message_fillsomecriteria:"Por favor ingrese algún criterio.", ficlear: "borrar",
tooltip_jconlygems:"Si está marcado, las gemas exclusivas de<br />\njoyero, se usarán para determinar las posibles<br/>\nmejores gemas para una puntuación de objeto.", ficustom: "Personalizado",
fishowdetails: "Mostrar detalles",
fihidedetails: "Ocultar detalles",
fisavescale: "Guardar",
fideletescale: "Borrar",
message_fillsomecriteria: "Por favor ingrese algún criterio.",
tooltip_jconlygems: "Si está marcado, las gemas exclusivas de<br />\njoyero, se usarán para determinar las posibles<br/>\nmejores gemas para una puntuación de objeto.",
tooltip_genericrating: "<span class=\"q2\">Equipar: Aumenta tu $1 en <!--rtg$2-->$3&nbsp;<small>(<!--rtg%$2-->0&nbsp;@&nbsp;L<!--lvl-->0)</small>.</span><br />",
fidropdowns:{ fidropdowns:{
yn:[[1,"Sí"],[2,"No"]], yn:[[1,"Sí"],[2,"No"]],
num:[[1,">"],[2,">="],[3,"="],[4,"<="],[5,"<"]], num:[[1,">"],[2,">="],[3,"="],[4,"<="],[5,"<"]],

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long