Kumi
38586826e2
Simplify and enhance language detection and file loading mechanism: - Parse primary language from browser settings more accurately. - Remove redundant scanning of language files. - Load default English language file as a base. - Add support for region-specific language files if available. - Remove unused language strings from various translation files. These changes enhance the robustness and efficiency of language handling, ensuring better support for user language preferences.
266 lines
No EOL
13 KiB
PHP
266 lines
No EOL
13 KiB
PHP
<?php
|
|
date_default_timezone_set('Europe/Berlin');
|
|
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
|
header("Pragma: no-cache");
|
|
|
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
|
|
$currentUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
|
$parentUrl = dirname($currentUrl);
|
|
|
|
// Get currency data from JSON
|
|
if (!file_exists('coingecko.json')) {
|
|
// Special case: First run.
|
|
exec('php coingecko.php');
|
|
sleep(1);
|
|
}
|
|
|
|
$api_cg = json_decode(file_get_contents('coingecko.json'), true);
|
|
|
|
// Configuration file
|
|
$config = [];
|
|
if (file_exists('config.php')) {
|
|
$config = require 'config.php';
|
|
}
|
|
|
|
$display_servers_guru = isset($config['servers_guru']) && $config['servers_guru'] === true;
|
|
$attribution = isset($config['attribution']) ? $config['attribution'] : '';
|
|
$preferred_currencies = isset($config['preferred_currencies']) ? $config['preferred_currencies'] : [];
|
|
$github_url = isset($config['github_url']) ? $config['github_url'] : 'https://git.private.coffee/kumi/moner.ooo/';
|
|
|
|
// Extract the keys
|
|
$currencies = array_map('strtoupper', array_keys($api_cg));
|
|
|
|
// Fetch the time of the last API data update
|
|
$time_cg = date("H:i:s", $api_cg['time']);
|
|
$time = $time_cg;
|
|
unset($currencies[array_search('TIME', $currencies)]);
|
|
|
|
// Populate exchange rates
|
|
$exchangeRates = [];
|
|
foreach ($currencies as $currency) {
|
|
$exchangeRates[$currency] = $api_cg[strtolower($currency)]['lastValue'];
|
|
}
|
|
|
|
// Get the primary language from the browser
|
|
$lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : "en";
|
|
$lang = explode(",", $lang)[0];
|
|
$lang = explode(";", $lang)[0];
|
|
$lang = strtolower($lang);
|
|
|
|
// Aliases for different Chinese variants
|
|
$aliases = [
|
|
'zh' => 'zh-hans',
|
|
'zh-hk' => 'zh-hant',
|
|
'zh-tw' => 'zh-hant',
|
|
'zh-cn' => 'zh-hans',
|
|
'zh-sg' => 'zh-hans',
|
|
'zh-mo' => 'zh-hant',
|
|
];
|
|
|
|
// Load the language files
|
|
// Take English as a base
|
|
|
|
require_once 'lang/en.php';
|
|
|
|
// Get the browser language code (e.g. 'de' for 'de-DE')
|
|
// Load that language file if available
|
|
|
|
$language_code = explode('-', $lang)[0];
|
|
|
|
if (file_exists('lang/' . $language_code . '.php')) {
|
|
require_once 'lang/' . $language_code . '.php';
|
|
}
|
|
|
|
// If a region-specific language file is available, load that one
|
|
|
|
if ($language_code != $lang) {
|
|
if (isset($aliases[$language_code])) {
|
|
$lang = $aliases[$language_code];
|
|
}
|
|
|
|
if (file_exists('lang/' . $lang . '.php')) {
|
|
require_once 'lang/' . $lang . '.php';
|
|
}
|
|
}
|
|
|
|
// Calculation through GET parameters
|
|
|
|
$xmr_in = isset($_GET["in"]) ? strtoupper(htmlspecialchars($_GET["in"])) : 'EUR';
|
|
$xmr_amount = isset($_GET["xmr"]) ? floatval($_GET["xmr"]) : 1;
|
|
$fiat_amount = isset($_GET["fiat"]) ? floatval($_GET["fiat"]) : '';
|
|
$conversion_direction = isset($_GET["direction"]) ? intval($_GET["direction"]) : 0;
|
|
|
|
if ($conversion_direction == 0) {
|
|
$fiat_value = $xmr_amount * $exchangeRates[$xmr_in];
|
|
$xmr_value = $xmr_amount;
|
|
} else {
|
|
$xmr_value = $fiat_amount / $exchangeRates[$xmr_in];
|
|
$fiat_value = $fiat_amount;
|
|
}
|
|
|
|
$fiat_value = number_format($fiat_value, ($xmr_in == 'BTC' || $xmr_in == 'LTC' || $xmr_in == 'ETH' || $xmr_in == 'XAG' || $xmr_in == 'XAU') ? 8 : 2);
|
|
$xmr_value = number_format($xmr_value, 12);
|
|
|
|
$fiat_value = strtr($fiat_value, ",", " ");
|
|
|
|
// Order preferred currencies to the top
|
|
foreach (array_reverse($preferred_currencies) as $currency) {
|
|
$currency = strtoupper($currency);
|
|
if (($key = array_search($currency, $currencies)) !== false) {
|
|
unset($currencies[$key]);
|
|
array_unshift($currencies, $currency);
|
|
}
|
|
}
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="<?php echo $lang_meta; ?>">
|
|
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<meta name="HandheldFriendly" content="true" />
|
|
<meta name="MobileOptimized" content="320" />
|
|
|
|
<title lang="<?php echo $lang_meta; ?>"><?php echo $page_title; ?></title>
|
|
<meta name="description" lang="<?php echo $lang_meta; ?>" content="<?php echo $meta_description; ?>" />
|
|
<meta name="keywords" lang="<?php echo $lang_meta; ?>" content="<?php echo $meta_keywords; ?>" />
|
|
|
|
<meta property="og:title" content="<?php echo $page_title; ?>" />
|
|
<meta property="og:description" content="<?php echo $meta_description; ?>" />
|
|
<meta property="og:image" content="<?php echo $parentUrl; ?>/img/mstile-310x150.png" />
|
|
<meta property="og:type" content="website" />
|
|
|
|
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="img/apple-touch-icon-57x57.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="img/apple-touch-icon-114x114.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="img/apple-touch-icon-72x72.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="img/apple-touch-icon-144x144.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="img/apple-touch-icon-60x60.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="img/apple-touch-icon-120x120.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="img/apple-touch-icon-76x76.png" />
|
|
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="img/apple-touch-icon-152x152.png" />
|
|
<link rel="apple-touch-startup-image" href="img/favicon-196x196.png" />
|
|
<link rel="icon" type="image/png" href="img/favicon-196x196.png" sizes="196x196" />
|
|
<link rel="icon" type="image/png" href="img/favicon-96x96.png" sizes="96x96" />
|
|
<link rel="icon" type="image/png" href="img/favicon-32x32.png" sizes="32x32" />
|
|
<link rel="icon" type="image/png" href="img/favicon-16x16.png" sizes="16x16" />
|
|
<link rel="icon" type="image/png" href="img/favicon-128.png" sizes="128x128" />
|
|
<meta name="application-name" content="Moner.ooo" />
|
|
<meta name="msapplication-TileColor" content="#ffffff" />
|
|
<meta name="msapplication-TileImage" content="img/mstile-144x144.png" />
|
|
<meta name="msapplication-square70x70logo" content="img/mstile-70x70.png" />
|
|
<meta name="msapplication-square150x150logo" content="img/mstile-150x150.png" />
|
|
<meta name="msapplication-wide310x150logo" content="img/mstile-310x150.png" />
|
|
<meta name="msapplication-square310x310logo" content="img/mstile-310x310.png" />
|
|
<meta name="theme-color" content="#193e4c" />
|
|
<meta name="apple-mobile-web-app-title" content="Moner.ooo" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="#193e4c" />
|
|
|
|
<link href="css/main.css" rel="stylesheet" />
|
|
</head>
|
|
|
|
<body>
|
|
<div class="container pt-4">
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="cursor-default text-center text-white">
|
|
<h1 lang="<?php echo $lang_meta; ?>"><span style="color:#4d4d4d;">↓</span> <span style="color:#ff6600;" title="Monero">XMR</span> <?php echo $title_h1; ?> <span style="color:#4d4d4d;">↓</span></h1>
|
|
<div class="fiat-btns table-responsive">
|
|
<table class="table table-sm table-borderless">
|
|
<tbody>
|
|
<?php
|
|
$chunks = array_chunk($currencies, 10);
|
|
foreach ($chunks as $chunk) {
|
|
echo "<tr>";
|
|
foreach ($chunk as $currency) {
|
|
$currencyName = isset(${"l_" . strtolower($currency)}) ? ${"l_" . strtolower($currency)} : $currency;
|
|
echo "<td><a href=\"/?in={$currency}\" class=\"btn btn-light\" title=\"{$currencyName}\" data-toggle=\"tooltip\" data-bs-html=\"true\" data-placement=\"top\">{$currency}</a></td>";
|
|
}
|
|
echo "</tr>";
|
|
echo "<tr style=\"display:none;\">";
|
|
foreach ($chunk as $currency) {
|
|
echo "<td>" . str_replace(".", ",", $exchangeRates[$currency]) . "</td>";
|
|
}
|
|
echo "</tr>";
|
|
}
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<hr class="gold" />
|
|
|
|
<form method="get" action="">
|
|
<div class="input-group mb-3">
|
|
<button id="copyXMRBtn" class="btn-outline-secondary input-group-text clipboard-copy" title="<?php echo $clipboard_copy_tooltip; ?>" data-toggle="tooltip" data-bs-html="true" data-placement="top">📋</button>
|
|
<input class="form-control" id="xmrInput" name="xmr" type="text" spellcheck="false" autocorrect="off" inputmode="numeric" aria-label="<?php echo $l_xmrInput; ?>" aria-describedby="basic-addon-xmr" value="<?php echo $xmr_value; ?>">
|
|
<input class="input-group-text" id="basic-addon-xmr" type="text" value="XMR" aria-label="Monero" disabled>
|
|
</div>
|
|
|
|
<div class="equals-box mb-3">
|
|
<button id="convertXMRToFiat" type="submit" name="direction" value="0" class="btn btn-arrow">
|
|
<span class="equals-text">↓</span>
|
|
</button>
|
|
<button type="button" class="btn btn-equals">
|
|
<span class="equals-text cursor-default">=</span>
|
|
</button>
|
|
<button id="convertFiatToXMR" type="submit" name="direction" value="1" class="btn btn-arrow">
|
|
<span class="equals-text">↑</span>
|
|
</button>
|
|
</div>
|
|
|
|
<div class="fiatDiv input-group mb-3">
|
|
<button id="copyFiatBtn" class="btn-outline-secondary input-group-text clipboard-copy" title="<?php echo $clipboard_copy_tooltip; ?>" data-toggle="tooltip" data-bs-html="true" data-placement="top">📋</button>
|
|
<input class="form-control" id="fiatInput" name="fiat" type="text" spellcheck="false" autocorrect="off" inputmode="numeric" aria-label="<?php echo $l_fiatInput; ?>" value="<?php echo $fiat_value; ?>">
|
|
<select class="input-group-text cursor-pointer" id="selectBox" name="in" aria-label="<?php echo $l_fiatSelect; ?>">
|
|
<?php
|
|
foreach ($currencies as $currency) {
|
|
$selected = $currency == $xmr_in ? 'selected' : '';
|
|
$currencyName = isset(${"l_" . strtolower($currency)}) ? ${"l_" . strtolower($currency)} : $currency;
|
|
echo "<option {$selected} value=\"{$currency}\">{$currencyName}</option>";
|
|
}
|
|
?>
|
|
</select>
|
|
</div>
|
|
</form>
|
|
|
|
<noscript>
|
|
<div class="alert alert-warning" role="alert">
|
|
Looks like you have JavaScript disabled. You can still use this tool, but you won't be able to use the 📋 buttons to automatically copy the results to your clipboard.<br />
|
|
Use the ↓ button to convert XMR to fiat, or the ↑ button to convert fiat to XMR.
|
|
</div>
|
|
</noscript>
|
|
|
|
<hr class="gold" />
|
|
<small class="cursor-default text-white text-info" lang="<?php echo $lang_meta; ?>">
|
|
<?php echo $info;
|
|
if ($display_servers_guru) {
|
|
echo $servers_guru;
|
|
};
|
|
echo $attribution; ?>
|
|
</small>
|
|
<hr />
|
|
|
|
<?php
|
|
$footer_links = "";
|
|
|
|
if (isset($config['footer_links']) && !empty($config['footer_links'])) {
|
|
foreach ($config['footer_links'] as $link) {
|
|
$footer_links .= '<a href="' . $link['url'] . '" class="text-white" target="_blank" rel="noopener noreferrer">' . $link['text'] . '</a> | ';
|
|
}
|
|
}
|
|
?>
|
|
|
|
<small class="cursor-default text-white" lang="<?php echo $lang_meta; ?>">
|
|
<?php echo $footer_links . $getmonero . $countrymonero; ?>
|
|
</small>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<script src="js/main.js"></script>
|
|
</body>
|
|
|
|
</html>
|