За последние 24 часа нас посетили 22410 программистов и 1127 роботов. Сейчас ищут 648 программистов ...

Альтернативное решение для мультиязычности. Как быть?

Тема в разделе "Решения, алгоритмы", создана пользователем captainluzik, 25 авг 2016.

  1. captainluzik

    captainluzik Новичок

    С нами с:
    15 янв 2016
    Сообщения:
    7
    Симпатии:
    0
    Привет форумчанам! Обслуживаю некий сайт, написан на php с использывание ionCube для шифровки некоторых файлом, в частности function.php в инклюдах.
    Стал вопрос о добавлении энного количества новых языков.
    Дефолтно в скрипте прописаны два языка - русский и инглиш. Естественно, код выполняющий оное, зашифрован.
    Так как сайт активно использует куки в разных направлениях было принято решение в index.php решить вопрос таким способом :
    PHP:
    1. if (( $_GET['lang'] == 'zh' || $_GET['lang'] == 'en' )) {
    2.         setcookie( 'lng', gs_html( $_GET['lang'] ), time(  ) + 25920000, '/' );
    3.         $lng = gs_html( $_GET['lang'] );
    4.  
    5.         if (false);
    6.  
    7.  
    8.         if (( $_COOKIE['lng'] == 'zh' || $_COOKIE['lng'] == 'en' )) {
    9.             $lng = gs_html( $_COOKIE['lng'] );
    10.  
    11.             if (false);
    12.  
    13.             $lng = cfgSET( 'cfgLang' );
    14.             @include( 'includes/lng/' . @substr( $lng, 0, 2 ) . '.php' );
    15. }
    Вроде бы все логично и должно работать - но нет. Не работает. Куки записывает, но при выборе нового языка массив нового языка попросту не инклюдится, и в каждой строчке текста выдает первую букву массива - например z.
    Вариант с использываниям сессии - не проканал).
    Самое простое полурабочее решение было таким -
    PHP:
    1. if (@$_GET['lang'] == 'uz') include('includes/lng/uz.php');
    И действительно, новый язык переключается, но естесвенно работает все только на одной странице и при перезагрузке или переходе на другую - все возвращается к дефолтному.
    По сему мастера - прошу свежих мыслей на этот счет. Ибо уже много времени бьюсь с этой проблемой. Спасибо
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    ты совсем не понимаешь что делаешь, да?

    вот тебе свежая мысль: прочитай каждую строчку своего кода и выкини 2/3 так, чтобы ничего по сути не изменилось. это реально!
    после этого код станет читаться намного лучше и ты всё поймёшь сам.
    --- Добавлено ---
    ВАЖНО:
    сразу после вызова setcookie переменная $_COOKIE не меняется! она получит новое значение только на следующем (!!!) запросе.

    так работает http: это диалог запрос - ответ.
    скрипт на языке php просто помогает сформировать ответ на запрос. setcookie формирует исходящий заголовок с именем "Set-Cookie", а переменная $_COOKIE формируется на основе входящего заголовка "Cookie". браузер должен прислать тебе это значение, а не твоя функция, понимаешь?! пруф.
     
  3. captainluzik

    captainluzik Новичок

    С нами с:
    15 янв 2016
    Сообщения:
    7
    Симпатии:
    0
    Это взято не с головы, а с гугла и расшифрованного файла functions.php. Естественно расшифровка кривая.
    PHP:
    1. <?php
    2. /**
    3. *
    4. --- IonCube v8.3.0.0 Loader By iDecode  
    5. --- PHP 5.3
    6. --- Decoder version : 1.0.0.0
    7. --- Author     : iDecode  
    8. --- Release on : 01.02.2015
    9. --- Website    : http://iDecode.eu
    10. *
    11. **/
    12.  
    13. function cfgSET($cfgname) {
    14.     $get_cfg = mysql_fetch_array( mysql_query( 'SELECT * FROM `settings` WHERE cfgname = \'' . $cfgname . '\' LIMIT 1' ) );
    15.     return $get_cfg['data'];
    16. }
    17.  
    18. function gs_html($text) {
    19.     $text = htmlspecialchars( $text, ENT_QUOTES, '' );
    20.     return $text;
    21. }
    22.  
    23. function getip() {
    24.     $ip = '';
    25.     if (getenv( 'HTTP_CLIENT_IP' )) {
    26.         $ip = getenv( 'HTTP_CLIENT_IP' );
    27.     }
    28.  
    29.  
    30.     gs_html( substr( $ip, 0, 15 ) );
    31.     $ip = getenv( 'REMOTE_ADDR' );
    32.     return $ip;
    33. }
    34.  
    35. function gs_md5($key, $pass) {
    36.     $pass = md5( $key . md5( 'Z9&' . $key . '03O' . gs_html( $pass ) ) );
    37.     return $pass;
    38. }
    39.  
    40. function getCOUNTRY($ip) {
    41.     $result = $ipnum = sprintf( '%u', ip2long( $ip ) );
    42.  
    43.     if ($result) {
    44.         mysql_fetch_array( $result );
    45.     }
    46.  
    47.     $row = mysql_query( 'SELECT cc FROM geoip_db WHERE start <= ' . $ipnum . ' AND end >= ' . $ipnum . ' LIMIT 1' );
    48.  
    49.     if ($row) {
    50.         $cc = $row[cc];
    51.     }
    52.  
    53.  
    54.     $cc = '-';
    55.     $cc = '-';
    56.     return $cc;
    57. }
    58.  
    59.  
    60. if (!( defined( 'ACCESS' ))) {
    61.     exit(  );
    62.     (bool)true;
    63.     session_start(  );
    64.     $login = $_SESSION['user'];
    65.     $sid = gs_html( substr( session_id(  ), 0, 32 ) );
    66.     $userip = getip(  );
    67.     $cfgURL = $_SERVER['SERVER_NAME'];
    68.     $cfgURL = str_replace( 'www.', '', $cfgURL );
    69.     $adminmail = '"' . cfgSET( 'projectname' ) . '" <' . cfgSET( 'adminmail' ) . '>';
    70.     $cfgPerfect = cfgSET( 'cfgPerfect' );
    71.  
    72.     if (( $_GET['lang'] == 'zh' || $_GET['lang'] == 'en' )) {
    73.         setcookie( 'lng', gs_html( $_GET['lang'] ), time(  ) + 25920000, '/' );
    74.         $lng = gs_html( $_GET['lang'] );
    75.  
    76.         if (false);
    77.  
    78.  
    79.         if (( $_COOKIE['lng'] == 'zh' || $_COOKIE['lng'] == 'en' )) {
    80.             $lng = gs_html( $_COOKIE['lng'] );
    81.  
    82.             if (false);
    83.  
    84.             $lng = cfgSET( 'cfgLang' );
    85.             @include( 'includes/lng/' . @substr( $lng, 0, 2 ) . '.php' );
    86.  
    87.             if (cfgSET( 'cfgMonCur' ) == 'USD') {
    88.                 $moneycurr = '$';
    89.  
    90.                 if (false);
    91.  
    92.                 $moneycurr = 'р.';
    93.                 $ref = gs_html( $_GET[cfgSET( 'refname' )] );
    94.  
    95.                 if ($ref) {
    96.                     setcookie( 'referal', $ref, time(  ) + 2592000, '/' );
    97.                     mysql_query( 'UPDATE users SET clx = clx + 1 WHERE login = \'' . $ref . '\' LIMIT 1' );
    98.                     $_COOKIE['referal'];
    99.                 }
    100.  
    101.                 $referal = gs_html(  );
    102.  
    103.                 if (mysql_num_rows( mysql_query( 'SELECT * FROM `blacklist_ip` WHERE ip = \'' . $userip . '\' LIMIT 1' ) )) {
    104.                     include( 'includes/errors/banip.php' );
    105.                     exit(  );
    106.  
    107.                     if ($login) {
    108.                         $get_user_info = mysql_query( 'SELECT `id`, `login`, `pass`, `mail`, `balance`, `bonus`, `status`, `ref` FROM `users` WHERE login = \'' . $login . '\' LIMIT 1' );
    109.                         $row = mysql_fetch_array( $get_user_info );
    110.                         $user_id = $row['id'];
    111.                         $login = $row['login'];
    112.                         $user_pass = $row['pass'];
    113.                         $user_mail = $row['mail'];
    114.                         $balance = $row['balance'];
    115.                         $bonusbalance = $row['bonus'];
    116.                         $status = $row['status'];
    117.                         $uref = $row['ref'];
    118.                         mysql_query( 'UPDATE users SET go_time = ' . time(  ) . ', ip = \'' . $userip . '\' WHERE id = ' . $user_id . ' LIMIT 1' );
    119.                         mysql_query( 'INSERT INTO `loghistory` (`date`, `user_id`, `login`, `ip`, `action`) VALUES (' . time(  ) . ', ' . $user_id . ', \'' . $login . '\', \'' . $userip . '\', \'' . gs_html( $_SERVER['REQUEST_URI'] ) . '\')' );
    120.                         $status == 3;
    121.                     }
    122.                 }
    123.  
    124.  
    125.                 if (false) {
    126.                     include( 'includes/errors/banlogin.php' );
    127.                     exit(  );
    128.  
    129.                     if (false);
    130.  
    131.                     $user_id = '';
    132.                     $login = '';
    133.                     $user_pass = '';
    134.                     $user_mail = '';
    135.                     $balance = '';
    136.                     $status = '';
    137.  
    138.                     if ($lng == 'en') {
    139.                         $where = '_en';
    140.  
    141.                         if (false);
    142.  
    143.                         $where = '';
    144.                         $get_page_info = mysql_query( 'SELECT `title' . $where . '`, `keywords' . $where . '`, `description' . $where . '`, `body' . $where . '`, `part` FROM `pages` WHERE `path` = \'' . $page . '\' LIMIT 1' );
    145.                         $row = mysql_fetch_array( $get_page_info );
    146.                         $title = $row['title' . $where];
    147.                         $keywords = $row['keywords' . $where];
    148.                         $description = $row['description' . $where];
    149.                         $body = stripslashes( $row['body' . $where] );
    150.                         $part_page = $row['part'];
    151.  
    152.                         if (!$title) {
    153.                             include( 'includes/errors/404.php' );
    154.                             exit(  );
    155.                             $licmyhash = md5( 'Z@' . $licID . md5( '0I' . $licKEY . md5( 'O' . $cfgURL . 'X9' ) ) );
    156.  
    157.                             if (( $licHASH != $licmyhash && $cfgURL != 'goldscript' )) {
    158.                                 print '<p align="center"><b>ќшибка лицензии! ќбратитесь за лицензионными данными на сайт <a href="http://goldscript.ru">www.goldscript.ru</a></b></p>';
    159.                                 exit(  );
    160.  
    161.                                 if (( cfgSET( 'autopercent' ) == 'on' && cfgSET( 'datestart' ) < time(  ) )) {
    162.                                     mysql_query;
    163.                                 }
    164.                             }
    165.  
    166.                             $result = ( 'SELECT * FROM `deposits` WHERE nextdate <= ' . time(  ) );
    167.  
    168.                             while ($row = mysql_fetch_array( $result )) {
    169.                                 $result2 = mysql_query( 'SELECT * FROM plans WHERE id = ' . $row['plan'] . ' LIMIT 1' );
    170.                                 $row2 = mysql_fetch_array( $result2 );
    171.  
    172.                                 if (cfgSET( 'cfgReInv' ) == 'on') {
    173.                                     $p = sprintf( '%01.2f', $row['sum'] / 100 * $row2['percent'] );
    174.                                     $re = sprintf( '%01.2f', $p / 100 * $row['reinvest'] );
    175.                                     $p = $p - $re;
    176.                                     mysql_query( 'UPDATE `deposits` SET sum = sum + ' . $re . ' WHERE id = ' . $row['id'] . ' LIMIT 1' );
    177.  
    178.                                     if (false);
    179.  
    180.                                     $p = sprintf( '%01.2f', $row['sum'] / 100 * $row2['percent'] );
    181.                                     mysql_query( 'UPDATE users SET balance = balance + ' . $p . ' WHERE id = ' . $row['user_id'] . ' LIMIT 1' );
    182.                                     mysql_query;
    183.                                     'INSERT INTO `stat` (`user_id`, `date`, `plan`, `sum`, `paysys`, `type`) VALUES (' . $row['user_id'] . ', ' . $row['nextdate'] . ', ' . $row['plan'] . ', ';
    184.                                 }
    185.                             }
    186.                         }
    187.                     }
    188.                 }
    189.             }
    190.         }
    191.     }
    192. }
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    зачем нам всё это?
    --- Добавлено ---
    ты пытаешся доказать, что код не дерьмо? нет, брат, это дерьмо!

    повторю ещё раз:
    просто поверь, а поймёшь потом.

    учебные материалы:
    https://ru.wikipedia.org/wiki/HTTP
    https://ru.wikipedia.org/wiki/HTTP_cookie
    https://php.ru/manual/features.cookies.html