I'm not able to create a Drop Down menu with the languages

This is my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.UI;

public class LocaleDropdown : MonoBehaviour
{
public Dropdown dropdown;

IEnumerator Start()
{
// Wait for the localization system to initialize, loading Locales, preloading etc.
yield return LocalizationSettings.InitializationOperation;

// Generate list of available Locales
var options = new List<Dropdown.OptionData>();
int selected = 0;
for(int i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; ++i)
{
var locale = LocalizationSettings.AvailableLocales.Locales*;*
if (LocalizationSettings.SelectedLocale == locale)
selected = i;
options.Add(new Dropdown.OptionData(locale.name));
}
dropdown.options = options;
dropdown.value = selected;
dropdown.onValueChanged.AddListener(LocaleSelected);
}
static void LocaleSelected(int index)
{
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
}
}
my error:
Assets\Scripts\Globals\LocaleDropdown.cs(34,47): error CS0103: The name ‘LocalizationSettings’ does not exist in the current context


8346807--1098123--unity.png

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;

public class LocaleDropdown : MonoBehaviour
{
public Dropdown dropdown;

IEnumerator Start()
{
// Wait for the localization system to initialize, loading Locales, preloading etc.
yield return LocalizationSettings.InitializationOperation;

// Generate list of available Locales
var options = new List<Dropdown.OptionData>();
int selected = 0;
for (int i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; ++i)
{
var locale = LocalizationSettings.AvailableLocales.Locales*;*
if (LocalizationSettings.SelectedLocale == locale)
selected = i;
options.Add(new Dropdown.OptionData(locale.name));
}
dropdown.options = options;
dropdown.value = selected;
dropdown.onValueChanged.AddListener(LocaleSelected);
}
static void LocaleSelected(int index)
{
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
}
}

If anyone wants a script that uses TMP_Dropdown instead of the classic Dropdown, here it is:

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;

namespace Localization
{
    public class LocaleDropdown : MonoBehaviour
    {
        [SerializeField] private TMP_Dropdown _localesDropdown;

        private IEnumerator Start()
        {
            yield return LocalizationSettings.InitializationOperation;

            List<TMP_Dropdown.OptionData> options = new List<TMP_Dropdown.OptionData>();
            int selectedLocale = 0; //TODO: Store the selected locale in the player prefs
           
            for(int i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; i++)
            {
                Locale locale = LocalizationSettings.AvailableLocales.Locales[i];
                options.Add(new TMP_Dropdown.OptionData(locale.name));
                if (locale == LocalizationSettings.SelectedLocale) selectedLocale = i;
            }
           
            _localesDropdown.options = options;
            _localesDropdown.value = selectedLocale;
            _localesDropdown.onValueChanged.AddListener(OnLocaleChanged);
        }

        private static void OnLocaleChanged(int index)
        {
            LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
        }
    }
}
1 Like

@djovercome Have you found the solution for classic dropdown?