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. プロフィールの言語を変更してテストします。

しかし、あなたの場合、選択オプションのテキストをカスタムオブジェクトから引き出します。選択リストの値が頻繁に変更されることが予想されない場合 (1 週間に 1 回程度)、カスタム ラベルの使用に変更します。

そうしないと、Salesforce の自動言語選択の価値が失われ、自分で何かを実装する必要があります。

MyOption__cサポートされているすべての言語の列を持つようにカスタム オブジェクトを拡張することをお勧めします。if/else ブロックまたは動的頂点を使用して、選択オプション テキストを選択できます。

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 で導入されたのは、配列構文を使用して表示するラベルを動的に選択する機能です。また、コントローラーから visualforce コンポーネントを作成する機能が追加されましたが、問題には配列構文を使用するだけで十分です。この方法では、 からのクエリ結果を使用して、必要なラベルを選択できますMyOption__c

Visualforce で繰り返しを使用してクエリ結果をループする

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

これは、使用法と構文を示す良い記事です。

于 2013-02-21T02:21:52.617 に答える