Laravel 9应用程序(从8升级)的lang目录没有按预期工作。

12

我已将我的Laravel 8应用程序升级到版本9,根据升级指南resources/lang目录现在位于项目根目录(lang)。

我已将lang目录移动到项目的根目录,但似乎没有起作用。

// config/app.php
'locale' => 'pt-BR',

并且

// lang/pt-BR/messages.php
return [
    'welcome' => 'Welcome to the app!',
];

控制器

return response()->json([
    'message' => Lang::get('messages.welcome') // it returns "messages.welcome"
]);

但是,当我将lang目录更改回/resources/lang时,它就像在以前的Laravel版本中一样正常工作。因此,我创建了一个新的Laravel 9项目,并且它可以工作,这让我认为需要进行一些额外的配置,但这在升级指南中没有记录。我的composer.json依赖项与新的Laravel项目完全相同。是否需要进行任何其他配置才能使Laravel识别此目录?


1
看起来它在谈论发布其文件以供新的 Laravel 9 项目使用的软件包。 - lagbox
@lagbox 在 Laravel 9 新项目中没有 resources/lang 目录,因此每个语言文件都应该在项目根目录下的 lang 目录中,而不仅仅是包文件。 - Marcelo The Mage Coder
1
@MarceloTheMageCoder 但是对于升级,我也读到只有包开发人员才需要更改。将目录保留为 /resources/lang 应该没问题。 - Rory
你没有一个“新的” Laravel 9 项目,而是一个升级后的项目……升级指南讲述了如果你有一个发布包含这些文件的软件包,你应该使用那种方法而不是硬编码,因为它可能在不同的目录中……这些路径由应用程序容器本身设置,所以这不应该是你必须更改的东西;在 Laravel 9 版本中有代码检查 lang 文件夹是否仍然存在于原始位置(该路径是否为目录),如果存在,则在那里使用它,否则使用新位置。 - lagbox
@lagbox 但是如果我想使用新目录怎么办? - Marcelo The Mage Coder
8
请确保resources/lang目录不存在...根据应用容器中的代码:https://github.com/laravel/framework/blob/9.x/src/Illuminate/Foundation/Application.php#L324 - lagbox
3个回答

31

所以我找到了解决方案,“问题”是我没有移除resources/lang目录,因此Laravel使用该目录而不是应用程序基路径中的lang目录。

移除resources/lang目录后,它按预期工作。感谢@lagbox的评论。

@IGP 答案也可以解决。


3
我也遇到了同样的问题,必须删除resources/lang目录。 - Roberto Santana
刚刚发生了这样的事情。我安装了一个自称“Laravel 10兼容”的包。然而,它将其语言文件发布在resources/lang目录下,这使得整个Laravel 10变得疯狂,并尝试使用这个过时的目录,而不是新的/lang目录。 - Dario Fumagalli

7

您可以在AppServiceProvider类的boot方法中使用useLangPath方法硬编码您的语言路径。

# app/Providers/AppServiceProvider.php

public function boot()
{
    app()->useLangPath(base_path('lang'));

    // or app()->useLangPath(app()->basePath('lang'));
}

0
根据文档,您应在 config/app.php 中使用 'locale' => 'pt_BR',并将语言文件夹命名为 lang/pt_BR/messages.php,(下划线)而不是 pt-BR。

对于按领土区分的语言,您应根据 ISO 15897 命名语言目录。例如,应使用 en_GB 代替 en-gb 作为英国英语。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接