Я борюсь за то, как правильно использовать локализации с пользовательскими пакетами для laravel?
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');
не предоставляет мне доступ к моим вложенным файлам перевода в моих представлениях (Шаблон Blade).
Моя папка-структура
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
config, в котором я также установил правильную локаль (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');
}
}
Есть идеи как это решить?
РЕДАКТИРОВАТЬ:
У меня есть несколько пакетов, следующих этой структуре папок.
Ладно, неважно, в Посте упущен один важный момент.
Вовлечено несколько пользовательских пакетов, которые используют одно и то же пространство имен package_lang
, что вызывает проблему.
По какой-то причине второй параметр пространства имен $this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'package_lang');
должен быть однозначно определен!
Изменение этого решает проблему.
Просто примечание:
Приведенное выше правило, однако, не распространяется на $this->loadViewsFrom(__DIR__.'/../../resources/views', 'package_views');
где несколько пакетов могут иметь одно и то же пространство имен.
Других решений пока нет …