我纠结于如何在 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');
。