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

问题描述 投票:0回答:6

假设在我的

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)版本将会回归

通用代币

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

提前致谢!

laravel laravel-4 translation
6个回答
17
投票

仅在 Laravel 4 中,您可以使用

Lang::has()
,如下所示,这里是 文档

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

    // line exists.

} else {

   // line not exist.

}

14
投票

在当前的 Laravel 版本中,你可以像这样使用

trans
助手:

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

7
投票

这个问题有点老了,但根据版本 5.8,你可以简单地检查如下:

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

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

用于嵌套翻译


3
投票

您可能需要编写一个类似于下面的帮助程序来帮助进行后备:

/**
 * 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 版本。


0
投票

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

看起来很麻烦,只是为了找到另一个“哎呀!出问题了!”的原因。在您的网站上。仅当遇到翻译时才会出现异常。

另一个解决方案:您可以使用 barryvdh/laravel-translation-manager 软件包,它有一个翻译服务提供商,可以记录丢失的翻译密钥和一个用于管理翻译的 Web 界面。它将记录每个区域设置缺少的翻译键,并让您通过网络界面编辑它们。

设置简单,修改方便。所以你可以用抛出异常来替换日志记录。


0
投票

Laravel v10.33.0 现在提供了处理缺失翻译字符串的功能:https://laravel.com/docs/10.x/localization#handling-missing-translation-strings

© www.soinside.com 2019 - 2024. All rights reserved.