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

时间:2018-01-15 21:15:32

标签: php laravel-5 composer-php package-development

我在如何正确使用本地化以及laravel的自定义包方面很困难? $this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');不允许我访问我的视图中的嵌套翻译文件(Blade Templating)。

我的文件夹结构

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>

导致返回翻译字符串键。

ServiceProvider加载到我的app.php配置中,我也在其中设置了正确的语言环境(Debug-Bar证明了这一点)。试过composer dump-autoload,但没有成功 如果我使用laravel project/resources/lang的标准项目文件夹,我只能使用它,这会阻止我使用我喜欢的命名空间package_lang::并使我的包准备好进行本地化。

我的服务提供商     

namespace FooPackage\Providers;

use Illuminate\Routing\Router;
use Illuminate\Support\ServiceProvider;

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');
    }
}

知道怎么解决吗?

编辑:

我在此文件夹结构后面有多个包。

1 个答案:

答案 0 :(得分:0)

好吧没关系,邮报错过了一个重点 涉及多个自定义程序包,它使用相同的名称空间package_lang,这会导致问题。

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

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