@@ -41,10 +41,7 @@ CLocalization::CLocalization(const SString& strLocale, const SString& strLocaleP
4141
4242CLocalization::~CLocalization ()
4343{
44- for (auto iter : m_LanguageMap)
45- {
46- delete iter.second ;
47- }
44+ // m_LanguageMap now uses unique_ptr so cleanup is automatic
4845}
4946
5047//
@@ -99,29 +96,32 @@ void CLocalization::SetCurrentLanguage(SString strLocale)
9996CLanguage* CLocalization::GetLanguage (SString strLocale)
10097{
10198 strLocale = ValidateLocale (strLocale);
102- CLanguage* pLanguage = MapFindRef (m_LanguageMap, strLocale);
103- if (!pLanguage)
99+ auto iter = m_LanguageMap.find (strLocale);
100+ if (iter != m_LanguageMap.end ())
101+ {
102+ return iter->second .get ();
103+ }
104+
105+ Language Lang = Language::from_name (strLocale);
106+ Lang = Lang ? Lang : Language::from_name (" en_US" );
107+
108+ try
109+ {
110+ std::unique_ptr<CLanguage> pLanguage = std::make_unique<CLanguage>(m_DictManager.get_dictionary (Lang, MTA_LOCALE_TEXTDOMAIN), Lang.str (), Lang.get_name ());
111+ CLanguage* pLanguagePtr = pLanguage.get ();
112+ m_LanguageMap.emplace (strLocale, std::move (pLanguage));
113+ return pLanguagePtr;
114+ }
115+ catch (const std::exception& ex)
116+ {
117+ WriteDebugEvent (SString (" Localization failed to load dictionary for '%s': %s" , strLocale.c_str (), ex.what ()));
118+ return (strLocale != " en_US" ) ? GetLanguage (" en_US" ) : nullptr ;
119+ }
120+ catch (...)
104121 {
105- Language Lang = Language::from_name (strLocale);
106- Lang = Lang ? Lang : Language::from_name (" en_US" );
107-
108- try
109- {
110- pLanguage = new CLanguage (m_DictManager.get_dictionary (Lang, MTA_LOCALE_TEXTDOMAIN), Lang.str (), Lang.get_name ());
111- MapSet (m_LanguageMap, strLocale, pLanguage);
112- }
113- catch (const std::exception& ex)
114- {
115- WriteDebugEvent (SString (" Localization failed to load dictionary for '%s': %s" , strLocale.c_str (), ex.what ()));
116- return (strLocale != " en_US" ) ? GetLanguage (" en_US" ) : nullptr ;
117- }
118- catch (...)
119- {
120- WriteDebugEvent (SString (" Localization failed to load dictionary for '%s': unknown error" , strLocale.c_str ()));
121- return (strLocale != " en_US" ) ? GetLanguage (" en_US" ) : nullptr ;
122- }
122+ WriteDebugEvent (SString (" Localization failed to load dictionary for '%s': unknown error" , strLocale.c_str ()));
123+ return (strLocale != " en_US" ) ? GetLanguage (" en_US" ) : nullptr ;
123124 }
124- return pLanguage;
125125}
126126
127127//
0 commit comments