如果我们遵循枚举本地化约定,ABP 在哪些情况下可以自动本地化枚举

Posted

技术标签:

【中文标题】如果我们遵循枚举本地化约定,ABP 在哪些情况下可以自动本地化枚举【英文标题】:what cases in which ABP can automatically localize the enums if we follow enum localization conventions 【发布时间】:2021-03-09 13:43:24 【问题描述】:

我尝试在 DTO ABP 本地化文档说中本地化枚举属性

我们更喜欢针对特定文本类型的一些约定; 添加菜单:菜单项的前缀。 使用 Enum:: 命名约定来本地化枚举成员。当你这样做时,ABP 可以在某些适当的情况下自动本地化枚举。

ABP Documentation

但是我遵循这个约定并且值没有本地化返回枚举值

我的问题:是否有自动本地化枚举的方法或 ABP 自动本地化枚举的情况

【问题讨论】:

你可以在这里查看 abp-select 标签助手:docs.abp.io/en/abp/latest/UI/AspNetCore/Tag-Helpers/… 【参考方案1】:

CarType.cs: (枚举)

public enum CarType

    Sedan,
    Hatchback,
    Coupe


en.json: (本地化文件)


  "culture": "en",
  "texts": 
    "Enum:CarType:0": "Sedan Car",
    "Enum:CarType:1": "Hatchback Car",
    "Enum:CarType:2": "Coupe Car"
  

        

index.js: javascript用法)

var l = abp.localization.getResource("MyProject");
var localizationKey = "Enum:CarType:" + changeType;
var localized = l(localizationKey);

index.cshtml: (Razor 页面使用情况)

 var statuses = (from CarType ct in Enum.GetValues(typeof(ArticleContentSource))
                select new Id = (int)ct, Name=L[$"Enum:ContentSource:(int)ct "].Value )
                .ToList();

当在 MVC 项目中使用 ABP Tag Helpers 时,它会通过诸如“Enum:EnumName:Value": "localized text"”之类的约定自动本地化

CarCreateModel.cs: (模型)

 public class CarCreateModel
 
     [Required]
     [InputInfoText("Choose car type?")]
     public CarType MyCarType  get; set; 
 

index.cshtml: (MVC 页面)

 <abp-select asp-for="@Model.CarCreateModel.MyCarType"/>

【讨论】:

【参考方案2】:

我查看了实际代码,我认为文档至少部分不正确。

这是框架的代码:

$"Enum:enumType.Name.memberName",
$"enumType.Name.memberName",
memberName

所以,我认为正确的json文件格式是这样的:


  "culture": "en",
  "texts": 
    "Enum:CarType.Sedan": "Sedan Car",
    "Enum:CarType.Hatchback": "Hatchback Car",
    "Enum:CarType.Coupe": "Coupe Car"
  

【讨论】:

以上是关于如果我们遵循枚举本地化约定,ABP 在哪些情况下可以自动本地化枚举的主要内容,如果未能解决你的问题,请参考以下文章

JAVA除了要满足命名规则之外,常量和变量一般还要遵循哪些命名惯例和约定?

[Abp 源码分析]多语言(本地化)处理

[Abp 源码分析]十多语言(本地化)处理

Laravel 迁移命名约定

如何使用 abp 创建 module 并应用单独的数据库迁移

Abp v0.18.0 新版本: MVC Module 启动模板