我正在尝试在Visual Force页面上本地化selectOptions。
这是.class代码段:
List<SelectOption> options = new List<SelectOption>();
List<MyOption__c> dropDownValues = [SELECT Id, Display_Label_Name__c FROM MyOption__c];
for (MyOption__c val : dropDownValues) {
// Display_Label_Name__c field is the label from *.labels that needs to be translated
options.add(new SelectOption(val.Id, val.Display_Label_Name__c));
}
以下是.page代码段:
<apex:selectList value="{!myVal}">
<apex:selectOptions value="{!options}"/>
</apex:selectList>
现在,下拉列表显示Display_Label_Name__c详细信息。我试图看看如何从.labels文件中显示翻译版本。可能吗?如果没有,那有什么作用?
感谢您的回复!
答案 0 :(得分:0)
页面文字的所有本地化都可以使用Custom Labels完成。
但是对于您的情况,您从自定义对象中提取选择选项文本。如果预计选择列表的值不会频繁更改,每周不到一次,那么我将更改为使用自定义标签。
否则,您将失去Salesforce自动语言选择的价值,并且必须自己实施。
我建议扩展自定义对象MyOption__c
以包含所有受支持语言的列。您可以使用if / else块或dynamic apex来选择选择选项文本。
使用Dynamic Apex的示例
string language = ParseForSupportedLangauges(UserInfo.getLanguage()); // includes __c
list<sobject> dropDownValues = Database.query('SELECT Id, '+language+' FROM MyOption__c');
for (sobject val : dropDownValues) {
options.add(new SelectOption(val.get('Id'), val.get(language)));
}
ParseForSupportedLangauges()
将是一种自定义方法,用于检查支持的语言并在必要时分配默认值。
修改强>
原来有一个解决方案:在你需要它之前不要找东西,对吗?
在Spring '12中引入的是动态选择标签来显示suing数组语法的能力。此外,还添加了从控制器创建visualforce组件的功能,但使用数组语法就足以解决您的问题。此方法允许您使用MyOption__c
的查询结果选择所需的标签。
在visualforce中使用repeat来循环查询结果
<apex:repeat value="{!displayResultsValues}" var="labelName">
<apex:outputText value="{!$Label[labelName]}"/>
</apex:repeat>