Support for international localisation via separate language files

This commit is contained in:
BuildTools 2016-02-12 10:20:05 +01:00
parent cdc5726121
commit d63d69e553
13 changed files with 268 additions and 81 deletions

View File

@ -16,11 +16,11 @@ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
if ($player_name === null) continue;
$page->print_table_rows($row, array(
'Name' => $page->get_avatar($player_name, $row['uuid']),
'Banned By' => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
'Reason' => $page->clean($row['reason']),
'Banned On' => $page->millis_to_date($row['time']),
'Banned Until' => $page->expiry($row),
$page->lang->ban_player => $page->get_avatar($player_name, $row['uuid']),
$page->lang->ban_by => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
$page->lang->ban_reason => $page->clean($row['reason']),
$page->lang->ban_when => $page->millis_to_date($row['time']),
$page->lang->ban_expiry => $page->expiry($row),
));
}
$page->table_end();

View File

@ -3,12 +3,12 @@ require_once './inc/page.php';
class Check {
public function run($name, $from) {
$page = new Page("check", false);
// validate user input
if (strlen($name) > 16 || !preg_match("/^[0-9a-zA-Z_]{1,16}$/", $name)) {
$this->println("Invalid name.");
$this->println($page->lang->check_invalid);
return;
}
$page = new Page("check", false);
$history = $page->settings->table['history'];
try {
@ -21,7 +21,7 @@ class Check {
}
if (!isset($uuid)) {
$name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
$this->println("$name has not joined before.");
$this->println("$name ".$page->lang->check_notjoin);
return;
}
$href = "history.php?uuid=$uuid";

View File

@ -67,19 +67,19 @@ class History {
$page = new Page("history");
isset($_GET['uuid']) && is_string($_GET['uuid']) or die("Missing arguments (uuid).");
isset($_GET['uuid']) && is_string($_GET['uuid']) or die($page->lang->history_missinguuid);
$staffhistory = (isset($_GET['staffhistory']) && $_GET['staffhistory'] === "1");
$uuid = $_GET['uuid'];
$name = $page->get_name($uuid);
$name !== null or die("Player not found in database.");
$name !== null or die($page->lang->history_playernotfound);
if ($staffhistory) {
$page->name = "Recent Punishments by $name";
$page->name = $page->lang->history_recentby.$name;
} else {
$page->name = "Recent Punishments for $name";
$page->name = $page->lang->history_recentfor.$name;
}
@ -162,12 +162,12 @@ try {
$label = "<span $style class='label label-$label_type'>$label_name</span>";
$page->print_table_rows($row, array(
'Type' => $label,
'Player' => $page->get_avatar($page->get_name($row['uuid']), $row['uuid']),
'Moderator' => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
'Reason' => $page->clean($row['reason']),
'Date' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
$page->lang->history_tabletype => $label,
$page->lang->history_tableplayer => $page->get_avatar($page->get_name($row['uuid']), $row['uuid']),
$page->lang->history_tablemoderator => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
$page->lang->history_tablereason => $page->clean($row['reason']),
$page->lang->history_tabledate => $page->millis_to_date($row['time']),
$page->lang->history_tableexpires => $page->expiry($row),
//'i' => $i . "/" . $limit . "/" . $total,
));
}
@ -196,11 +196,11 @@ try {
$page->print_pager($total, $args, $prevargs);
}
} else {
echo "No punishments found.<br>";
echo $page->lang->history_nopunishments."<br>";
}
if ($from_href !== null) {
echo "<br><a class=\"btn\" href=\"$from_href\">Return to $from_title</a>";
echo "<br><a class=\"btn\" href=\"$from_href\">".$page->lang->history_returnto." $from_title</a>";
}
$page->print_footer();

View File

@ -89,11 +89,11 @@ $settings = $this->page->settings;
<nav id="litebans-navbar" class="collapse navbar-collapse">
<?php
$this->navbar(array(
"index.php" => "Home",
"bans.php" => "Bans",
"mutes.php" => "Mutes",
"warnings.php" => "Warnings",
"kicks.php" => "Kicks",
"index.php" => $this->page->lang->header_index,
"bans.php" => $this->page->lang->header_bans,
"mutes.php" => $this->page->lang->header_mutes,
"warnings.php" => $this->page->lang->header_warnings,
"kicks.php" => $this->page->lang->header_kicks,
));
?>
<div class="nav navbar-nav navbar-right">

View File

@ -4,14 +4,18 @@ class Page {
public function __construct($name, $header = true) {
ini_set('mbstring.internal_encoding', 'UTF-8');
ini_set('default_charset', 'utf-8');
require_once './inc/settings.php';
$settings = new Settings();
setlocale(LC_ALL, $settings->lang);
require_once './lang/'.$settings->lang.'.php';
$lang = new Lang();
$this->lang = $lang;
header('Content-Type: text/html; charset=UTF-8');
$this->time = microtime(true);
if ($header) {
require_once './inc/header.php';
}
require_once './inc/settings.php';
$settings = new Settings();
$this->conn = $settings->conn;
$this->settings = $settings;
$this->uuid_name_cache = array();
@ -32,15 +36,15 @@ class Page {
$this->set_info($info);
$this->permanent = array(
'ban' => 'Permanent Ban',
'mute' => 'Permanent Mute',
'warn' => 'Permanent',
'ban' => $this->lang->page_perm_ban,
'mute' => $this->lang->page_perm_mute,
'warn' => $this->lang->page_perm_warn,
'kick' => null,
);
$this->expired = array(
'ban' => '(Unbanned)',
'mute' => '(Unmuted)',
'warn' => '(Expired)',
'ban' => $this->lang->page_expire_ban,
'mute' => $this->lang->page_expire_mute,
'warn' => $this->lang->page_expire_warn,
'kick' => null,
);
@ -60,28 +64,28 @@ class Page {
return array(
"type" => "ban",
"table" => $settings->table['bans'],
"title" => "Bans",
"title" => $this->lang->page_title_ban,
);
case "mute":
case "mutes":
return array(
"type" => "mute",
"table" => $settings->table['mutes'],
"title" => "Mutes",
"title" => $this->lang->page_title_mute,
);
case "warn":
case "warnings":
return array(
"type" => "warn",
"table" => $settings->table['warnings'],
"title" => "Warnings",
"title" => $this->lang->page_title_warn,
);
case "kick":
case "kicks":
return array(
"type" => "kick",
"table" => $settings->table['kicks'],
"title" => "Kicks",
"title" => $this->lang->page_title_kick,
);
default:
return array(
@ -257,7 +261,7 @@ class Page {
* @return string
*/
function millis_to_date($millis) {
return date($this->settings->date_format, $millis / 1000);
return strftime($this->settings->date_format, $millis / 1000);
}
function active($row, $field = 'active') {
@ -323,7 +327,7 @@ class Page {
echo '
<div style="text-align: left;" class="row">
<div style="margin-left: 15px;">
<form onsubmit="captureForm(event);" class="form-inline"><div class="form-group"><input type="text" class="form-control" id="user" placeholder="Player"></div><button type="submit" class="btn btn-default" style="margin-left: 5px;">Check</button></form>
<form onsubmit="captureForm(event);" class="form-inline"><div class="form-group"><input type="text" class="form-control" id="user" placeholder="'.$this->lang->page_check_user.'"></div><button type="submit" class="btn btn-default" style="margin-left: 5px;">'.$this->lang->page_check_submit.'</button></form>
</div>
<script type="text/javascript">function captureForm(b){var o=$("#output");o.removeClass("in");var x=setTimeout(function(){o.html("<br>")}, 150);$.ajax({type:"GET",url:"check.php?name="+$("#user").val()+"&table=' . $table . '"}).done(function(c){clearTimeout(x);o.html(c);o.addClass("in")});b.preventDefault();return false};</script>
<div id="output" class="success fade" data-alert="alert" style="margin-left: 15px;"><br></div>
@ -362,7 +366,7 @@ class Page {
if ($next_active) {
$pager_next = "<a href=\"$page?page={$next}{$args}\">$pager_next</a>";
}
$pager_count = "<div style=\"margin-top: 32px;\"><div style=\"text-align: center; font-size:15px;\">Page $cur/$pages</div></div>";
$pager_count = '<div style=\"margin-top: 32px;\"><div style=\"text-align: center; font-size:15px;\">'.$this->lang->page_page.' '.$cur.'/'.$pages.'</div></div>';
echo "$pager_prev $pager_next $pager_count";
}

View File

@ -4,6 +4,9 @@ final class Settings {
public static $TRUE = "1", $FALSE = "0";
public function __construct($connect = true) {
// Server lang, use standard abbreviations
$this->lang = 'en_US'
// Server name, shown on the main page and on the header
$this->name = 'LiteBans';

View File

@ -6,9 +6,9 @@ $page->print_title();
?>
<div class="container">
<div class="jumbotron">
<div style="text-align: center;"><h2>Welcome to <?php echo $page->settings->name; ?>'s Ban List.</h2></div>
<div style="text-align: center;"><h2><?php echo $page->lang->index_welcome1; echo $page->settings->name; echo $page->lang->index_welcome2; ?></h2></div>
<div style="text-align: center;"><p>Here is where all of our punishments are listed.</p></div>
<div style="text-align: center;"><p><?php echo $page->lang->index_allsins; ?></p></div>
</div>
</div>
<?php $page->print_footer(false); ?>

View File

@ -54,11 +54,11 @@ class BanInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
'Banned Player' => $this->punished_avatar($player_name, $row),
'Banned By' => $this->moderator_avatar($row),
'Ban Reason' => $page->clean($row['reason']),
'Ban Placed' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
$page->lang->info_banned_player => $this->punished_avatar($player_name, $row),
$page->lang->info_banned_by => $this->moderator_avatar($row),
$page->lang->info_banned_reason => $page->clean($row['reason']),
$page->lang->info_banned_when => $page->millis_to_date($row['time']),
$page->lang->info_banned_expiry => $page->expiry($row),
);
}
}
@ -67,28 +67,28 @@ class MuteInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
'Muted Player' => $this->punished_avatar($player_name, $row),
'Muted By' => $this->moderator_avatar($row),
'Mute Reason' => $page->clean($row['reason']),
'Mute Placed' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
$page->lang->info_muted_player => $this->punished_avatar($player_name, $row),
$page->lang->info_muted_by => $this->moderator_avatar($row),
$page->lang->info_muted_reason => $page->clean($row['reason']),
$page->lang->info_muted_when => $page->millis_to_date($row['time']),
$page->lang->info_muted_expiry => $page->expiry($row),
);
}
}
class WarnInfo extends Info {
function name() {
return "Warning";
return $page->lang->info_warn_name;
}
function basic_info($row, $player_name) {
$page = $this->page;
return array(
'Warned Player' => $this->punished_avatar($player_name, $row),
'Warned By' => $this->moderator_avatar($row),
'Warning Reason' => $page->clean($row['reason']),
'Warning Placed' => $page->millis_to_date($row['time']),
'Expires' => $page->expiry($row),
$page->lang->info_warn_player => $this->punished_avatar($player_name, $row),
$page->lang->info_warn_by => $this->moderator_avatar($row),
$page->lang->info_warn_reason => $page->clean($row['reason']),
$page->lang->info_warn_when => $page->millis_to_date($row['time']),
$page->lang->info_warn_expiry => $page->expiry($row),
);
}
}
@ -97,10 +97,10 @@ class KickInfo extends Info {
function basic_info($row, $player_name) {
$page = $this->page;
return array(
'Kicked Player' => $this->punished_avatar($player_name, $row),
'Kicked By' => $this->moderator_avatar($row),
'Kick Reason' => $page->clean($row['reason']),
'Kick Date' => $page->millis_to_date($row['time']),
$page->lang->info_kick_player => $this->punished_avatar($player_name, $row),
$page->lang->info_kick_by => $this->moderator_avatar($row),
$page->lang->info_kick_reason => $page->clean($row['reason']),
$page->lang->info_kick_when => $page->millis_to_date($row['time']),
);
}
}
@ -110,15 +110,15 @@ if ((substr($_SERVER['SCRIPT_NAME'], -strlen("info.php"))) !== "info.php") {
return;
}
isset($_GET['type'], $_GET['id']) && is_string($_GET['type']) && is_string($_GET['id']) or die("Missing arguments (type, id).");
isset($_GET['type'], $_GET['id']) && is_string($_GET['type']) && is_string($_GET['id']) or die($page->lang->info_error_missingarg);
$type = $_GET['type'];
$id = $_GET['id'];
$page = new Page($type);
($page->type !== null) or die("Unknown page type requested.");
($page->type !== null) or die($page->lang->info_error_unknown);
filter_var($id, FILTER_VALIDATE_INT) or die("Invalid ID.");
filter_var($id, FILTER_VALIDATE_INT) or die($page->lang->info_error_invalidid);
$id = (int)$id;
@ -130,11 +130,11 @@ $query = "SELECT $sel FROM $table WHERE id=? LIMIT 1";
$st = $page->conn->prepare($query);
if ($st->execute(array($id))) {
($row = $st->fetch()) or die("Error: $type not found in database.");
($row = $st->fetch()) or die($page->lang->info_error_notfound1.$type.$page->lang->info_error_notfound2);
$player_name = $page->get_name($row['uuid']);
($player_name !== null) or die("Error: Player name not found.");
($player_name !== null) or die($page->lang->info_error_notplayer);
$info = Info::create($row, $page, $type);

View File

@ -16,10 +16,10 @@ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
if ($player_name === null) continue;
$page->print_table_rows($row, array(
'Name' => $page->get_avatar($player_name, $row['uuid']),
'Kicked By' => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
'Reason' => $page->clean($row['reason']),
'Date' => $page->millis_to_date($row['time']),
$page->lang->kicks_player => $page->get_avatar($player_name, $row['uuid']),
$page->lang->kicks_by => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
$page->lang->kicks_reason => $page->clean($row['reason']),
$page->lang->kicks_when => $page->millis_to_date($row['time']),
));
}
$page->table_end();

90
lang/cs_CZ.utf8.php Normal file
View File

@ -0,0 +1,90 @@
<?php
final class Lang {
public static $TRUE = "1", $FALSE = "0";
public function __construct($connect = true) {
$this->index_welcome1 = 'Vítej na ';
$this->index_welcome2 = '.';
$this->index_allsins = 'Zde nalezneš vypsány všechny své tresty.';
$this->header_index = 'Úvod';
$this->header_bans = 'Bany';
$this->header_mutes = 'Umlčení';
$this->header_warnings = 'Varování';
$this->header_kicks = 'Vyhození';
$this->page_perm_ban = 'Trvalý ban';
$this->page_perm_mute = 'Umlčen navždy';
$this->page_perm_warn = 'Trvalé varování';
$this->page_expire_ban = '(Odbanován)';
$this->page_expire_mute = '(Odmlčen)';
$this->page_expire_warn = '(Vypršel)';
$this->page_title_ban = 'Bany';
$this->page_title_mute = 'Umlčení';
$this->page_title_warn = 'Varování';
$this->page_title_kick = 'Vyhození';
$this->page_check_user = "Hráč";
$this->page_check_submit = "Ověřit";
$this->page_page = "Strana";
$this->check_invalid = "Neplatné zadání";
$this->check_notjoin = "u nás ještě nebyl";
$this->history_missinguuid = "Chybějící argument (uuid)";
$this->history_playernotfound = "Hráč nenalezen v databázi";
$this->history_recentby = "Nedávné tresty od ";
$this->history_recentfor = "Nedávne tresty pro ";
$this->history_tabletype = "Typ";
$this->history_tableplayer = "Hráč";
$this->history_tablemoderator = "Admin";
$this->history_tablereason = "Důvod";
$this->history_tabledate = "Datum";
$this->history_tableexpires = "Vyprší";
$this->history_nopunishments = "Nenalezeny žádné tresty";
$this->history_returnto = "Vrátit se na";
$this->info_banned_player = "Zabanovaný hráč";
$this->info_banned_by = "Zabanován kým";
$this->info_banned_reason = "Důvod banu";
$this->info_banned_when = "Zabanován do";
$this->info_banned_expiry = "Zabanován do kdy";
$this->info_muted_player = "Umlčený hráč";
$this->info_muted_by = "Umlčen kým";
$this->info_muted_reason = "Důvod umlčení";
$this->info_muted_when = "Umlčen kdy";
$this->info_muted_expiry = "Umlčen do kdy";
$this->info_warn_name = "Varování";
$this->info_warn_player = "Varovaný hráč";
$this->info_warn_by = "Varován kým";
$this->info_warn_reason = "Důvod varování";
$this->info_warn_when = "Varován kdy";
$this->info_warn_expiry = "Varování vyprší";
$this->info_kick_player = "Vyhozený hráč";
$this->info_kick_by = "Vyhozen kým";
$this->info_kick_reason = "Důvod vyhození";
$this->info_kick_when = "Vyhozen kdy";
$this->info_error_missingarg = "Neplatné argumenty (typ, id)";
$this->info_error_unknown = "Vyžádána neznámá stránka";
$this->info_error_invalidid = "Neplatné ID";
$this->info_error_notfound1 = "Chyba: ";
$this->info_error_notfound2 = " nenalezen v databázi";
$this->info_error_notplayer = "Chyba: Jméno hráče nenalezeno";
$this->bans_player = "Jméno";
$this->bans_by = "Zabanován kým";
$this->bans_reason = "Důvod banu";
$this->bans_when = "Zabanován kdy";
$this->bans_expiry = "Zabanován do kdy";
$this->kicks_player = "Jméno";
$this->kicks_by = "Vyhozen kým";
$this->kicks_reason = "Důvod vyhození";
$this->kicks_when = "Vyhozen kdy";
$this->mutes_player = "Jméno";
$this->mutes_by = "Umlčen kým";
$this->mutes_reason = "Důvod umlčení";
$this->mutes_when = "Umlčen kdy";
$this->mutes_expiry = "Umlčen do kdy";
$this->warns_player = "Jméno";
$this->warns_by = "Varován kým";
$this->warns_reason = "Důvod varování";
$this->warns_when = "Varován kdy";
$this->warns_receive = "Varování doručeno";
$this->warns_yes = "Ano";
$this->warns_no = "Ne";
}
}
?>

90
lang/en_US.php Normal file
View File

@ -0,0 +1,90 @@
<?php
final class Lang {
public static $TRUE = "1", $FALSE = "0";
public function __construct($connect = true) {
$this->index_welcome1 = 'Welcome to ';
$this->index_welcome2 = '\'s Ban List.';
$this->index_allsins = 'Here is where all of our punishments are listed.';
$this->header_index = 'Home';
$this->header_bans = 'Bans';
$this->header_mutes = 'Mutes';
$this->header_warnings = 'Warnings';
$this->header_kicks = 'Kicks';
$this->page_perm_ban = 'Permanent Ban';
$this->page_perm_mute = 'Permanent Mute';
$this->page_perm_warn = 'Permanent';
$this->page_expire_ban = '(Unbanned)';
$this->page_expire_mute = '(Unmuted)';
$this->page_expire_warn = '(Expired)';
$this->page_title_ban = 'Bans';
$this->page_title_mute = 'Mutes';
$this->page_title_warn = 'Warnings';
$this->page_title_kick = 'Kicks';
$this->page_check_user = "Player";
$this->page_check_submit = "Check";
$this->page_page = "Page";
$this->check_invalid = "Invalid name.";
$this->check_notjoin = "has not joined before.";
$this->history_missinguuid = "Missing arguments (uuid).";
$this->history_playernotfound = "Player not found in database.";
$this->history_recentby = "Recent Punishments by ";
$this->history_recentfor = "Recent Punishments for ";
$this->history_tabletype = "Type";
$this->history_tableplayer = "Player";
$this->history_tablemoderator = "Moderator";
$this->history_tablereason = "Reason";
$this->history_tabledate = "Date";
$this->history_tableexpires = "Expires";
$this->history_nopunishments = "No punishments found.";
$this->history_returnto = "Return to";
$this->info_banned_player = "Banned Player";
$this->info_banned_by = "Banned By";
$this->info_banned_reason = "Ban Reason";
$this->info_banned_when = "Ban Placed";
$this->info_banned_expiry = "Expires";
$this->info_muted_player = "Muted Player";
$this->info_muted_by = "Muted By";
$this->info_muted_reason = "Mute Reason";
$this->info_muted_when = "Mute Placed";
$this->info_muted_expiry = "Expires";
$this->info_warn_name = "Warning";
$this->info_warn_player = "Warned Player";
$this->info_warn_by = "Warned By";
$this->info_warn_reason = "Warning Reason";
$this->info_warn_when = "Warning Placed";
$this->info_warn_expiry = "Expires";
$this->info_kick_player = "Kicked Player";
$this->info_kick_by = "Kicked By";
$this->info_kick_reason = "Kick Reason";
$this->info_kick_when = "Kick Date";
$this->info_error_missingarg = "Missing arguments (type, id).";
$this->info_error_unknown = "Unknown page type requested.";
$this->info_error_invalidid = "Invalid ID";
$this->info_error_notfound1 = "Error: ";
$this->info_error_notfound2 = " not found in database.";
$this->info_error_notplayer = "Error: Player name not found.";
$this->bans_player = "Name";
$this->bans_by = "Banned By";
$this->bans_reason = "Reason";
$this->bans_when = "Banned On";
$this->bans_expiry = "Banned Until";
$this->kicks_player = "Name";
$this->kicks_by = "Kicked By";
$this->kicks_reason = "Reason";
$this->kicks_when = "Date";
$this->mutes_player = "Nameo";
$this->mutes_by = "Muted By";
$this->mutes_reason = "Reason";
$this->mutes_when = "Muted On";
$this->mutes_expiry = "Muted Until";
$this->warns_player = "Name";
$this->warns_by = "Varován kým";
$this->warns_reason = "Reason";
$this->warns_when = "Warned Until";
$this->warns_receive = "Received Warning";
$this->warns_yes = "Yes";
$this->warns_no = "No";
}
}
?>

View File

@ -16,11 +16,11 @@ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
if ($player_name === null) continue;
$page->print_table_rows($row, array(
'Name' => $page->get_avatar($player_name, $row['uuid']),
'Muted By' => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
'Reason' => $page->clean($row['reason']),
'Muted On' => $page->millis_to_date($row['time']),
'Muted Until' => $page->expiry($row),
$page->lang->mutes_player => $page->get_avatar($player_name, $row['uuid']),
$page->lang->mutes_by => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
$page->lang->mutes_reason => $page->clean($row['reason']),
$page->lang->mutes_when => $page->millis_to_date($row['time']),
$page->lang->mutes_expiry => $page->expiry($row),
));
}
$page->table_end();

View File

@ -16,11 +16,11 @@ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
if ($player_name === null) continue;
$page->print_table_rows($row, array(
'Name' => $page->get_avatar($player_name, $row['uuid']),
'Warned By' => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
'Reason' => $page->clean($row['reason']),
'Warned Until' => $page->expiry($row),
'Received Warning' => (($page->active($row, 'warned') === true) ? "Yes" : "No"),
$page->lang->warns_player => $page->get_avatar($player_name, $row['uuid']),
$page->lang->warns_by => $page->get_avatar($page->get_banner_name($row), $row['banned_by_uuid']),
$page->lang->warns_reason => $page->clean($row['reason']),
$page->lang->warns_when => $page->expiry($row),
$page->lang->warns_receive => (($page->active($row, 'warned') === true) ? $page->lang->warns_yes : $page->lang->warns_no),
));
}
$page->table_end();