diff --git a/indra/llui/lltransutil.cpp b/indra/llui/lltransutil.cpp
index 220cee4c90b37eb8e100f31d169bb4d250a1e034..b1534bb5e4a7daa13c3c983f202b4a8cfb166b50 100644
--- a/indra/llui/lltransutil.cpp
+++ b/indra/llui/lltransutil.cpp
@@ -44,7 +44,7 @@ bool LLTransUtil::parseStrings(const std::string& xml_filename, const std::set<s
 	bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root, LLDir::ALL_SKINS);
 	if (!success)
 	{
-		LL_ERRS() << "Couldn't load string table " << xml_filename << LL_ENDL;
+		LL_ERRS() << "Couldn't load string table " << xml_filename << ". Please reinstall viewer from  https://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall." << LL_ENDL;
 		return false;
 	}
 
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c3663b12dda0499a65d3455d5702cca3c1d4411b..d0fbf17d81be484d478023a9f261f29f7a48dc13 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2877,7 +2877,14 @@ bool LLAppViewer::initConfiguration()
 // keeps growing, necessitating a method all its own.
 void LLAppViewer::initStrings()
 {
-	LLTransUtil::parseStrings("strings.xml", default_trans_args);
+	std::string strings_file = "strings.xml";
+	std::string strings_path_full = gDirUtilp->findSkinnedFilenameBaseLang(LLDir::XUI, strings_file);
+	if (strings_path_full.empty() || !LLFile::isfile(strings_path_full))
+	{
+		// initial check to make sure files are there failed
+		LL_ERRS() << "Viewer failed to find localization and UI files. Please reinstall viewer from  https://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall." << LL_ENDL;
+	}
+	LLTransUtil::parseStrings(strings_file, default_trans_args);
 	LLTransUtil::parseLanguageStrings("language_settings.xml");
 
 	// parseStrings() sets up the LLTrans substitution table. Add this one item.