surda/language-switcher

Nette 框架的语言切换控制

v1.3.1 2019-10-05 10:16 UTC

This package is auto-updated.

Last update: 2024-09-05 21:36:53 UTC


README

Build Status Licence Latest stable PHPStan

安装

推荐的方式是通过 Composer

composer require surda/language-switcher

之后,您需要在 config.neon 中注册扩展

extensions:
    languageSwitcher: Surda\LanguageSwitcher\DI\LanguageSwitcherExtension

最小配置

languageSwitcher:
    locales:
        cs: Čeština
        en: English
    default: cs

所有配置选项列表

languageSwitcher:
    locales:
        cs: Čeština
        en: English
    default: cs
    locale: cs
    useAjax: false
    locale2Country:
        en: us
        cs: cz
    template: path/to/your/latte/file.latte
    # or
    templates:
        default: path/to/your/latte/file.latte
        navbar: path/to/your/latte/navbar.latte

使用方法

注入语言切换器 + $locale 持久属性

use Nette\Application\UI\Presenter;
use Surda\LanguageSwitcher\TLanguageSwitcher;

class BasePresenter extends Presenter
{
    use TLanguageSwitcher;
}

不注入 $locale 持久属性的注入语言切换器

use Nette\Application\UI\Presenter;
use Surda\LanguageSwitcher\TLanguageSwitcherWithoutLocaleProperty;

class BasePresenter extends Presenter
{
    use TLanguageSwitcherWithoutLocaleProperty;
    
    /** @persistent */
    public $locale = 'cs';
}

自定义

use Nette\Application\UI\Presenter;
use Surda\LanguageSwitcher\LanguageSwitcherFactory;
use Surda\LanguageSwitcher\LanguageSwitcherControl;

class BasePresenter extends Presenter
{
    /** @var LanguageSwitcherFactory */
    private $languageSwitcherFactory;

    /** @persistent */
    public $locale = 'cs';

    public function injectLanguageSwitcherFactory(LanguageSwitcherFactory $LanguageSwitcherFactory)
    {
        $this->languageSwitcherFactory = $LanguageSwitcherFactory;
    }
    
    /**
    * @return LanguageSwitcherControl
    */
    protected function createComponentLanguageSwitcher(): LanguageSwitcherControl
    {
        $control = $this->languageSwitcherFactory->create();
        $control->setLocale($this->locale);

        $control->onChange[] = function (LanguageSwitcherControl $control, string $locale): void {
            $this->redirect('this', ['locale' => $locale]);
        };

        return $control;
    }
}

模板

{control languageSwitcher} or {control languageSwitcher default}  

通过模板类型设置控制模板(参见 config.neon)

{control languageSwitcher navbar}  

自定义组件选项

class ProductPresenter extends Presenter
{
    /**
    * @return LanguageSwitcherControl
    */
    protected function createComponentLanguageSwitcher(): LanguageSwitcherControl
    {
        // Init items per page component
        $control = $this->languageSwitcherFactory->create();
        
        // All allowed locales 
        $control->setLocales(['cs' => 'Czech', 'en' => 'English']);

        // Default locale
        $control->setDefaultLocale('cs');

        // Current locale
        $control->setLocale('cs');

        // To use your own template (default type)
        $control->setTemplate('path/to/your/latte/file.latte');

        // To use your own template
        $control->setTemplates([
            'default' => 'path/to/your/latte/file.latte',
            'navbar' => 'path/to/your/latte/navbar.latte',
        ]);

        // Enable ajax (defult is disable)
        $control->enableAjax();
        
        // Disable ajax
        $control->disableAjax();
        
        return $control;
    }
}

模板文件 bootstrap4.nav-item.flag.latte 使用来自 https://github.com/lipis/flag-icon-css 的旗帜图标