首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:未为包加载自定义语言文件

Laravel:未为包加载自定义语言文件
EN

Stack Overflow用户
提问于 2021-03-20 16:57:29
回答 1查看 1K关注 0票数 1

我正在使用包裹邮递员空间主持我自己的电子邮件营销。但是,我想编辑语言文件。对于Laravel 文档,这可以通过以下方法实现:

因此,例如,如果您需要覆盖名为skyrim/hearthfire的包的messages.php中的英文翻译字符串,那么您应该将一个语言文件放在:messages.php

因此,在我的示例中,包名为spatie/laravel-mailcoach,它将在resources/lang/vendor/laravel-mailcoach/de/messages.php中解析。然而,我面临两个问题。

  1. 当我从包中发布语言文件时,文件夹名为mailcoach,而不是laravel-mailcoach。但是,我尝试了这两种方法(同时),而且我的语言文件都没有加载。这怎么可能呢?
  2. 我希望加载一个.json文件,而不是一个.php文件。我假设会像上面所描述的那样工作。这意味着正确的路径文件将是resources/lang/vendor/laravel-mailcoach/de.json。这是正确的吗?

如果2是正确的,为什么Laravel仍然加载错误的语言文件?

我稍微深入了一下Illuminate\Translation\Translator文件,并为get方法添加了一个dd($this),该方法将检索给定密钥的正确转换。我发现了以下情况:

代码语言:javascript
复制
Illuminate\Translation\Translator {#604 ▼
  #loader: Illuminate\Translation\FileLoader {#603 ▼
    #files: Illuminate\Filesystem\Filesystem {#92}
    #path: "Programmieren/MyWebsiteProject/resources/lang"
    #jsonPaths: array:4 [▼
      0 => "Programmieren/MyWebsiteProject/vendor/arcanedev/log-viewer/translations"
      1 => "Programmieren/MyWebsiteProject/vendor/llaski/nova-scheduled-jobs/src/../resources/lang"
      2 => "Programmieren/MyWebsiteProject/resources/lang/vendor/nova-scheduled-jobs"
      3 => "Programmieren/MyWebsiteProject/vendor/spatie/laravel-mailcoach/src/../resources/lang/"
    ]
    #hints: array:3 [▼
      "log-viewer" => "Programmieren/MyWebsiteProject/vendor/arcanedev/log-viewer/translations"
      "NovaScheduledJobs" => "Programmieren/MyWebsiteProject/vendor/llaski/nova-scheduled-jobs/src/../resources/lang"
      "validationRules" => "Programmieren/MyWebsiteProject/vendor/spatie/laravel-validation-rules/src/../resources/lang/"
    ]
  }
  #locale: "de"
  #fallback: "en"
  #loaded: array:1 [▼
    "*" => array:1 [▼
      "*" => array:1 [▼
        "de" => array:403 [▼
        ...
        // my translations
        ...
        ]
      ]
    ]
  ]
  #selector: null
  #parsed: []
}

正如您在jsonPaths数组中所看到的那样,mailcoach语言文件不是我的resources/lang/vendor/laravel-mailcoachresources/lang/vendor/mailcoach文件夹中的文件,而是原始的文件。

有人能解释一下为什么会发生这种情况,而不是加载resources/lang/vendor下的文件吗?

有趣的是,当我将行$this->loadJsonTranslationsFrom(resource_path() . '/lang/vendor/mailcoach');添加到我的AppServiceProvider中的boot函数中时,上面的jsonPaths数组又得到了一个项Programmieren/MyWebsiteProject/resources/lang/vendor/mailcoach,这是正确的。

然后我的定制语言文件也被使用了,但是原始的语言文件仍然被加载。这怎么可能呢?

此外,我想知道为什么我还要注册我的自定义语言文件?这不是正常的行为..。我想找出这个错误/问题。

亲切的问候

EN

回答 1

Stack Overflow用户

发布于 2021-10-22 18:16:27

我相信我找到了解决方案(使用Laravel8.x):

vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php中见

代码语言:javascript
复制
protected function loadNamespaceOverrides(array $lines, $locale, $group, $namespace)
{
    $file = "{$this->path}/vendor/{$namespace}/{$locale}/{$group}.php";

    if ($this->files->exists($file)) {
        return array_replace_recursive($lines, $this->files->getRequire($file));
    }

    return $lines;
}

基于此,我假设包名(如hearthfire in skyrim/hearthfire)不是真正的交易,而是包的名称空间--在我的例子中,是用于statamic/cms statamic而不是cms的,因此将一个文件放在

代码语言:javascript
复制
resources/lang/vendor/statamic/de/messages.php

为我工作过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66724212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档