[PATCH] kernel32: Fix LocaleNameToLCID can not handle zh-Hant and, zh-Hans.

Zhiyi Zhang yi.gd.cn at gmail.com
Wed Nov 8 09:51:46 CST 2017


 From 48729f65b3a03e5267c0dcbd957937f2220c5b6a Mon Sep 17 00:00:00 2001
From: Zhiyi Zhang <yi.gd.cn at gmail.com>
Date: Tue, 7 Nov 2017 23:03:24 +0800
Subject: [PATCH] kernel32: Fix LocaleNameToLCID can not handle zh-Hant 
and zh-Hans.

LocaleNameToLCID now can handle zh-Hant and zh-Hans correctly with 
get_default_children().
get_default_children() acts as a map from a parent language to its 
default child language.
Since zh-Hant and zh-Hans are not actual locale identifiers. All locale 
info of zh-Hant and zh-Hans
are directly mapped to its own child language, zh-HK and zh-CN.

Signed-off-by: Zhiyi Zhang <yi.gd.cn at gmail.com>
---
  dlls/kernel32/locale.c       | 49 
+++++++++++++++++++++++++++++++++++++++-----
  dlls/kernel32/nls/afk.nls    |  1 +
  dlls/kernel32/nls/ara.nls    |  1 +
  dlls/kernel32/nls/arb.nls    |  1 +
  dlls/kernel32/nls/are.nls    |  1 +
  dlls/kernel32/nls/arg.nls    |  1 +
  dlls/kernel32/nls/arh.nls    |  1 +
  dlls/kernel32/nls/ari.nls    |  1 +
  dlls/kernel32/nls/arj.nls    |  1 +
  dlls/kernel32/nls/ark.nls    |  1 +
  dlls/kernel32/nls/arl.nls    |  1 +
  dlls/kernel32/nls/arm.nls    |  1 +
  dlls/kernel32/nls/aro.nls    |  1 +
  dlls/kernel32/nls/arq.nls    |  1 +
  dlls/kernel32/nls/ars.nls    |  1 +
  dlls/kernel32/nls/art.nls    |  1 +
  dlls/kernel32/nls/aru.nls    |  1 +
  dlls/kernel32/nls/ary.nls    |  1 +
  dlls/kernel32/nls/aze.nls    |  1 +
  dlls/kernel32/nls/azl.nls    |  1 +
  dlls/kernel32/nls/bel.nls    |  1 +
  dlls/kernel32/nls/ben.nls    |  1 +
  dlls/kernel32/nls/bgr.nls    |  1 +
  dlls/kernel32/nls/brf.nls    |  1 +
  dlls/kernel32/nls/cat.nls    |  1 +
  dlls/kernel32/nls/chs.nls    |  1 +
  dlls/kernel32/nls/cht.nls    |  1 +
  dlls/kernel32/nls/cor.nls    |  1 +
  dlls/kernel32/nls/csy.nls    |  1 +
  dlls/kernel32/nls/cym.nls    |  1 +
  dlls/kernel32/nls/dan.nls    |  1 +
  dlls/kernel32/nls/dea.nls    |  1 +
  dlls/kernel32/nls/dec.nls    |  1 +
  dlls/kernel32/nls/del.nls    |  1 +
  dlls/kernel32/nls/des.nls    |  1 +
  dlls/kernel32/nls/deu.nls    |  1 +
  dlls/kernel32/nls/div.nls    |  1 +
  dlls/kernel32/nls/ell.nls    |  1 +
  dlls/kernel32/nls/ena.nls    |  1 +
  dlls/kernel32/nls/enb.nls    |  1 +
  dlls/kernel32/nls/enc.nls    |  1 +
  dlls/kernel32/nls/eng.nls    |  1 +
  dlls/kernel32/nls/eni.nls    |  1 +
  dlls/kernel32/nls/enj.nls    |  1 +
  dlls/kernel32/nls/enl.nls    |  1 +
  dlls/kernel32/nls/enp.nls    |  1 +
  dlls/kernel32/nls/ens.nls    |  1 +
  dlls/kernel32/nls/ent.nls    |  1 +
  dlls/kernel32/nls/enu.nls    |  1 +
  dlls/kernel32/nls/enw.nls    |  1 +
  dlls/kernel32/nls/enz.nls    |  1 +
  dlls/kernel32/nls/eox.nls    |  1 +
  dlls/kernel32/nls/esa.nls    |  1 +
  dlls/kernel32/nls/esb.nls    |  1 +
  dlls/kernel32/nls/esc.nls    |  1 +
  dlls/kernel32/nls/esd.nls    |  1 +
  dlls/kernel32/nls/ese.nls    |  1 +
  dlls/kernel32/nls/esf.nls    |  1 +
  dlls/kernel32/nls/esg.nls    |  1 +
  dlls/kernel32/nls/esh.nls    |  1 +
  dlls/kernel32/nls/esi.nls    |  1 +
  dlls/kernel32/nls/esl.nls    |  1 +
  dlls/kernel32/nls/esm.nls    |  1 +
  dlls/kernel32/nls/esn.nls    |  1 +
  dlls/kernel32/nls/eso.nls    |  1 +
  dlls/kernel32/nls/esp.nls    |  1 +
  dlls/kernel32/nls/esr.nls    |  1 +
  dlls/kernel32/nls/ess.nls    |  1 +
  dlls/kernel32/nls/esu.nls    |  1 +
  dlls/kernel32/nls/esv.nls    |  1 +
  dlls/kernel32/nls/esy.nls    |  1 +
  dlls/kernel32/nls/esz.nls    |  1 +
  dlls/kernel32/nls/eti.nls    |  1 +
  dlls/kernel32/nls/euq.nls    |  1 +
  dlls/kernel32/nls/far.nls    |  1 +
  dlls/kernel32/nls/fin.nls    |  1 +
  dlls/kernel32/nls/fos.nls    |  1 +
  dlls/kernel32/nls/fra.nls    |  1 +
  dlls/kernel32/nls/frb.nls    |  1 +
  dlls/kernel32/nls/frc.nls    |  1 +
  dlls/kernel32/nls/frl.nls    |  1 +
  dlls/kernel32/nls/frm.nls    |  1 +
  dlls/kernel32/nls/frs.nls    |  1 +
  dlls/kernel32/nls/gae.nls    |  1 +
  dlls/kernel32/nls/gdh.nls    |  1 +
  dlls/kernel32/nls/gdv.nls    |  1 +
  dlls/kernel32/nls/glc.nls    |  1 +
  dlls/kernel32/nls/guj.nls    |  1 +
  dlls/kernel32/nls/heb.nls    |  1 +
  dlls/kernel32/nls/hin.nls    |  1 +
  dlls/kernel32/nls/hrv.nls    |  1 +
  dlls/kernel32/nls/hun.nls    |  1 +
  dlls/kernel32/nls/hye.nls    |  1 +
  dlls/kernel32/nls/ind.nls    |  1 +
  dlls/kernel32/nls/isl.nls    |  1 +
  dlls/kernel32/nls/ita.nls    |  1 +
  dlls/kernel32/nls/its.nls    |  1 +
  dlls/kernel32/nls/ivl.nls    |  1 +
  dlls/kernel32/nls/jpn.nls    |  1 +
  dlls/kernel32/nls/kan.nls    |  1 +
  dlls/kernel32/nls/kat.nls    |  1 +
  dlls/kernel32/nls/kkz.nls    |  1 +
  dlls/kernel32/nls/knk.nls    |  1 +
  dlls/kernel32/nls/kor.nls    |  1 +
  dlls/kernel32/nls/kyr.nls    |  1 +
  dlls/kernel32/nls/lth.nls    |  1 +
  dlls/kernel32/nls/lvi.nls    |  1 +
  dlls/kernel32/nls/mar.nls    |  1 +
  dlls/kernel32/nls/mki.nls    |  1 +
  dlls/kernel32/nls/mon.nls    |  1 +
  dlls/kernel32/nls/msb.nls    |  1 +
  dlls/kernel32/nls/msl.nls    |  1 +
  dlls/kernel32/nls/nep.nls    |  1 +
  dlls/kernel32/nls/nlb.nls    |  1 +
  dlls/kernel32/nls/nld.nls    |  1 +
  dlls/kernel32/nls/nls.nls    |  1 +
  dlls/kernel32/nls/non.nls    |  1 +
  dlls/kernel32/nls/nor.nls    |  1 +
  dlls/kernel32/nls/pan.nls    |  1 +
  dlls/kernel32/nls/plk.nls    |  1 +
  dlls/kernel32/nls/ptb.nls    |  1 +
  dlls/kernel32/nls/ptg.nls    |  1 +
  dlls/kernel32/nls/rmc.nls    |  1 +
  dlls/kernel32/nls/rom.nls    |  1 +
  dlls/kernel32/nls/rus.nls    |  1 +
  dlls/kernel32/nls/san.nls    |  1 +
  dlls/kernel32/nls/sky.nls    |  1 +
  dlls/kernel32/nls/slv.nls    |  1 +
  dlls/kernel32/nls/sqi.nls    |  1 +
  dlls/kernel32/nls/srb.nls    |  1 +
  dlls/kernel32/nls/srl.nls    |  1 +
  dlls/kernel32/nls/sve.nls    |  1 +
  dlls/kernel32/nls/svf.nls    |  1 +
  dlls/kernel32/nls/swk.nls    |  1 +
  dlls/kernel32/nls/syr.nls    |  1 +
  dlls/kernel32/nls/tam.nls    |  1 +
  dlls/kernel32/nls/tel.nls    |  1 +
  dlls/kernel32/nls/tha.nls    |  1 +
  dlls/kernel32/nls/trk.nls    |  1 +
  dlls/kernel32/nls/ttt.nls    |  1 +
  dlls/kernel32/nls/ukr.nls    |  1 +
  dlls/kernel32/nls/urd.nls    |  1 +
  dlls/kernel32/nls/uzb.nls    |  1 +
  dlls/kernel32/nls/uzl.nls    |  1 +
  dlls/kernel32/nls/vit.nls    |  1 +
  dlls/kernel32/nls/wal.nls    |  1 +
  dlls/kernel32/nls/zhh.nls    |  1 +
  dlls/kernel32/nls/zhi.nls    |  1 +
  dlls/kernel32/nls/zhm.nls    |  1 +
  dlls/kernel32/tests/locale.c | 18 ++++++++--------
  150 files changed, 201 insertions(+), 14 deletions(-)

diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index 64966e540c..f82d8a4eda 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -148,7 +148,7 @@ struct locale_name
      WCHAR *script;          /* script ("Latn") for Windows format only */
      WCHAR *modifier;        /* modifier or sort order */
      LCID   lcid;            /* corresponding LCID */
-    int    matches;         /* number of elements matching LCID (0..4) */
+    int    matches;         /* number of elements matching LCID (0..5) */
      UINT   codepage;        /* codepage corresponding to charset */
  };

@@ -375,6 +375,31 @@ static WORD get_default_sublang(LCID lang)
      }
  }

+struct default_children_lang_t{
+    WCHAR parent[15];
+    WCHAR children[15];
+};
+
+static const struct default_children_lang_t default_children_lang[]={
+    {{'z','h','-','H','a','n','t',0},{'z','h','-','H','K',0}},
+    {{'z','h','-','H','a','n','s',0},{'z','h','-','C','N',0}},
+    {{0}}
+};
+
+static const WCHAR *get_default_children(const WCHAR *parent)
+{
+    const struct default_children_lang_t *ptr = default_children_lang;
+    while (*ptr->parent)
+    {
+        if (!strcmpiW(parent, ptr->parent ))
+        {
+            return ptr->children;
+        }
+        ptr++;
+    }
+    return parent;
+}
+
  /***********************************************************************
   *           find_locale_id_callback
   */
@@ -383,6 +408,7 @@ static BOOL CALLBACK find_locale_id_callback( 
HMODULE hModule, LPCWSTR type,
  {
      struct locale_name *data = (struct locale_name *)lParam;
      WCHAR buffer[128];
+    WCHAR sname[128];
      int matches = 0;
      LCID lcid = MAKELCID( LangID, SORT_DEFAULT );  /* FIXME: handle 
sort order */

@@ -395,9 +421,13 @@ static BOOL CALLBACK find_locale_id_callback( 
HMODULE hModule, LPCWSTR type,
      {
          if (!strcmpiW( data->win_name, buffer ))
          {
-            matches = 4;  /* everything matches */
+            matches = 5;  /* everything matches */
              goto done;
          }
+        else
+        {
+            strcpyW(sname, buffer);
+        }
      }

      if (!GetLocaleInfoW( lcid, LOCALE_SISO639LANGNAME | 
LOCALE_NOUSEROVERRIDE,
@@ -406,6 +436,15 @@ static BOOL CALLBACK find_locale_id_callback( 
HMODULE hModule, LPCWSTR type,
      if (strcmpiW( buffer, data->lang )) return TRUE;
      matches++;  /* language name matched */

+    /* check if matches parent language and it's the default children 
language */
+    if (data->win_name[0] &&
+        GetLocaleInfoW( lcid, LOCALE_SPARENT | LOCALE_NOUSEROVERRIDE,
+                        buffer, sizeof(buffer)/sizeof(WCHAR) ))
+    {
+        if (!strcmpiW( data->win_name, buffer )&&
+            !strcmpiW( sname, get_default_children(buffer) )) matches++;
+    }
+
      if (data->country)
      {
          if (GetLocaleInfoW( lcid, 
LOCALE_SISO3166CTRYNAME|LOCALE_NOUSEROVERRIDE,
@@ -438,7 +477,7 @@ done:
          data->lcid = lcid;
          data->matches = matches;
      }
-    return (data->matches < 4);  /* no need to continue for perfect 
match */
+    return (data->matches < 5);  /* no need to continue for perfect 
match */
  }


@@ -471,7 +510,7 @@ static void parse_locale_name( const WCHAR *str, 
struct locale_name *name )
      if (!*name->lang)
      {
          name->lcid = LOCALE_INVARIANT;
-        name->matches = 4;
+        name->matches = 5;
          return;
      }

@@ -479,7 +518,7 @@ static void parse_locale_name( const WCHAR *str, 
struct locale_name *name )
      {
          if (!strcmpW( name->lang, posixW ) || !strcmpW( name->lang, cW ))
          {
-            name->matches = 4;  /* perfect match for default English 
lcid */
+            name->matches = 5;  /* perfect match for default English 
lcid */
              return;
          }
          strcpyW( name->win_name, name->lang );
diff --git a/dlls/kernel32/nls/afk.nls b/dlls/kernel32/nls/afk.nls
index 5feb5f70ef..350b3c31fd 100644
--- a/dlls/kernel32/nls/afk.nls
+++ b/dlls/kernel32/nls/afk.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_AFRIKAANS, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "AFK "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "af"
    LOCALE_SSHORTDATE "yyyy/MM/dd"
    LOCALE_SSHORTESTDAYNAME1 "Ma"
    LOCALE_SSHORTESTDAYNAME2 "Di"
diff --git a/dlls/kernel32/nls/ara.nls b/dlls/kernel32/nls/ara.nls
index c684107307..a7a3937156 100644
--- a/dlls/kernel32/nls/ara.nls
+++ b/dlls/kernel32/nls/ara.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, 
SUBLANG_ARABIC_SAUDI_ARABIA
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arb.nls b/dlls/kernel32/nls/arb.nls
index f6101b8a51..8bc2ba1f33 100644
--- a/dlls/kernel32/nls/arb.nls
+++ b/dlls/kernel32/nls/arb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_LEBANON
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/are.nls b/dlls/kernel32/nls/are.nls
index d777814ae3..6b94dd68a0 100644
--- a/dlls/kernel32/nls/are.nls
+++ b/dlls/kernel32/nls/are.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_EGYPT
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arg.nls b/dlls/kernel32/nls/arg.nls
index b5b9d17b18..38ea3631a8 100644
--- a/dlls/kernel32/nls/arg.nls
+++ b/dlls/kernel32/nls/arg.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_ALGERIA
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arh.nls b/dlls/kernel32/nls/arh.nls
index 8c180b1918..c945fceac0 100644
--- a/dlls/kernel32/nls/arh.nls
+++ b/dlls/kernel32/nls/arh.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_BAHRAIN
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/ari.nls b/dlls/kernel32/nls/ari.nls
index ca40a033f7..e827848bc9 100644
--- a/dlls/kernel32/nls/ari.nls
+++ b/dlls/kernel32/nls/ari.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_IRAQ
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arj.nls b/dlls/kernel32/nls/arj.nls
index 662fde2c3d..5875937635 100644
--- a/dlls/kernel32/nls/arj.nls
+++ b/dlls/kernel32/nls/arj.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_JORDAN
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/ark.nls b/dlls/kernel32/nls/ark.nls
index 5ea5acecff..f9a64487a0 100644
--- a/dlls/kernel32/nls/ark.nls
+++ b/dlls/kernel32/nls/ark.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_KUWAIT
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arl.nls b/dlls/kernel32/nls/arl.nls
index 742fe15d2e..540b39e076 100644
--- a/dlls/kernel32/nls/arl.nls
+++ b/dlls/kernel32/nls/arl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_LIBYA
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arm.nls b/dlls/kernel32/nls/arm.nls
index d54d1d0605..416e9cb3db 100644
--- a/dlls/kernel32/nls/arm.nls
+++ b/dlls/kernel32/nls/arm.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_MOROCCO
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/aro.nls b/dlls/kernel32/nls/aro.nls
index e36131da67..faaf5a3837 100644
--- a/dlls/kernel32/nls/aro.nls
+++ b/dlls/kernel32/nls/aro.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_OMAN
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/arq.nls b/dlls/kernel32/nls/arq.nls
index 2274aac3a3..4c983af220 100644
--- a/dlls/kernel32/nls/arq.nls
+++ b/dlls/kernel32/nls/arq.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_QATAR
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/ars.nls b/dlls/kernel32/nls/ars.nls
index 5fbe7660b6..9e731826d3 100644
--- a/dlls/kernel32/nls/ars.nls
+++ b/dlls/kernel32/nls/ars.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_SYRIA
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/art.nls b/dlls/kernel32/nls/art.nls
index 27c4cf8f75..a647bbdc94 100644
--- a/dlls/kernel32/nls/art.nls
+++ b/dlls/kernel32/nls/art.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_TUNISIA
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/aru.nls b/dlls/kernel32/nls/aru.nls
index d40f145292..64d4b71f0b 100644
--- a/dlls/kernel32/nls/aru.nls
+++ b/dlls/kernel32/nls/aru.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_UAE
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/ary.nls b/dlls/kernel32/nls/ary.nls
index 8b373d6922..ed7549eeb8 100644
--- a/dlls/kernel32/nls/ary.nls
+++ b/dlls/kernel32/nls/ary.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_YEMEN
    LOCALE_SOPENTYPELANGUAGETAG "ARA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ar"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ن"
    LOCALE_SSHORTESTDAYNAME2 "ث"
diff --git a/dlls/kernel32/nls/aze.nls b/dlls/kernel32/nls/aze.nls
index 61d0c3c305..cb8d384a97 100644
--- a/dlls/kernel32/nls/aze.nls
+++ b/dlls/kernel32/nls/aze.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_AZERI, SUBLANG_AZERI_CYRILLIC
    LOCALE_SOPENTYPELANGUAGETAG "AZE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "az-Cyrl"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Бе"
    LOCALE_SSHORTESTDAYNAME2 "Ча"
diff --git a/dlls/kernel32/nls/azl.nls b/dlls/kernel32/nls/azl.nls
index ad47178fad..6c5233a238 100644
--- a/dlls/kernel32/nls/azl.nls
+++ b/dlls/kernel32/nls/azl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_AZERI, SUBLANG_AZERI_LATIN
    LOCALE_SOPENTYPELANGUAGETAG "AZE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "az-Latn"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Be"
    LOCALE_SSHORTESTDAYNAME2 "Ça"
diff --git a/dlls/kernel32/nls/bel.nls b/dlls/kernel32/nls/bel.nls
index 7ece0bcca4..3d046ba729 100644
--- a/dlls/kernel32/nls/bel.nls
+++ b/dlls/kernel32/nls/bel.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_BELARUSIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "BEL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "be"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "пн"
    LOCALE_SSHORTESTDAYNAME2 "аў"
diff --git a/dlls/kernel32/nls/ben.nls b/dlls/kernel32/nls/ben.nls
index 6bb489f0f5..d848937c2f 100644
--- a/dlls/kernel32/nls/ben.nls
+++ b/dlls/kernel32/nls/ben.nls
@@ -128,6 +128,7 @@ STRINGTABLE LANGUAGE LANG_BANGLA, SUBLANG_BANGLA_INDIA
    LOCALE_SOPENTYPELANGUAGETAG "BEN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Beng;"
+  LOCALE_SPARENT "bn"
    LOCALE_SSHORTDATE "dd-MM-yy"
    LOCALE_SSHORTESTDAYNAME1 "স"
    LOCALE_SSHORTESTDAYNAME2 "ম"
diff --git a/dlls/kernel32/nls/bgr.nls b/dlls/kernel32/nls/bgr.nls
index 4880d55254..7c8732886f 100644
--- a/dlls/kernel32/nls/bgr.nls
+++ b/dlls/kernel32/nls/bgr.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "BGR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "bg"
    LOCALE_SSHORTDATE "dd.M.yyyy 'г.'"
    LOCALE_SSHORTESTDAYNAME1 "пн"
    LOCALE_SSHORTESTDAYNAME2 "вт"
diff --git a/dlls/kernel32/nls/brf.nls b/dlls/kernel32/nls/brf.nls
index 449bc8883a..1e19c50404 100644
--- a/dlls/kernel32/nls/brf.nls
+++ b/dlls/kernel32/nls/brf.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_BRETON, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "BRE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "L"
    LOCALE_SSHORTESTDAYNAME2 "Mz"
diff --git a/dlls/kernel32/nls/cat.nls b/dlls/kernel32/nls/cat.nls
index 9acb81f360..c2b386f9b1 100644
--- a/dlls/kernel32/nls/cat.nls
+++ b/dlls/kernel32/nls/cat.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "CAT "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "ca"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "dl"
    LOCALE_SSHORTESTDAYNAME2 "dt"
diff --git a/dlls/kernel32/nls/chs.nls b/dlls/kernel32/nls/chs.nls
index fa7fb6c64e..6dc66a3aa3 100644
--- a/dlls/kernel32/nls/chs.nls
+++ b/dlls/kernel32/nls/chs.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CHINESE, 
SUBLANG_CHINESE_SIMPLIFIED
    LOCALE_SOPENTYPELANGUAGETAG "ZHS "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hans;"
+  LOCALE_SPARENT "zh-Hans"
    LOCALE_SSHORTDATE "yyyy-M-d"
    LOCALE_SSHORTESTDAYNAME1 "一"
    LOCALE_SSHORTESTDAYNAME2 "二"
diff --git a/dlls/kernel32/nls/cht.nls b/dlls/kernel32/nls/cht.nls
index 20f1d4dbe3..c08b807a9d 100644
--- a/dlls/kernel32/nls/cht.nls
+++ b/dlls/kernel32/nls/cht.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CHINESE, 
SUBLANG_CHINESE_TRADITIONAL
    LOCALE_SOPENTYPELANGUAGETAG "ZHT "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hant;"
+  LOCALE_SPARENT "zh-Hant"
    LOCALE_SSHORTDATE "yyyy/M/d"
    LOCALE_SSHORTESTDAYNAME1 "一"
    LOCALE_SSHORTESTDAYNAME2 "二"
diff --git a/dlls/kernel32/nls/cor.nls b/dlls/kernel32/nls/cor.nls
index 9127def213..ab6cbde28b 100644
--- a/dlls/kernel32/nls/cor.nls
+++ b/dlls/kernel32/nls/cor.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_CORNISH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Lun"
    LOCALE_SSHORTESTDAYNAME2 "Mth"
diff --git a/dlls/kernel32/nls/csy.nls b/dlls/kernel32/nls/csy.nls
index 92156400bd..7d7aa0e94f 100644
--- a/dlls/kernel32/nls/csy.nls
+++ b/dlls/kernel32/nls/csy.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "CSY "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "cs"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "po"
    LOCALE_SSHORTESTDAYNAME2 "út"
diff --git a/dlls/kernel32/nls/cym.nls b/dlls/kernel32/nls/cym.nls
index 0a47c3694e..f609eb35f0 100644
--- a/dlls/kernel32/nls/cym.nls
+++ b/dlls/kernel32/nls/cym.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_WELSH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "WEL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Ll"
    LOCALE_SSHORTESTDAYNAME2 "Ma"
diff --git a/dlls/kernel32/nls/dan.nls b/dlls/kernel32/nls/dan.nls
index 554c6e9de7..ecd516e686 100644
--- a/dlls/kernel32/nls/dan.nls
+++ b/dlls/kernel32/nls/dan.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "DAN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "da"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ma"
    LOCALE_SSHORTESTDAYNAME2 "ti"
diff --git a/dlls/kernel32/nls/dea.nls b/dlls/kernel32/nls/dea.nls
index 6b647c8350..7b5147045f 100644
--- a/dlls/kernel32/nls/dea.nls
+++ b/dlls/kernel32/nls/dea.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GERMAN, 
SUBLANG_GERMAN_AUSTRIAN
    LOCALE_SOPENTYPELANGUAGETAG "DEU "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "de"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Di"
diff --git a/dlls/kernel32/nls/dec.nls b/dlls/kernel32/nls/dec.nls
index f4403dcb86..0a7a80c7eb 100644
--- a/dlls/kernel32/nls/dec.nls
+++ b/dlls/kernel32/nls/dec.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GERMAN, 
SUBLANG_GERMAN_LIECHTENSTEIN
    LOCALE_SOPENTYPELANGUAGETAG "DEU "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "de"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Di"
diff --git a/dlls/kernel32/nls/del.nls b/dlls/kernel32/nls/del.nls
index b80347de26..a57f71604e 100644
--- a/dlls/kernel32/nls/del.nls
+++ b/dlls/kernel32/nls/del.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GERMAN, 
SUBLANG_GERMAN_LUXEMBOURG
    LOCALE_SOPENTYPELANGUAGETAG "DEU "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "de"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Di"
diff --git a/dlls/kernel32/nls/des.nls b/dlls/kernel32/nls/des.nls
index a9fd1c7e0b..26b12878f7 100644
--- a/dlls/kernel32/nls/des.nls
+++ b/dlls/kernel32/nls/des.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GERMAN, SUBLANG_GERMAN_SWISS
    LOCALE_SOPENTYPELANGUAGETAG "DEU "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "de"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Di"
diff --git a/dlls/kernel32/nls/deu.nls b/dlls/kernel32/nls/deu.nls
index 57b92cc37a..83d88eb746 100644
--- a/dlls/kernel32/nls/deu.nls
+++ b/dlls/kernel32/nls/deu.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
    LOCALE_SOPENTYPELANGUAGETAG "DEU "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "de"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Di"
diff --git a/dlls/kernel32/nls/div.nls b/dlls/kernel32/nls/div.nls
index fda996556c..9fa2fd0e7e 100644
--- a/dlls/kernel32/nls/div.nls
+++ b/dlls/kernel32/nls/div.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_DIVEHI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "DIV "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Thaa;"
+  LOCALE_SPARENT "dv"
    LOCALE_SSHORTDATE "dd/MM/yy"
    LOCALE_SSHORTESTDAYNAME1 "ހޯ"
    LOCALE_SSHORTESTDAYNAME2 "އަ"
diff --git a/dlls/kernel32/nls/ell.nls b/dlls/kernel32/nls/ell.nls
index 59074fff19..63e8a2d157 100644
--- a/dlls/kernel32/nls/ell.nls
+++ b/dlls/kernel32/nls/ell.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "ELL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Grek;"
+  LOCALE_SPARENT "el"
    LOCALE_SSHORTDATE "d/M/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Δε"
    LOCALE_SSHORTESTDAYNAME2 "Τρ"
diff --git a/dlls/kernel32/nls/ena.nls b/dlls/kernel32/nls/ena.nls
index e46a607e85..26d51dae34 100644
--- a/dlls/kernel32/nls/ena.nls
+++ b/dlls/kernel32/nls/ena.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "d/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enb.nls b/dlls/kernel32/nls/enb.nls
index 7d7e011a63..fb79284514 100644
--- a/dlls/kernel32/nls/enb.nls
+++ b/dlls/kernel32/nls/enb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_CARIBBEAN
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "MM/dd/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enc.nls b/dlls/kernel32/nls/enc.nls
index 2b53ebf2e8..42cbe9e0c6 100644
--- a/dlls/kernel32/nls/enc.nls
+++ b/dlls/kernel32/nls/enc.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/eng.nls b/dlls/kernel32/nls/eng.nls
index 9f994fce16..5f66fe4262 100644
--- a/dlls/kernel32/nls/eng.nls
+++ b/dlls/kernel32/nls/eng.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/eni.nls b/dlls/kernel32/nls/eni.nls
index a020b47153..298a97d761 100644
--- a/dlls/kernel32/nls/eni.nls
+++ b/dlls/kernel32/nls/eni.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_EIRE
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enj.nls b/dlls/kernel32/nls/enj.nls
index f2dd80e71b..cf575e54ab 100644
--- a/dlls/kernel32/nls/enj.nls
+++ b/dlls/kernel32/nls/enj.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_JAMAICA
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enl.nls b/dlls/kernel32/nls/enl.nls
index 598f74e9fe..fd7b2bcd9e 100644
--- a/dlls/kernel32/nls/enl.nls
+++ b/dlls/kernel32/nls/enl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_BELIZE
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enp.nls b/dlls/kernel32/nls/enp.nls
index d9130ec73e..4c37be19fd 100644
--- a/dlls/kernel32/nls/enp.nls
+++ b/dlls/kernel32/nls/enp.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_PHILIPPINES
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "M/d/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/ens.nls b/dlls/kernel32/nls/ens.nls
index 66407476f0..6c8aa16f86 100644
--- a/dlls/kernel32/nls/ens.nls
+++ b/dlls/kernel32/nls/ens.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_SOUTH_AFRICA
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "yyyy/MM/dd"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/ent.nls b/dlls/kernel32/nls/ent.nls
index c0328fb13d..4285577596 100644
--- a/dlls/kernel32/nls/ent.nls
+++ b/dlls/kernel32/nls/ent.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_TRINIDAD
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enu.nls b/dlls/kernel32/nls/enu.nls
index b007178b3d..119b9cc18c 100644
--- a/dlls/kernel32/nls/enu.nls
+++ b/dlls/kernel32/nls/enu.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "M/d/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enw.nls b/dlls/kernel32/nls/enw.nls
index ec04ec1b07..26d04cb614 100644
--- a/dlls/kernel32/nls/enw.nls
+++ b/dlls/kernel32/nls/enw.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, 
SUBLANG_ENGLISH_ZIMBABWE
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "M/d/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/enz.nls b/dlls/kernel32/nls/enz.nls
index a954f313b9..66baca1783 100644
--- a/dlls/kernel32/nls/enz.nls
+++ b/dlls/kernel32/nls/enz.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_NZ
    LOCALE_SOPENTYPELANGUAGETAG "ENG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "en"
    LOCALE_SSHORTDATE "d/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/eox.nls b/dlls/kernel32/nls/eox.nls
index 62ab66dcc2..0dc82fe3a7 100644
--- a/dlls/kernel32/nls/eox.nls
+++ b/dlls/kernel32/nls/eox.nls
@@ -150,6 +150,7 @@ STRINGTABLE LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "dflt"
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "eo"
    LOCALE_SSHORTDATE "yyyy-mm-dd"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esa.nls b/dlls/kernel32/nls/esa.nls
index b30e054ee7..3b850095c3 100644
--- a/dlls/kernel32/nls/esa.nls
+++ b/dlls/kernel32/nls/esa.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_PANAMA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "MM/dd/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu."
    LOCALE_SSHORTESTDAYNAME2 "ma."
diff --git a/dlls/kernel32/nls/esb.nls b/dlls/kernel32/nls/esb.nls
index bc63d72f37..ade33beec1 100644
--- a/dlls/kernel32/nls/esb.nls
+++ b/dlls/kernel32/nls/esb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_BOLIVIA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esc.nls b/dlls/kernel32/nls/esc.nls
index 282a4a8793..d34eb31a0c 100644
--- a/dlls/kernel32/nls/esc.nls
+++ b/dlls/kernel32/nls/esc.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_COSTA_RICA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esd.nls b/dlls/kernel32/nls/esd.nls
index 96a05bb5bd..cd549adf4e 100644
--- a/dlls/kernel32/nls/esd.nls
+++ b/dlls/kernel32/nls/esd.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_DOMINICAN_REPUBLIC
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu."
    LOCALE_SSHORTESTDAYNAME2 "ma."
diff --git a/dlls/kernel32/nls/ese.nls b/dlls/kernel32/nls/ese.nls
index 19ea090a2e..b39fde0f5b 100644
--- a/dlls/kernel32/nls/ese.nls
+++ b/dlls/kernel32/nls/ese.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_EL_SALVADOR
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esf.nls b/dlls/kernel32/nls/esf.nls
index b53c86ed38..d3a5a7129d 100644
--- a/dlls/kernel32/nls/esf.nls
+++ b/dlls/kernel32/nls/esf.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_ECUADOR
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esg.nls b/dlls/kernel32/nls/esg.nls
index 419f6ed137..ed6fa4b0a7 100644
--- a/dlls/kernel32/nls/esg.nls
+++ b/dlls/kernel32/nls/esg.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_GUATEMALA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu."
    LOCALE_SSHORTESTDAYNAME2 "ma."
diff --git a/dlls/kernel32/nls/esh.nls b/dlls/kernel32/nls/esh.nls
index 67acf54aaf..701f55a1c0 100644
--- a/dlls/kernel32/nls/esh.nls
+++ b/dlls/kernel32/nls/esh.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_HONDURAS
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu."
    LOCALE_SSHORTESTDAYNAME2 "ma."
diff --git a/dlls/kernel32/nls/esi.nls b/dlls/kernel32/nls/esi.nls
index 9444247b02..8f0948e1f3 100644
--- a/dlls/kernel32/nls/esi.nls
+++ b/dlls/kernel32/nls/esi.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_NICARAGUA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esl.nls b/dlls/kernel32/nls/esl.nls
index f43602a9cc..04648a7ea5 100644
--- a/dlls/kernel32/nls/esl.nls
+++ b/dlls/kernel32/nls/esl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_CHILE
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esm.nls b/dlls/kernel32/nls/esm.nls
index e34e4de064..514ea13f56 100644
--- a/dlls/kernel32/nls/esm.nls
+++ b/dlls/kernel32/nls/esm.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_MEXICAN
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu."
    LOCALE_SSHORTESTDAYNAME2 "ma."
diff --git a/dlls/kernel32/nls/esn.nls b/dlls/kernel32/nls/esn.nls
index 87173fec45..627eda2e9e 100644
--- a/dlls/kernel32/nls/esn.nls
+++ b/dlls/kernel32/nls/esn.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_MODERN
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "L"
    LOCALE_SSHORTESTDAYNAME2 "M"
diff --git a/dlls/kernel32/nls/eso.nls b/dlls/kernel32/nls/eso.nls
index 3ae14af2df..3c4252a6e5 100644
--- a/dlls/kernel32/nls/eso.nls
+++ b/dlls/kernel32/nls/eso.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_COLOMBIA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu."
    LOCALE_SSHORTESTDAYNAME2 "ma."
diff --git a/dlls/kernel32/nls/esp.nls b/dlls/kernel32/nls/esp.nls
index 490d6b5e7e..3774e283d0 100644
--- a/dlls/kernel32/nls/esp.nls
+++ b/dlls/kernel32/nls/esp.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, SUBLANG_SPANISH
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esr.nls b/dlls/kernel32/nls/esr.nls
index 8e3b5ea7f3..937e3cba39 100644
--- a/dlls/kernel32/nls/esr.nls
+++ b/dlls/kernel32/nls/esr.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_PERU
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/ess.nls b/dlls/kernel32/nls/ess.nls
index 6f25c3c594..7819d4589d 100644
--- a/dlls/kernel32/nls/ess.nls
+++ b/dlls/kernel32/nls/ess.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_ARGENTINA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esu.nls b/dlls/kernel32/nls/esu.nls
index 6fa6bbb30f..fb1e411dcd 100644
--- a/dlls/kernel32/nls/esu.nls
+++ b/dlls/kernel32/nls/esu.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_PUERTO_RICO
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esv.nls b/dlls/kernel32/nls/esv.nls
index 6bd2f25573..31b1b8f918 100644
--- a/dlls/kernel32/nls/esv.nls
+++ b/dlls/kernel32/nls/esv.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_VENEZUELA
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esy.nls b/dlls/kernel32/nls/esy.nls
index e2d0a17058..f977cab0cd 100644
--- a/dlls/kernel32/nls/esy.nls
+++ b/dlls/kernel32/nls/esy.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_URUGUAY
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/esz.nls b/dlls/kernel32/nls/esz.nls
index 960230c318..7e5d4aeaf1 100644
--- a/dlls/kernel32/nls/esz.nls
+++ b/dlls/kernel32/nls/esz.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SPANISH, 
SUBLANG_SPANISH_PARAGUAY
    LOCALE_SOPENTYPELANGUAGETAG "ESP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "es"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/eti.nls b/dlls/kernel32/nls/eti.nls
index 1d7738eb72..2a04fabb10 100644
--- a/dlls/kernel32/nls/eti.nls
+++ b/dlls/kernel32/nls/eti.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "ETI "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "et"
    LOCALE_SSHORTDATE "d.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "E"
    LOCALE_SSHORTESTDAYNAME2 "T"
diff --git a/dlls/kernel32/nls/euq.nls b/dlls/kernel32/nls/euq.nls
index ba344f6413..ede760e1dc 100644
--- a/dlls/kernel32/nls/euq.nls
+++ b/dlls/kernel32/nls/euq.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_BASQUE, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "EUQ "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "eu"
    LOCALE_SSHORTDATE "yyyy/MM/dd"
    LOCALE_SSHORTESTDAYNAME1 "al"
    LOCALE_SSHORTESTDAYNAME2 "as"
diff --git a/dlls/kernel32/nls/far.nls b/dlls/kernel32/nls/far.nls
index e1f169f070..4b598b4ad8 100644
--- a/dlls/kernel32/nls/far.nls
+++ b/dlls/kernel32/nls/far.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_PERSIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "FAR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "fa"
    LOCALE_SSHORTDATE "yyyy/MM/dd"
    LOCALE_SSHORTESTDAYNAME1 "د"
    LOCALE_SSHORTESTDAYNAME2 "س"
diff --git a/dlls/kernel32/nls/fin.nls b/dlls/kernel32/nls/fin.nls
index 23cb8aa72e..ab6d4e1140 100644
--- a/dlls/kernel32/nls/fin.nls
+++ b/dlls/kernel32/nls/fin.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "FIN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fi"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ma"
    LOCALE_SSHORTESTDAYNAME2 "ti"
diff --git a/dlls/kernel32/nls/fos.nls b/dlls/kernel32/nls/fos.nls
index 0d57c4cf82..eaca95cb28 100644
--- a/dlls/kernel32/nls/fos.nls
+++ b/dlls/kernel32/nls/fos.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FAEROESE, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "FOS "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fo"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "má"
    LOCALE_SSHORTESTDAYNAME2 "tý"
diff --git a/dlls/kernel32/nls/fra.nls b/dlls/kernel32/nls/fra.nls
index 626cc627ee..d0046a34f6 100644
--- a/dlls/kernel32/nls/fra.nls
+++ b/dlls/kernel32/nls/fra.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
    LOCALE_SOPENTYPELANGUAGETAG "FRA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/frb.nls b/dlls/kernel32/nls/frb.nls
index 3453035fa1..a4732e33b7 100644
--- a/dlls/kernel32/nls/frb.nls
+++ b/dlls/kernel32/nls/frb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FRENCH, SUBLANG_FRENCH_BELGIAN
    LOCALE_SOPENTYPELANGUAGETAG "FRA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "d/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/frc.nls b/dlls/kernel32/nls/frc.nls
index 4ddad7810a..9a617b1af7 100644
--- a/dlls/kernel32/nls/frc.nls
+++ b/dlls/kernel32/nls/frc.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FRENCH, 
SUBLANG_FRENCH_CANADIAN
    LOCALE_SOPENTYPELANGUAGETAG "FRA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "yyyy-MM-dd"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/frl.nls b/dlls/kernel32/nls/frl.nls
index ec73cd3675..d3b5e8ff2a 100644
--- a/dlls/kernel32/nls/frl.nls
+++ b/dlls/kernel32/nls/frl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FRENCH, 
SUBLANG_FRENCH_LUXEMBOURG
    LOCALE_SOPENTYPELANGUAGETAG "FRA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/frm.nls b/dlls/kernel32/nls/frm.nls
index 82c69d73e3..cf917ebc48 100644
--- a/dlls/kernel32/nls/frm.nls
+++ b/dlls/kernel32/nls/frm.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FRENCH, SUBLANG_FRENCH_MONACO
    LOCALE_SOPENTYPELANGUAGETAG "FRA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/frs.nls b/dlls/kernel32/nls/frs.nls
index 0deddc0092..4249939da9 100644
--- a/dlls/kernel32/nls/frs.nls
+++ b/dlls/kernel32/nls/frs.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_FRENCH, SUBLANG_FRENCH_SWISS
    LOCALE_SOPENTYPELANGUAGETAG "FRA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "fr"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/gae.nls b/dlls/kernel32/nls/gae.nls
index ff0de1483a..1d551048c2 100644
--- a/dlls/kernel32/nls/gae.nls
+++ b/dlls/kernel32/nls/gae.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_IRISH, SUBLANG_IRISH_IRELAND
    LOCALE_SOPENTYPELANGUAGETAG "IRI "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "ga"
    LOCALE_SSHORTDATE "d/M/yy"
    LOCALE_SSHORTESTDAYNAME1 "Lu"
    LOCALE_SSHORTESTDAYNAME2 "Má"
diff --git a/dlls/kernel32/nls/gdh.nls b/dlls/kernel32/nls/gdh.nls
index 75941111f7..5718482efe 100644
--- a/dlls/kernel32/nls/gdh.nls
+++ b/dlls/kernel32/nls/gdh.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_SCOTTISH_GAELIC, 
SUBLANG_SCOTTISH_GAELIC
    LOCALE_SOPENTYPELANGUAGETAG "GAE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "gd"
    LOCALE_SSHORTDATE "dd/MM/yy"
    LOCALE_SSHORTESTDAYNAME1 "Lu"
    LOCALE_SSHORTESTDAYNAME2 "Mà"
diff --git a/dlls/kernel32/nls/gdv.nls b/dlls/kernel32/nls/gdv.nls
index 5e6d08fbed..5410325738 100644
--- a/dlls/kernel32/nls/gdv.nls
+++ b/dlls/kernel32/nls/gdv.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_MANX_GAELIC, 
SUBLANG_MANX_GAELIC
    LOCALE_SOPENTYPELANGUAGETAG "GAE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "gv"
    LOCALE_SSHORTDATE "dd/MM/yy"
    LOCALE_SSHORTESTDAYNAME1 "Jelu"
    LOCALE_SSHORTESTDAYNAME2 "Jema"
diff --git a/dlls/kernel32/nls/glc.nls b/dlls/kernel32/nls/glc.nls
index ce2d0b2470..8d960cb16f 100644
--- a/dlls/kernel32/nls/glc.nls
+++ b/dlls/kernel32/nls/glc.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GALICIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "GAL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "gl"
    LOCALE_SSHORTDATE "dd/MM/yy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/guj.nls b/dlls/kernel32/nls/guj.nls
index 354265f3dd..1f2b5f77d8 100644
--- a/dlls/kernel32/nls/guj.nls
+++ b/dlls/kernel32/nls/guj.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GUJARATI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "GUJ "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Gujr;"
+  LOCALE_SPARENT "gu"
    LOCALE_SSHORTDATE "dd-MM-yy"
    LOCALE_SSHORTESTDAYNAME1 "સો"
    LOCALE_SSHORTESTDAYNAME2 "મં"
diff --git a/dlls/kernel32/nls/heb.nls b/dlls/kernel32/nls/heb.nls
index eb93db35ba..8f11521502 100644
--- a/dlls/kernel32/nls/heb.nls
+++ b/dlls/kernel32/nls/heb.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "IWR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hebr;"
+  LOCALE_SPARENT "he"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ב"
    LOCALE_SSHORTESTDAYNAME2 "ג"
diff --git a/dlls/kernel32/nls/hin.nls b/dlls/kernel32/nls/hin.nls
index 5ffe01a187..a37fb1ab2d 100644
--- a/dlls/kernel32/nls/hin.nls
+++ b/dlls/kernel32/nls/hin.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_HINDI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "HIN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Deva;"
+  LOCALE_SPARENT "hi"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "स"
    LOCALE_SSHORTESTDAYNAME2 "म"
diff --git a/dlls/kernel32/nls/hrv.nls b/dlls/kernel32/nls/hrv.nls
index 421de824f0..a67d0c4dde 100644
--- a/dlls/kernel32/nls/hrv.nls
+++ b/dlls/kernel32/nls/hrv.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "HRV "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "hr"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "po"
    LOCALE_SSHORTESTDAYNAME2 "ut"
diff --git a/dlls/kernel32/nls/hun.nls b/dlls/kernel32/nls/hun.nls
index 00f5b68463..8a5e41d5c7 100644
--- a/dlls/kernel32/nls/hun.nls
+++ b/dlls/kernel32/nls/hun.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "HUN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "hu"
    LOCALE_SSHORTDATE "yyyy. MM. dd."
    LOCALE_SSHORTESTDAYNAME1 "H"
    LOCALE_SSHORTESTDAYNAME2 "K"
diff --git a/dlls/kernel32/nls/hye.nls b/dlls/kernel32/nls/hye.nls
index 1a4c6a9722..6dfe6b5802 100644
--- a/dlls/kernel32/nls/hye.nls
+++ b/dlls/kernel32/nls/hye.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ARMENIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "HYE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Armn;"
+  LOCALE_SPARENT "hy"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Ե"
    LOCALE_SSHORTESTDAYNAME2 "Ե"
diff --git a/dlls/kernel32/nls/ind.nls b/dlls/kernel32/nls/ind.nls
index e9c8174097..be1e701e47 100644
--- a/dlls/kernel32/nls/ind.nls
+++ b/dlls/kernel32/nls/ind.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "IND "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "id"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "S"
    LOCALE_SSHORTESTDAYNAME2 "S"
diff --git a/dlls/kernel32/nls/isl.nls b/dlls/kernel32/nls/isl.nls
index 435d4de876..254ddefe03 100644
--- a/dlls/kernel32/nls/isl.nls
+++ b/dlls/kernel32/nls/isl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ICELANDIC, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "ISL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "is"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "má"
    LOCALE_SSHORTESTDAYNAME2 "þr"
diff --git a/dlls/kernel32/nls/ita.nls b/dlls/kernel32/nls/ita.nls
index 9a697d7b5e..43b9418f2e 100644
--- a/dlls/kernel32/nls/ita.nls
+++ b/dlls/kernel32/nls/ita.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
    LOCALE_SOPENTYPELANGUAGETAG "ITA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "it"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/its.nls b/dlls/kernel32/nls/its.nls
index 5c83df9198..9307175b4b 100644
--- a/dlls/kernel32/nls/its.nls
+++ b/dlls/kernel32/nls/its.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN_SWISS
    LOCALE_SOPENTYPELANGUAGETAG "ITA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "it"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lu"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/ivl.nls b/dlls/kernel32/nls/ivl.nls
index ef941c6851..c1f689f7e7 100644
--- a/dlls/kernel32/nls/ivl.nls
+++ b/dlls/kernel32/nls/ivl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_INVARIANT, SUBLANG_NEUTRAL
    LOCALE_SOPENTYPELANGUAGETAG "dflt"
    LOCALE_SPOSITIVESIGN "+"
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "iv"
    LOCALE_SSHORTDATE "MM/dd/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Mo"
    LOCALE_SSHORTESTDAYNAME2 "Tu"
diff --git a/dlls/kernel32/nls/jpn.nls b/dlls/kernel32/nls/jpn.nls
index 1a0372e32b..8025f6b265 100644
--- a/dlls/kernel32/nls/jpn.nls
+++ b/dlls/kernel32/nls/jpn.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "JAN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hani;Hira;Kana;"
+  LOCALE_SPARENT "ja"
    LOCALE_SSHORTDATE "yyyy/MM/dd"
    LOCALE_SSHORTESTDAYNAME1 "月"
    LOCALE_SSHORTESTDAYNAME2 "火"
diff --git a/dlls/kernel32/nls/kan.nls b/dlls/kernel32/nls/kan.nls
index 038541d8f2..15a45cbf20 100644
--- a/dlls/kernel32/nls/kan.nls
+++ b/dlls/kernel32/nls/kan.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_KANNADA, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "KAN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Knda;"
+  LOCALE_SPARENT "kn"
    LOCALE_SSHORTDATE "dd-MM-yy"
    LOCALE_SSHORTESTDAYNAME1 "ಸ"
    LOCALE_SSHORTESTDAYNAME2 "ಮ"
diff --git a/dlls/kernel32/nls/kat.nls b/dlls/kernel32/nls/kat.nls
index 86b74411b8..0d366acc93 100644
--- a/dlls/kernel32/nls/kat.nls
+++ b/dlls/kernel32/nls/kat.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_GEORGIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "KAT "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Geor;"
+  LOCALE_SPARENT "ka"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ორ"
    LOCALE_SSHORTESTDAYNAME2 "სმ"
diff --git a/dlls/kernel32/nls/kkz.nls b/dlls/kernel32/nls/kkz.nls
index f6d0f58572..65808f53c1 100644
--- a/dlls/kernel32/nls/kkz.nls
+++ b/dlls/kernel32/nls/kkz.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_KAZAK, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "KAZ "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "kk"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Дс"
    LOCALE_SSHORTESTDAYNAME2 "Сс"
diff --git a/dlls/kernel32/nls/knk.nls b/dlls/kernel32/nls/knk.nls
index 06e2af76e8..ac09939eaf 100644
--- a/dlls/kernel32/nls/knk.nls
+++ b/dlls/kernel32/nls/knk.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_KONKANI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "KOK "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Deva;"
+  LOCALE_SPARENT "kok"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "स"
    LOCALE_SSHORTESTDAYNAME2 "म"
diff --git a/dlls/kernel32/nls/kor.nls b/dlls/kernel32/nls/kor.nls
index 36fa3bf887..aceeb83a9c 100644
--- a/dlls/kernel32/nls/kor.nls
+++ b/dlls/kernel32/nls/kor.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_KOREAN, SUBLANG_KOREAN
    LOCALE_SOPENTYPELANGUAGETAG "KOR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hang;Hani;"
+  LOCALE_SPARENT "ko"
    LOCALE_SSHORTDATE "yyyy-MM-dd"
    LOCALE_SSHORTESTDAYNAME1 "월"
    LOCALE_SSHORTESTDAYNAME2 "화"
diff --git a/dlls/kernel32/nls/kyr.nls b/dlls/kernel32/nls/kyr.nls
index 26322b0d85..a4939e0a56 100644
--- a/dlls/kernel32/nls/kyr.nls
+++ b/dlls/kernel32/nls/kyr.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_KYRGYZ, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "KIR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "ky"
    LOCALE_SSHORTDATE "dd.MM.yy"
    LOCALE_SSHORTESTDAYNAME1 "Дш"
    LOCALE_SSHORTESTDAYNAME2 "Шш"
diff --git a/dlls/kernel32/nls/lth.nls b/dlls/kernel32/nls/lth.nls
index e3d551441f..21332f7df1 100644
--- a/dlls/kernel32/nls/lth.nls
+++ b/dlls/kernel32/nls/lth.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_LITHUANIAN, SUBLANG_LITHUANIAN
    LOCALE_SOPENTYPELANGUAGETAG "LTH "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "lt"
    LOCALE_SSHORTDATE "yyyy.MM.dd"
    LOCALE_SSHORTESTDAYNAME1 "P"
    LOCALE_SSHORTESTDAYNAME2 "A"
diff --git a/dlls/kernel32/nls/lvi.nls b/dlls/kernel32/nls/lvi.nls
index 649f9d9a11..226e0fd7f3 100644
--- a/dlls/kernel32/nls/lvi.nls
+++ b/dlls/kernel32/nls/lvi.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_LATVIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "LVI "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "lv"
    LOCALE_SSHORTDATE "yyyy.MM.dd."
    LOCALE_SSHORTESTDAYNAME1 "pr"
    LOCALE_SSHORTESTDAYNAME2 "ot"
diff --git a/dlls/kernel32/nls/mar.nls b/dlls/kernel32/nls/mar.nls
index e56da36f18..49e847c600 100644
--- a/dlls/kernel32/nls/mar.nls
+++ b/dlls/kernel32/nls/mar.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_MARATHI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "MAR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Mlym;"
+  LOCALE_SPARENT "mr"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "सो"
    LOCALE_SSHORTESTDAYNAME2 "मं"
diff --git a/dlls/kernel32/nls/mki.nls b/dlls/kernel32/nls/mki.nls
index 3c7f3d3a7c..979430a78b 100644
--- a/dlls/kernel32/nls/mki.nls
+++ b/dlls/kernel32/nls/mki.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_MACEDONIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "MKD "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "mk"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "по"
    LOCALE_SSHORTESTDAYNAME2 "вт"
diff --git a/dlls/kernel32/nls/mon.nls b/dlls/kernel32/nls/mon.nls
index fa983d8d02..b67e4b8243 100644
--- a/dlls/kernel32/nls/mon.nls
+++ b/dlls/kernel32/nls/mon.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_MONGOLIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "MNG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "mn-Cyrl"
    LOCALE_SSHORTDATE "yy.MM.dd"
    LOCALE_SSHORTESTDAYNAME1 "Да"
    LOCALE_SSHORTESTDAYNAME2 "Мя"
diff --git a/dlls/kernel32/nls/msb.nls b/dlls/kernel32/nls/msb.nls
index abb3665af5..f665bb7531 100644
--- a/dlls/kernel32/nls/msb.nls
+++ b/dlls/kernel32/nls/msb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_MALAY, 
SUBLANG_MALAY_BRUNEI_DARUSSALAM
    LOCALE_SOPENTYPELANGUAGETAG "MLY "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "ms"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "I"
    LOCALE_SSHORTESTDAYNAME2 "S"
diff --git a/dlls/kernel32/nls/msl.nls b/dlls/kernel32/nls/msl.nls
index 136618ac2f..53054c2131 100644
--- a/dlls/kernel32/nls/msl.nls
+++ b/dlls/kernel32/nls/msl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_MALAY, SUBLANG_MALAY_MALAYSIA
    LOCALE_SOPENTYPELANGUAGETAG "MLY "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "ms"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "I"
    LOCALE_SSHORTESTDAYNAME2 "S"
diff --git a/dlls/kernel32/nls/nep.nls b/dlls/kernel32/nls/nep.nls
index 4273c0caad..0f6d0ee176 100644
--- a/dlls/kernel32/nls/nep.nls
+++ b/dlls/kernel32/nls/nep.nls
@@ -128,6 +128,7 @@ STRINGTABLE LANGUAGE LANG_NEPALI, SUBLANG_NEPALI_NEPAL
    LOCALE_SOPENTYPELANGUAGETAG "NEP "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Deva;"
+  LOCALE_SPARENT "ne"
    LOCALE_SSHORTDATE "M/d/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "सो"
    LOCALE_SSHORTESTDAYNAME2 "म"
diff --git a/dlls/kernel32/nls/nlb.nls b/dlls/kernel32/nls/nlb.nls
index cb227c1d45..9b66b32a76 100644
--- a/dlls/kernel32/nls/nlb.nls
+++ b/dlls/kernel32/nls/nlb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_DUTCH, SUBLANG_DUTCH_BELGIAN
    LOCALE_SOPENTYPELANGUAGETAG "NLD "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "nl"
    LOCALE_SSHORTDATE "d/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ma"
    LOCALE_SSHORTESTDAYNAME2 "di"
diff --git a/dlls/kernel32/nls/nld.nls b/dlls/kernel32/nls/nld.nls
index 693ebf3aea..8f28f59960 100644
--- a/dlls/kernel32/nls/nld.nls
+++ b/dlls/kernel32/nls/nld.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_DUTCH, SUBLANG_DUTCH
    LOCALE_SOPENTYPELANGUAGETAG "NLD "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "nl"
    LOCALE_SSHORTDATE "d-M-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ma"
    LOCALE_SSHORTESTDAYNAME2 "di"
diff --git a/dlls/kernel32/nls/nls.nls b/dlls/kernel32/nls/nls.nls
index db76cdce76..47c1260d1e 100644
--- a/dlls/kernel32/nls/nls.nls
+++ b/dlls/kernel32/nls/nls.nls
@@ -140,6 +140,7 @@ STRINGTABLE LANGUAGE LANG_DUTCH, SUBLANG_DUTCH_SURINAM
    LOCALE_SOPENTYPELANGUAGETAG "NLD "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "nl"
    LOCALE_SSHORTDATE "d-M-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ma"
    LOCALE_SSHORTESTDAYNAME2 "di"
diff --git a/dlls/kernel32/nls/non.nls b/dlls/kernel32/nls/non.nls
index 800ada68a1..e328404168 100644
--- a/dlls/kernel32/nls/non.nls
+++ b/dlls/kernel32/nls/non.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_NORWEGIAN, 
SUBLANG_NORWEGIAN_NYNORSK
    LOCALE_SOPENTYPELANGUAGETAG "NYN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "nn"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "må"
    LOCALE_SSHORTESTDAYNAME2 "ty"
diff --git a/dlls/kernel32/nls/nor.nls b/dlls/kernel32/nls/nor.nls
index 7d271aab39..f887978aab 100644
--- a/dlls/kernel32/nls/nor.nls
+++ b/dlls/kernel32/nls/nor.nls
@@ -135,6 +135,7 @@ STRINGTABLE LANGUAGE LANG_NORWEGIAN, 
SUBLANG_NORWEGIAN_BOKMAL
    LOCALE_SOPENTYPELANGUAGETAG "NOR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "nb"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ma"
    LOCALE_SSHORTESTDAYNAME2 "ti"
diff --git a/dlls/kernel32/nls/pan.nls b/dlls/kernel32/nls/pan.nls
index a967147046..b562e5e600 100644
--- a/dlls/kernel32/nls/pan.nls
+++ b/dlls/kernel32/nls/pan.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_PUNJABI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "PAN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Guru;"
+  LOCALE_SPARENT "pa"
    LOCALE_SSHORTDATE "dd-MM-yy"
    LOCALE_SSHORTESTDAYNAME1 "ਸ"
    LOCALE_SSHORTESTDAYNAME2 "ਮ"
diff --git a/dlls/kernel32/nls/plk.nls b/dlls/kernel32/nls/plk.nls
index ecae165e24..8f0808ce2c 100644
--- a/dlls/kernel32/nls/plk.nls
+++ b/dlls/kernel32/nls/plk.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "PLK "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "pl"
    LOCALE_SSHORTDATE "yyyy-MM-dd"
    LOCALE_SSHORTESTDAYNAME1 "Pn"
    LOCALE_SSHORTESTDAYNAME2 "Wt"
diff --git a/dlls/kernel32/nls/ptb.nls b/dlls/kernel32/nls/ptb.nls
index 7aef9d9f39..eb6fc513cb 100644
--- a/dlls/kernel32/nls/ptb.nls
+++ b/dlls/kernel32/nls/ptb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_PORTUGUESE, 
SUBLANG_PORTUGUESE_BRAZILIAN
    LOCALE_SOPENTYPELANGUAGETAG "PTG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "pt"
    LOCALE_SSHORTDATE "d/M/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "S"
    LOCALE_SSHORTESTDAYNAME2 "T"
diff --git a/dlls/kernel32/nls/ptg.nls b/dlls/kernel32/nls/ptg.nls
index ac6b6196a7..ec71704f94 100644
--- a/dlls/kernel32/nls/ptg.nls
+++ b/dlls/kernel32/nls/ptg.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
    LOCALE_SOPENTYPELANGUAGETAG "PTG "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "pt"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "S"
    LOCALE_SSHORTESTDAYNAME2 "T"
diff --git a/dlls/kernel32/nls/rmc.nls b/dlls/kernel32/nls/rmc.nls
index f6d812d8e0..0277b5f5fe 100644
--- a/dlls/kernel32/nls/rmc.nls
+++ b/dlls/kernel32/nls/rmc.nls
@@ -145,6 +145,7 @@ STRINGTABLE LANGUAGE LANG_ROMANSH, 
SUBLANG_ROMANSH_SWITZERLAND
    LOCALE_SOPENTYPELANGUAGETAG "RMS "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "rm"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "gli"
    LOCALE_SSHORTESTDAYNAME2 "ma"
diff --git a/dlls/kernel32/nls/rom.nls b/dlls/kernel32/nls/rom.nls
index f4e4184355..8cc965c567 100644
--- a/dlls/kernel32/nls/rom.nls
+++ b/dlls/kernel32/nls/rom.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "ROM "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "ro"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "L"
    LOCALE_SSHORTESTDAYNAME2 "Ma"
diff --git a/dlls/kernel32/nls/rus.nls b/dlls/kernel32/nls/rus.nls
index c7ad110f7b..fcb55bb80a 100644
--- a/dlls/kernel32/nls/rus.nls
+++ b/dlls/kernel32/nls/rus.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "RUS "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "ru"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Пн"
    LOCALE_SSHORTESTDAYNAME2 "Вт"
diff --git a/dlls/kernel32/nls/san.nls b/dlls/kernel32/nls/san.nls
index bf3a3c0bc0..992d80cc18 100644
--- a/dlls/kernel32/nls/san.nls
+++ b/dlls/kernel32/nls/san.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SANSKRIT, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "SAN "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Deva;"
+  LOCALE_SPARENT "sa"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "सो"
    LOCALE_SSHORTESTDAYNAME2 "म"
diff --git a/dlls/kernel32/nls/sky.nls b/dlls/kernel32/nls/sky.nls
index 4e277fe1d4..ec04973f9c 100644
--- a/dlls/kernel32/nls/sky.nls
+++ b/dlls/kernel32/nls/sky.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "SKY "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sk"
    LOCALE_SSHORTDATE "d. M. yyyy"
    LOCALE_SSHORTESTDAYNAME1 "po"
    LOCALE_SSHORTESTDAYNAME2 "ut"
diff --git a/dlls/kernel32/nls/slv.nls b/dlls/kernel32/nls/slv.nls
index aae89b1c7a..3d0790c0e7 100644
--- a/dlls/kernel32/nls/slv.nls
+++ b/dlls/kernel32/nls/slv.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "SLV "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sl"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "po"
    LOCALE_SSHORTESTDAYNAME2 "to"
diff --git a/dlls/kernel32/nls/sqi.nls b/dlls/kernel32/nls/sqi.nls
index 7d97bcd446..7fda7bd589 100644
--- a/dlls/kernel32/nls/sqi.nls
+++ b/dlls/kernel32/nls/sqi.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_ALBANIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "SQI "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sq"
    LOCALE_SSHORTDATE "yyyy-MM-dd"
    LOCALE_SSHORTESTDAYNAME1 "H"
    LOCALE_SSHORTESTDAYNAME2 "M"
diff --git a/dlls/kernel32/nls/srb.nls b/dlls/kernel32/nls/srb.nls
index 73e727c4bf..4a3e006cc6 100644
--- a/dlls/kernel32/nls/srb.nls
+++ b/dlls/kernel32/nls/srb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, 
SUBLANG_SERBIAN_CYRILLIC
    LOCALE_SOPENTYPELANGUAGETAG "SRB "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "sr-Cyrl"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "по"
    LOCALE_SSHORTESTDAYNAME2 "ут"
diff --git a/dlls/kernel32/nls/srl.nls b/dlls/kernel32/nls/srl.nls
index b2da12f119..2566b17b48 100644
--- a/dlls/kernel32/nls/srl.nls
+++ b/dlls/kernel32/nls/srl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
    LOCALE_SOPENTYPELANGUAGETAG "SRB "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sr-Latn"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "po"
    LOCALE_SSHORTESTDAYNAME2 "ut"
diff --git a/dlls/kernel32/nls/sve.nls b/dlls/kernel32/nls/sve.nls
index e4beabcdf4..52db021b19 100644
--- a/dlls/kernel32/nls/sve.nls
+++ b/dlls/kernel32/nls/sve.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SWEDISH, SUBLANG_SWEDISH
    LOCALE_SOPENTYPELANGUAGETAG "SVE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sv"
    LOCALE_SSHORTDATE "yyyy-MM-dd"
    LOCALE_SSHORTESTDAYNAME1 "må"
    LOCALE_SSHORTESTDAYNAME2 "ti"
diff --git a/dlls/kernel32/nls/svf.nls b/dlls/kernel32/nls/svf.nls
index b5de8f8543..e92fc6ab17 100644
--- a/dlls/kernel32/nls/svf.nls
+++ b/dlls/kernel32/nls/svf.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SWEDISH, 
SUBLANG_SWEDISH_FINLAND
    LOCALE_SOPENTYPELANGUAGETAG "SVE "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sv"
    LOCALE_SSHORTDATE "d.M.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "må"
    LOCALE_SSHORTESTDAYNAME2 "ti"
diff --git a/dlls/kernel32/nls/swk.nls b/dlls/kernel32/nls/swk.nls
index 3923a05de9..b5c32e4b18 100644
--- a/dlls/kernel32/nls/swk.nls
+++ b/dlls/kernel32/nls/swk.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SWAHILI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "SWK "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "sw"
    LOCALE_SSHORTDATE "M/d/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "T"
    LOCALE_SSHORTESTDAYNAME2 "N"
diff --git a/dlls/kernel32/nls/syr.nls b/dlls/kernel32/nls/syr.nls
index 3c229d7788..4f84b8dc5e 100644
--- a/dlls/kernel32/nls/syr.nls
+++ b/dlls/kernel32/nls/syr.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_SYRIAC, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "SYR "
    LOCALE_SPOSITIVESIGN "+"
    LOCALE_SSCRIPTS "Syrc;"
+  LOCALE_SPARENT "syr"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "ܒ"
    LOCALE_SSHORTESTDAYNAME2 "ܓ"
diff --git a/dlls/kernel32/nls/tam.nls b/dlls/kernel32/nls/tam.nls
index 99030386f1..c860016cd0 100644
--- a/dlls/kernel32/nls/tam.nls
+++ b/dlls/kernel32/nls/tam.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_TAMIL, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "TAM "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Taml;"
+  LOCALE_SPARENT "ta"
    LOCALE_SSHORTDATE "dd-MM-yyyy"
    LOCALE_SSHORTESTDAYNAME1 "தி"
    LOCALE_SSHORTESTDAYNAME2 "செ"
diff --git a/dlls/kernel32/nls/tel.nls b/dlls/kernel32/nls/tel.nls
index e75f31fa69..6c96d3e018 100644
--- a/dlls/kernel32/nls/tel.nls
+++ b/dlls/kernel32/nls/tel.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_TELUGU, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "TEL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Telu;"
+  LOCALE_SPARENT "te"
    LOCALE_SSHORTDATE "dd-MM-yy"
    LOCALE_SSHORTESTDAYNAME1 "సో"
    LOCALE_SSHORTESTDAYNAME2 "మం"
diff --git a/dlls/kernel32/nls/tha.nls b/dlls/kernel32/nls/tha.nls
index ee4caf147e..9ffce8c329 100644
--- a/dlls/kernel32/nls/tha.nls
+++ b/dlls/kernel32/nls/tha.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_THAI, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "THA "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Thai;"
+  LOCALE_SPARENT "th"
    LOCALE_SSHORTDATE "d/M/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "จ"
    LOCALE_SSHORTESTDAYNAME2 "อ"
diff --git a/dlls/kernel32/nls/trk.nls b/dlls/kernel32/nls/trk.nls
index 8a5b798876..57184e5f25 100644
--- a/dlls/kernel32/nls/trk.nls
+++ b/dlls/kernel32/nls/trk.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "TRK "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "tr"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Pt"
    LOCALE_SSHORTESTDAYNAME2 "Sa"
diff --git a/dlls/kernel32/nls/ttt.nls b/dlls/kernel32/nls/ttt.nls
index 4890b3c27d..43b6fe54fd 100644
--- a/dlls/kernel32/nls/ttt.nls
+++ b/dlls/kernel32/nls/ttt.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_TATAR, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "TAT "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;" /* FIXME? */
+  LOCALE_SPARENT "tt"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "д"
    LOCALE_SSHORTESTDAYNAME2 "с"
diff --git a/dlls/kernel32/nls/ukr.nls b/dlls/kernel32/nls/ukr.nls
index 4c6acc9f9c..b5e608015f 100644
--- a/dlls/kernel32/nls/ukr.nls
+++ b/dlls/kernel32/nls/ukr.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "UKR "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "uk"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "Пн"
    LOCALE_SSHORTESTDAYNAME2 "Вт"
diff --git a/dlls/kernel32/nls/urd.nls b/dlls/kernel32/nls/urd.nls
index 9deb77e210..08e8a8deae 100644
--- a/dlls/kernel32/nls/urd.nls
+++ b/dlls/kernel32/nls/urd.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_URDU, SUBLANG_URDU_PAKISTAN
    LOCALE_SOPENTYPELANGUAGETAG "URD "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Arab;"
+  LOCALE_SPARENT "ur"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "پ"
    LOCALE_SSHORTESTDAYNAME2 "م"
diff --git a/dlls/kernel32/nls/uzb.nls b/dlls/kernel32/nls/uzb.nls
index c57b826f80..2d4cf3f30c 100644
--- a/dlls/kernel32/nls/uzb.nls
+++ b/dlls/kernel32/nls/uzb.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_UZBEK, SUBLANG_UZBEK_CYRILLIC
    LOCALE_SOPENTYPELANGUAGETAG "UZB "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Cyrl;"
+  LOCALE_SPARENT "uz-Cyrl"
    LOCALE_SSHORTDATE "dd.MM.yyyy"
    LOCALE_SSHORTESTDAYNAME1 "д"
    LOCALE_SSHORTESTDAYNAME2 "с"
diff --git a/dlls/kernel32/nls/uzl.nls b/dlls/kernel32/nls/uzl.nls
index 52294afde3..1989bd7cb7 100644
--- a/dlls/kernel32/nls/uzl.nls
+++ b/dlls/kernel32/nls/uzl.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_UZBEK, SUBLANG_UZBEK_LATIN
    LOCALE_SOPENTYPELANGUAGETAG "UZB "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "uz-Latn"
    LOCALE_SSHORTDATE "dd/MM yyyy"
    LOCALE_SSHORTESTDAYNAME1 "D"
    LOCALE_SSHORTESTDAYNAME2 "S"
diff --git a/dlls/kernel32/nls/vit.nls b/dlls/kernel32/nls/vit.nls
index 42a00d6979..a2574b6b03 100644
--- a/dlls/kernel32/nls/vit.nls
+++ b/dlls/kernel32/nls/vit.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_VIETNAMESE, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "VIT "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "vi"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "H"
    LOCALE_SSHORTESTDAYNAME2 "B"
diff --git a/dlls/kernel32/nls/wal.nls b/dlls/kernel32/nls/wal.nls
index 4644beef8e..e39c5bf4a6 100644
--- a/dlls/kernel32/nls/wal.nls
+++ b/dlls/kernel32/nls/wal.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_WALON, SUBLANG_DEFAULT
    LOCALE_SOPENTYPELANGUAGETAG "BEL "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Latn;"
+  LOCALE_SPARENT "wa"
    LOCALE_SSHORTDATE "dd/MM/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "lon"
    LOCALE_SSHORTESTDAYNAME2 "mår"
diff --git a/dlls/kernel32/nls/zhh.nls b/dlls/kernel32/nls/zhh.nls
index f0ea14ea6a..2d49998ef5 100644
--- a/dlls/kernel32/nls/zhh.nls
+++ b/dlls/kernel32/nls/zhh.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CHINESE, 
SUBLANG_CHINESE_HONGKONG
    LOCALE_SOPENTYPELANGUAGETAG "ZHH "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hant;"
+  LOCALE_SPARENT "zh-Hant"
    LOCALE_SSHORTDATE "d/M/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "一"
    LOCALE_SSHORTESTDAYNAME2 "二"
diff --git a/dlls/kernel32/nls/zhi.nls b/dlls/kernel32/nls/zhi.nls
index 8e888cd6f8..d8013dcc1c 100644
--- a/dlls/kernel32/nls/zhi.nls
+++ b/dlls/kernel32/nls/zhi.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CHINESE, 
SUBLANG_CHINESE_SINGAPORE
    LOCALE_SOPENTYPELANGUAGETAG "ZHS "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hans;"
+  LOCALE_SPARENT "zh-Hans"
    LOCALE_SSHORTDATE "d/M/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "一"
    LOCALE_SSHORTESTDAYNAME2 "二"
diff --git a/dlls/kernel32/nls/zhm.nls b/dlls/kernel32/nls/zhm.nls
index 5fc1fa16f6..956008dabb 100644
--- a/dlls/kernel32/nls/zhm.nls
+++ b/dlls/kernel32/nls/zhm.nls
@@ -134,6 +134,7 @@ STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_MACAU
    LOCALE_SOPENTYPELANGUAGETAG "ZHT "
    LOCALE_SPOSITIVESIGN ""
    LOCALE_SSCRIPTS "Hant;"
+  LOCALE_SPARENT "zh-Hant"
    LOCALE_SSHORTDATE "d/M/yyyy"
    LOCALE_SSHORTESTDAYNAME1 "一"
    LOCALE_SSHORTESTDAYNAME2 "二"
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 11a57889bf..013f6833d2 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -2781,36 +2781,36 @@ static void test_LocaleNameToLCID(void)

          /* zh-Hant has LCID 0x7c04, but LocaleNameToLCID actually 
returns 0x0c04, which is the LCID of zh-HK */
          lcid = pLocaleNameToLCID(zhHantW, 0);
-        todo_wine ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, 
SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, 
SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
             "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhHantW), lcid);
          ret = pLCIDToLocaleName(lcid, buffer, 
sizeof(buffer)/sizeof(WCHAR), 0);
          ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhHantW), ret);
-        todo_wine ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale 
name %s\n",
+        ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
             wine_dbgstr_w(zhHantW), wine_dbgstr_w(buffer));
          /* check that 0x7c04 also works and is mapped to zh-HK */
          ret = pLCIDToLocaleName(MAKELANGID(LANG_CHINESE_TRADITIONAL, 
SUBLANG_CHINESE_TRADITIONAL), buffer, sizeof(buffer)/sizeof(WCHAR), 0);
          todo_wine ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhHantW), 
ret);
-        todo_wine ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale 
name %s\n",
+        ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
             wine_dbgstr_w(zhHantW), wine_dbgstr_w(buffer));

          /* zh-hant */
          lcid = pLocaleNameToLCID(zhhantW, 0);
-        todo_wine ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, 
SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, 
SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
             "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhhantW),
             MAKELCID(MAKELANGID(LANG_CHINESE, 
SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT));
          ret = pLCIDToLocaleName(lcid, buffer, 
sizeof(buffer)/sizeof(WCHAR), 0);
          ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhhantW), ret);
-        todo_wine ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale 
name %s\n",
+        ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
             wine_dbgstr_w(zhhantW), wine_dbgstr_w(buffer));

          /* zh-Hans has LCID 0x0004, but LocaleNameToLCID actually 
returns 0x0804, which is the LCID of zh-CN */
          lcid = pLocaleNameToLCID(zhHansW, 0);
          /* check that LocaleNameToLCID actually returns 0x0804 */
-        todo_wine ok(lcid == 
MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, 
SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
+       ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, 
SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
             "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhHansW), lcid);
          ret = pLCIDToLocaleName(lcid, buffer, 
sizeof(buffer)/sizeof(WCHAR), 0);
          ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhHansW), ret);
-        todo_wine ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale 
name %s\n",
+        ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale name %s\n",
             wine_dbgstr_w(zhHansW), wine_dbgstr_w(buffer));
          /* check that 0x0004 also works and is mapped to zh-CN */
          ret = pLCIDToLocaleName(MAKELANGID(LANG_CHINESE, 
SUBLANG_NEUTRAL), buffer, sizeof(buffer)/sizeof(WCHAR), 0);
@@ -2820,12 +2820,12 @@ static void test_LocaleNameToLCID(void)

          /* zh-hans */
          lcid = pLocaleNameToLCID(zhhansW, 0);
-        todo_wine ok(lcid == 
MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, 
SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, 
SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
             "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhhansW),
             MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, 
SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT));
          ret = pLCIDToLocaleName(lcid, buffer, 
sizeof(buffer)/sizeof(WCHAR), 0);
          ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhhansW), ret);
-        todo_wine ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale 
name %s\n",
+        ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale name %s\n",
             wine_dbgstr_w(zhhansW), wine_dbgstr_w(buffer));
      }
  }
-- 
2.11.0





More information about the wine-patches mailing list