database - Laravel - 从数据库获取后翻译数据或在数据库中翻译文本?
问题描述
我想用 Laravel 建立一个多语言网站。
这样做是否是个好主意:
- 使用从数据库获取的数据翻译字符串
trans()
?
或者
- 每种语言都有三列,标题不同?
例如,在 1 号中,我有:
ID - title
1 - hello
2 - how_are_you
$texts = Text::all();
$translatedText = trans('somefile.'.$texts[0]->title);
对于 2 号,我有:
ID - title_fa - title_en - title_ar
1 - درود - Hello - سلام
2 - خوبی؟ - How are you - کیف احوالک؟
$texts = Text::all();
$translatedText = $texts[0]->title_fa;
从不同的方面来看,哪一个更好?
解决方案
它取决于您的要求和您想要更改的数据量。两者都有自己的优点和缺点。
1.使用翻译文件:
您的数据库将是干净的,您无需担心条件字段的显示。所以只有有效数据才会没有冗余数据。
如果您对文本不确定,则很难添加关于该文本的翻译。
2.使用数据库:
如果您愿意,您可以更灵活地从 UI 界面动态更改/更新翻译的文本。
您可以在设置属性值时添加条件,Accessor
因此无需担心刀片内部。
您无需担心字段内容,因为会有单独的翻译字段。
如果您拥有大量数据,则数据库性能可能会受到影响。
因此,根据您的应用要求,您可以选择最适合您的方法。
最后,如果您使用数据库方法,您应该创建不同的翻译表,而不是在同一个表中插入列。
就像您有 5 个字段table1
需要保留 3 个字段的翻译,那么您应该table1_translation
使用这 3 个字段创建不同的表,并且只保留 2 个字段table1
推荐阅读
- c++ - convert string to double 结果与strtod不一致
- flutter - 如何访问 Firestore 中的嵌套项目?
- css - vue / nuxt - 从 API 导入 CSS 并插入到组件中
- android - java.net.UnknownServiceException:网络安全策略不允许与 t.main.wedeep.com.cn 进行 CLEARTEXT 通信
- angular - 尝试对 Angular 进行 docker 化时出现 Dockerfile 错误 - 没有这样的文件或目录
- sql - 正则表达式查找字符串中的特定字符
- grafana - 如何捕获 GRAFANA 刷新按钮
- reactjs - 如何将 React-number-format 应用于反应中的一组数字
- database - Flutter + 全局变量还是 SQL?
- c# - 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序