在laravel的trans()中检查行是否存在

时间:2015-03-23 12:49:45

标签: laravel laravel-4 translation

让我们在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)版将返回

  

general.token

有什么方法可以处理'未找到翻译'功能,比如过滤器但没有为它创建特殊类?例如,当一行没有翻译时,我想抛出一个异常。

提前致谢!

5 个答案:

答案 0 :(得分:12)

您可以使用Lang::has(),如下所示,此处为the doc

if (\Lang::has('general.token')) {

    // line exists.

} else {

   // line not exist.

}

答案 1 :(得分:2)

在当前的 Laravel 版本中,您可以像这样使用 trans 助手:

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

答案 2 :(得分:1)

您可能希望编写类似于下面的帮助程序来帮助回退:

/**
 * 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;
}

注意:帮助程序仅适用于PHP 7.1(支持可空类型)。如果它低于7.1,请将其调整为PHP版本。

答案 3 :(得分:0)

您可以创建自己的TranslationServiceProvider和Translator并覆盖转换器中的get()方法,以便在parent :: get()返回的转换字符串等于传入的转换键时抛出异常。 lang()和trans()函数调用转换器的get()方法。

看起来好像很麻烦只是为了得到另一个原因“哎呀!出了什么问题!”在您的网站上。只有在遇到翻译时才会收到异常。

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

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

答案 4 :(得分:0)

这个问题有点老了,但是根据5.8版本,您可以像这样简单地检查:

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

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

用于嵌套翻译