xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/LangUtils.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // LangUtils.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Lang.h"
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/DLL.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Synchronization.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Window.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "RegistryUtils.h"
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
17*f6dc9357SAndroid Build Coastguard Worker extern bool g_IsNT;
18*f6dc9357SAndroid Build Coastguard Worker #endif
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker UString g_LangID;
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker // static
23*f6dc9357SAndroid Build Coastguard Worker CLang g_Lang;
24*f6dc9357SAndroid Build Coastguard Worker static bool g_Loaded = false;
25*f6dc9357SAndroid Build Coastguard Worker static NSynchronization::CCriticalSection g_CriticalSection;
26*f6dc9357SAndroid Build Coastguard Worker 
27*f6dc9357SAndroid Build Coastguard Worker bool LangOpen(CLang &lang, CFSTR fileName);
LangOpen(CLang & lang,CFSTR fileName)28*f6dc9357SAndroid Build Coastguard Worker bool LangOpen(CLang &lang, CFSTR fileName)
29*f6dc9357SAndroid Build Coastguard Worker {
30*f6dc9357SAndroid Build Coastguard Worker   return lang.Open(fileName, "7-Zip");
31*f6dc9357SAndroid Build Coastguard Worker }
32*f6dc9357SAndroid Build Coastguard Worker 
GetLangDirPrefix()33*f6dc9357SAndroid Build Coastguard Worker FString GetLangDirPrefix()
34*f6dc9357SAndroid Build Coastguard Worker {
35*f6dc9357SAndroid Build Coastguard Worker   return NDLL::GetModuleDirPrefix() + FTEXT("Lang") FSTRING_PATH_SEPARATOR;
36*f6dc9357SAndroid Build Coastguard Worker }
37*f6dc9357SAndroid Build Coastguard Worker 
38*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
39*f6dc9357SAndroid Build Coastguard Worker 
LoadLangOneTime()40*f6dc9357SAndroid Build Coastguard Worker void LoadLangOneTime()
41*f6dc9357SAndroid Build Coastguard Worker {
42*f6dc9357SAndroid Build Coastguard Worker   NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
43*f6dc9357SAndroid Build Coastguard Worker   if (g_Loaded)
44*f6dc9357SAndroid Build Coastguard Worker     return;
45*f6dc9357SAndroid Build Coastguard Worker   g_Loaded = true;
46*f6dc9357SAndroid Build Coastguard Worker   ReloadLang();
47*f6dc9357SAndroid Build Coastguard Worker }
48*f6dc9357SAndroid Build Coastguard Worker 
LangSetDlgItemText(HWND dialog,UInt32 controlID,UInt32 langID)49*f6dc9357SAndroid Build Coastguard Worker void LangSetDlgItemText(HWND dialog, UInt32 controlID, UInt32 langID)
50*f6dc9357SAndroid Build Coastguard Worker {
51*f6dc9357SAndroid Build Coastguard Worker   const wchar_t *s = g_Lang.Get(langID);
52*f6dc9357SAndroid Build Coastguard Worker   if (s)
53*f6dc9357SAndroid Build Coastguard Worker   {
54*f6dc9357SAndroid Build Coastguard Worker     CWindow window(GetDlgItem(dialog, (int)controlID));
55*f6dc9357SAndroid Build Coastguard Worker     window.SetText(s);
56*f6dc9357SAndroid Build Coastguard Worker   }
57*f6dc9357SAndroid Build Coastguard Worker }
58*f6dc9357SAndroid Build Coastguard Worker 
59*f6dc9357SAndroid Build Coastguard Worker #ifndef IDCONTINUE
60*f6dc9357SAndroid Build Coastguard Worker #define IDCONTINUE 11
61*f6dc9357SAndroid Build Coastguard Worker #endif
62*f6dc9357SAndroid Build Coastguard Worker 
63*f6dc9357SAndroid Build Coastguard Worker static const CIDLangPair kLangPairs[] =
64*f6dc9357SAndroid Build Coastguard Worker {
65*f6dc9357SAndroid Build Coastguard Worker   { IDOK,     401 },
66*f6dc9357SAndroid Build Coastguard Worker   { IDCANCEL, 402 },
67*f6dc9357SAndroid Build Coastguard Worker   { IDYES,    406 },
68*f6dc9357SAndroid Build Coastguard Worker   { IDNO,     407 },
69*f6dc9357SAndroid Build Coastguard Worker   { IDCLOSE,  408 },
70*f6dc9357SAndroid Build Coastguard Worker   { IDHELP,   409 },
71*f6dc9357SAndroid Build Coastguard Worker   { IDCONTINUE, 411 }
72*f6dc9357SAndroid Build Coastguard Worker };
73*f6dc9357SAndroid Build Coastguard Worker 
74*f6dc9357SAndroid Build Coastguard Worker 
LangSetDlgItems(HWND dialog,const UInt32 * ids,unsigned numItems)75*f6dc9357SAndroid Build Coastguard Worker void LangSetDlgItems(HWND dialog, const UInt32 *ids, unsigned numItems)
76*f6dc9357SAndroid Build Coastguard Worker {
77*f6dc9357SAndroid Build Coastguard Worker   unsigned i;
78*f6dc9357SAndroid Build Coastguard Worker   for (i = 0; i < Z7_ARRAY_SIZE(kLangPairs); i++)
79*f6dc9357SAndroid Build Coastguard Worker   {
80*f6dc9357SAndroid Build Coastguard Worker     const CIDLangPair &pair = kLangPairs[i];
81*f6dc9357SAndroid Build Coastguard Worker     CWindow window(GetDlgItem(dialog, (int)pair.ControlID));
82*f6dc9357SAndroid Build Coastguard Worker     if (window)
83*f6dc9357SAndroid Build Coastguard Worker     {
84*f6dc9357SAndroid Build Coastguard Worker       const wchar_t *s = g_Lang.Get(pair.LangID);
85*f6dc9357SAndroid Build Coastguard Worker       if (s)
86*f6dc9357SAndroid Build Coastguard Worker         window.SetText(s);
87*f6dc9357SAndroid Build Coastguard Worker     }
88*f6dc9357SAndroid Build Coastguard Worker   }
89*f6dc9357SAndroid Build Coastguard Worker 
90*f6dc9357SAndroid Build Coastguard Worker   for (i = 0; i < numItems; i++)
91*f6dc9357SAndroid Build Coastguard Worker   {
92*f6dc9357SAndroid Build Coastguard Worker     const UInt32 id = ids[i];
93*f6dc9357SAndroid Build Coastguard Worker     LangSetDlgItemText(dialog, id, id);
94*f6dc9357SAndroid Build Coastguard Worker   }
95*f6dc9357SAndroid Build Coastguard Worker }
96*f6dc9357SAndroid Build Coastguard Worker 
LangSetDlgItems_Colon(HWND dialog,const UInt32 * ids,unsigned numItems)97*f6dc9357SAndroid Build Coastguard Worker void LangSetDlgItems_Colon(HWND dialog, const UInt32 *ids, unsigned numItems)
98*f6dc9357SAndroid Build Coastguard Worker {
99*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < numItems; i++)
100*f6dc9357SAndroid Build Coastguard Worker   {
101*f6dc9357SAndroid Build Coastguard Worker     const UInt32 id = ids[i];
102*f6dc9357SAndroid Build Coastguard Worker     const wchar_t *s = g_Lang.Get(id);
103*f6dc9357SAndroid Build Coastguard Worker     if (s)
104*f6dc9357SAndroid Build Coastguard Worker     {
105*f6dc9357SAndroid Build Coastguard Worker       CWindow window(GetDlgItem(dialog, (int)id));
106*f6dc9357SAndroid Build Coastguard Worker       UString s2 = s;
107*f6dc9357SAndroid Build Coastguard Worker       s2.Add_Colon();
108*f6dc9357SAndroid Build Coastguard Worker       window.SetText(s2);
109*f6dc9357SAndroid Build Coastguard Worker     }
110*f6dc9357SAndroid Build Coastguard Worker   }
111*f6dc9357SAndroid Build Coastguard Worker }
112*f6dc9357SAndroid Build Coastguard Worker 
LangSetDlgItems_RemoveColon(HWND dialog,const UInt32 * ids,unsigned numItems)113*f6dc9357SAndroid Build Coastguard Worker void LangSetDlgItems_RemoveColon(HWND dialog, const UInt32 *ids, unsigned numItems)
114*f6dc9357SAndroid Build Coastguard Worker {
115*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < numItems; i++)
116*f6dc9357SAndroid Build Coastguard Worker   {
117*f6dc9357SAndroid Build Coastguard Worker     const UInt32 id = ids[i];
118*f6dc9357SAndroid Build Coastguard Worker     const wchar_t *s = g_Lang.Get(id);
119*f6dc9357SAndroid Build Coastguard Worker     if (s)
120*f6dc9357SAndroid Build Coastguard Worker     {
121*f6dc9357SAndroid Build Coastguard Worker       CWindow window(GetDlgItem(dialog, (int)id));
122*f6dc9357SAndroid Build Coastguard Worker       UString s2 = s;
123*f6dc9357SAndroid Build Coastguard Worker       if (!s2.IsEmpty() && s2.Back() == ':')
124*f6dc9357SAndroid Build Coastguard Worker         s2.DeleteBack();
125*f6dc9357SAndroid Build Coastguard Worker       window.SetText(s2);
126*f6dc9357SAndroid Build Coastguard Worker     }
127*f6dc9357SAndroid Build Coastguard Worker   }
128*f6dc9357SAndroid Build Coastguard Worker }
129*f6dc9357SAndroid Build Coastguard Worker 
LangSetWindowText(HWND window,UInt32 langID)130*f6dc9357SAndroid Build Coastguard Worker void LangSetWindowText(HWND window, UInt32 langID)
131*f6dc9357SAndroid Build Coastguard Worker {
132*f6dc9357SAndroid Build Coastguard Worker   const wchar_t *s = g_Lang.Get(langID);
133*f6dc9357SAndroid Build Coastguard Worker   if (s)
134*f6dc9357SAndroid Build Coastguard Worker     MySetWindowText(window, s);
135*f6dc9357SAndroid Build Coastguard Worker }
136*f6dc9357SAndroid Build Coastguard Worker 
LangString(UInt32 langID)137*f6dc9357SAndroid Build Coastguard Worker UString LangString(UInt32 langID)
138*f6dc9357SAndroid Build Coastguard Worker {
139*f6dc9357SAndroid Build Coastguard Worker   const wchar_t *s = g_Lang.Get(langID);
140*f6dc9357SAndroid Build Coastguard Worker   if (s)
141*f6dc9357SAndroid Build Coastguard Worker     return s;
142*f6dc9357SAndroid Build Coastguard Worker   return MyLoadString(langID);
143*f6dc9357SAndroid Build Coastguard Worker }
144*f6dc9357SAndroid Build Coastguard Worker 
AddLangString(UString & s,UInt32 langID)145*f6dc9357SAndroid Build Coastguard Worker void AddLangString(UString &s, UInt32 langID)
146*f6dc9357SAndroid Build Coastguard Worker {
147*f6dc9357SAndroid Build Coastguard Worker   s += LangString(langID);
148*f6dc9357SAndroid Build Coastguard Worker }
149*f6dc9357SAndroid Build Coastguard Worker 
LangString(UInt32 langID,UString & dest)150*f6dc9357SAndroid Build Coastguard Worker void LangString(UInt32 langID, UString &dest)
151*f6dc9357SAndroid Build Coastguard Worker {
152*f6dc9357SAndroid Build Coastguard Worker   const wchar_t *s = g_Lang.Get(langID);
153*f6dc9357SAndroid Build Coastguard Worker   if (s)
154*f6dc9357SAndroid Build Coastguard Worker   {
155*f6dc9357SAndroid Build Coastguard Worker     dest = s;
156*f6dc9357SAndroid Build Coastguard Worker     return;
157*f6dc9357SAndroid Build Coastguard Worker   }
158*f6dc9357SAndroid Build Coastguard Worker   MyLoadString(langID, dest);
159*f6dc9357SAndroid Build Coastguard Worker }
160*f6dc9357SAndroid Build Coastguard Worker 
LangString_OnlyFromLangFile(UInt32 langID,UString & dest)161*f6dc9357SAndroid Build Coastguard Worker void LangString_OnlyFromLangFile(UInt32 langID, UString &dest)
162*f6dc9357SAndroid Build Coastguard Worker {
163*f6dc9357SAndroid Build Coastguard Worker   dest.Empty();
164*f6dc9357SAndroid Build Coastguard Worker   const wchar_t *s = g_Lang.Get(langID);
165*f6dc9357SAndroid Build Coastguard Worker   if (s)
166*f6dc9357SAndroid Build Coastguard Worker     dest = s;
167*f6dc9357SAndroid Build Coastguard Worker }
168*f6dc9357SAndroid Build Coastguard Worker 
169*f6dc9357SAndroid Build Coastguard Worker static const char * const kLangs =
170*f6dc9357SAndroid Build Coastguard Worker   "ar.bg.ca.zh.-tw.-cn.cs.da.de.el.en.es.fi.fr.he.hu.is."
171*f6dc9357SAndroid Build Coastguard Worker   "it.ja.ko.nl.no.=nb.=nn.pl.pt.-br.rm.ro.ru.sr.=hr.-spl.-spc.=hr.=bs.sk.sq.sv.th.tr."
172*f6dc9357SAndroid Build Coastguard Worker   "ur.id.uk.be.sl.et.lv.lt.tg.fa.vi.hy.az.eu.hsb.mk."
173*f6dc9357SAndroid Build Coastguard Worker   "st.ts.tn.ve.xh.zu.af.ka.fo.hi.mt.se.ga.yi.ms.kk."
174*f6dc9357SAndroid Build Coastguard Worker   "ky.sw.tk.uz.-latn.-cyrl.tt.bn.pa.-in.gu.or.ta.te.kn.ml.as.mr.sa."
175*f6dc9357SAndroid Build Coastguard Worker   "mn.=mn.=mng.bo.cy.kh.lo.my.gl.kok..sd.syr.si..iu.am.tzm."
176*f6dc9357SAndroid Build Coastguard Worker   "ks.ne.fy.ps.tl.dv..ff.ha..yo.qu.st.ba.lb.kl."
177*f6dc9357SAndroid Build Coastguard Worker   "ig.kr.om.ti.gn..la.so.ii..arn..moh..br.."
178*f6dc9357SAndroid Build Coastguard Worker   "ug.mi.oc.co."
179*f6dc9357SAndroid Build Coastguard Worker   // "gsw.sah.qut.rw.wo....prs...."
180*f6dc9357SAndroid Build Coastguard Worker   // ".gd."
181*f6dc9357SAndroid Build Coastguard Worker   ;
182*f6dc9357SAndroid Build Coastguard Worker 
FindShortNames(UInt32 primeLang,AStringVector & names)183*f6dc9357SAndroid Build Coastguard Worker static void FindShortNames(UInt32 primeLang, AStringVector &names)
184*f6dc9357SAndroid Build Coastguard Worker {
185*f6dc9357SAndroid Build Coastguard Worker   UInt32 index = 0;
186*f6dc9357SAndroid Build Coastguard Worker   for (const char *p = kLangs; *p != 0;)
187*f6dc9357SAndroid Build Coastguard Worker   {
188*f6dc9357SAndroid Build Coastguard Worker     const char *p2 = p;
189*f6dc9357SAndroid Build Coastguard Worker     for (; *p2 != '.'; p2++);
190*f6dc9357SAndroid Build Coastguard Worker     bool isSub = (p[0] == '-' || p[0] == '=');
191*f6dc9357SAndroid Build Coastguard Worker     if (!isSub)
192*f6dc9357SAndroid Build Coastguard Worker       index++;
193*f6dc9357SAndroid Build Coastguard Worker     if (index >= primeLang)
194*f6dc9357SAndroid Build Coastguard Worker     {
195*f6dc9357SAndroid Build Coastguard Worker       if (index > primeLang)
196*f6dc9357SAndroid Build Coastguard Worker         break;
197*f6dc9357SAndroid Build Coastguard Worker       AString s;
198*f6dc9357SAndroid Build Coastguard Worker       if (isSub)
199*f6dc9357SAndroid Build Coastguard Worker       {
200*f6dc9357SAndroid Build Coastguard Worker         if (p[0] == '-')
201*f6dc9357SAndroid Build Coastguard Worker           s = names[0];
202*f6dc9357SAndroid Build Coastguard Worker         else
203*f6dc9357SAndroid Build Coastguard Worker           p++;
204*f6dc9357SAndroid Build Coastguard Worker       }
205*f6dc9357SAndroid Build Coastguard Worker       while (p != p2)
206*f6dc9357SAndroid Build Coastguard Worker         s.Add_Char((char)(Byte)*p++);
207*f6dc9357SAndroid Build Coastguard Worker       names.Add(s);
208*f6dc9357SAndroid Build Coastguard Worker     }
209*f6dc9357SAndroid Build Coastguard Worker     p = p2 + 1;
210*f6dc9357SAndroid Build Coastguard Worker   }
211*f6dc9357SAndroid Build Coastguard Worker }
212*f6dc9357SAndroid Build Coastguard Worker 
213*f6dc9357SAndroid Build Coastguard Worker /*
214*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/IntToString.h"
215*f6dc9357SAndroid Build Coastguard Worker 
216*f6dc9357SAndroid Build Coastguard Worker static struct CC1Lang
217*f6dc9357SAndroid Build Coastguard Worker {
218*f6dc9357SAndroid Build Coastguard Worker   CC1Lang()
219*f6dc9357SAndroid Build Coastguard Worker   {
220*f6dc9357SAndroid Build Coastguard Worker     for (int i = 1; i < 150; i++)
221*f6dc9357SAndroid Build Coastguard Worker     {
222*f6dc9357SAndroid Build Coastguard Worker       UString s;
223*f6dc9357SAndroid Build Coastguard Worker       char ttt[32];
224*f6dc9357SAndroid Build Coastguard Worker       ConvertUInt32ToHex(i, ttt);
225*f6dc9357SAndroid Build Coastguard Worker       s += ttt;
226*f6dc9357SAndroid Build Coastguard Worker       UStringVector names;
227*f6dc9357SAndroid Build Coastguard Worker       FindShortNames(i, names);
228*f6dc9357SAndroid Build Coastguard Worker 
229*f6dc9357SAndroid Build Coastguard Worker       FOR_VECTOR (k, names)
230*f6dc9357SAndroid Build Coastguard Worker       {
231*f6dc9357SAndroid Build Coastguard Worker         s.Add_Space();
232*f6dc9357SAndroid Build Coastguard Worker         s += names[k];
233*f6dc9357SAndroid Build Coastguard Worker       }
234*f6dc9357SAndroid Build Coastguard Worker       OutputDebugStringW(s);
235*f6dc9357SAndroid Build Coastguard Worker     }
236*f6dc9357SAndroid Build Coastguard Worker   }
237*f6dc9357SAndroid Build Coastguard Worker } g_cc1;
238*f6dc9357SAndroid Build Coastguard Worker */
239*f6dc9357SAndroid Build Coastguard Worker 
240*f6dc9357SAndroid Build Coastguard Worker // typedef LANGID (WINAPI *GetUserDefaultUILanguageP)();
241*f6dc9357SAndroid Build Coastguard Worker 
Lang_GetShortNames_for_DefaultLang(AStringVector & names,unsigned & subLang)242*f6dc9357SAndroid Build Coastguard Worker void Lang_GetShortNames_for_DefaultLang(AStringVector &names, unsigned &subLang)
243*f6dc9357SAndroid Build Coastguard Worker {
244*f6dc9357SAndroid Build Coastguard Worker   names.Clear();
245*f6dc9357SAndroid Build Coastguard Worker   subLang = 0;
246*f6dc9357SAndroid Build Coastguard Worker   // Region / Administative / Language for non-Unicode programs:
247*f6dc9357SAndroid Build Coastguard Worker   const LANGID sysLang = GetSystemDefaultLangID();
248*f6dc9357SAndroid Build Coastguard Worker 
249*f6dc9357SAndroid Build Coastguard Worker   // Region / Formats / Format:
250*f6dc9357SAndroid Build Coastguard Worker   const LANGID userLang = GetUserDefaultLangID();
251*f6dc9357SAndroid Build Coastguard Worker 
252*f6dc9357SAndroid Build Coastguard Worker   if (PRIMARYLANGID(sysLang) !=
253*f6dc9357SAndroid Build Coastguard Worker       PRIMARYLANGID(userLang))
254*f6dc9357SAndroid Build Coastguard Worker     return;
255*f6dc9357SAndroid Build Coastguard Worker   const LANGID langID = userLang;
256*f6dc9357SAndroid Build Coastguard Worker 
257*f6dc9357SAndroid Build Coastguard Worker   // const LANGID langID = MAKELANGID(0x1a, 1); // for debug
258*f6dc9357SAndroid Build Coastguard Worker 
259*f6dc9357SAndroid Build Coastguard Worker   /*
260*f6dc9357SAndroid Build Coastguard Worker   LANGID sysUILang; // english  in XP64
261*f6dc9357SAndroid Build Coastguard Worker   LANGID userUILang; // english  in XP64
262*f6dc9357SAndroid Build Coastguard Worker 
263*f6dc9357SAndroid Build Coastguard Worker   GetUserDefaultUILanguageP fn = (GetUserDefaultUILanguageP)GetProcAddress(
264*f6dc9357SAndroid Build Coastguard Worker       GetModuleHandle("kernel32"), "GetUserDefaultUILanguage");
265*f6dc9357SAndroid Build Coastguard Worker   if (fn)
266*f6dc9357SAndroid Build Coastguard Worker     userUILang = fn();
267*f6dc9357SAndroid Build Coastguard Worker   fn = (GetUserDefaultUILanguageP)GetProcAddress(
268*f6dc9357SAndroid Build Coastguard Worker       GetModuleHandle("kernel32"), "GetSystemDefaultUILanguage");
269*f6dc9357SAndroid Build Coastguard Worker   if (fn)
270*f6dc9357SAndroid Build Coastguard Worker     sysUILang = fn();
271*f6dc9357SAndroid Build Coastguard Worker   */
272*f6dc9357SAndroid Build Coastguard Worker 
273*f6dc9357SAndroid Build Coastguard Worker   const WORD primLang = (WORD)(PRIMARYLANGID(langID));
274*f6dc9357SAndroid Build Coastguard Worker   subLang = SUBLANGID(langID);
275*f6dc9357SAndroid Build Coastguard Worker   FindShortNames(primLang, names);
276*f6dc9357SAndroid Build Coastguard Worker }
277*f6dc9357SAndroid Build Coastguard Worker 
278*f6dc9357SAndroid Build Coastguard Worker 
OpenDefaultLang()279*f6dc9357SAndroid Build Coastguard Worker static void OpenDefaultLang()
280*f6dc9357SAndroid Build Coastguard Worker {
281*f6dc9357SAndroid Build Coastguard Worker   AStringVector names;
282*f6dc9357SAndroid Build Coastguard Worker   unsigned subLang;
283*f6dc9357SAndroid Build Coastguard Worker   Lang_GetShortNames_for_DefaultLang(names, subLang);
284*f6dc9357SAndroid Build Coastguard Worker   {
285*f6dc9357SAndroid Build Coastguard Worker     const FString dirPrefix (GetLangDirPrefix());
286*f6dc9357SAndroid Build Coastguard Worker     for (unsigned i = 0; i < 2; i++)
287*f6dc9357SAndroid Build Coastguard Worker     {
288*f6dc9357SAndroid Build Coastguard Worker       const unsigned index = (i == 0 ? subLang : 0);
289*f6dc9357SAndroid Build Coastguard Worker       if (index < names.Size())
290*f6dc9357SAndroid Build Coastguard Worker       {
291*f6dc9357SAndroid Build Coastguard Worker         const AString &name = names[index];
292*f6dc9357SAndroid Build Coastguard Worker         if (!name.IsEmpty())
293*f6dc9357SAndroid Build Coastguard Worker         {
294*f6dc9357SAndroid Build Coastguard Worker           FString path (dirPrefix);
295*f6dc9357SAndroid Build Coastguard Worker           path += name;
296*f6dc9357SAndroid Build Coastguard Worker           path += ".txt";
297*f6dc9357SAndroid Build Coastguard Worker           if (LangOpen(g_Lang, path))
298*f6dc9357SAndroid Build Coastguard Worker           {
299*f6dc9357SAndroid Build Coastguard Worker             g_LangID = name;
300*f6dc9357SAndroid Build Coastguard Worker             return;
301*f6dc9357SAndroid Build Coastguard Worker           }
302*f6dc9357SAndroid Build Coastguard Worker         }
303*f6dc9357SAndroid Build Coastguard Worker       }
304*f6dc9357SAndroid Build Coastguard Worker     }
305*f6dc9357SAndroid Build Coastguard Worker   }
306*f6dc9357SAndroid Build Coastguard Worker }
307*f6dc9357SAndroid Build Coastguard Worker 
ReloadLang()308*f6dc9357SAndroid Build Coastguard Worker void ReloadLang()
309*f6dc9357SAndroid Build Coastguard Worker {
310*f6dc9357SAndroid Build Coastguard Worker   g_Lang.Clear();
311*f6dc9357SAndroid Build Coastguard Worker   ReadRegLang(g_LangID);
312*f6dc9357SAndroid Build Coastguard Worker   #ifndef _UNICODE
313*f6dc9357SAndroid Build Coastguard Worker   if (g_IsNT)
314*f6dc9357SAndroid Build Coastguard Worker   #endif
315*f6dc9357SAndroid Build Coastguard Worker   {
316*f6dc9357SAndroid Build Coastguard Worker     if (g_LangID.IsEmpty())
317*f6dc9357SAndroid Build Coastguard Worker     {
318*f6dc9357SAndroid Build Coastguard Worker       OpenDefaultLang();
319*f6dc9357SAndroid Build Coastguard Worker       return;
320*f6dc9357SAndroid Build Coastguard Worker     }
321*f6dc9357SAndroid Build Coastguard Worker   }
322*f6dc9357SAndroid Build Coastguard Worker   if (g_LangID.Len() > 1 || g_LangID[0] != L'-')
323*f6dc9357SAndroid Build Coastguard Worker   {
324*f6dc9357SAndroid Build Coastguard Worker     FString s = us2fs(g_LangID);
325*f6dc9357SAndroid Build Coastguard Worker     if (s.ReverseFind_PathSepar() < 0)
326*f6dc9357SAndroid Build Coastguard Worker     {
327*f6dc9357SAndroid Build Coastguard Worker       if (s.ReverseFind_Dot() < 0)
328*f6dc9357SAndroid Build Coastguard Worker         s += ".txt";
329*f6dc9357SAndroid Build Coastguard Worker       s.Insert(0, GetLangDirPrefix());
330*f6dc9357SAndroid Build Coastguard Worker       LangOpen(g_Lang, s);
331*f6dc9357SAndroid Build Coastguard Worker     }
332*f6dc9357SAndroid Build Coastguard Worker   }
333*f6dc9357SAndroid Build Coastguard Worker }
334*f6dc9357SAndroid Build Coastguard Worker 
335*f6dc9357SAndroid Build Coastguard Worker #endif
336