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
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?