diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dutil/inc/locutil.h | 12 | ||||
| -rw-r--r-- | src/dutil/locutil.cpp | 29 |
2 files changed, 9 insertions, 32 deletions
diff --git a/src/dutil/inc/locutil.h b/src/dutil/inc/locutil.h index 626cb59e..38ddda20 100644 --- a/src/dutil/inc/locutil.h +++ b/src/dutil/inc/locutil.h | |||
| @@ -50,18 +50,6 @@ HRESULT DAPI LocProbeForFile( | |||
| 50 | ); | 50 | ); |
| 51 | 51 | ||
| 52 | /******************************************************************** | 52 | /******************************************************************** |
| 53 | LocProbeForFileEx - Searches for a localization file on disk. | ||
| 54 | useUILanguage should be set to TRUE. | ||
| 55 | *******************************************************************/ | ||
| 56 | HRESULT DAPI LocProbeForFileEx( | ||
| 57 | __in_z LPCWSTR wzBasePath, | ||
| 58 | __in_z LPCWSTR wzLocFileName, | ||
| 59 | __in_z_opt LPCWSTR wzLanguage, | ||
| 60 | __inout LPWSTR* psczPath, | ||
| 61 | __in BOOL fUseUILanguage | ||
| 62 | ); | ||
| 63 | |||
| 64 | /******************************************************************** | ||
| 65 | LocLoadFromFile - Loads a localization file | 53 | LocLoadFromFile - Loads a localization file |
| 66 | 54 | ||
| 67 | *******************************************************************/ | 55 | *******************************************************************/ |
diff --git a/src/dutil/locutil.cpp b/src/dutil/locutil.cpp index 43e1bb5b..c4567c03 100644 --- a/src/dutil/locutil.cpp +++ b/src/dutil/locutil.cpp | |||
| @@ -51,7 +51,7 @@ static HRESULT ParseWxlControl( | |||
| 51 | #ifndef MUI_MERGE_SYSTEM_FALLBACK | 51 | #ifndef MUI_MERGE_SYSTEM_FALLBACK |
| 52 | #define MUI_MERGE_SYSTEM_FALLBACK 0x10 // GetThreadPreferredUILanguages merges in parent and base languages | 52 | #define MUI_MERGE_SYSTEM_FALLBACK 0x10 // GetThreadPreferredUILanguages merges in parent and base languages |
| 53 | #endif | 53 | #endif |
| 54 | typedef WINBASEAPI BOOL (WINAPI *PFN_GET_THREAD_PREFERRED_UI_LANGUAGES) ( | 54 | typedef WINBASEAPI BOOL (WINAPI *GET_THREAD_PREFERRED_UI_LANGUAGES) ( |
| 55 | __in DWORD dwFlags, | 55 | __in DWORD dwFlags, |
| 56 | __out PULONG pulNumLanguages, | 56 | __out PULONG pulNumLanguages, |
| 57 | __out_ecount_opt(*pcchLanguagesBuffer) PZZWSTR pwszLanguagesBuffer, | 57 | __out_ecount_opt(*pcchLanguagesBuffer) PZZWSTR pwszLanguagesBuffer, |
| @@ -65,25 +65,14 @@ extern "C" HRESULT DAPI LocProbeForFile( | |||
| 65 | __inout LPWSTR* psczPath | 65 | __inout LPWSTR* psczPath |
| 66 | ) | 66 | ) |
| 67 | { | 67 | { |
| 68 | return LocProbeForFileEx(wzBasePath, wzLocFileName, wzLanguage, psczPath, FALSE); | ||
| 69 | } | ||
| 70 | |||
| 71 | extern "C" HRESULT DAPI LocProbeForFileEx( | ||
| 72 | __in_z LPCWSTR wzBasePath, | ||
| 73 | __in_z LPCWSTR wzLocFileName, | ||
| 74 | __in_z_opt LPCWSTR wzLanguage, | ||
| 75 | __inout LPWSTR* psczPath, | ||
| 76 | __in BOOL fUseUILanguage | ||
| 77 | ) | ||
| 78 | { | ||
| 79 | HRESULT hr = S_OK; | 68 | HRESULT hr = S_OK; |
| 80 | LPWSTR sczProbePath = NULL; | 69 | LPWSTR sczProbePath = NULL; |
| 81 | LANGID langid = 0; | 70 | LANGID langid = 0; |
| 82 | LPWSTR sczLangIdFile = NULL; | 71 | LPWSTR sczLangIdFile = NULL; |
| 83 | LPWSTR sczLangsBuff = NULL; | 72 | LPWSTR sczLangsBuff = NULL; |
| 84 | PFN_GET_THREAD_PREFERRED_UI_LANGUAGES pfnGetThreadPreferredUILanguages = | 73 | GET_THREAD_PREFERRED_UI_LANGUAGES pvfnGetThreadPreferredUILanguages = |
| 85 | reinterpret_cast<PFN_GET_THREAD_PREFERRED_UI_LANGUAGES>( | 74 | reinterpret_cast<GET_THREAD_PREFERRED_UI_LANGUAGES>( |
| 86 | ::GetProcAddress(::GetModuleHandle("Kernel32.dll"), "GetThreadPreferredUILanguages")); | 75 | GetProcAddress(GetModuleHandle("Kernel32.dll"), "GetThreadPreferredUILanguages")); |
| 87 | 76 | ||
| 88 | // If a language was specified, look for a loc file in that as a directory. | 77 | // If a language was specified, look for a loc file in that as a directory. |
| 89 | if (wzLanguage && *wzLanguage) | 78 | if (wzLanguage && *wzLanguage) |
| @@ -100,12 +89,12 @@ extern "C" HRESULT DAPI LocProbeForFileEx( | |||
| 100 | } | 89 | } |
| 101 | } | 90 | } |
| 102 | 91 | ||
| 103 | if (fUseUILanguage && pfnGetThreadPreferredUILanguages) | 92 | if (pvfnGetThreadPreferredUILanguages) |
| 104 | { | 93 | { |
| 105 | ULONG nLangs = 0; | 94 | ULONG nLangs; |
| 106 | ULONG cchLangs = 0; | 95 | ULONG cchLangs = 0; |
| 107 | DWORD dwFlags = MUI_LANGUAGE_ID | MUI_MERGE_USER_FALLBACK | MUI_MERGE_SYSTEM_FALLBACK; | 96 | DWORD dwFlags = MUI_LANGUAGE_ID | MUI_MERGE_USER_FALLBACK | MUI_MERGE_SYSTEM_FALLBACK; |
| 108 | if (!(*pfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, NULL, &cchLangs)) | 97 | if (!(*pvfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, NULL, &cchLangs)) |
| 109 | { | 98 | { |
| 110 | LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return buffer size."); | 99 | LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return buffer size."); |
| 111 | } | 100 | } |
| @@ -114,7 +103,7 @@ extern "C" HRESULT DAPI LocProbeForFileEx( | |||
| 114 | LocExitOnFailure(hr, "Failed to allocate buffer for languages"); | 103 | LocExitOnFailure(hr, "Failed to allocate buffer for languages"); |
| 115 | 104 | ||
| 116 | nLangs = 0; | 105 | nLangs = 0; |
| 117 | if (!(*pfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, sczLangsBuff, &cchLangs)) | 106 | if (!(*pvfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, sczLangsBuff, &cchLangs)) |
| 118 | { | 107 | { |
| 119 | LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return language list."); | 108 | LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return language list."); |
| 120 | } | 109 | } |
| @@ -140,7 +129,7 @@ extern "C" HRESULT DAPI LocProbeForFileEx( | |||
| 140 | } | 129 | } |
| 141 | } | 130 | } |
| 142 | 131 | ||
| 143 | langid = fUseUILanguage ? ::GetUserDefaultUILanguage() : ::GetUserDefaultLangID(); | 132 | langid = ::GetUserDefaultUILanguage(); |
| 144 | 133 | ||
| 145 | hr = StrAllocFormatted(&sczLangIdFile, L"%u\\%ls", langid, wzLocFileName); | 134 | hr = StrAllocFormatted(&sczLangIdFile, L"%u\\%ls", langid, wzLocFileName); |
| 146 | LocExitOnFailure(hr, "Failed to format user langid."); | 135 | LocExitOnFailure(hr, "Failed to format user langid."); |
