gpt4 book ai didi

php - 使用 mysql/PHP 进行本地化

转载 作者:行者123 更新时间:2023-11-29 04:54:39 25 4
gpt4 key购买 nike

我目前正在使用 PHP 和 MySQL 构建一个多语言网站,并且想知道关于我的数据模型的最佳本地化方法是什么。每个表都包含需要翻译成多种语言的字段(例如 namedescription....)。

第一个想法是为每种语言创建一个字段(例如 name_enname_dename_fr)并从 PHP 中检索适当的字段使用变量(例如 $entry['name_' . LANGUAGE])。虽然它可行,但我认为这种方法有很多缺点:
- 你需要每个字段出现的次数与你的语言一样多(记住你可以有 en-US、en-CA、en-GB...)
-如果你添加或删除语言,你需要相应地修改数据库结构
-如果您有未翻译的字段,它们仍然会为每个看起来不是很优化的条目创建

第二个想法是创建一个翻译表,可用于存储数据库中任何表的任何字段的翻译:

----------------translation----------------id  INTtable_name VARCHARfield_name VARCHARvalue VARCHARlanguage_id VARCHAR

table_namefield_name 将允许识别翻译的是哪个表和哪个字段,而 language_id 将指示翻译的语言为了。这个想法是创建模型,根据用户选择的语言,将可翻译字段(例如 namedescription)的值替换为相应的翻译。

您能看出这种方法的缺点吗?您有什么建议要提出吗?

谢谢。

最佳答案

主要缺点是您通过将表名和字段名等元数据存储为应用程序数据来破坏关系模型。您的查询会太丑陋且无效。

另一个缺点是您只能使用一种数据类型的可翻译数据。您的表结构将定义

value VARCHAR(255)

这意味着您将始终在 VARCHAR(255) 中存储需要较小字段的数据。如果你想让它更通用来存储大文本,你需要定义它

value TEXT

更糟糕的是。

流行的模型如下。对于每个实体,您定义不依赖于语言的字段和依赖于语言的字段,并始终创建 2 个表。例如:

products
--------
id
price
status
picture

products_translations
--------
product_id
language_id
name VARCHAR(100)
description TEXT

这是正确的关系方法。当然,它也有缺点,主要是您总是会连接 2 个表来获取项目,并且添加/更新数据变得有点复杂。

关于php - 使用 mysql/PHP 进行本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7783302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com