0

我正在尝试在 laravel 8 的刀片模板中使用 php foreach 循环代码中字符串的本地化检索。

在 foreach 循环中,我试图$item['label']使用 laravel 具有的语言本地化来操作一个名为并等同于翻译它的值的值。

这是我当前的代码。

@foreach ($items as $item)
    @php
    $item['label'] = "{{ __($item['label']) }}"
    @endphp
@endforeach

但我得到一个错误

ParseError 语法错误,意外 '' (T_ENCAPSED_AND_WHITESPACE),期望 '-' 或标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)

首先,我可以首先使用 a{{ __ ('string') }}@lang('string')inside a@php吗?如果我不能,还有其他方法可以解决这个问题吗?

非常感谢!

4

3 回答 3

1

$items在使用 foreach 时,您无法在此处更改其值,如果数组不是 stdClass ,这将起作用

@foreach ($items as $key => $item)
    @php
    $items[$key]['label'] = __($item['label']);
    @endphp
@endforeach
于 2020-12-02T10:09:14.990 回答
1

@php 和 @endphp 是刀片语法,和写法一样:

<?php ?>

所以你可以这样做:

<?php  
  echo __('profile/username'); 
?>

或者您可以使用 Blade 模板引擎编写它:

@php
   echo __('profile/username'); 
@endphp

要打印项目,您可以这样做:

@foreach ($items as $key => $item)         
     {{  __($item) }}
@endforeach

这里有一个数据示例:

@php 
 $items = ['engine_1' => ['label' => 'Google'], 'engine_2' => ['label' => 'Bing']];
@endphp

@foreach ($items as $key => $item)         
     {{  __($item['label']) }}
@endforeach

// The output will be => Google Bing

为了保存项目的翻译,删除“{{ }}”并使用键来检测应用更改的索引,如下所示:

@foreach ($items as $key => $item)
   @php     
     $items[$key]['label'] =  __($item['label'])
   @endphp
@endforeach

请注意@Nurbek Boymurodov 写给您的内容,您需要使用 $key,因为这样做不会覆盖 foreach 循环中的数据:

@foreach ($items as $key => $item)
    @php
      $item['label'] =  __($item['label']); // Wrong way of overriding data
    @endphp
@endforeach
于 2020-12-02T10:10:35.470 回答
0

谢谢,@Nurbek Boymurodov!

是你的评论回答了我的问题。

这是现在的代码:

@foreach ($items as $item)
    @php
    $item['label'] = __($item['label']);
    @endphp
//other codes where I used the manipulated $item['label']
@endforeach

通过删除{{ }}我已经操​​纵了我想要的值,谢谢!

于 2020-12-02T10:25:30.190 回答