提供自定义 Laravel 包的本地化
Provide localization from custom Laravel packages
我在为 laravel?
的自定义包正确使用本地化而苦恼
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');
不让我访问我的视图中的嵌套 translation-files(Blade 模板)。
我的Folder-Structure
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');
}
}
知道如何解决吗?
编辑:
我有多个包遵循此文件夹结构。
没关系,Post 遗漏了一个要点。
涉及多个自定义包,它们使用相同的命名空间package_lang
,从而导致问题。
无论出于何种原因,$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');
的第二个名称空间参数必须唯一定义!
改变这个可以解决问题。
附带说明:
但是,上述规则不适用于 $this->loadViewsFrom(__DIR__.'/../../resources/views', 'package_views');
,其中多个包可以具有相同的命名空间。
我在为 laravel?
的自定义包正确使用本地化而苦恼
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');
不让我访问我的视图中的嵌套 translation-files(Blade 模板)。
我的Folder-Structure
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');
}
}
知道如何解决吗?
编辑:
我有多个包遵循此文件夹结构。
没关系,Post 遗漏了一个要点。
涉及多个自定义包,它们使用相同的命名空间package_lang
,从而导致问题。
无论出于何种原因,$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');
的第二个名称空间参数必须唯一定义!
改变这个可以解决问题。
附带说明:
但是,上述规则不适用于 $this->loadViewsFrom(__DIR__.'/../../resources/views', 'package_views');
,其中多个包可以具有相同的命名空间。