]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Use a supported language when localizing inside an application.
authormike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Fri, 31 Aug 2007 22:54:26 +0000 (22:54 +0000)
committermike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Fri, 31 Aug 2007 22:54:26 +0000 (22:54 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@6903 7a7537e8-13f0-0310-91df-b6672ffda945

CHANGES-1.3.txt
cups/language.c

index 673df5638b3e407427e97c28f5bc062ee6f2da25..b5592da63632f0a87bc78ef9890367c2deab310e 100644 (file)
@@ -5,6 +5,8 @@ CHANGES-1.3.txt
 CHANGES IN CUPS V1.3.1
 
        - Documentation updates.
+       - cupsLangDefault() did not attempt to return a language that
+         was supported by the calling application.
        - If a remote printer stopped while a job was being sent, the
          local queue would also get stopped and the job re-queued,
          resulting in duplicate prints in some cases.
index 213f39b78ad546bb6c9c05dbd757c4a1582b8910..483c6bee94dddfc896833794dcf800676454a188 100644 (file)
@@ -998,6 +998,8 @@ static const char *                 /* O - Locale string */
 appleLangDefault(void)
 {
   int                  i;              /* Looping var */
+  CFBundleRef          bundle;         /* Main bundle (if any) */
+  CFArrayRef           bundleList;     /* List of localizations in bundle */
   CFPropertyListRef    localizationList;
                                        /* List of localization data */
   CFStringRef          languageName;   /* Current name */
@@ -1014,68 +1016,89 @@ appleLangDefault(void)
   if (!cg->language[0])
   {
     if ((lang = getenv("LANG")))
+    {
       strlcpy(cg->language, lang, sizeof(cg->language));
-    else
+      return (cg->language);
+    }
+    else if ((bundle = CFBundleGetMainBundle()) != NULL)
     {
+      bundleList = CFBundleCopyBundleLocalizations(bundle);
       localizationList =
-          CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
-                                    kCFPreferencesCurrentApplication);
+         CFBundleCopyPreferredLocalizationsFromArray(bundleList);
 
-      if (localizationList != NULL)
+      CFRelease(bundleList);
+
+      if (CFArrayGetCount(localizationList) == 0)
       {
-       if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
-           CFArrayGetCount(localizationList) > 0)
-       {
-          languageName = CFArrayGetValueAtIndex(localizationList, 0);
+       /*
+       * If we can't find a common language supported by the application,
+       * then the app will default to English...
+       */
 
-          if (languageName != NULL &&
-              CFGetTypeID(languageName) == CFStringGetTypeID())
-          {
-           localeName = CFLocaleCreateCanonicalLocaleIdentifierFromString(
-                            kCFAllocatorDefault, languageName);
+       CFRelease(localizationList);
+       strlcpy(cg->language, "en_US.UTF-8", sizeof(cg->language));
+       return  (cg->language);
+      }
+    }
+    else
+      localizationList =
+         CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
+                                   kCFPreferencesCurrentApplication);
 
-           if (localeName != NULL)
-           {
-             CFStringGetCString(localeName, cg->language, sizeof(cg->language),
-                                kCFStringEncodingASCII);
-             CFRelease(localeName);
+    if (localizationList)
+    {
+      if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
+         CFArrayGetCount(localizationList) > 0)
+      {
+       languageName = CFArrayGetValueAtIndex(localizationList, 0);
 
-              DEBUG_printf(("appleLangDefault: cg->language=\"%s\"\n",
-                           cg->language));
+       if (languageName &&
+           CFGetTypeID(languageName) == CFStringGetTypeID())
+       {
+         localeName = CFLocaleCreateCanonicalLocaleIdentifierFromString(
+                          kCFAllocatorDefault, languageName);
 
-            /*
-             * Map new language identifiers to locales...
-             */
+         if (localeName)
+         {
+           CFStringGetCString(localeName, cg->language, sizeof(cg->language),
+                              kCFStringEncodingASCII);
+           CFRelease(localeName);
 
-             for (i = 0;
-                  i < sizeof(apple_name_locale) / sizeof(apple_name_locale[0]);
-                  i++)
+           DEBUG_printf(("appleLangDefault: cg->language=\"%s\"\n",
+                         cg->language));
+
+          /*
+           * Map new language identifiers to locales...
+           */
+
+           for (i = 0;
+                i < sizeof(apple_name_locale) / sizeof(apple_name_locale[0]);
+                i++)
+           {
+             if (!strcmp(cg->language, apple_name_locale[i].name))
              {
-               if (!strcmp(cg->language, apple_name_locale[i].name))
-               {
-                 DEBUG_printf(("appleLangDefault: mapping \"%s\" to \"%s\"...\n",
-                               cg->language, apple_name_locale[i].locale));
-                 strlcpy(cg->language, apple_name_locale[i].locale, 
-                         sizeof(cg->language));
-                 break;
-               }
+               DEBUG_printf(("appleLangDefault: mapping \"%s\" to \"%s\"...\n",
+                             cg->language, apple_name_locale[i].locale));
+               strlcpy(cg->language, apple_name_locale[i].locale, 
+                       sizeof(cg->language));
+               break;
              }
+           }
 
-            /*
-             * Convert language subtag into region subtag...
-             */
+          /*
+           * Convert language subtag into region subtag...
+           */
 
-             if (cg->language[2] == '-')
-               cg->language[2] = '_';
+           if (cg->language[2] == '-')
+             cg->language[2] = '_';
 
-             if (strchr(cg->language, '.') == NULL)
-               strlcat(cg->language, ".UTF-8", sizeof(cg->language));
-           }
-          }
+           if (!strchr(cg->language, '.'))
+             strlcat(cg->language, ".UTF-8", sizeof(cg->language));
+         }
        }
-
-       CFRelease(localizationList);
       }
+
+      CFRelease(localizationList);
     }
   
    /*