提供自定义Laravel软件包的本地化



我纠结于如何在 laravel 的自定义包中正确使用本地化?
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang'); 不允许我访问视图中的嵌套翻译文件(刀片模板(。

我的文件夹结构

foo-package/
├── resources/
│   ├── lang/
│   │   ├── de/
│   │   │   └── subs/
│   │   │       ├── fields.php
│   │   │       └── general.php
│   │   └── en/
│   │       └── subs/
│   │           ├── fields.php
│   │           └── general.php
│   └── views/
│           └── subs/
│               ├── create.php
│               └── edit.php
└── src/
    └── Providers/
        └── PackageProvider.php

在我看来,我尝试像这样访问它:

<label>{{ __('package_lang::subs/fields.name_of_subs') }}</label>

<button type="submit">{{ __('package_lang::subs/fields.create_sub') }}</button>

导致返回翻译字符串键。

服务提供程序加载在我的app.php配置中,我也在其中设置了正确的语言环境(调试栏证明了这一点(。尝试了composer dump-autoload,但没有成功。
只有当我使用 laravel project/resources/lang 的标准项目文件夹时,我才能让它工作,这会阻止我使用我首选的命名空间package_lang::并使我的包准备好进行本地化。

我的服务提供商

namespace FooPackageProviders;
use IlluminateRoutingRouter;
use IlluminateSupportServiceProvider;
class PackageServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->loadMigrationsFrom(__DIR__ . '/../../database/migrations');
        $this->loadViewsFrom(__DIR__.'/../../resources/views', 'package_views');
        $this->loadTranslationsFrom(__DIR__.'/../../resources/lang', 'package_lang');
    }
}

知道如何解决吗?

编辑:

我有多个遵循此文件夹结构的包。

好吧,没关系,邮报错过了一个要点。
涉及多个自定义包,它们使用相同的命名空间package_lang,从而导致问题。

无论出于何种原因,$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');的第二个命名空间参数都必须唯一定义!
改变这一点可以解决问题。

只是一个旁注:但是,上述规则不适用于多个包可以具有相同命名空间的$this->loadViewsFrom(__DIR__.'/../../resources/views', 'package_views');

最新更新