报告
在我从事的一个项目中,有一个选择字段定义了不会更改的值。因此,为了列出此选择中的项目,我决定创建一个枚举类,然后描述这些值。但是,该项目需要支持英语和西班牙语,并且选择选项的文本需要适应这一点,同时又不丢失对相应枚举项的引用。换句话说,如果我选择了“马”这个项目,我需要系统知道这个项目仍然是“马”,即使它显示为“马”或“caballo”。为了保持数据的完整性,我在项目中创建了以下集成枚举和语言的结构。
什么是枚举
简单介绍一下。从 PHP 8.1 版本开始,引入了一个特殊的类用于枚举值。实际上,这意味着我们可以创建一个属性值恒定的类。一个例子是状态,因为如果你让它自由,在整个代码中你可能会有一个“活动”状态,另一个“活动”,另一个“活动”等等。但是,如果您将状态绑定到枚举并使用枚举而不是键入字符串,我将确保代码中任何位置的值将始终是枚举中的值。
enum Status { case ATIVO = "ativo"; case INATIVO = "inativo"; case PENDENTE = "pendente"; }
枚举和语言
由于枚举是一个类,因此我可以正常为我的类创建方法。因此,我创建了 display() 方法,该方法将负责处理枚举值的可视化,使其适应用户正在使用的语言,但不会更改枚举项中的原始值。也就是说,对于用户来说,状态出现“待处理”,或者“待处理”,或者“待处理”;但在数据库中,它仅保存为“待处理” - 这是原始值,通过它我可以从枚举中获取我的项目,并从该项目使用显示方法将其翻译给用户显示。
但在展示示例之前,先介绍一下 Laravel lang。 lang 是项目根目录中的一个文件夹,用于存储项目将支持的翻译。每种语言都有一个文件夹,该文件夹中包含翻译上下文文件。这些文件有一个数组,其中键是单词的表示,值是相应语言的翻译。
配置显示方式
在 lang 文件夹中,我将为每个语言文件夹创建一个 status.php 文件,其中包含以下数组:
value => "Ativo", Status::INATIVO->value => "Inativo", Status::PENDENTE->value => "Pendente", ];
我将数组值更正为相应语言的相应翻译。
我的显示方法将获取这些 status.php 文件中枚举项的翻译并返回该值。
public function display(): string { return trans('status.'.$this->value); }
使用示例:
// EN echo Status::ATIVO->display(); // Active // PT_BR echo Status::INATIVO->display(); // Inativo // ES echo Status::PENDENTE->display(); // Pediente
结论
这样,我保证我的枚举值在代码中保持不变,但它使用显示方法适应用户的语言,而不会丢失数据完整性。如果我向系统添加新语言,它也保持灵活性。希望您喜欢这一期,下次再见。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3