我需要laravel中的语言文件的层次结构。想象一下,我有以下语言文件/resources/lang/en/entity.php
<?php
return [
'show' => 'Show Item',
'view' => 'View Item',
'edit' => 'Edit Item',
'create' => 'Create a new Item',
];
现在我需要在/resources/lang/en/post.php上为post实体创建一个新文件,但我不想将entity.php文件中的所有文本复制到新文件中。我只需要为新实体更改create
消息。跟随之类的东西。
<?php
return [
// Inherit the rest of texts from entity.php
'create' => 'Create a new Blog Post',
];
反正有没有实现这个目标? 谢谢大家。
答案 0 :(得分:1)
如果您坚持在语言文件中使用类似继承行为的内容,那么我首先想到的第一个解决方案是使用array_merge
方法:
// entity.php
return [
'show' => 'Show Item',
'view' => 'View Item',
'edit' => 'Edit Item',
'create' => 'Create a new Item',
];
// post.php
$terms = (include 'entity.php')
return array_merge($terms, [
'create' => 'Create a new Blog Post',
];)
玩得开心:)
答案 1 :(得分:0)
function translate($trans, $fallback) {
return __($trans) === $trans ? __($fallback . '.' . explode('.', $trans)[1]) : __($trans);
}
然后像这样使用它:
translate('post.create', 'entity');
答案 2 :(得分:0)
除了拥有大量单独的语言文件之外,另一种方法是创建一个为元素分组标签的文件。例如,整个应用程序的所有按钮标签都可以存储在/resources/lang/en/buttons.php的文件中。您只需要更仔细地选择标签。 buttons.php的内容可以是
<?php
return [
'show_item' => 'Show Item',
'view_item' => 'View Item',
'edit_item' => 'Edit Item',
'create_new_item' => 'Create a new Item',
'create_new_blog_post' => 'Create a new Blog Post',
//add all labels here
];
然后,如果您在网站的任何位置需要按钮标签,可以从buttons.php文件中获取。例如,您的节目项按钮将是
<button type="button">{{ __('buttons.show_item') }}</button>