Sahen
@Sahen
ох уж это программирование.....

Как сделать многоязычное отображение служебных сообщений на PHP?

хочу сделать многоязычную отображалку сообщений типа -"вы не ввели логин", "в поле логин - запрещенные символы и т.д и т.п.
в принципе все понятно, сделать массивчики сообщений на разных языках и подставляй себе циферки. Но. есть одна функция которая портит мне малину.
функция для проверки и очистки полей от зловреда:
function cleanStr($regExp, $subjekt, $min, $max, $place){
    $regExpArray = array(
        "URL"	=> "[^a-zA-Z0-9\/]",
        "EMail"	=> "~[^a-z0-9\-\_\.\@]~",
        "text"	=> "~[^a-zA-Z0-9\-]~"
    );

    $count = 0;
    $cleanValue = preg_replace($regExpArray[$regExp], '', $subjekt, -1 , $count);
    $length = strlen($cleanValue);

    if($count > 0) {
        msgSend('6', $place);
    }
    if($length == 0) {
        msgSend('0', $place);
    }
    if($length < $min) {
        msgSend('3', $place);
    }
    if($length > $max) {
        msgSend('4', $place);
    }
    else return $cleanValue;


msgSend()
function msgSend($msg, $place){
    $messageArray = array(
        /*0*/    "пусто в поле -",
            
    );
    $_SESSION['reportMessage'] = $messageArray[$msg].$place;
    header('Location:'.$_SERVER['HTTP_REFERER'] , 303);
    exit();
}


работало приблизительно так:
$userLogin = cleanStr("text", $_POST['login'], "3", "20", "логин");
//и если в поле "логин" будет пусто то выведет - "пусто в поле - логин".


проблема в том что так не получиться сделать многоязычность. вернее получиться но выглядеть это будет кошмарно.
по всему скрипту после cleanStr() останется много к примеру - Русского текста и что бы пользователь смог поменять язык - нужно будет менять почти весь скрипт.

в общем, не знаю что делать. хочется оставить cleanStr(). она удобная и практичная.
подскажите, как можно реализовать затею в моем случае?
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
а, ... где там проблема? Везде где есть русские слова ставится массив с ключом текущего языка.
$currentLocale = 'fr';
function _($key){
  global $currentLocale; // в вашем случае где нет понятия объектов
  global $locale_.{$currentLocale};  
  return $locale_.{$currentLocale}[$key];
}
$locale_ru = array(
'login' => 'логин',
....);
$locale_en = array(
'login' => 'login',
....);
$locale_fr = array(
'login' => 'le logine',
'emptystring' => 'le string le empty )',
....);

$userLogin = cleanStr("text", $_POST['login'], "3", "20", _('login'));

...$messageArray = array(
        /*0*/    _('emptystring'),
            
    );


ps:
функция для проверки и очистки полей от зловреда:

очередной велосипед с кубическими колесами... php.net/manual/ru/function.filter-var.php
Ответ написан
Комментировать
@BorisKorobkov Куратор тега PHP
Web developer
Чтобы не делать костыли и велосипеды - используйте любой фреймворк.
Например, www.yiiframework.com/doc-2.0/guide-tutorial-i18n.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы