Как использовать предпочитаемую локаль в просвете?

Если вы используете TypScript, я бы хотел добавить, что вы можете использовать функцию «предикат типа». Просто следует обернуть логическую проверку в функции, которая возвращает x is Promise, и вам не нужно будет делать машинные приемы. Ниже моего примера, c является обещанием или одним из моих типов, которые я хочу преобразовать в обещание, вызвав метод c.fetch().

export function toPromise(c: Container | Promise): Promise {
    if (c == null) return Promise.resolve();
    return isContainer(c) ? c.fetch() : c;
}

export function isContainer(val: Container | Promise): val is Container {
    return val && (>val).fetch !== undefined;
}

export function isPromise(val: Container | Promise): val is Promise {
    return val && (>val).then !== undefined;
}

Дополнительная информация: https : //www.typescriptlang.org/docs/handbook/advanced-types.html

2
задан Mohamed Emad 16 January 2019 в 12:14
поделиться

2 ответа

Разница между Люменом и Ларавелом в том, что в Ларавеле вы звоните Application->setLocale().

Это делает три вещи, как описано выше:

  1. Установить конфигурацию app.locale
  2. Установить локаль на переводчике
  3. Запустить локаль. измененное событие

В Lumen вы могли бы вызвать переводчик напрямую с помощью app('translator')->setLocale() или App::make('translator')->setLocale(),

, так что разница здесь в том, что конфигурация переменная не будет установлена ​​автоматически, и событие locale.changed не будет запущено.

Класс Application Laravel также обновляет конфигурацию и запускает событие:

public function setLocale($locale)
{
    $this['config']->set('app.locale', $locale);
    $this['translator']->setLocale($locale);
    $this['events']->fire('locale.changed', [$locale]);
}

, а в Laravel getLocale просто читает переменную конфигурации:

public function getLocale()
{
    return $this['config']->get('app.locale');
}

Для переводов, это переводчик, который имеет значение. Trans helper от Laravel выглядит следующим образом:

function trans($id = null, $parameters = [], $domain = 'messages', $locale = null)
{
    if (is_null($id)) {
        return app('translator');
    }
    return app('translator')->trans($id, $parameters, $domain, $locale);
}

Вам нужно сделать так, чтобы ваше приложение расширяло другой класс с помощью 3 вышеуказанных методов

0
ответ дан Ahmad Elkenany 16 January 2019 в 12:14
поделиться

Вы можете расширить свой Laravel\Lumen\Application в новом классе и заставить переменную $app взять экземпляр из вашего нового класса в вашем файле bootstrap\app.php

1 - создать новый класс следующим образом: [116 ]

<?php namespace App\Core;

use Laravel\Lumen\Application as Core;

class Application extends Core
{
    /**
     * @param $locale
     */
    public function setLocale($locale): void
    {
        $this['config']->set('app.locale', $locale);
        $this['translator']->setLocale($locale);
        $this['events']->fire('locale.changed', [ $locale ]);
    }

    public function getLocale()
    {
        return $this['config']->get('app.locale');
    }
}

2 - создайте экземпляр из вашего нового класса, например:

$app = new App\Core\Application( realpath(dirname(__DIR__) . '/') );

0
ответ дан Asmaa Elabd 16 January 2019 в 12:14
поделиться
Другие вопросы по тегам:

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