为 Laravel 中的每个主题添加自定义文本?

问题描述 投票:0回答:1

我有一个 Laravel 应用程序。假设我们有一个包含 3 个输入字段和 3 个标签的表单。假设我们有 100 个主题,每个客户端/主题都需要自定义标签文本。因此输入是相同的,只是标签中的文本不同。 例如。

主题 1 想要:民意调查和测验,主题 2 想要:我的民意调查和测验,主题 3 想要:民意调查,主题 4 想要:测验,等等... 我们还假设我们的网站是双语的。

现在,我们正在使用英语和法语列名称保存数据库中的字段,但是如果我们有数千个想要自定义的字段,那么最好的方法是什么,因为保存了数千个文本列数据库中的名称似乎不是正确的答案。

重要提示: 当涉及到主题时,我们正在尝试拥有一个 WordPress 风格的应用程序。 我知道 Laravel 中有主题包,我们正在使用一个(qiro lab theme laravel),但它只讨论处理资产,而不是如何处理每个主题的多语言文本。附:我现在看到有更流行/更好的 Laravel 主题包,我会研究这些。

我的问题是关于本地化的 我确定我错过了一些东西,每个主题是否可以有多个资源/语言/文件夹?这里最好的方法是什么?

laravel themes multilingual
1个回答
0
投票

您可以通过在 resources/lang 目录下为每个主题创建单独的文件夹来组织本地化文件。例如:

├── lang
    ├── theme1
    │   ├── en
    │   │   └── theme.php
    │   └── fr
    │       └── theme.php
    ├── theme2
    │   ├── en
    │   │   └── theme.php
    │   └── fr
    │       └── theme.php
    └── ...

在此之后你可以实现这个:

  1. 在会话中设置主题:

    当主题更改或最初设置时,将其存储在会话中。例如:

    // Set theme in session
    session(['theme' => 'theme1']); // or 'theme2'
    
  2. 自定义语言加载器:

    扩展 Laravel 的语言加载器,以根据会话中存储的主题从适当的主题目录加载语言文件。您可以通过创建自定义语言加载器来做到这一点。这是一个基本示例:

    namespace App\Providers;
    
    use Illuminate\Translation\FileLoader;
    use Illuminate\Filesystem\Filesystem;
    
    class CustomFileLoader extends FileLoader
    {
        protected function loadPath($path, $locale, $group)
        {
            $theme = session('theme');
            // Customize path based on the theme
            $customPath = "{$path}/{$theme}/{$locale}/{$group}.php";
    
            if ($this->files->exists($customPath)) {
                return $this->files->getRequire($customPath);
            }
    
            return parent::loadPath($path, $locale, $group);
        }
    }
    
  3. 注册自定义语言加载器:

    在您的

    AppServiceProvider
    中,绑定自定义语言加载器:

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class AppServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->singleton('translator.loader', function ($app) {
                return new CustomFileLoader(new Filesystem, $app['path.lang']);
            });
        }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.