diff --git a/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesAudio.kt b/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesAudio.kt
index 39b29f9c44d09e623b4bf608a5be6c07011069e4..4bc9655abd93f73a8b7cdb55889b4c1148d08cef 100644
--- a/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesAudio.kt
+++ b/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesAudio.kt
@@ -43,9 +43,9 @@ import org.videolan.libvlc.util.AndroidUtil
 import org.videolan.resources.VLCInstance
 import org.videolan.tools.AUDIO_DUCKING
 import org.videolan.tools.LocaleUtils
+import org.videolan.tools.LocaleUtils.getLocales
 import org.videolan.tools.RESUME_PLAYBACK
 import org.videolan.tools.Settings
-import org.videolan.tools.putSingle
 import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.R
 import org.videolan.vlc.VlcMigrationHelper
@@ -213,7 +213,7 @@ class PreferencesAudio : BasePreferenceFragment(), SharedPreferences.OnSharedPre
     }
 
     private fun prepareLocaleList() {
-        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference))
+        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference), activity.getLocales())
         preferredAudioTrack.entries = localePair.localeEntries
         preferredAudioTrack.entryValues = localePair.localeEntryValues
     }
diff --git a/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesSubtitles.kt b/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesSubtitles.kt
index 9c184b6e746000308429b8fdf1c9afb65e484933..d2a195829eed0cc6fff6ec5ef3aa3580d3dd0ed8 100644
--- a/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesSubtitles.kt
+++ b/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesSubtitles.kt
@@ -43,6 +43,7 @@ import org.videolan.television.ui.COLOR_PICKER_SELECTED_COLOR
 import org.videolan.television.ui.COLOR_PICKER_TITLE
 import org.videolan.television.ui.ColorPickerActivity
 import org.videolan.tools.LocaleUtils
+import org.videolan.tools.LocaleUtils.getLocales
 import org.videolan.tools.Settings
 import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.R
@@ -255,7 +256,7 @@ class PreferencesSubtitles : BasePreferenceFragment(), SharedPreferences.OnShare
 
 
     private fun prepareLocaleList() {
-        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference))
+        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference), activity.getLocales())
         preferredSubtitleTrack.entries = localePair.localeEntries
         preferredSubtitleTrack.entryValues = localePair.localeEntryValues
     }
diff --git a/application/tools/src/main/java/org/videolan/tools/LocaleUtils.kt b/application/tools/src/main/java/org/videolan/tools/LocaleUtils.kt
index 426626f263ab0c0f846713d3ebc294aec7cf7c74..d407d37e1be8ff26f90b0e5a47eeedc99fef4090 100644
--- a/application/tools/src/main/java/org/videolan/tools/LocaleUtils.kt
+++ b/application/tools/src/main/java/org/videolan/tools/LocaleUtils.kt
@@ -4,13 +4,31 @@ import android.annotation.TargetApi
 import android.content.Context
 import android.content.ContextWrapper
 import android.os.Build
-import java.util.*
-import kotlin.collections.ArrayList
+import java.util.Locale
+import java.util.TreeMap
 
 object LocaleUtils {
+
+    fun Context.getLocales(): List<Locale> =
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+            ArrayList<Locale>().apply {
+                for (i in 0..resources.configuration.locales.size() - 1)
+                    add(resources.configuration.locales[i])
+            } else
+            listOf(resources.configuration.locale)
+
+    /**
+     * Get locales used in project (the one the app has translations for), prepend the given locales if provided
+     *
+     * @param projectLocales project locales
+     * @param defaultLocaleText the default string to use for the default locale
+     * @param localesToPrepend locales to prepend to the list of project locales
+     * @return a [LocalePair] containing the entries and entry values for the list of locales
+     */
     fun getLocalesUsedInProject(
         projectLocales: Array<String>,
-        defaultLocaleText: String
+        defaultLocaleText: String,
+        localesToPrepend: List<Locale>? = null
     ): LocalePair {
 
         val localesEntry = arrayOfNulls<String>(projectLocales.size)
@@ -47,6 +65,16 @@ object LocaleUtils {
             i++
         }
 
+        localesToPrepend?.reversed()?.forEach {
+            if (finalLocaleEntryValues.contains(it.language)) {
+                val indexToRemove = finalLocaleEntryValues.indexOf(it.language)
+                finalLocaleEntryValues.removeAt(indexToRemove)
+                finalLocaleEntries.removeAt(indexToRemove)
+            }
+            finalLocaleEntries.add(1, it.getDisplayLanguage(it).firstLetterUppercase())
+            finalLocaleEntryValues.add(1, it.language)
+        }
+
         return LocalePair(finalLocaleEntries.toTypedArray(), finalLocaleEntryValues.toTypedArray())
     }
 
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt
index b1dfc32454f22b6f82785c8de9a57e1c94633b70..6ea76f3a22cbdd3ec41d6df4b7b7fbc96169802c 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt
@@ -43,9 +43,9 @@ import org.videolan.resources.AndroidDevices
 import org.videolan.resources.VLCInstance
 import org.videolan.tools.AUDIO_DUCKING
 import org.videolan.tools.LocaleUtils
+import org.videolan.tools.LocaleUtils.getLocales
 import org.videolan.tools.RESUME_PLAYBACK
 import org.videolan.tools.Settings
-import org.videolan.tools.putSingle
 import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.R
 import org.videolan.vlc.VlcMigrationHelper
@@ -196,7 +196,7 @@ class PreferencesAudio : BasePreferenceFragment(), SharedPreferences.OnSharedPre
     }
 
     private fun prepareLocaleList() {
-        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference))
+        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference), requireActivity().getLocales())
         preferredAudioTrack.entries = localePair.localeEntries
         preferredAudioTrack.entryValues = localePair.localeEntryValues
     }
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesSubtitles.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesSubtitles.kt
index c98402368e69aa3983a1043a8838cee4d29f8391..91b2049eb5e2794fba696fe1702863d9a229122a 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesSubtitles.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesSubtitles.kt
@@ -34,6 +34,7 @@ import com.jaredrummler.android.colorpicker.ColorPreferenceCompat
 import kotlinx.coroutines.launch
 import org.videolan.resources.VLCInstance
 import org.videolan.tools.LocaleUtils
+import org.videolan.tools.LocaleUtils.getLocales
 import org.videolan.tools.Settings
 import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.R
@@ -202,7 +203,7 @@ class PreferencesSubtitles : BasePreferenceFragment(), SharedPreferences.OnShare
     }
 
     private fun prepareLocaleList() {
-        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference))
+        val localePair = LocaleUtils.getLocalesUsedInProject(BuildConfig.TRANSLATION_ARRAY, getString(R.string.no_track_preference), requireActivity().getLocales())
         preferredSubtitleTrack.entries = localePair.localeEntries
         preferredSubtitleTrack.entryValues = localePair.localeEntryValues
     }