如何使用 Laravel 翻译字符串?这是行不通的

Phi*_*ine 5 laravel

我不知道我做错了什么。我有它在 resources/lang/de/de.json 但不知怎的它就是不起作用......

我用它测试了

Route::get('/', function () {
    app()->setLocale('de');
    echo __('good');
    dd(app()->getLocale());
    return view('welcome');
});
Run Code Online (Sandbox Code Playgroud)

我得到:

good
"de"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Tim*_*wis 7

翻译并不完全是这样的。您不能只提供一个字符串并期望对其进行有效的翻译。您需要正确定义和引用它们。

在 中resources/lang,默认情况下您应该有一个文件夹en,其中可以包含任意数量的文件。根据您的情况,为 添加一个general.php,内容如下:

<?php return [
  "good" => "good"
];
Run Code Online (Sandbox Code Playgroud)

现在,添加相应的de文件夹和文件(resources/lang/de/general.php):

<?php return [
  "good" => "gut"
];
Run Code Online (Sandbox Code Playgroud)

现在,当调用__("general.good")(或trans("general.good"),取决于 Laravel 版本)时,根据您当前的情况,locale您应该得到"good""gut"

// Default locale is `en` unless overridden
echo __("general.good"); // "good"
app()->setLocale("de");
echo __("general.good"); // "gut"
Run Code Online (Sandbox Code Playgroud)

注意:每当翻译失败时,它都会逐字回显您尝试翻译的任何内容,因此app()->setLocale("es); echo __("general.good");会回显,因为未定义"general.good"翻译文件夹/文件。es.general.good

编辑:

在意识到我们正在尝试使用翻译字符串后,我注意到与示例中提供的路径相比,当前路径de.json有点偏离:

/resources/lang/de/de.json
/resources/lang/es.json
Run Code Online (Sandbox Code Playgroud)

似乎使用翻译字符串时,.json文件要保存在/resources/lang目录中,而不是保存在特定于语言的子目录中。