2

我正在尝试在 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 文件中的翻译版本。是否可以?如果没有,解决方法是什么?

谢谢您的反馈!

4

1 回答 1

0

页面文本的所有本地化都可以使用自定义标签完成。

  1. 使用您需要的语言启用翻译工作台。
  2. 为页面上的所有可本地化文本创建标签。
  3. 用标签替换页面文本。
  4. 为每个标签添加翻译。
  5. 更改您的个人资料语言以进行测试。

但是对于您的情况,您从自定义对象中提取选择选项文本。如果选择列表的值预计不会频繁更改,每周少于一次左右,那么我会改为使用自定义标签。

否则,您将失去 Salesforce 自动语言选择的价值,并且必须自己实施某些东西。

我建议扩展自定义对象MyOption__c以包含所有受支持语言的列。您可以使用 if/else 块或动态顶点来选择选择选项文本。

使用动态 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 中引入了动态选择标签以显示调用数组语法的能力。此外,还添加了从控制器创建 visualforce 组件的功能,但使用数组语法就足以解决您的问题。此方法允许您使用来自 的查询结果来选择所需的标签MyOption__c

在visualforce中使用repeat循环查询结果

<apex:repeat value="{!displayResultsValues}" var="labelName">
<apex:outputText value="{!$Label[labelName]}"/>
</apex:repeat>

这是一篇很好的文章来展示用法和语法。

于 2013-02-21T02:21:52.617 回答