【问题标题】:Package translation files not working - Laravel 5.2包翻译文件不起作用 - Laravel 5.2
【发布时间】:2017-01-15 22:28:07
【问题描述】:

我正在尝试在自定义包中使用语言文件。 我遵循了这个文档:https://laravel.com/docs/master/packages#translations,但它不起作用,只输出 Namespace::file.key 作为字符串。

没有错误。我做错了什么?

加载为:

$this->loadTranslationsFrom(__DIR__.'/resources/lang', 'TranslatableRoute');

用作:

trans('TranslatableRoute::routes.create')

我的路径结构如下:

packages - doitonlinemedia - - translatableroutes - - - src - - - - TranslatableRoute.php - - - - TranslatableRoutesServiceProvider.php - - - - resources - - - - - lang - - - - - - en - - - - - - - routes.php

Routes.php 包含:

return [
    'create' => 'new',
    'edit' => 'edit'
];

发现了一些奇怪的东西。当我转储 $this->app['translator'] 时,它包含:

array:1 [
    "TranslatableRoute" => array:1 [
      "routes" => array:1 [
        "en" => []
      ]
    ]
  ]

但不应该是这样吗:

array:1 [
    "TranslatableRoute" => array:1 [
      "en" => array:1 [
        "routes" => []
      ]
    ]
  ]

编辑

当我使用 loadTranslationFrom 添加语言文件时,它会在 $this->hints 被填充后调用 vendor/laravel/Translation/FileLoader.php 中的 addNamespace。但是只要我想调用它,同一个文件中的这个函数就会触发:loadNamespaced() 在这个函数中$this->hints 又是空的。好像是个bug。

【问题讨论】:

  • 你的目录结构是什么? resources/lang 目录是否相对于您从中加载翻译的服务提供商?

标签: php laravel laravel-5.2


【解决方案1】:

找到了解决方案,但我认为我对这个问题使用了错误的方法,但现在已修复。

我正在制作一个在 routes.php 文件中调用的包。带有一些静态功能。似乎这是在启动包之前加载的。它已注册,但尚未启动。所以我不得不通过调用包代码来手动添加语言文件:

\App::make('translator')->addNamespace('TranslatableRoute', __DIR__.'/resources/lang');

我想我需要将我的包加载为某种外观控制器。不知道该怎么做。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但无法解决。我最终更改了分配给翻译的命名空间,它现在可以工作了。我不知道为什么,也许它正在将命名空间覆盖到我的视图中,但是使用独特的命名空间它似乎正在工作。

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 2017-08-08
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2016-04-01
      • 2017-01-26
      相关资源
      最近更新 更多