2024-08-03 22:24:42 +02:00
|
|
|
|
using System.Collections.Generic;
|
2023-01-22 16:38:23 +01:00
|
|
|
|
using System.Linq;
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
using UnityEditorInternal;
|
|
|
|
|
#endif
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
#if CCK_ADDIN_TRANSLATABLE_TMP
|
|
|
|
|
using TMPro;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
namespace ABI.CCK.Components
|
|
|
|
|
{
|
2024-08-03 22:24:42 +02:00
|
|
|
|
[AddComponentMenu("ChilloutVR/CVR Translatable")]
|
|
|
|
|
[HelpURL("https://developers.abinteractive.net/cck/")]
|
|
|
|
|
public class CVRTranslatable : MonoBehaviour, ICCK_Component
|
2023-01-22 16:38:23 +01:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public List<ObjectTranslatable_t> Translatables = new List<ObjectTranslatable_t>();
|
|
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class ObjectTranslatable_t
|
|
|
|
|
{
|
|
|
|
|
public TranslatableType Type = TranslatableType.Text;
|
|
|
|
|
public List<Translation_t> Translations = new List<Translation_t>();
|
|
|
|
|
#if CCK_ADDIN_TRANSLATABLE_TMP
|
|
|
|
|
public TMP_Text TmpText;
|
|
|
|
|
#endif
|
|
|
|
|
public Text Text;
|
|
|
|
|
public AudioSource Source;
|
|
|
|
|
public string FallbackLanguage = "en";
|
|
|
|
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
public ReorderableList reorderableList;
|
|
|
|
|
public Translation_t entity;
|
|
|
|
|
|
|
|
|
|
public ReorderableList GetList()
|
|
|
|
|
{
|
|
|
|
|
if (reorderableList == null)
|
|
|
|
|
{
|
|
|
|
|
reorderableList = new ReorderableList(Translations, typeof(Translation_t),
|
|
|
|
|
true, true, true, true);
|
|
|
|
|
reorderableList.drawHeaderCallback = OnDrawHeader;
|
|
|
|
|
reorderableList.drawElementCallback = OnDrawElement;
|
|
|
|
|
reorderableList.elementHeightCallback = OnHeightElement;
|
|
|
|
|
reorderableList.onAddCallback = OnAdd;
|
|
|
|
|
reorderableList.onChangedCallback = OnChanged;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return reorderableList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnDrawElement(Rect rect, int index, bool isactive, bool isfocused)
|
|
|
|
|
{
|
|
|
|
|
if (index > Translations.Count) return;
|
|
|
|
|
entity = Translations[index];
|
|
|
|
|
|
|
|
|
|
rect.y += 2;
|
|
|
|
|
rect.x += 12;
|
|
|
|
|
rect.width -= 12;
|
|
|
|
|
Rect _rect = new Rect(rect.x, rect.y, 100, EditorGUIUtility.singleLineHeight);
|
|
|
|
|
|
|
|
|
|
EditorGUI.LabelField(_rect, "Language");
|
|
|
|
|
_rect.x += 100;
|
|
|
|
|
_rect.width = rect.width - 100;
|
|
|
|
|
|
|
|
|
|
var selectedIndex = CVRTranslatable.Languages.Keys.ToList().FindIndex(match => match == entity.Language);
|
|
|
|
|
|
|
|
|
|
selectedIndex = EditorGUI.Popup(_rect, selectedIndex, CVRTranslatable.Languages.Values.ToArray());
|
|
|
|
|
|
|
|
|
|
entity.Language = CVRTranslatable.Languages.Keys.ToArray()[selectedIndex];
|
|
|
|
|
|
|
|
|
|
rect.y += EditorGUIUtility.singleLineHeight * 1.25f;
|
|
|
|
|
_rect = new Rect(rect.x, rect.y, 100, EditorGUIUtility.singleLineHeight *
|
|
|
|
|
(Type==TranslatableType.AudioClip||Type==TranslatableType.GameObject?1f:3f));
|
|
|
|
|
|
|
|
|
|
EditorGUI.LabelField(_rect, Type==TranslatableType.AudioClip?"Audio Clip":(Type==TranslatableType.GameObject?"Object":"Text"));
|
|
|
|
|
_rect.x += 100;
|
|
|
|
|
_rect.width = rect.width - 100;
|
|
|
|
|
|
|
|
|
|
switch (Type)
|
|
|
|
|
{
|
|
|
|
|
case TranslatableType.Text:
|
|
|
|
|
#if CCK_ADDIN_TRANSLATABLE_TMP
|
|
|
|
|
case TranslatableType.TextMeshPro:
|
|
|
|
|
#endif
|
|
|
|
|
entity.Text = EditorGUI.TextArea(_rect, entity.Text);
|
|
|
|
|
break;
|
|
|
|
|
case TranslatableType.AudioClip:
|
2024-08-03 22:24:42 +02:00
|
|
|
|
entity.Clip = (AudioClip) EditorGUI.ObjectField(_rect, entity.Clip, typeof(AudioClip), false);
|
2023-01-22 16:38:23 +01:00
|
|
|
|
break;
|
|
|
|
|
case TranslatableType.GameObject:
|
|
|
|
|
entity.Object = (GameObject) EditorGUI.ObjectField(_rect, entity.Object, typeof(GameObject), true);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private float OnHeightElement(int index)
|
|
|
|
|
{
|
|
|
|
|
return EditorGUIUtility.singleLineHeight * (Type==TranslatableType.AudioClip||Type==TranslatableType.GameObject?2.5f:5f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnChanged(ReorderableList list)
|
|
|
|
|
{
|
|
|
|
|
//EditorUtility.SetDirty(target);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnAdd(ReorderableList list)
|
|
|
|
|
{
|
|
|
|
|
Translations.Add(new Translation_t());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnDrawHeader(Rect rect)
|
|
|
|
|
{
|
|
|
|
|
Rect _rect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight);
|
|
|
|
|
|
|
|
|
|
GUI.Label(_rect, "Translations");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class Translation_t
|
|
|
|
|
{
|
|
|
|
|
public string Language = "en";
|
|
|
|
|
public string Text;
|
|
|
|
|
public AudioClip Clip;
|
|
|
|
|
public GameObject Object;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum TranslatableType
|
|
|
|
|
{
|
|
|
|
|
AudioClip = 0,
|
|
|
|
|
Text = 1,
|
|
|
|
|
#if CCK_ADDIN_TRANSLATABLE_TMP
|
|
|
|
|
TextMeshPro = 2,
|
|
|
|
|
#endif
|
|
|
|
|
GameObject = 3
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Dictionary<string, string> Languages = new Dictionary<string, string>()
|
|
|
|
|
{
|
|
|
|
|
{"ab", "Abkhazian"},
|
|
|
|
|
{"aa", "Afar"},
|
|
|
|
|
{"af", "Afrikaans"},
|
|
|
|
|
{"ak", "Akan"},
|
|
|
|
|
{"sq", "Albanian"},
|
|
|
|
|
{"am", "Amharic"},
|
|
|
|
|
{"ar", "Arabic"},
|
|
|
|
|
{"an", "Aragonese"},
|
|
|
|
|
{"hy", "Armenian"},
|
|
|
|
|
{"as", "Assamese"},
|
|
|
|
|
{"av", "Avaric"},
|
|
|
|
|
{"ae", "Avestan"},
|
|
|
|
|
{"ay", "Aymara"},
|
|
|
|
|
{"az", "Azerbaijani"},
|
|
|
|
|
{"bm", "Bambara"},
|
|
|
|
|
{"ba", "Bashkir"},
|
|
|
|
|
{"eu", "Basque"},
|
|
|
|
|
{"be", "Belarusian"},
|
|
|
|
|
{"bn", "Bengali"},
|
|
|
|
|
{"bh", "Bihari languages"},
|
|
|
|
|
{"bi", "Bislama"},
|
|
|
|
|
{"bs", "Bosnian"},
|
|
|
|
|
{"br", "Breton"},
|
|
|
|
|
{"bg", "Bulgarian"},
|
|
|
|
|
{"my", "Burmese"},
|
|
|
|
|
{"ca", "Catalan, Valencian"},
|
|
|
|
|
{"ch", "Chamorro"},
|
|
|
|
|
{"ce", "Chechen"},
|
|
|
|
|
{"ny", "Chichewa, Chewa, Nyanja"},
|
|
|
|
|
{"zh", "Chinese"},
|
|
|
|
|
{"cv", "Chuvash"},
|
|
|
|
|
{"kw", "Cornish"},
|
|
|
|
|
{"co", "Corsican"},
|
|
|
|
|
{"cr", "Cree"},
|
|
|
|
|
{"hr", "Croatian"},
|
|
|
|
|
{"cs", "Czech"},
|
|
|
|
|
{"da", "Danish"},
|
|
|
|
|
{"dv", "Divehi, Dhivehi, Maldivian"},
|
|
|
|
|
{"nl", "Dutch, Flemish"},
|
|
|
|
|
{"dz", "Dzongkha"},
|
|
|
|
|
{"en", "English"},
|
|
|
|
|
{"eo", "Esperanto"},
|
|
|
|
|
{"et", "Estonian"},
|
|
|
|
|
{"ee", "Ewe"},
|
|
|
|
|
{"fo", "Faroese"},
|
|
|
|
|
{"fj", "Fijian"},
|
|
|
|
|
{"fi", "Finnish"},
|
|
|
|
|
{"fr", "French"},
|
|
|
|
|
{"ff", "Fulah"},
|
|
|
|
|
{"gl", "Galician"},
|
|
|
|
|
{"ka", "Georgian"},
|
|
|
|
|
{"de", "German"},
|
|
|
|
|
{"el", "Greek, Modern(1453–)"},
|
|
|
|
|
{"gn", "Guarani"},
|
|
|
|
|
{"gu", "Gujarati"},
|
|
|
|
|
{"ht", "Haitian, Haitian Kreol"},
|
|
|
|
|
{"ha", "Hausa"},
|
|
|
|
|
{"he", "Hebrew"},
|
|
|
|
|
{"hz", "Herero"},
|
|
|
|
|
{"hi", "Hindi"},
|
|
|
|
|
{"ho", "Hiri Motu"},
|
|
|
|
|
{"hu", "Hungarian"},
|
|
|
|
|
{"ia", "Interlingua (International Auxiliary Language Association)"},
|
|
|
|
|
{"id", "Indonesian"},
|
|
|
|
|
{"ie", "Interlingue, Occidental"},
|
|
|
|
|
{"ga", "Irish"},
|
|
|
|
|
{"ig", "Igbo"},
|
|
|
|
|
{"ik", "Inupiaq"},
|
|
|
|
|
{"io", "Ido"},
|
|
|
|
|
{"is", "Icelandic"},
|
|
|
|
|
{"it", "Italian"},
|
|
|
|
|
{"iu", "Inuktitut"},
|
|
|
|
|
{"ja", "Japanese"},
|
|
|
|
|
{"jv", "Javanese"},
|
|
|
|
|
{"kl", "Kalaallisut, Greenlandic"},
|
|
|
|
|
{"kn", "Kannada"},
|
|
|
|
|
{"kr", "Kanuri"},
|
|
|
|
|
{"ks", "Kashmiri"},
|
|
|
|
|
{"kk", "Kazakh"},
|
|
|
|
|
{"km", "Central Khmer"},
|
|
|
|
|
{"ki", "Kikuyu, Gikuyu"},
|
|
|
|
|
{"rw", "Kinyarwanda"},
|
|
|
|
|
{"ky", "Kirghiz, Kyrgyz"},
|
|
|
|
|
{"kv", "Komi"},
|
|
|
|
|
{"kg", "Kongo"},
|
|
|
|
|
{"ko", "Korean"},
|
|
|
|
|
{"ku", "Kurdish"},
|
|
|
|
|
{"kj", "Kuanyama, Kwanyama"},
|
|
|
|
|
{"la", "Latin"},
|
|
|
|
|
{"lb", "Luxembourgish, Letzeburgesch"},
|
|
|
|
|
{"lg", "Ganda"},
|
|
|
|
|
{"li", "Limburgan, Limburger, Limburgish"},
|
|
|
|
|
{"ln", "Lingala"},
|
|
|
|
|
{"lo", "Lao"},
|
|
|
|
|
{"lt", "Lithuanian"},
|
|
|
|
|
{"lu", "Luba-Katanga"},
|
|
|
|
|
{"lv", "Latvian"},
|
|
|
|
|
{"gv", "Manx"},
|
|
|
|
|
{"mk", "Macedonian"},
|
|
|
|
|
{"mg", "Malagasy"},
|
|
|
|
|
{"ms", "Malay"},
|
|
|
|
|
{"ml", "Malayalam"},
|
|
|
|
|
{"mt", "Maltese"},
|
|
|
|
|
{"mi", "Maori"},
|
|
|
|
|
{"mr", "Marathi"},
|
|
|
|
|
{"mh", "Marshallese"},
|
|
|
|
|
{"mn", "Mongolian"},
|
|
|
|
|
{"na", "Nauru"},
|
|
|
|
|
{"nv", "Navajo, Navaho"},
|
|
|
|
|
{"nd", "North Ndebele"},
|
|
|
|
|
{"ne", "Nepali"},
|
|
|
|
|
{"ng", "Ndonga"},
|
|
|
|
|
{"nb", "Norwegian Bokmål"},
|
|
|
|
|
{"nn", "Norwegian Nynorsk"},
|
|
|
|
|
{"no", "Norwegian"},
|
|
|
|
|
{"ii", "Sichuan Yi, Nuosu"},
|
|
|
|
|
{"nr", "South Ndebele"},
|
|
|
|
|
{"oc", "Occitan"},
|
|
|
|
|
{"oj", "Ojibwa"},
|
|
|
|
|
{"cu", "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic"},
|
|
|
|
|
{"om", "Oromo"},
|
|
|
|
|
{"or", "Oriya"},
|
|
|
|
|
{"os", "Ossetian, Ossetic"},
|
|
|
|
|
{"pa", "Panjabi, Punjabi"},
|
|
|
|
|
{"pi", "Pali"},
|
|
|
|
|
{"fa", "Persian"},
|
|
|
|
|
{"pl", "Polish"},
|
|
|
|
|
{"ps", "Pashto, Pushto"},
|
|
|
|
|
{"pt", "Portuguese"},
|
|
|
|
|
{"qu", "Quechua"},
|
|
|
|
|
{"rm", "Romansh"},
|
|
|
|
|
{"rn", "Rundi"},
|
|
|
|
|
{"ro", "Romanian, Moldavian, Moldovan"},
|
|
|
|
|
{"ru", "Russian"},
|
|
|
|
|
{"sa", "Sanskrit"},
|
|
|
|
|
{"sc", "Sardinian"},
|
|
|
|
|
{"sd", "Sindhi"},
|
|
|
|
|
{"se", "Northern, Sami"},
|
|
|
|
|
{"sh", "Serbo-Croatian"},
|
|
|
|
|
{"sm", "Samoan"},
|
|
|
|
|
{"sg", "Sango"},
|
|
|
|
|
{"sr", "Serbian"},
|
|
|
|
|
{"gd", "Gaelic, Scottish Gaelic"},
|
|
|
|
|
{"sn", "Shona"},
|
|
|
|
|
{"si", "Sinhala, Sinhalese"},
|
|
|
|
|
{"sk", "Slovak"},
|
|
|
|
|
{"sl", "Slovenian"},
|
|
|
|
|
{"so", "Somali"},
|
|
|
|
|
{"st", "Southern Sotho"},
|
|
|
|
|
{"es", "Spanish, Castilian"},
|
|
|
|
|
{"su", "Sundanese"},
|
|
|
|
|
{"sw", "Swahili"},
|
|
|
|
|
{"ss", "Swati"},
|
|
|
|
|
{"sv", "Swedish"},
|
|
|
|
|
{"ta", "Tamil"},
|
|
|
|
|
{"te", "Telugu"},
|
|
|
|
|
{"tg", "Tajik"},
|
|
|
|
|
{"th", "Thai"},
|
|
|
|
|
{"ti", "Tigrinya"},
|
|
|
|
|
{"bo", "Tibetan"},
|
|
|
|
|
{"tk", "Turkmen"},
|
|
|
|
|
{"tl", "Tagalog"},
|
|
|
|
|
{"tn", "Tswana"},
|
|
|
|
|
{"to", "Tonga (Tonga Islands)"},
|
|
|
|
|
{"tr", "Turkish"},
|
|
|
|
|
{"ts", "Tsonga"},
|
|
|
|
|
{"tt", "Tatar"},
|
|
|
|
|
{"tw", "Twi"},
|
|
|
|
|
{"ty", "Tahitian"},
|
|
|
|
|
{"ug", "Uighur, Uyghur"},
|
|
|
|
|
{"uk", "Ukrainian"},
|
|
|
|
|
{"ur", "Urdu"},
|
|
|
|
|
{"uz", "Uzbek"},
|
|
|
|
|
{"ve", "Venda"},
|
|
|
|
|
{"vi", "Vietnamese"},
|
|
|
|
|
{"vo", "Volapük"},
|
|
|
|
|
{"wa", "Walloon"},
|
|
|
|
|
{"cy", "Welsh"},
|
|
|
|
|
{"wo", "Wolof"},
|
|
|
|
|
{"fy", "Western Frisian"},
|
|
|
|
|
{"xh", "Xhosa"},
|
|
|
|
|
{"yi", "Yiddish"},
|
|
|
|
|
{"yo", "Yoruba"},
|
|
|
|
|
{"za", "Zhuang, Chuang"},
|
|
|
|
|
{"zu", "Zulu"}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|