Focuslinkstech 5cb1a901c3 Language Switching
customer can now choose preferred language from available language list.

we are store language in session for now, if customer logout the language will reset back to default, we will move it to database in the coming update.
2024-08-14 18:24:43 +01:00

268 lines
7.5 KiB
PHP

<?php
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
**/
class Lang
{
public static function T($key)
{
global $_L, $lan_file, $root_path, $config;
if (empty($lan_file)) {
$lan_file = $root_path . File::pathFixer('system/lan/' . $config['language'] . '.json');
}
if (is_array($_SESSION['Lang'])) {
$_L = array_merge($_L, $_SESSION['Lang']);
}
$key = preg_replace('/\s+/', ' ', $key);
if (!empty($_L[$key])) {
return $_L[$key];
}
$val = $key;
$key = Lang::sanitize($key);
if (isset($_L[$key])) {
return $_L[$key];
} else if (isset($_L[$key])) {
return $_L[$key];
} else {
$iso = Lang::getIsoLang()[$config['language']];
if (empty($iso)) {
return $val;
}
if (!empty($iso) && !empty($val)) {
$temp = Lang::translate($val, $iso);
if (!empty($temp)) {
$val = $temp;
}
}
$_L[$key] = $val;
$_SESSION['Lang'][$key] = $val;
file_put_contents($lan_file, json_encode($_SESSION['Lang'], JSON_PRETTY_PRINT));
return $val;
}
}
public static function sanitize($str)
{
return preg_replace("/[^A-Za-z0-9]/", '_', $str);;
}
public static function getIsoLang()
{
global $isolang;
if (empty($isolang) || count($isolang) == 0) {
$isolang = json_decode(file_get_contents(File::pathFixer("system/lan/country.json")), true);
}
return $isolang;
}
public static function htmlspecialchars($var)
{
return htmlspecialchars($var);
}
public static function moneyFormat($var)
{
global $config;
return $config['currency_code'] . ' ' . number_format($var, 0, $config['dec_point'], $config['thousands_sep']);
}
public static function phoneFormat($phone)
{
global $config;
if (Validator::UnsignedNumber($phone) && !empty($config['country_code_phone'])) {
return preg_replace('/^0/', $config['country_code_phone'], $phone);
} else {
return $phone;
}
}
public static function dateFormat($date)
{
global $config;
return date($config['date_format'], strtotime($date));
}
public static function dateTimeFormat($date)
{
global $config;
if (strtotime($date) < strtotime("2000-01-01 00:00:00")) {
return "";
} else {
return date($config['date_format'] . ' H:i', strtotime($date));
}
}
public static function dateAndTimeFormat($date, $time)
{
global $config;
return date($config['date_format'] . ' H:i', strtotime("$date $time"));
}
public static function timeElapsed($datetime, $full = false)
{
$now = new DateTime(date("Y-m-d H:i:s"));
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => Lang::T('year'),
'm' => Lang::T('month'),
'w' => Lang::T('week'),
'd' => Lang::T('day'),
'h' => Lang::T('hour'),
'i' => Lang::T('minute'),
's' => Lang::T('second'),
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? '' : '');
} else {
unset($string[$k]);
}
}
$when = "";
if (time() > strtotime($datetime)) {
$when = Lang::T('ago');
} else {
$when = '';
}
if (!$full)
$string = array_slice($string, 0, 1);
if ($string) {
if (empty($when)) {
return '<b>' . implode(', ', $string) . '</b>';
} else {
return implode(', ', $string) . ' ' . $when;
}
} else {
return Lang::T('just now');
}
}
public static function nl2br($text)
{
return nl2br($text);
}
public static function arrayCount($arr)
{
if (is_array($arr)) {
return count($arr);
} else if (is_object($arr)) {
return count($arr);
} else {
return 0;
}
}
public static function getNotifText($key)
{
global $_notifmsg, $_notifmsg_default;
if (isset($_notifmsg[$key])) {
return $_notifmsg[$key];
} else {
return $_notifmsg_default[$key];
}
}
public static function ucWords($text)
{
return ucwords(str_replace('_', ' ', $text));
}
public static function randomUpLowCase($text)
{
$jml = strlen($text);
$result = '';
for ($i = 0; $i < $jml; $i++) {
if (rand(0, 99) % 2) {
$result .= strtolower(substr($text, $i, 1));
} else {
$result .= substr($text, $i, 1);
}
}
return $result;
}
/**
* $pad_type
* 0 Left
* 1 right
* 2 center
* */
public static function pad($text, $pad_string = ' ', $pad_type = 0)
{
global $config;
$cols = 37;
if ($config['printer_cols']) {
$cols = $config['printer_cols'];
}
$text = trim($text);
$texts = explode("\n", $text);
if (count($texts) > 1) {
$text = '';
foreach ($texts as $t) {
$text .= self::pad(trim($t), $pad_string, $pad_type) . "\n";
}
return $text;
} else {
return str_pad(trim($text), $cols, $pad_string, $pad_type);
}
}
public static function pads($textLeft, $textRight, $pad_string = ' ')
{
global $config;
$cols = 37;
if ($config['printer_cols']) {
$cols = $config['printer_cols'];
}
return $textLeft . str_pad($textRight, $cols - strlen($textLeft), $pad_string, 0);
}
public static function translate($txt, $to = 'id')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://translate.google.com/m?hl=en&sl=en&tl=$to&ie=UTF-8&prev=_m&q=" . urlencode($txt));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; CPU OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/28.1 Mobile/15E148 Safari/605.1.15");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
$hasil = curl_exec($ch);
curl_close($ch);
$temp = explode('<div class="result-container">', $hasil);
if (count($temp) > 0) {
$temp = explode("</div", $temp[1]);
if (!empty($temp[0])) {
return $temp[0];
}
}
return $txt;
}
public static function maskText($text)
{
$len = strlen($text);
if ($len < 3) {
return "***";
} else if ($len < 5) {
return substr($text, 0, 1) . "***" . substr($text, -1, 1);
} else if ($len < 8) {
return substr($text, 0, 2) . "***" . substr($text, -2, 2);
} else {
return substr($text, 0, 4) . "******" . substr($text, -3, 3);
}
}
}