Роберт

Backend-разработчик
Пишу о программировании, музыке, книгах и жизни

Блог

Клеппман Мартин.  Высоконагруженные приложения. Программирование, масштабирование, поддержка

В этой книге вы найдете ключевые принципы, алгоритмы и компромиссы, без которых не обойтись при разработке высоконагруженных систем для работы с данными. Материал рассматривается на примере внутреннего устройства популярных программных пакетов и фреймворков. В книге три основные части, посвященные, прежде всего, теоретическим аспектам работы с распределенными системами и базами данных. От читателя требуются базовые знания SQL и принципов работы баз данных.
Читать

Мартин Роберт.  Чистая архитектура. Искусство разработки программного обеспечения

"Идеальный программист" и "Чистый код" - легендарные бестселлеры Роберта Мартина - рассказывают, как достичь высот профессионализма. "Чистая архитектура" продолжает эту тему, но не предлагает несколько вариантов в стиле "решай сам", а объясняет, что именно следует делать, по какой причине и почему именно такое решение станет принципиально важным для вашего успеха. Роберт Мартин дает прямые и лаконичные ответы на ключевые вопросы архитектуры и дизайна. "Чистую архитектуру" обязаны прочитать разработчики всех уровней, системные аналитики, архитекторы и каждый программист, который желает подняться по карьерной лестнице или хотя бы повлиять на людей, которые занимаются данной работой. Все архитектуры подчиняются одним и тем же правилам!
Читать

1.  Итоги по книгам 2019

Итоги по книгам 2019
Читать

Yii::t('app', 'message') -> trans('app.category.sub_category.message')

Переопределяем метод PhpMessageSource::loadMessages()


namespace app\components;

use Yii;

class PhpMessageSource extends \yii\i18n\PhpMessageSource
{
    protected function loadMessages($category, $language)
    {
        $newCategory = $category;
        $keys = [];
        if (false !== strpos($category, '.')) {
            $keys = explode('.', $category);
            $newCategory = array_shift($keys);
        }
        $messageFile = $this->getMessageFilePath($newCategory, $language);
        $messages = $this->loadMessagesFromFile($messageFile);

        if (false !== strpos($category, '.')) {
            $messages = $this->searchKey($messages, $keys);
        }

        $fallbackLanguage = substr($language, 0, 2);
        $fallbackSourceLanguage = substr($this->sourceLanguage, 0, 2);

        if ($language !== $fallbackLanguage) {
            $messages = $this->loadFallbackMessages($newCategory, $fallbackLanguage, $messages, $messageFile);
        } elseif ($language === $fallbackSourceLanguage) {
            $messages = $this->loadFallbackMessages($newCategory, $this->sourceLanguage, $messages, $messageFile);
        } else {
            if ($messages === null) {
                Yii::warning("The message file for category '$newCategory' does not exist: $messageFile", __METHOD__);
            }
        }

        return (array)$messages;
    }

    private function searchKey($messages, $keys)
    {
        $keyCurrent = array_shift($keys);

        if (array_key_exists($keyCurrent, $messages) && is_array($messages[$keyCurrent])) {
            if (!$keys) {
                return $messages[$keyCurrent];
            }

            return $this->searchKey($messages[$keyCurrent], $keys);
        }
    }
}

В конфиге приложения для компонента i18n указываем наш класс:


'components' => [
    ...
    'i18n' => [
            'translations' => [
                '*' => [
                    'class' => \app\components\PhpMessageSource::class,
    ...

Добавляем глобальную функцию, которая будет оберткой для стандартного вызова метода Yii::t()


function trans(string $message)
{
    return Yii::t($message, substr(strrchr($message, '.'), 1));
}

Теперь в файлах переводов можно указывать переводы с категориями


'access_denied' => 'Доступ закрыт',
'category' => [
    'sub_category' => [
        'message' => 'Сообщение',
    ],
],

Интернационализация Yii2 а-ля Laravel.  Интернационализация Yii2 а-ля Laravel

I18n а-ля Laravel
Читать

Оруэлл Джордж.  1984

Своеобразный антипод второй великой антиутопии XX века - "О дивный новый мир" Олдоса Хаксли. Что, в сущности, страшнее: доведенное до абсурда "общество потребления" - или доведенное до абсолюта "общество идеи"? По Оруэллу, нет и не может быть ничего ужаснее тотальной несвободы...
Читать

Подпишитесь на обновления