TSMH’s blog

多趣味人間のメモ

ユーザーの既定言語識別子を取得

Delphiで今ユーザーの既定言語識別子を取得したい場合は?

(Win32のAPI使ってるので、多分Delphiだけではないと思います

docs.microsoft.com

ユニットファイル

uses
  Winapi.Windows ;

 

メソッド

GetUserDefaultLangID を使います

このメソッドの戻り値はWORD型で、今ユーザーの既定言語識別子を返します。

 

GetUserDefaultLangIDについて、簡単な例

if GetUserDefaultLangID = $0411 then //$0411は日本語の言語識別子
    Label1.Text := '今ユーザーの既定言語は日本語です'
else
    Label1.Text := '今ユーザーの既定言語は日本語ではありません';

  • 先頭に「$」をつけると16進数の数値として表せます。

 

言語カルチャ名、コード、および ISO 値

自分の偏見でよく使うコードを抽出します~

ja-JP    

日本語 - 日本               

0x0411

JPN

en-US  

英語 - アメリカ合衆国 

0x0409

ENU

zh-CN  

中国語 - 中国               

0x0804

CHS

zh-TW  

中国語 - 台湾               

0x0404

CHT

ko-KR   

韓国語 - 大韓民国       

0x0412

KOR

 

docwiki.embarcadero.com

 

全体的な例と便利そうな使い方

unit languageChange;

interface

uses
    Winapi.Windows ; //ユニット

var
    Lang_jpn : Boolean;

procedure _languageGet();
Function _languageSet(jp_str , en_str : String): String;
procedure _languageChange();

implementation

uses MainForm;  //UIは別のところで設計しているので

//今ユーザーの既定言語識別子を判断する

procedure _languageGet();
begin
    if GetUserDefaultLangID = $0411 then
        Lang_jpn := True
    else
        Lang_jpn := False;
end;

//対応の言語を変換するメソッドを用意

Function _languageSet(jp_str , en_str : String): String;
begin
    if Lang_jpn then
        Result := jp_str
    else
        Result := en_str;
end;

//実際のUIの変換をする

procedure _languageChange();
begin
    with FmMain do
        begin
            Label1.Text := _languageSet('SDカードドライブ', 'SD card drive');
        end;
    end;

end.