- Home /
Question by
Giannigiardinelli · May 11, 2020 at 08:20 AM ·
scripting problemvariablestaticdropdowntranslation
How Translation with a fils txt and script I18n ?
Need to understand this script to translate the game with a txt file
If I make calls to the function
lang = "en";
in the I18n script it works!
using System;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.UI;
class I18n
{
public static Dictionary<String, String> Fields { get; private set; }
public static string lang;
/// <summary>
/// Init on first use
/// </summary>
static I18n()
{
LoadLanguage();
}
/// <summary>
/// Load language files from ressources
/// </summary>
private static void LoadLanguage()
{
if (Fields == null)
Fields = new Dictionary<string, string>();
Fields.Clear();
lang = Get2LetterISOCodeFromSystemLanguage().ToLower();
lang = "en"; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
var textAsset = Resources.Load(@"I18n/" + lang); //no .txt needed
string allTexts = "";
if (textAsset == null)
textAsset = Resources.Load(@"I18n/en") as TextAsset; //no .txt needed
if (textAsset == null)
Debug.LogError("File not found for I18n: Assets/Resources/I18n/" + lang + ".txt");
allTexts = (textAsset as TextAsset).text;
string[] lines = allTexts.Split(new string[] { "\r\n", "\n" },
StringSplitOptions.None);
string key, value;
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].IndexOf("=") >= 0 && !lines[i].StartsWith("#"))
{
key = lines[i].Substring(0, lines[i].IndexOf("="));
value = lines[i].Substring(lines[i].IndexOf("=") + 1,
lines[i].Length - lines[i].IndexOf("=") - 1).Replace("\\n", Environment.NewLine);
Fields.Add(key, value);
}
}
}
public static string GetLanguage()
{
return Get2LetterISOCodeFromSystemLanguage().ToLower();
}
public static string Get2LetterISOCodeFromSystemLanguage()
{
SystemLanguage lang = Application.systemLanguage;
string res = "EN";
switch (lang)
{
case SystemLanguage.Afrikaans: res = "AF"; break;
case SystemLanguage.Arabic: res = "AR"; break;
case SystemLanguage.Basque: res = "EU"; break;
case SystemLanguage.Belarusian: res = "BY"; break;
case SystemLanguage.Bulgarian: res = "BG"; break;
case SystemLanguage.Catalan: res = "CA"; break;
case SystemLanguage.Chinese: res = "ZH"; break;
case SystemLanguage.ChineseSimplified: res = "ZH"; break;
case SystemLanguage.ChineseTraditional: res = "ZH"; break;
case SystemLanguage.Czech: res = "CS"; break;
case SystemLanguage.Danish: res = "DA"; break;
case SystemLanguage.Dutch: res = "NL"; break;
case SystemLanguage.English: res = "EN"; break;
case SystemLanguage.Estonian: res = "ET"; break;
case SystemLanguage.Faroese: res = "FO"; break;
case SystemLanguage.Finnish: res = "FI"; break;
case SystemLanguage.French: res = "FR"; break;
case SystemLanguage.German: res = "DE"; break;
case SystemLanguage.Greek: res = "EL"; break;
case SystemLanguage.Hebrew: res = "IW"; break;
case SystemLanguage.Hungarian: res = "HU"; break;
case SystemLanguage.Icelandic: res = "IS"; break;
case SystemLanguage.Indonesian: res = "IN"; break;
case SystemLanguage.Italian: res = "IT"; break;
case SystemLanguage.Japanese: res = "JA"; break;
case SystemLanguage.Korean: res = "KO"; break;
case SystemLanguage.Latvian: res = "LV"; break;
case SystemLanguage.Lithuanian: res = "LT"; break;
case SystemLanguage.Norwegian: res = "NO"; break;
case SystemLanguage.Polish: res = "PL"; break;
case SystemLanguage.Portuguese: res = "PT"; break;
case SystemLanguage.Romanian: res = "RO"; break;
case SystemLanguage.Russian: res = "RU"; break;
case SystemLanguage.SerboCroatian: res = "SH"; break;
case SystemLanguage.Slovak: res = "SK"; break;
case SystemLanguage.Slovenian: res = "SL"; break;
case SystemLanguage.Spanish: res = "ES"; break;
case SystemLanguage.Swedish: res = "SV"; break;
case SystemLanguage.Thai: res = "TH"; break;
case SystemLanguage.Turkish: res = "TR"; break;
case SystemLanguage.Ukrainian: res = "UK"; break;
case SystemLanguage.Unknown: res = "EN"; break;
case SystemLanguage.Vietnamese: res = "VI"; break;
}
// Debug.Log ("Lang: " + res);
return res;
}
}
But if I create another script to make calls for a dropdown where the player selects his language,
it doesn't work!
using System;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.UI;
public class Options : MonoBehaviour {
public Dropdown DropLangue;
public GameObject DropDown;
// Use this for initialization
void Awake()
{
DropLangue = DropDown.GetComponent<Dropdown>();
}
public void Start()
{
}
public void Update()
{
if (DropLangue.value == 0)
{
I18n.lang = "en";
}
if (DropLangue.value == 1)
{
}
}
}
Why !?
Thank you in advance for helping me and explaining to me!
Comment
Your answer
Follow this Question
Related Questions
Global Variables Refuse to Cooperate 1 Answer
pubblic variable don't get change from script with OnTriggerStay 1 Answer
Get Dropdown Index value based on text value using Where c# filter 1 Answer
How can I make a Dropdown option to be converted on a text to appear somewhere? 0 Answers
Variable access simulateneously 3 Answers