Laravel:从包含dot的语言文件中获取翻译

时间:2016-04-01 19:07:13

标签: php laravel laravel-5 laravel-5.1 laravel-5.2

是否可以从包含(。)dot?

的语言文件中进行翻译

例如,语言目录看起来像

/lang
      /en
          pagination.php
          phone.history.php

     /es
          pagination.php
          phone.history.php

phone.history.php文件包含点,并希望获得关键字'名称'来自phone.history.php文件。

Lang::get('phone.history.name')

它没有用。

2 个答案:

答案 0 :(得分:2)

实际上,用于翻译的Laravel键只能包含一个点 .才能工作,该点的功能是分离翻译文件路径(相对于语言目录) )从翻译数组键。那是因为Translator类使用以下逻辑扩展Illuminate\Support\NamespacedItemResolverparses the key

  • 首先,它确定是否存在名称空间(由::表示)并将其解压缩。
  • 然后继续将密钥拆分为group(相对文件路径)和item(转换数组密钥)。

因此,在您的情况下,因为没有命名空间,所以当您使用它时:

Lang::get('phone.history.name')

结果如下:

  • 文件名为phone
  • 翻译数组键将为history(而不是name

由于您的语言目录中没有phone.php,因此无效。

所以你有两个选择:

  1. 在文件名中使用其他字符,因此翻译参数中只有一个点,例如/lang/en/phone_history.php,然后使用Lang::get('phone_history.name')

  2. 如果要对某些翻译文件进行分组,请使用子目录,例如/lang/en/phone/history.php,然后使用Lang::get('phone/history.name')(不幸的是,正如我上面所说,您只能使用一个点作为分隔符,所以你不能像配置文件Lang::get('phone.history.name')那样使用多级点符号。

答案 1 :(得分:0)

实际上有第三个选择是使用点分键名。因此,您可以在/lang/en/phone.php内设置'history.name' => 'John Doe',然后使用trans('phone.history.name')进行检索。