【问题标题】:Laravel - Read all available languages, but all translations are GermanLaravel - 阅读所有可用语言,但所有翻译都是德语
【发布时间】:2019-11-28 07:44:20
【问题描述】:

我在laravel 有一个服务提供商,它从locale 读取所有可用的语言并将它们保存在缓存文件中。一切正常,但所有翻译都是德语。我希望以deen 的语言获得它们。 这是来自ServiceProvider的代码:

$minutes = 24 * 60;
Cache::remember('translations', $minutes, function () {
    $directories = array('de', 'en');
    $collection = new \stdClass;
    foreach ($directories as $directory) {
        $path = resource_path('lang/' . $directory);
        $allTranslations = collect(File::allFiles($path))->flatMap(function ($file, $directory) {
            return [
                ($translation = $file->getBasename('.php')) => trans($translation, array(), null, $directory),
            ];
        });
        $allModuleTranslations = collect(File::allFiles($path . '/modul'))->flatMap(function ($file, $directory) {
            return [
                ($translation = $file->getBasename('.php')) => trans('modul/' . $translation, array(), null, $directory),
            ];
        });
        $collection->$directory = $allTranslations->merge($allModuleTranslations);
    }
    return json_encode($collection);
});

谁能看到,为什么它会返回所有德语单词?

结果如下:

{
   de:
      auth:
         failed: "Diese Zugangsdaten wurden nicht in unserer Datenbank gefunden."
         throttle: "Zu viele Login Versuche. Versuchen Sie es bitte in :seconds Sekunden."
   en:
      auth:
         failed: "Diese Zugangsdaten wurden nicht in unserer Datenbank gefunden."
         throttle: "Zu viele Login Versuche. Versuchen Sie es bitte in :seconds Sekunden."
}

【问题讨论】:

    标签: laravel laravel-5 locale service-provider


    【解决方案1】:
    1. 您必须使用use 从父作用域导入$directory 变量,它不会通过flatMap() 回调传递

    2. trans 只有 3 个参数,但您传递了 4 个参数

        mixed trans(string $key, array $replace = [], string|null $locale = null)
    

    这应该可行:

    $minutes = 24 * 60;
    Cache::remember('translations', $minutes, function () {
        $directories = array('de', 'en');
        $collection = new \stdClass;
        foreach ($directories as $directory) {
            $path = resource_path('lang/' . $directory);
            $allTranslations = collect(File::allFiles($path))
                ->flatMap(function ($file) use ($directory) {
                    return [
                        ($translation = $file->getBasename('.php')) => trans($translation, array(), $directory),
                    ];
                });
            $allModuleTranslations = collect(File::allFiles($path . '/modul'))
                ->flatMap(function ($file) use ($directory) {
                    return [
                        ($translation = $file->getBasename('.php')) => trans('modul/' . $translation, array(), $directory),
                    ];
                });
            $collection->$directory = $allTranslations->merge($allModuleTranslations);
        }
        return json_encode($collection);
    });
    

    【讨论】:

    • 感谢您的解决方案。它现在在use ($directory) 的帮助下工作。但是修改trans函数没有成功。它只适用于我的 4 个参数。
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多