Laravel 翻译回退不起作用

问题描述 投票:0回答:1

Laravle 版本:'8.83.27'

如果本地化文件没有翻译密钥,则不使用后备 __() ,它会返回一个密钥而不是后备字符串

在 config/app.php 中我有:

'fallback_locale' => 'en' 

我有空的 json:

resources/lang/es.json

使用代码:

\App::setLocale('en');
$en = __('tg.lang.answer'); 
//get 'some answer text'
\App::setLocale('es');
$es = __('tg.lang.answer'); 
//get 'tg.lang.answer'

预计 $i 应该从 'en' 语言环境返回后备字符串。

我调试了vendor/laravel/framework/src/Illuminate/Translation/Translator.php 发现已处理后备“en”,但在某些 $group =“tg”中搜索关键字,但它不存在

php laravel-8
1个回答
0
投票

通常,如果您使用快捷键获取字符串来显示翻译,则翻译将存储在每种语言文件夹下的

php
文件中。 来自文档的示例是:

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

如果您使用

json
文件,则预计将使用完整字符串作为键,预计您要显示为 key 的完整字符串。文档中的示例是

{
    "I love programming.": "Me encanta programar."
}

您似乎使用了快捷键,但将字符串存储在

json
文件中。虽然这应该可行,但在阅读代码时可能会让其他 Laravel 开发人员感到困惑。

你的短键也很混乱,为什么你在键里加了多个句号?

当标准格式为

tg.lang.answer
时,您有
[file].[key]
,文档中的示例显示

echo __('messages.welcome');

它将在相应语言文件夹下的

welcome
文件中查找密钥
messages.php
。使用
json
文件的替代方法是将完整消息作为翻译函数的参数

echo __('I love programming.');

我很高兴这不能直接回答您的问题,但我想包含更多可以在评论中添加的信息。如果您可以添加有关您选择的密钥格式的注释,以及更改文件类型来存储字符串会发生什么,这可能会提供更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.