言語に応じたファイルへのパスを取得する

多言語のユーザーインターフェースを持つアプリケーションを作成するためのMUI関連APIの1つにGetFileMUIPathがある。これは言語に応じたreadmeや画像などのファイルへのパスを取得するために用意されている。
例えば「c:\test\readme.txt」というパスに対してGetFileMUIPathを実行すると、日本語UIのときは「c:\test\ja-jp\readme.txt」、英語なら「c:\test\en-us\readme.txt」、ドイツ語なら「「c:\test\de-de\readme.txt」」のように自動的に言語に応じたフォルダ内のファイルへのパスに置き換わる。ただしその言語のファイルが用意されていない場合はデフォルトの言語用のパスになる。

ここでは言語に応じたreadme.txtへのパスを取得し、それをShellExecuteによって開いている。

#include "shellapi.h"

void	Test(void)
{
	BOOL		ret;
    WCHAR		pwszMUILanguage[LOCALE_NAME_MAX_LENGTH];
	ULONG		nMUILanguageSize;
    WCHAR		pwszFileMUIPath[MAX_PATH*10];
    ULONG		nFileMUIPathSize;
    ULONGLONG	nEnumerator;
	int			nRet;

	//「はい」ボタンが押されたら言語として英語を選択する
	nRet = ::MessageBox(NULL,_T("英語にしますか?"),_T(""),MB_YESNO);
	if(nRet == IDYES)
		::SetThreadUILanguage(MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT));

	//選択した言語に応じたreadme.txtへのパスを取得する
	nMUILanguageSize = LOCALE_NAME_MAX_LENGTH;
	nFileMUIPathSize = MAX_PATH * 10;
	nEnumerator = 0;
	ret = ::GetFileMUIPath(0,L"readme.txt",pwszMUILanguage,&nMUILanguageSize,pwszFileMUIPath,&nFileMUIPathSize,&nEnumerator);

	//選択した言語に応じたreadme.txtを開く
	if(ret)
		::ShellExecute(NULL,_T("open"),pwszFileMUIPath,NULL,NULL,SW_SHOWNORMAL);
}

プロジェクトファイルをダウンロード


カテゴリー「多言語」 のエントリー