こんにちは、ロジカル・アーツの松田です。
今回は「ロケール」について調べてみましたのでご紹介いたします。
ロケールとは?
直訳すると、物語の舞台・場所のことで、IT分野では「言語の定義づけ」「国や地域などの属性設定のセット」のことを指します。各国それぞれで、独自の書式設定や仕様が存在しており、ロケールによって規則や照合順序を定義します。
Salesforceでは、組織情報の地域や通貨の設定などが該当します。
ロケールはどこで設定するの?
Salesforce では組織のデフォルトのロケールを設定できます。
またユーザは個人設定ページで各自が使用するロケールを設定できます。
このロケールにより、日付、時刻、通貨、住所、名前、数値などの表示形式(フォーマット)が制御されます。
salesforceで使用されているロケール形式はsalesforceのバージョンにより異なり、以前はJDK形式、Winter ’20からはICUロケール形式が採用されています。
JDK形式、ICU形式とは
表示形式の種類で、以下のような違いがあります。
- JDK形式とはJavaの開発キットおよび開発環境において制御されている形式
- ICU形式とは国際標準(International Components for Unicode)に照らして制御されている形式
JDKのままでは国際標準との不整合が発生しているため、今後は国際標準に則った形で表示されていくということになります。
JDK形式からICU形式へ変更されたことでsalesforce環境への影響は?
組織設定への影響
Winter ’20からはICUロケール形式が採用されています。
Winter ’20より前に作成されているsalesforce組織では、デフォルトではJDK形式が適用されているため設定変更が必要になりますが、Spring '24 リリース以降段階的に自動で有効化されているので、すでに設定されている可能性があります。
Winter ’20より前に作成された組織で ICU 形式が使用されているかどうかを判断するには、リリース更新を確認します。
[設定] > 「リリース更新」でクイック検索 > 最初に表示されている「要対応」ページに「ICU ロケール形式を有効化」が存在する場合は ICU 形式は使用されていません。
※リリース更新ページの「アーカイブ済」タブに存在し、完了マークがついている場合はICU形式が使用されています。
使用されていない環境でICU ロケールを使用するには、英語 (カナダ) ロケールの [en_CA]を有効化した上で「ICU ロケール形式を有効化」の使用開始をします。
- [設定] > 「ユーザインタフェース」でクイック検索 > 「en_CA ロケールの ICU 形式を有効化」にチェックが入っていない場合はチェックを入れて保存
- [設定] > 「リリース更新」でクイック検索 > 「ICU ロケール形式を有効化」の[使用開始]ボタンをクリック > 各ステップに従い完了させる
Winter ’20より前に作成された組織でSpring ‘25 まで ICU ロケール形式の適用を延期するには、[設定] > 「ユーザーインターフェース」でクイック検索 > [ Enable ICU locale formats as part of the scheduled rollout (スケジュールされたロールアウトの一部として ICU ロケール形式を有効化) ] にチェックを入れて保存で有効化が延期されます。
表記の変化
日本設定の場合、以下表記が変わります。
- 日時項目形式の変化
(yyyy/MM/dd hh:mm:ss PST → yyyy/MM/dd hh:mm:dd GMT-8) - Chatter投稿時の日付の変化
(yyyy/MM/dd → yyyy年M月d日)※月の桁数の変化(01 → 1) - 会計通貨のマイナス時の変化
(-¥0,000.00 → (¥0,000.00) )
ユーザがどのロケールを使用しているかを特定する方法は2つあります。
- 開発者コンソールのQuery Editorで次のクエリを入力して実行する
SELECT toLabel(LocaleSidKey) LocaleName, LocaleSidKey, Count(id) UserCount FROM User where IsActive=true GROUP BY LocaleSidKey
- ユーザオブジェクトに
TEXT(LocaleSidKey)
という構文の数式項目を作成し、レポートで確認する
日本以外を設定しているユーザが存在する場合は、上記の表記とは違った形で影響を受ける可能性があります。
>JDK と ICU ロケール形式の相違点 help.salesforce.com
開発への影響
- APIバージョンが44以前の場合は注意が必要です。
Apex クラス、Apex トリガー、Visualforce ページ、共有ルールがAPI44の場合JDK形式が返されデータの整合性の問題が発生する可能性があります。 - Visualforce ページのインライン編集によってAPIバージョンが最新のものに更新されて保存されます。
これによってICUを有効にした場合、日付や時間の形式が変更され、無効な日付であるとエラーが表示される可能性があります。
いかがだったでしょうか?
なんとなく言葉として知っていたけれどあまり意識していなかった「ロケール」が少し身近になった気がします。
組織設定確認のご参考になれば幸いです。