diff options
author | Reuben Thomas <rrt@sc3d.org> | 2013-12-16 13:16:44 +0000 |
---|---|---|
committer | Reuben Thomas <rrt@sc3d.org> | 2013-12-16 13:16:44 +0000 |
commit | 8724f9e886455808dbec4be277eb66e042392c47 (patch) | |
tree | bffc6f7c3b4aced468077da90fd9b02e62fbfd16 /intl/langprefs.c | |
parent | d364ff403eb40311c16ccee1171bc49942d4b450 (diff) | |
download | plptools-8724f9e886455808dbec4be277eb66e042392c47.tar.gz plptools-8724f9e886455808dbec4be277eb66e042392c47.tar.bz2 plptools-8724f9e886455808dbec4be277eb66e042392c47.zip |
Remove gettext files properly, and go back to 0.18.1
Diffstat (limited to 'intl/langprefs.c')
-rw-r--r-- | intl/langprefs.c | 353 |
1 files changed, 0 insertions, 353 deletions
diff --git a/intl/langprefs.c b/intl/langprefs.c deleted file mode 100644 index aeb1c4e..0000000 --- a/intl/langprefs.c +++ /dev/null @@ -1,353 +0,0 @@ -/* Determine the user's language preferences. - Copyright (C) 2004-2007 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Written by Bruno Haible <bruno@clisp.org>. - Win32 code originally by Michele Cicciotti <hackbunny@reactos.com>. */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <stdlib.h> - -#if HAVE_CFPREFERENCESCOPYAPPVALUE -# include <string.h> -# include <CoreFoundation/CFPreferences.h> -# include <CoreFoundation/CFPropertyList.h> -# include <CoreFoundation/CFArray.h> -# include <CoreFoundation/CFString.h> -extern void _nl_locale_name_canonicalize (char *name); -#endif - -#if defined _WIN32 || defined __WIN32__ -# define WIN32_NATIVE -#endif - -#ifdef WIN32_NATIVE -# define WIN32_LEAN_AND_MEAN -# include <windows.h> - -# ifndef MUI_LANGUAGE_NAME -# define MUI_LANGUAGE_NAME 8 -# endif -# ifndef STATUS_BUFFER_OVERFLOW -# define STATUS_BUFFER_OVERFLOW 0x80000005 -# endif - -extern void _nl_locale_name_canonicalize (char *name); -extern const char *_nl_locale_name_from_win32_LANGID (LANGID langid); -extern const char *_nl_locale_name_from_win32_LCID (LCID lcid); - -/* Get the preferences list through the MUI APIs. This works on Windows Vista - and newer. */ -static const char * -_nl_language_preferences_win32_mui (HMODULE kernel32) -{ - /* DWORD GetUserPreferredUILanguages (ULONG dwFlags, - PULONG pulNumLanguages, - PWSTR pwszLanguagesBuffer, - PULONG pcchLanguagesBuffer); */ - typedef DWORD (WINAPI *GetUserPreferredUILanguages_func) (ULONG, PULONG, PWSTR, PULONG); - GetUserPreferredUILanguages_func p_GetUserPreferredUILanguages; - - p_GetUserPreferredUILanguages = - (GetUserPreferredUILanguages_func) - GetProcAddress (kernel32, "GetUserPreferredUILanguages"); - if (p_GetUserPreferredUILanguages != NULL) - { - ULONG num_languages; - ULONG bufsize; - DWORD ret; - - bufsize = 0; - ret = p_GetUserPreferredUILanguages (MUI_LANGUAGE_NAME, - &num_languages, - NULL, &bufsize); - if (ret == 0 - && GetLastError () == STATUS_BUFFER_OVERFLOW - && bufsize > 0) - { - WCHAR *buffer = (WCHAR *) malloc (bufsize * sizeof (WCHAR)); - if (buffer != NULL) - { - ret = p_GetUserPreferredUILanguages (MUI_LANGUAGE_NAME, - &num_languages, - buffer, &bufsize); - if (ret) - { - /* Convert the list from NUL-delimited WCHAR[] Win32 locale - names to colon-delimited char[] Unix locale names. - We assume that all these locale names are in ASCII, - nonempty and contain no colons. */ - char *languages = - (char *) malloc (bufsize + num_languages * 10 + 1); - if (languages != NULL) - { - const WCHAR *p = buffer; - char *q = languages; - ULONG i; - for (i = 0; i < num_languages; i++) - { - char *q1; - char *q2; - - q1 = q; - if (i > 0) - *q++ = ':'; - q2 = q; - for (; *p != (WCHAR)'\0'; p++) - { - if ((unsigned char) *p != *p || *p == ':') - { - /* A non-ASCII character or a colon inside - the Win32 locale name! Punt. */ - q = q1; - break; - } - *q++ = (unsigned char) *p; - } - if (q == q1) - /* An unexpected Win32 locale name occurred. */ - break; - *q = '\0'; - _nl_locale_name_canonicalize (q2); - q = q2 + strlen (q2); - p++; - } - *q = '\0'; - if (q > languages) - { - free (buffer); - return languages; - } - free (languages); - } - } - free (buffer); - } - } - } - return NULL; -} - -/* Get a preference. This works on Windows ME and newer. */ -static const char * -_nl_language_preferences_win32_ME (HMODULE kernel32) -{ - /* LANGID GetUserDefaultUILanguage (void); */ - typedef LANGID (WINAPI *GetUserDefaultUILanguage_func) (void); - GetUserDefaultUILanguage_func p_GetUserDefaultUILanguage; - - p_GetUserDefaultUILanguage = - (GetUserDefaultUILanguage_func) - GetProcAddress (kernel32, "GetUserDefaultUILanguage"); - if (p_GetUserDefaultUILanguage != NULL) - return _nl_locale_name_from_win32_LANGID (p_GetUserDefaultUILanguage ()); - return NULL; -} - -/* Get a preference. This works on Windows 95 and newer. */ -static const char * -_nl_language_preferences_win32_95 () -{ - HKEY desktop_resource_locale_key; - - if (RegOpenKeyExA (HKEY_CURRENT_USER, - "Control Panel\\Desktop\\ResourceLocale", - 0, KEY_QUERY_VALUE, &desktop_resource_locale_key) - == NO_ERROR) - { - DWORD type; - char data[8 + 1]; - DWORD data_size = sizeof (data); - DWORD ret; - - ret = RegQueryValueExA (desktop_resource_locale_key, NULL, NULL, - &type, data, &data_size); - RegCloseKey (desktop_resource_locale_key); - - if (ret == NO_ERROR) - { - /* We expect a string, at most 8 bytes long, that parses as a - hexadecimal number. */ - if (type == REG_SZ - && data_size <= sizeof (data) - && (data_size < sizeof (data) - || data[sizeof (data) - 1] == '\0')) - { - LCID lcid; - char *endp; - /* Ensure it's NUL terminated. */ - if (data_size < sizeof (data)) - data[data_size] = '\0'; - /* Parse it as a hexadecimal number. */ - lcid = strtoul (data, &endp, 16); - if (endp > data && *endp == '\0') - return _nl_locale_name_from_win32_LCID (lcid); - } - } - } - return NULL; -} - -/* Get the system's preference. This can be used as a fallback. */ -static BOOL CALLBACK -ret_first_language (HMODULE h, LPCSTR type, LPCSTR name, WORD lang, LONG_PTR param) -{ - *(const char **)param = _nl_locale_name_from_win32_LANGID (lang); - return FALSE; -} -static const char * -_nl_language_preferences_win32_system (HMODULE kernel32) -{ - const char *languages = NULL; - /* Ignore the warning on mingw here. mingw has a wrong definition of the last - parameter type of ENUMRESLANGPROC. */ - EnumResourceLanguages (kernel32, RT_VERSION, MAKEINTRESOURCE (1), - ret_first_language, (LONG_PTR)&languages); - return languages; -} - -#endif - -/* Determine the user's language preferences, as a colon separated list of - locale names in XPG syntax - language[_territory][.codeset][@modifier] - The result must not be freed; it is statically allocated. - The LANGUAGE environment variable does not need to be considered; it is - already taken into account by the caller. */ - -const char * -_nl_language_preferences_default (void) -{ -#if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ - { - /* Cache the preferences list, since CoreFoundation calls are expensive. */ - static const char *cached_languages; - static int cache_initialized; - - if (!cache_initialized) - { - CFTypeRef preferences = - CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"), - kCFPreferencesCurrentApplication); - if (preferences != NULL - && CFGetTypeID (preferences) == CFArrayGetTypeID ()) - { - CFArrayRef prefArray = (CFArrayRef)preferences; - int n = CFArrayGetCount (prefArray); - char buf[256]; - size_t size = 0; - int i; - - for (i = 0; i < n; i++) - { - CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i); - if (element != NULL - && CFGetTypeID (element) == CFStringGetTypeID () - && CFStringGetCString ((CFStringRef)element, - buf, sizeof (buf), - kCFStringEncodingASCII)) - { - _nl_locale_name_canonicalize (buf); - size += strlen (buf) + 1; - /* Most GNU programs use msgids in English and don't ship - an en.mo message catalog. Therefore when we see "en" - in the preferences list, arrange for gettext() to - return the msgid, and ignore all further elements of - the preferences list. */ - if (strcmp (buf, "en") == 0) - break; - } - else - break; - } - if (size > 0) - { - char *languages = (char *) malloc (size); - - if (languages != NULL) - { - char *p = languages; - - for (i = 0; i < n; i++) - { - CFTypeRef element = - CFArrayGetValueAtIndex (prefArray, i); - if (element != NULL - && CFGetTypeID (element) == CFStringGetTypeID () - && CFStringGetCString ((CFStringRef)element, - buf, sizeof (buf), - kCFStringEncodingASCII)) - { - _nl_locale_name_canonicalize (buf); - strcpy (p, buf); - p += strlen (buf); - *p++ = ':'; - if (strcmp (buf, "en") == 0) - break; - } - else - break; - } - *--p = '\0'; - - cached_languages = languages; - } - } - } - cache_initialized = 1; - } - if (cached_languages != NULL) - return cached_languages; - } -#endif - -#ifdef WIN32_NATIVE - { - /* Cache the preferences list, since computing it is expensive. */ - static const char *cached_languages; - static int cache_initialized; - - /* Activate the new code only when the GETTEXT_MUI environment variable is - set, for the time being, since the new code is not well tested. */ - if (!cache_initialized && getenv ("GETTEXT_MUI") != NULL) - { - const char *languages = NULL; - HMODULE kernel32 = GetModuleHandle ("kernel32"); - - if (kernel32 != NULL) - languages = _nl_language_preferences_win32_mui (kernel32); - - if (languages == NULL && kernel32 != NULL) - languages = _nl_language_preferences_win32_ME (kernel32); - - if (languages == NULL) - languages = _nl_language_preferences_win32_95 (); - - if (languages == NULL && kernel32 != NULL) - languages = _nl_language_preferences_win32_system (kernel32); - - cached_languages = languages; - cache_initialized = 1; - } - if (cached_languages != NULL) - return cached_languages; - } -#endif - - return NULL; -} |