From 645e2086734e3d2d1ec95f50faa39f0f24304761 Mon Sep 17 00:00:00 2001
From: ShadowNinja <shadowninja@minetest.net>
Date: Mon, 24 Aug 2015 14:32:15 -0400
Subject: [PATCH] Use CUSTOM_LOCALEDIR if specified

---
 src/cmake_config.h.in | 1 +
 src/main.cpp          | 4 ++--
 src/porting.cpp       | 8 +++++++-
 src/porting.h         | 7 ++++++-
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index 04f368594..bda7a891a 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -12,6 +12,7 @@
 #define VERSION_STRING "@VERSION_STRING@"
 #define PRODUCT_VERSION_STRING "@VERSION_MAJOR@.@VERSION_MINOR@"
 #define STATIC_SHAREDIR "@SHAREDIR@"
+#define STATIC_LOCALEDIR "@LOCALEDIR@"
 #define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
 #cmakedefine01 RUN_IN_PLACE
 #cmakedefine01 USE_GETTEXT
diff --git a/src/main.cpp b/src/main.cpp
index 950d30b5a..dece27428 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -472,10 +472,10 @@ static bool init_common(int *log_level, const Settings &cmd_args, int argc, char
 	httpfetch_init(g_settings->getS32("curl_parallel_limit"));
 
 #ifdef _MSC_VER
-	init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(),
+	init_gettext(porting::path_locale.c_str(),
 		g_settings->get("language"), argc, argv);
 #else
-	init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(),
+	init_gettext(porting::path_locale.c_str(),
 		g_settings->get("language"));
 #endif
 
diff --git a/src/porting.cpp b/src/porting.cpp
index cb9f3270b..5fea1d9cf 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -136,6 +136,8 @@ void signal_handler_init(void)
 // Default to RUN_IN_PLACE style relative paths
 std::string path_share = "..";
 std::string path_user = "..";
+std::string path_locale = path_share + DIR_DELIM + "locale";
+
 
 std::string getDataPath(const char *subpath)
 {
@@ -503,13 +505,17 @@ void initializePaths()
 		path_share = execpath;
 		path_user  = execpath;
 	}
-
 #else
 	infostream << "Using system-wide paths (NOT RUN_IN_PLACE)" << std::endl;
 
 	if (!setSystemPaths())
 		errorstream << "Failed to get one or more system-wide path" << std::endl;
 
+#endif
+#ifdef STATIC_LOCALEDIR
+	path_locale = STATIC_LOCALEDIR[0] ? STATIC_LOCALEDIR : getDataPath("locale");
+#else
+	path_locale = getDataPath("locale");
 #endif
 
 	infostream << "Detected share path: " << path_share << std::endl;
diff --git a/src/porting.h b/src/porting.h
index a4016e8d7..a86d37fbb 100644
--- a/src/porting.h
+++ b/src/porting.h
@@ -142,6 +142,11 @@ extern std::string path_share;
 */
 extern std::string path_user;
 
+/*
+	Path to gettext locale files
+*/
+extern std::string path_locale;
+
 /*
 	Get full path of stuff in data directory.
 	Example: "stone.png" -> "../data/stone.png"
@@ -149,7 +154,7 @@ extern std::string path_user;
 std::string getDataPath(const char *subpath);
 
 /*
-	Initialize path_share and path_user.
+	Initialize path_*.
 */
 void initializePaths();
 
-- 
GitLab