コントロールのローカライズ
FireMonkey で作られたアプリは、Windows / macOS / iOS / Android など、様々なプラットフォームで動作します。
また、世界中の様々な地域で利用される可能性があります。
地域によって使用する言語が異なるため、メッセージを表示する際には各国語にローカライズされた文字列を表示する必要があります。
そんなとき TLang を使います。
フォーム上のコントロールであれば、あらかじめ言語ごとの文字列を登録しておくことで、ロケールに応じた文字列が自動的に選択されます。
たとえば下図の例では、言語デザイナで英語(デフォルト)に対する日本語の文字列を設定しています。
コントロールではない文字列のローカライズ
コントロールに表示される文字列は TLang でローカライズできます。
では、ダイアログメッセージなど、コード側で扱う文字列はどうすれば良いのでしょうか。
その場合は IFMXLocaleService を使います。
IFMXLocaleService.GetCurrentLangID を使うと ja や fr, en といった言語コードを取得できます。
取得した言語コードに応じて、返すメッセージを切り替えます。
以下は Hello, World! を各国語で返す例です。
// uses に FMX.Platform を追加
function GetHelloWorld: String;
begin
// デフォルトの文字列(英語)
Result := 'Hello, World!';
var Id := '';
var S: IFMXLocaleService;
if
TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, S)
then
Id := S.GetCurrentLangID.ToLower;
// 日本語の文字列
if Id = 'ja' then
Result := 'こんにちは、世界!';
// フランス語の文字列
if Id = 'fr' then
Result := 'Bonjour le monde !';
// ドイツ語の文字列
if Id = 'de' then
Result := 'Hallo Welt!';
end;
実際には、Id を毎回取得するのではなく initialization などで一度だけ取得し、変数に保持して使い回すのが良いでしょう。
(アプリ起動中にロケールが変更されることはほとんど無いため)
まとめ
ローカライズ文字列を扱う際は、用途に応じて使い分けます。
- コントロール上の文字列は TLang
- コード側の文字列は IFMXLocaleService.GetCurrentLangID
を使います。
簡単ですね!
