首页 > 解决方案 > 如何在 Laravel 的动态菜单上制作(或构思)多种语言?

问题描述

我想在 Laravel 上制作动态菜单。菜单级别将存储在数据库中。但我的问题是,这些菜单必须能够切换到其他语言。所以我不确定laravel-localization是否有能力?下面是我的愿望表。

menuid       languageA(English)          languageB            languageC
1             menuname1                   www                  xxx
2             menuname2                   yyy                  zzz

任何建议或指导将不胜感激,谢谢

标签: phplaravel

解决方案


我喜欢Spatie 的想法。

这个包包含一个使 Eloquent 模型可翻译的特性。翻译存储为 json。不需要额外的桌子来容纳它们。

桌子

id       name
1        {'en' => 'Home', 'id' => 'Beranda'}
2        {'en' => 'About', 'id' => 'Tentang'}

模型

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;

class Menu extends Model
{
    use HasTranslations;

    public $translatable = ['name'];
}

创建模型

您可以在创建模型时立即设置翻译。这是一个例子:

$menu = Menu::create([
   'name' => [
      'en' => 'About',
      'id' => 'Tentang'
   ],
]);

获得翻译

获取当前语言环境的翻译的最简单方法是获取已翻译属性的属性。

$menu->name;

推荐阅读