105 lines
2.6 KiB
C#
Raw Permalink Normal View History

2025-05-31 05:14:48 +05:00
using UnityEngine;
using System;
using TMPro;
using System.Collections.Generic;
[System.Serializable]
public class LocalizedText
{
public string key;
2025-06-03 04:48:58 +05:00
[TextArea(3, 10)]
2025-05-31 05:14:48 +05:00
public string english;
2025-06-03 04:48:58 +05:00
[TextArea(3, 10)]
2025-05-31 05:14:48 +05:00
public string arabic;
2025-06-03 04:48:58 +05:00
2025-05-31 05:14:48 +05:00
}
public class LanguageManager : MonoBehaviour
{
public static LanguageManager Instance;
public LanguageDatabase languageDB;
public string currentLanguage = "English";
private List<LocalizedTextComponent> registeredTexts = new();
public TMP_FontAsset fontEnglish;
public TMP_FontAsset fontArabic;
public TextMeshProUGUI languageLabel;
2025-06-03 04:27:14 +05:00
public bool languageSetBool = false;
2025-06-25 23:14:09 +05:00
public bool IsArabic => currentLanguage == "Arabic";
2025-05-31 05:14:48 +05:00
public TMP_FontAsset GetCurrentFont()
{
return currentLanguage == "Arabic" ? fontArabic : fontEnglish;
}
void Awake()
{
if (Instance == null)
Instance = this;
else
Destroy(gameObject);
}
public void ToggleLanguage()
{
currentLanguage = currentLanguage == "English" ? "Arabic" : "English";
PlayerPrefs.SetString("AppLang", currentLanguage);
UpdateLanguageLabel(); // <--- NEW
UpdateAllTexts();
}
void Start()
{
currentLanguage = PlayerPrefs.GetString("AppLang", "English");
UpdateLanguageLabel(); // <--- NEW
UpdateAllTexts();
}
private void UpdateLanguageLabel()
{
if (languageLabel != null)
{
languageLabel.text = currentLanguage == "English" ? "English" : "Arabic";
//languageLabel.alignment = currentLanguage == "Arabic" ? TextAlignmentOptions.Right : TextAlignmentOptions.Left;
//languageLabel.font = GetCurrentFont();
}
}
public void Register(LocalizedTextComponent component)
{
if (!registeredTexts.Contains(component))
registeredTexts.Add(component);
}
public void Unregister(LocalizedTextComponent component)
{
registeredTexts.Remove(component);
}
public string GetLocalizedText(string key)
{
return languageDB.GetText(key, currentLanguage);
}
2025-06-03 04:27:14 +05:00
public void SetLanguage(string language)
{
languageSetBool = true;
if (language == currentLanguage) return;
if (language == "English" || language == "Arabic")
{
currentLanguage = language;
PlayerPrefs.SetString("AppLang", currentLanguage);
UpdateLanguageLabel();
UpdateAllTexts();
}
}
2025-05-31 05:14:48 +05:00
public void UpdateAllTexts()
{
foreach (var item in registeredTexts)
{
item.UpdateText();
}
}
}