dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[Salesforce]翻訳機能を使って多言語化する〜カスタムラベル編〜

タイトル通り、Salesforceの翻訳機能を使って、ユーザの言語設定によって表示される内容が変わるようにしてみる。
Salesforceにはタブやオブジェクトなど様々な項目があり、それぞれについて多言語化の方法も異なるので、何回かに分けて紹介していけたら。

今回は「カスタム(表示)ラベル」を使ったサンプルです。

なお、この記事では
Salesforceの画面からではなく、ローカルでメタデータファイルを作成し、Force.com移行ツールを使ってデプロイする手順について説明してます。

Salesforceの画面から設定する方法については、この記事がすごくわかりやすいです。
(1~3回まであります)

SalesForceアプリケーションの多言語化手順①(環境設定編) | ぱーくん plus idea

カスタム表示ラベルって?

どこにある?

設定より

作成 > カスタム表示ラベル

にアクセス。

f:id:dackdive:20140530011444p:plain

カスタムラベルで何ができるの?

ApexやVisualforce内で使用することができる。

Apexで利用する場合

.clsファイル内で次のように利用する。

System.Label.[カスタムラベル名]
Visualforceで利用する場合

.pageファイル内で次のように利用する。

{!$Label.[カスタムラベル名]}

サンプルを作ってみる

必要なもの

  • カスタムラベル
  • 翻訳ファイル
  • Apex、Visualforce(表示用)

ディレクトリ構成

.
├── build.properties
├── build.xml
└── retrieveUnpackaged
    ├── classes
    │   ├── CustomLabelTranslationController.cls
    │   └── CustomLabelTranslationController.cls-meta.xml
    ├── labels
    │   └── CustomLabels.labels
    ├── package.xml
    ├── pages
    │   ├── CustomLabelTranslation.page
    │   └── CustomLabelTranslation.page-meta.xml
    └── translations
        ├── en_US.translation
        └── ja.translation

labelsの下にCustomLabels.labelsというファイルを作る。
これがカスタム表示ラベルに相当する。
あとは、翻訳の定義ファイルとしてtranslations以下に配置。
今回は英語と日本語。
(日本語がja_JP.translationじゃないのはなぜなんだろう...)

CustomLabels.labels

<?xml version="1.0" encoding="UTF-8"?>
<CustomLabels xmlns="http://soap.sforce.com/2006/04/metadata">
    <labels>
        <fullName>custom_label_sample</fullName>
        <language>ja</language>
        <protected>true</protected>
        <shortDescription>カスタム表示ラベルの他言語化です</shortDescription>
        <value>こんにちは!</value>
    </labels>
</CustomLabels>

ja.translation

<?xml version="1.0" encoding="UTF-8"?>
<Translations xmlns="http://soap.sforce.com/2006/04/metadata">
    <customLabels>
        <label><!-- こんにちは! --></label>
        <name>custom_label_sample</name>
    </customLabels>
</Translations>

en_US.translation

<?xml version="1.0" encoding="UTF-8"?>
<Translations xmlns="http://soap.sforce.com/2006/04/metadata">
    <customLabels>
        <label>Hello !</label>
        <name>custom_label_sample</name>
    </customLabels>
</Translations>



使ってみる

値を表示するためだけのVisualforceページを用意。
Apexで利用した場合も確認するため、コントローラも用意。

Apex(CustomLabelTransactionController)

public class CustomLabelTranslationController {

    public static final String CUSTOM_LABEL = System.Label.custom_label_sample;

    public String text {
        get {
            return CUSTOM_LABEL;
        }
    }
}

Visualforce(CustomLabelTranslation.page)

<apex:page controller="CustomLabelTranslationController">
Visualforceタグ:<apex:outputLabel value="{!$Label.custom_label_sample}" />
<br />
Apexから利用:{!text}
</apex:page>

package.xml

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>CustomLabels</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>Translations</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexPage</name>
    </types>
    <version>30.0</version>
</Package>

結果

上記ファイルをデプロイした後

https://XXX.visual.force.com/apex/customlabeltranslation

にアクセス(XXXは各自のインスタンス名に変更)

まず、ユーザの言語設定が「日本語」の場合。

f:id:dackdive:20140530013607p:plain

日本語ですね。

そして、ユーザの言語設定を「English」に変更。

ユーザ名 > 私の設定 > 言語とタイムゾーン

f:id:dackdive:20140530013712p:plain

で、先ほどのURLにアクセスすると...

f:id:dackdive:20140530013725p:plain

「こんにちは!」から「Hello!」に切り替わりました!やった!

というわけで、今回は多言語化の一例としてカスタム表示ラベルを使ってみました。