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

时间:2018-07-16 15:05:16

标签: laravel

我不知道我在做什么错。我在resources / lang / de / de.json中有它,但是以某种方式它不起作用...

我用

进行了测试
Route::get('/', function () {
    app()->setLocale('de');
    echo __('good');
    dd(app()->getLocale());
    return view('welcome');
});

我得到:

good
"de"

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

那不是翻译的工作原理;您不能只提供一个字符串并期望得到有效的翻译。您需要正确定义和引用它们。

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

<?php return [
  "good" => "good"
];

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

<?php return [
  "good" => "gut"
];

现在,在调用__("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"

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

编辑:

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

/resources/lang/de/de.json
/resources/lang/es.json

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