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
文件中。 来自文档的示例是:
/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.');
我很高兴这不能直接回答您的问题,但我想包含更多可以在评论中添加的信息。如果您可以添加有关您选择的密钥格式的注释,以及更改文件类型来存储字符串会发生什么,这可能会提供更多信息。