是否可以从包含(.)点的语言文件中获取翻译?
例如,语言目录看起来像
/lang
/en
pagination.php
phone.history.php
/es
pagination.php
phone.history.php
phone.history.php 文件包含点,并希望从 phone.history.php 文件中获取键“名称”的翻译。
Lang::get('phone.history.name')
它不起作用。
最佳答案
实际上用于翻译的 Laravel key 只能包含一个点 。
为了工作,那个点的功能是分隔翻译文件路径(相对于语言目录)来自翻译数组键。这是因为 Translator
类扩展了 Illuminate\Support\NamespacedItemResolver
类,parses the key使用以下逻辑:
- 首先它确定是否存在命名空间(由
::
表示)并提取它。 - 然后它将 key 拆分为一个
组
(这是相对文件路径)和一个item
(这是翻译数组 key )。
所以在你的情况下,因为没有命名空间,当你使用它时:
Lang::get('phone.history.name')
结果如下:
- 文件名为
phone
- 翻译数组键将是
history
(而不是name
)
而且由于您的语言目录中没有 phone.php
,因此它不会工作。
所以你在这里有两个选择:
在你的文件名中使用另一个字符,这样翻译参数中只有一个点,比如
/lang/en/phone_history.php
然后使用Lang::get( 'phone_history.name')
。如果您想对一些翻译文件进行分组,请使用子目录,例如
/lang/en/phone/history.php
然后使用Lang::get('phone/history.name')
(不幸的是,正如我上面所说,您只能使用一个点作为分隔符,因此您不能像配置文件那样使用多级点符号Lang: :get('phone.history.name')
).
关于php - Laravel:从包含点的语言文件中获取翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36364034/