检查laravel'中是否存在线路;s trans()

检查laravel'中是否存在线路;s trans(),laravel,laravel-4,translation,Laravel,Laravel 4,Translation,假设在mylang/en/general.php中有多个翻译行,例如: "token" => "This password reset token is invalid.", "sent" => "Password reminder sent!", "reset" => "Password has been reset!", 但是在我的lang/de/general.php中,这些行丢失了 所以稍后,当我使用Lang::get('general.token')或简单地使用

假设在my
lang/en/general.php
中有多个翻译行,例如:

"token" => "This password reset token is invalid.",

"sent" => "Password reminder sent!",

"reset" => "Password has been reset!",
但是在我的
lang/de/general.php中,这些行丢失了

所以稍后,当我使用
Lang::get('general.token')
或简单地使用
trans('general.token')

英文版本将返回

此密码重置令牌无效

德语(de)版本将返回

通用令牌

有什么方法可以处理“translation not found”函数,比如过滤器,但不为其创建特殊类?例如,当一行没有翻译时,我想抛出一个异常


提前谢谢

仅在Laravel4中,您可以使用
Lang::has()
,如下所示


您可以创建自己的TranslationServiceProvider和Translator,并重写Translator中的get()方法,以便在父::get()返回与传入的翻译键相等的翻译字符串时引发异常。@lang()和trans()函数都调用转换器的get()方法

似乎有很多麻烦,只是为了在你的网站上找到另一个“哎哟!出问题了!”的原因。只有在遇到翻译时,才会出现异常

另一个解决方案:您可以使用barryvdh/laravel translation manager软件包,它有一个记录缺少的翻译密钥的翻译服务提供商和一个用于管理翻译的web界面。它将记录每个语言环境中缺少的翻译键,并允许您通过web界面编辑它们


它易于设置和修改。因此,您可以通过抛出异常来替换日志记录。

您可能希望编写一个类似于下面的帮助程序,以帮助解决回退问题:

/**
 * Makes translation fall back to specified value if definition does not exist
 *
 * @param string $key
 * @param null|string $fallback
 * @param null|string $locale
 * @param array|null $replace
 *
 * @return array|\Illuminate\Contracts\Translation\Translator|null|string
 */
function trans_fb(string $key, ?string $fallback = null, ?string $locale = null, ?array $replace = [])
{
    if (\Illuminate\Support\Facades\Lang::has($key, $locale)) {
        return trans($key, $replace, $locale);
    }

    return $fallback;
}

注意:helper仅适用于PHP7.1(它支持可为null的类型)。如果低于7.1,请将其调整为您的PHP版本。

此问题有点过时,但根据5.8版,您只需检查以下内容:

array_key_exists('your-word-key', trans('your-file'))


对于当前Laravel版本中的嵌套翻译,您只需使用
trans
helper,如下所示:

@if (trans()->has('general.token'))
   {{ trans('general.token') }}
@endif

但是,如何将保存常规文件中所有翻译的数组传递到其中呢?我找不到在Laravel中在何处或如何创建助手,因为文档中没有提到它。如果有人有相同的问题,我会使用本教程:
array_key_exists('your-word-key', trans('your-file.array_key'))
@if (trans()->has('general.token'))
   {{ trans('general.token') }}
@endif