Files
Dontback/Assets/Scripts/Localization/LocalizationManager.cs
Eicy c9d29f2a68 AI补足注释(已经快看不懂了)
实现i18n
优化部分模块的逻辑以优化性能
修复物品展示框打开时按下ESC唤出暂停菜单但没有暂停的bug

Signed-off-by: Eicy <im@crash.work>
2024-10-14 21:37:04 +08:00

81 lines
2.4 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace Localization
{
// 语言枚举
public enum Language
{
en_us,
zh_cn
}
// 本地化管理器类,用于加载和获取本地化文本
public class LocalizationManager : MonoBehaviour
{
// 单例实例
public static LocalizationManager Instance { get; private set; }
// 默认语言设置
public Language defaultLanguage = Language.zh_cn;
// 存储本地化文本的字典
private readonly Dictionary<string, string> _localizedText = new();
// Awake 方法,初始化单例并加载默认语言
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject); // 如果实例已存在,销毁当前对象
}
else
{
Instance = this;
DontDestroyOnLoad(gameObject); // 保持在场景切换中不销毁
LoadLanguage(defaultLanguage); // 加载默认语言
}
}
// 加载指定语言的文本文件
public void LoadLanguage(Language language)
{
_localizedText.Clear(); // 清空现有文本
// 从资源中加载语言文件
var textAsset = Resources.Load<TextAsset>($"Language/{language}");
if (textAsset == null)
{
Debug.LogError($"Unable to find language file for: {language}");
return;
}
// 按行读取文本并填充字典
var lines = textAsset.text.Split('\n');
foreach (var line in lines)
{
var keyValue = line.Split('=');
if (keyValue.Length == 2)
{
// 去除多余空格并添加到字典中
_localizedText[keyValue[0].Trim()] = keyValue[1].Trim();
}
}
}
// 根据键获取本地化的值
public string GetLocalizedValue(string key)
{
// 尝试从字典中获取对应的值
if (_localizedText.TryGetValue(key, out var value))
{
return value;
}
// 如果找不到对应的值,打印警告并返回原 key
Debug.LogWarning($"Localization key '{key}' not found.");
return key;
}
}
}