diff --git a/packages/addons/service/locale/changelog.txt b/packages/addons/service/locale/changelog.txt
index e447f8e84f..986bcb8894 100644
--- a/packages/addons/service/locale/changelog.txt
+++ b/packages/addons/service/locale/changelog.txt
@@ -1,3 +1,6 @@
+103:
+- Fix localedef call, add error detection
+
102:
- Include localedef
diff --git a/packages/addons/service/locale/package.mk b/packages/addons/service/locale/package.mk
index e4afc309f8..7ad064fa30 100644
--- a/packages/addons/service/locale/package.mk
+++ b/packages/addons/service/locale/package.mk
@@ -2,7 +2,7 @@
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="locale"
-PKG_REV="102"
+PKG_REV="103"
PKG_ARCH="any"
PKG_DEPENDS_TARGET="toolchain glibc"
PKG_SECTION="service"
@@ -34,10 +34,9 @@ addon() {
if [ "${l}" = "POSIX" ]; then
continue
fi
- locales+="|${l}"
+ locales+="$(echo -e '\\\n ')"
done
- locales="${locales:1}"
- sed -e "s/@LOCALES@/${locales}/" \
+ sed -e "s|@LOCALES@|${locales}|" \
-i ${ADDON_BUILD}/${PKG_ADDON_ID}/resources/settings.xml
}
diff --git a/packages/addons/service/locale/resources/settings.xml b/packages/addons/service/locale/resources/settings.xml
index 5157d70e48..4fa663090d 100644
--- a/packages/addons/service/locale/resources/settings.xml
+++ b/packages/addons/service/locale/resources/settings.xml
@@ -1,7 +1,37 @@
-
-
-
-
-
+
+
+
+
+
+
+ 0
+ UTF-8
+
+
+
+
+
+
+
+ false
+
+
+
+ 30001
+
+
+
+ 0
+ en_GB
+
+ @LOCALES@
+
+
+
+ 30002
+
+
+
+
diff --git a/packages/addons/service/locale/source/default.py b/packages/addons/service/locale/source/default.py
index d34da59446..0124daa08e 100644
--- a/packages/addons/service/locale/source/default.py
+++ b/packages/addons/service/locale/source/default.py
@@ -38,8 +38,20 @@ class Monitor(xbmc.Monitor):
if os.path.isdir(localepath) == False:
os.environ['I18NPATH'] = i18npath
- subprocess.call([os.path.join(path, 'bin/localedef'), '-f', charmap,
- '-i', locale, localepath])
+ rc = subprocess.run([os.path.join(path, 'bin/localedef'), '-v', '-f', charmap,
+ '-i', locale, localepath], capture_output=True,
+ stdin=subprocess.DEVNULL)
+
+ if rc.returncode not in [0, 1]:
+ xbmc.log(repr(rc), xbmc.LOGERROR)
+ try:
+ os.rmdir(localepath)
+ except OSError as e:
+ pass
+ if os.path.isfile(profile):
+ os.unlink(profile)
+ xbmcgui.Dialog().ok('Locale', strings(30004).format(lang))
+ return
if os.path.isdir(profiled) == False:
os.makedirs(profiled)
diff --git a/packages/addons/service/locale/source/resources/language/English/strings.po b/packages/addons/service/locale/source/resources/language/resource.language.en_gb/strings.po
similarity index 79%
rename from packages/addons/service/locale/source/resources/language/English/strings.po
rename to packages/addons/service/locale/source/resources/language/resource.language.en_gb/strings.po
index 0538888a41..5bb8e37165 100644
--- a/packages/addons/service/locale/source/resources/language/English/strings.po
+++ b/packages/addons/service/locale/source/resources/language/resource.language.en_gb/strings.po
@@ -17,3 +17,7 @@ msgstr ""
msgctxt "#30003"
msgid "Locale changed to {}. Please reboot to apply globally."
msgstr ""
+
+msgctxt "#30004"
+msgid "Creating locale {} failed. Aborting."
+msgstr ""
diff --git a/packages/addons/service/locale/source/settings-default.xml b/packages/addons/service/locale/source/settings-default.xml
index 5db70160c9..e5018a4d90 100644
--- a/packages/addons/service/locale/source/settings-default.xml
+++ b/packages/addons/service/locale/source/settings-default.xml
@@ -1,4 +1,4 @@
-
-
-
+
+ UTF-8
+