Apex项目多字段翻译转换优化方案咨询(Python背景)
更高效的Apex多字段翻译转换方案
既然你有Python背景,肯定熟悉DRY(Don't Repeat Yourself)原则——这种为每个字段单独定义Map和获取方法的方式,在字段数量多的时候确实冗余且维护成本高。这里有几个逐步优化的方案,帮你简化代码:
方案1:集中管理翻译映射 + 通用翻译方法
把所有字段的翻译规则集中到一个全局映射结构中,再封装一个通用方法来处理值的转换,避免重复代码。
实现代码
// 集中存放所有字段的翻译映射,外层key是目标字段API名 private static final Map<String, Map<String, String>> TRANSLATION_MAPS = new Map<String, Map<String, String>>{ 'Usage_Status__c' => new Map<String, String>{ 'Inquilino' => 'Tenant', 'Vacío' => 'Empty', 'Propietario' => 'Owner' }, 'Loan_Eligibility__c' => new Map<String, String>{ 'Adecuado' => 'Suitable', 'No Adecuado' => 'Not_Suitable', 'Desconocido' => 'Unknown' }, // 在这里添加剩下13个自定义字段的翻译映射即可 }; /** * 通用翻译方法:根据字段名和源值获取翻译后的值 * @param fieldName 目标字段的API名 * @param sourceValue 待翻译的源值 * @return 翻译后的值,若找不到映射则返回源值(可根据需求修改为null或自定义默认值) */ public static String translateValue(String fieldName, String sourceValue) { Map<String, String> fieldTranslationMap = TRANSLATION_MAPS.get(fieldName); return fieldTranslationMap != null ? fieldTranslationMap.get(sourceValue) : sourceValue; }
使用方式
现在赋值逻辑会变得非常简洁,15个字段只需要一行代码处理一个:
String usageStatusES = 'Inquilino'; String loanEligibilityES= 'Adecuado'; project.Usage_Status__c = translateValue('Usage_Status__c', usageStatusES); project.Loan_Eligibility__c = translateValue('Loan_Eligibility__c', loanEligibilityES); // 其他字段依此类推...
方案2:批量赋值优化(进一步减少重复)
如果你的源值是批量获取的,可以再封装一个批量赋值方法,一次性处理所有字段:
实现代码
/** * 批量为对象字段赋值翻译后的值 * @param targetObj 要赋值的目标SObject(比如你的project对象) * @param sourceValues 源值映射,key是字段API名,value是待翻译的源值 */ public static void applyTranslations(SObject targetObj, Map<String, String> sourceValues) { for (String fieldName : sourceValues.keySet()) { String translatedValue = translateValue(fieldName, sourceValues.get(fieldName)); if (translatedValue != null) { targetObj.put(fieldName, translatedValue); } } }
使用方式
把所有源值整理到一个Map中,一次性完成赋值:
Map<String, String> sourceValues = new Map<String, String>{ 'Usage_Status__c' => 'Inquilino', 'Loan_Eligibility__c' => 'Adecuado' // 添加其他字段的源值... }; applyTranslations(project, sourceValues);
方案3:进阶版——用自定义设置管理翻译(无需改代码更新)
如果翻译规则需要频繁调整,或者希望非开发人员也能维护,可以使用Salesforce的自定义设置来管理翻译映射,这样不用修改代码就能更新翻译内容。
步骤1:创建自定义设置
- 在Salesforce后台创建一个"列表类型"的自定义设置,比如命名为
Translation_Setting__c - 添加三个字段:
Field_Name__c(文本类型,存储目标字段API名)Source_Value__c(文本类型,存储待翻译的源值)Translated_Value__c(文本类型,存储翻译后的值)
- 在自定义设置中添加所有字段的翻译规则数据
步骤2:代码中加载自定义设置数据
private static Map<String, Map<String, String>> TRANSLATION_MAPS; // 静态初始化块,加载自定义设置中的翻译数据 static { TRANSLATION_MAPS = new Map<String, Map<String, String>>(); for (Translation_Setting__c setting : [SELECT Field_Name__c, Source_Value__c, Translated_Value__c FROM Translation_Setting__c]) { if (!TRANSLATION_MAPS.containsKey(setting.Field_Name__c)) { TRANSLATION_MAPS.put(setting.Field_Name__c, new Map<String, String>()); } TRANSLATION_MAPS.get(setting.Field_Name__c).put(setting.Source_Value__c, setting.Translated_Value__c); } } // 复用方案1中的translateValue和applyTranslations方法即可
这种方式的优势是:新增或修改翻译规则时,直接在后台操作自定义设置,无需修改代码和部署,非常适合团队协作或多语言场景。
内容的提问来源于stack exchange,提问作者Brandon Bishop
相关产品推荐
相关产品推荐

