Apex 中类似字典的对象

Dictionary like object in Apex

我现在正在为一个项目使用 Apex(通常有 Python 背景)。我需要做一些翻译类型转换。

现在我正在做类似的事情,

#normally I am getting these values from a callout
String usageStatusES = 'Inquilino';
String loanEligibilityES= 'Adecuado';


public static Map<String, String> getUsageStatus() {
    return new Map<String, String>{
        'Inquilino' => 'Teanant',
        'Vacío' => 'Empty',
        'Propietario' => 'Owner'
    };
}

public static Map<String, String> getLoanEligibility() {
    return new Map<String, String>{
        'Adecuado' => 'Suitable',
        'No Adecuado' => 'Not_Suitable',
        'Desconocido' => 'Unknown'
    };
}

project.Usage_Status__c = getUsageStatus().get(usageStatusES);
project.Loan_Eligibility__c = getLoanEligibility().get(loanEligibilityES);

问题是 project 有大约 15 个自定义字段,并且对所有 15 个都这样做 感觉 效率不高。有更好的方法吗?

您可以阅读有关 Translation Workbench 的内容。它允许您以 org 的主要语言(例如英语)存储选项列表值,以主要语言正常使用它们而没有整个麻烦,但对于 UI 中的用户,它会显示为西班牙语和您配置的任何其他内容.在页面布局、列表视图、报告、电子邮件等所有方面。

您的情况似乎有点不同,您的组织主要是用英语配置的,但标注结果返回的是西班牙语并且您无法控制数据源?看起来你仍然可以启用 Workbench 并使用一些内置功能,它只需要有点低音......

启用workbench(在沙盒中,而不是直接在产品中),为项目对象上的选项列表提供西班牙语翻译。确保您的用户配置了西班牙语首选项。然后尝试拉取所有选项列表值的 describe 调用:

Schema.DescribeFieldResult dfr = Project__c.Usage_Status__c.getDescribe();
for(Schema.PicklistEntry f : dfr.getPicklistValues()) {
    System.debug((f.getLabel() + ': ' + f.getValue());
}      

它可能看起来有点奇怪,因为您需要的是反向匹配,从标签(将在集成的 运行 用户西班牙语中)到实际保存在数据库中的值(我猜是英语)。但是你可以使用这段代码来构建你的地图,这意味着当系统管理员添加新值时它应该可以正常工作(只要 he/she 记得也翻译它)。

另一件值得检查的事情是自定义标签,甚至可能是用于存储映射的自定义设置(如果它必须工作,即使说喜欢德语的用户会进行标注,它也可能很方便)。自定义元数据(是的,我知道我给了你很多术语来阅读)......这些都会带来缺点,即维护解决方案的人可能必须修改实际的选择列表+设置中的其他一些区域。