首页 > 解决方案 > 如何在服务提供商的启动方法中从 Laravel 中的多个文件和文件夹中加载翻译?

问题描述

目标
从不同目录中的多个文件加载翻译。

描述
在我的 Laravel 包的 ServiceProvider 中,我可以像这样从一个目录加载所有翻译,它可以工作:


public function boot()
{
   $this->loadTranslationsFrom(__DIR__ . '/../resources/lang', 'package-namespace');
}

包的结构是:

- config
- database
- resources
  - assets
  - lang
   - langA
   - langB
  - views
- routes
- src
  - moduleFolderA
    - Business
    - Controller
    - Routes
  - moduleFolderB
    - Business
    - Controller
    - Routes
  - moduleFolderC
    - Business
    - Controller
    - Routes
  - ServiceProvider.php

我想拆分翻译以获得更多的 OOP 方法,并希望在每个模块文件夹中都有一个翻译文件夹。模块文件夹里面是包的逻辑。

- moduleFolderA
  - Business
  - Controller
  - Routes
  - Translations
    - langA
       translationFileA.php
    - langB
       translationFileA.php
- moduleFolderB
  - Business
  - Controller
  - Routes
  - Translations
    - langA
       translationFileB.php
    - langB
       translationFileB.php

在 ServiceProvider 的引导方法中,我尝试了类似的方法

foreach (glob(__DIR__ . '/**/Translations/') as $path) {
            $this->loadTranslationsFrom($path, 'package-namespace');
        }

或者

foreach (glob(__DIR__ . '/**/Translations/') as $path) {
           Lang::addNamespace('package-namespace', $path);;
        }

问题
只有迭代的最后一个翻译文件可用。

有什么方法可以实现我的目标?

标签: phplaraveltranslation

解决方案


在您的AppServiceProvider.php文件中转到该register方法,然后添加此 $this->app->bind('path.lang', function() { return base_path().'/vendor/package-name/resources/lang'; });


推荐阅读