diff --git a/tools/image_generator/ImageGenerator.java b/tools/image_generator/ImageGenerator.java
index 50a4984..fd8e542 100644
--- a/tools/image_generator/ImageGenerator.java
+++ b/tools/image_generator/ImageGenerator.java
@@ -41,6 +41,7 @@
 import java.text.AttributedString;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
@@ -605,11 +606,15 @@
         mDefaultFont = defaultFontMetrics.getFont();
         mAndroidStringWidth = defaultFontMetrics.stringWidth(ANDROID_STRING);
 
-        Map<String, Integer> languageCount = new TreeMap<>();
+        // The last country variant should be the fallback locale for a given language.
+        Map<String, Locale> fallbackLocaleMap = new HashMap<>();
         int textWidth = 0;
         for (Locale locale : localizedTextMap.keySet()) {
-            String language = locale.getLanguage();
-            languageCount.put(language, languageCount.getOrDefault(language, 0) + 1);
+            // Updates the fallback locale if we have a new language variant. Don't do it for en-XC
+            // as it's a pseudo-locale.
+            if (!locale.toLanguageTag().equals("en-XC")) {
+                fallbackLocaleMap.put(locale.getLanguage(), locale);
+            }
             textWidth = Math.max(textWidth, measureTextWidth(localizedTextMap.get(locale), locale));
         }
 
@@ -617,15 +622,16 @@
         resize(textWidth, mImageHeight);
 
         for (Locale locale : localizedTextMap.keySet()) {
-            Integer count = languageCount.get(locale.getLanguage());
             // Recovery expects en-US instead of en_US.
             String languageTag = locale.toLanguageTag();
-            if (count == 1) {
-                // Make the last country variant for a given language be the catch-all for that
+            Locale fallbackLocale = fallbackLocaleMap.get(locale.getLanguage());
+            if (locale.equals(fallbackLocale)) {
+                // Makes the last country variant for a given language be the catch-all for that
                 // language.
                 languageTag = locale.getLanguage();
-            } else {
-                languageCount.put(locale.getLanguage(), count - 1);
+            } else if (localizedTextMap.get(locale).equals(localizedTextMap.get(fallbackLocale))) {
+                LOGGER.info("Skip parsing text for duplicate locale " + locale);
+                continue;
             }
 
             drawText(localizedTextMap.get(locale), locale, languageTag);
