请教一下各位大佬 这种国际化多语言版本怎么设计的喃?

请求的时候 根据字段返回不同语言,大概需要翻译成30多种语言,这种怎么设计数据库,有没有比较好的方案?
lang=zh 返回如下:

{
    "status": "success",
    "code": 200,
    "data": [
        {
            "id": 1,
            "name": "全球",
            "logo": null
        },
        {
            "id": 2,
            "name": "欧洲",
            "logo": null
        }
    ],
    "error": null
}

传:lang=en 返回如下:

{
    "status": "success",
    "code": 200,
    "data": [
        {
            "id": 1,
            "name": "World",
            "logo": null
        },
        {
            "id": 2,
            "name": "Europe",
            "logo": null
        }
    ],
    "error": null
}
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

两种方案:一种是把字段所有翻译存储为 JSON,根据当前语言输出不同的翻译。第二种就是将每种语言设计一个字段。

看下这个包 github.com/spatie/laravel-translat...

1年前 评论

语言很少的话每种语言单独一个字段

id name_zh name_en
1 全球 World
2 欧洲 Europe

语言很多的话按行存储

id name lang
1 全球 zh
1 World en
2 欧洲 zh
2 Europe en

还有一种是用json格式存储

id name
1 {“zh”: “全球”, “en”: “World”}
2 {“zh”: “欧洲”, “en”: “Europe”}

个人推荐第二种

1年前 评论
tiantian10000 (楼主) 1年前

建议把 name 存一个字段,多语言名称以 json 方式存一个字段,例如 name 和 names。

$local = App::getLocal();
$name = Arr::get($model->names, $local, $model->name);

这种方式以最简单的方式实现对多语言名称的展示以及兼容如果某个语言不存在的情况。

1年前 评论
tiantian10000 (楼主) 1年前

之前看到论坛有个公司类似宣传的博客:BeikeShop
系统文件 就是用 laravel 的多语言那个功能
数据库的话,可以下载看看他的设计思路

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!