Правильные lng-файлы...

Тема в разделе "PHP", создана пользователем Горбушка, 19 июл 2015.

Модераторы: latteo
  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.113
    Симпатии:
    2.130
    Всем привет!

    И так, есть 3 варианта организации нескольких языков на сайте...
    1) Мне совсем не нравится - мы делаем несколько вариантов шаблона (по одному для каждого языка).
    Плюсы: Скорость работы потрясающая, мы вместо парсингов и прочего просто цепляем нужный файл и там уже всё готово.
    Минусы: Правки в вёрстке куда чаще, чем в lang-файлах, а делать нам их теперь в n-цати местах, где n - количество языков

    2) Использовать конструкции [lang=ru]Игры[/lang][lang=en]Games[/lang]
    Плюсы: Не надо править lang-файлы в каждый раз, а так же сразу видно что будет показано юзеру
    Минусы: Захламлённость файлов шаблона, особенно при 10+ языках

    3) Использовать только lang-файлы, а в шаблоны вставлять аля {lang_bla_bla_bla}, а затем парсером проходиться по всем шаблонам
    Плюсы: Лёгкий перевод, всё в одном месте, красиво, удобно... А главное - лёгкий контроль версий и добавление языков
    Минусы: Дикая нагрузка из-за forech по lang-файлу...

    В общем, какой из вариантов считаете лучше, какие за и против? Почему?

    P.s. да, если какие-то куски заполняются по неким условиям, к примеру, сообщение об ошибке - мы берём шаблон и пихаем туда данные из ленг-файла... Тут других вариантов даже смотреть не хочу...
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.113
    Симпатии:
    2.130
    Реализовал так:
    PHP:
        if (strpos $this->template"{lang_" ) !== false) {
            
    $this->template preg_replace_callback "#\\{(lang)_(.+?)\\}#is", array( &$this'lang'), $this->template );
        }

        function 
    lang$matches=array() ) {
            global 
    $lang;
            
            return 
    $lang[$matches[2]];
        
        }
    В итоге получил комбинацию... Допустим как 2 вариант, так и 3 вариант... А через include могу делать и 1-ый =)) Универсальность - это круто )))
     
    Последнее редактирование: 19 июл 2015
  3. murlo

    murlo Создатель

    Регистр.:
    8 июн 2006
    Сообщения:
    34
    Симпатии:
    33
    У меня lang-файл для каждого языка, но если нужного перевода нет, то берётся из по умолчанию.
    Шаблонами как таковыми не пользуюсь. Сколько не пытался, столько отказывался.
    T.e, скинов на сайте может быть и несколько, но если нужного "шаблона" нет, то берётся "шаблон" из скина по умолчанию.
    Я хотел сказать что "шаблоны" на PHP))
    ob_start();
    include ..;
    .. = ob_get_contents();
    ob_end_clean();
     
    Последнее редактирование: 20 июл 2015
  4. Bezhev

    Bezhev

    Регистр.:
    26 дек 2012
    Сообщения:
    362
    Симпатии:
    123
  5. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.113
    Симпатии:
    2.130
    Ответный вопрос - а зачем? Реализация выше в 5 строчек, зачем мне столь большое решение? Экономия по скорости? Сомнительно... По расходу CPU и RAM? Ещё более сомнительно...

    Давай как-нибудь аргументировано за и против =)
     
  6. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Gettext-подобный вариант, давно и успешно используемый в Unix, предполагает языковую функцию называть __()
    Вот рабочий пример:
    PHP:
    function __($text){
    global 
    $lang;
    if (isset(
    $lang[$text])) return $lang[$text];
    else return 
    $text;
    };
    Потом в шаблоне очень доходчиво получается:
    PHP:
    <?=__('Delete')?>
    Пример:
    https://github.com/Den1xxx/Filemanager/blob/master/filemanager.php
     
    Горбушка нравится это.