Dreamine.UI.Wpf 1.0.1
Dreamine.UI.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
DreamineLocalizationManager.cs
이 파일의 문서화 페이지로 가기
1using System.ComponentModel;
2using System.IO;
3using System.Windows;
4
6
54
120
130{
139 private static readonly HashSet<Language> _valid = Enum.GetValues<Language>().ToHashSet();
140
149 private static readonly Dictionary<Language, Dictionary<string, Dictionary<string, string>>> _langDict = new();
150
159 private static Language _currentLanguage = Language.Korean;
168 private static Language _oldLanguage = Language.Korean;
169
179
189 {
190 get => _currentLanguage;
191 set
192 {
193 if (_valid.Contains(value) && _currentLanguage != value)
194 {
196 _currentLanguage = value;
197 LanguageChanged?.Invoke(null, EventArgs.Empty);
198 }
199 }
200 }
201
210 public static event EventHandler? LanguageChanged;
211
220 public static IReadOnlyDictionary<Language, IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>>> Languages
221 => _langDict.ToDictionary(
222 l => l.Key,
223 l => (IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>>)
224 l.Value.ToDictionary(s => s.Key, s => (IReadOnlyDictionary<string, string>)s.Value));
225
258 public static void SetLanguageData(
259 Language language,
260 Dictionary<Language, Dictionary<string, Dictionary<string, string>>> data)
261 {
262 _langDict.Clear();
263 foreach (var kv in data)
264 _langDict[kv.Key] = kv.Value;
265 CurrentLanguage = language;
266 }
267
308 public static void Load(
309 Func<string, Dictionary<string, Dictionary<string, string>>> loadFn,
310 Language language = Language.English,
311 string? basePath = null)
312 {
313 CurrentLanguage = language;
314 string dir = basePath ?? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Languages");
315
316 foreach (Language lang in Enum.GetValues<Language>())
317 {
318 string langName = lang.ToString();
319 string filePath = Path.Combine(dir, $"Ui{langName}.INI");
320 if (!File.Exists(filePath))
321 filePath = Path.Combine(dir, $"UI_{langName}.INI");
322 if (!File.Exists(filePath))
323 continue;
324
325 _langDict[lang] = loadFn(filePath);
326 }
327 }
328
361 public static string Get(string section, string key)
362 => Get(CurrentLanguage, section, key);
363
404 public static string Get(Language lang, string section, string key)
405 {
406 if (_langDict.TryGetValue(lang, out var sectionDict) &&
407 sectionDict.TryGetValue(section, out var keyDict) &&
408 keyDict.TryGetValue(key, out var value))
409 return value;
410
411 return null!;
412 }
413
454 public static string? GetKeyFromValue(Language lang, string section, string value)
455 {
456 if (_langDict.TryGetValue(lang, out var sectionDict) &&
457 sectionDict.TryGetValue(section, out var keyDict))
458 {
459 foreach (var pair in keyDict)
460 if (pair.Value == value) return pair.Key;
461 }
462 return null;
463 }
464
497 public static string GetLocalizedEquivalent(string section, string value)
498 {
499 if (string.IsNullOrEmpty(value)) return value;
500 var key = GetKeyFromValue(_oldLanguage, section, value);
501 if (string.IsNullOrEmpty(key)) return value;
502 var newLang = Get(CurrentLanguage, section, key);
503 return string.IsNullOrEmpty(newLang) ? value : newLang;
504 }
505}
506
515public class StaticLocalizationProxy : DependencyObject, INotifyPropertyChanged
516{
525 public static StaticLocalizationProxy Instance { get; set; } = new();
526
539
553
562 public event PropertyChangedEventHandler? PropertyChanged;
563
580 protected void OnPropertyChanged(string name)
581 => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
582}
static void Load(Func< string, Dictionary< string, Dictionary< string, string > > > loadFn, Language language=Language.English, string? basePath=null)
static IReadOnlyDictionary< Language, IReadOnlyDictionary< string, IReadOnlyDictionary< string, string > > > Languages
static ? string GetKeyFromValue(Language lang, string section, string value)
static string Get(Language lang, string section, string key)
static readonly Dictionary< Language, Dictionary< string, Dictionary< string, string > > > _langDict
static string GetLocalizedEquivalent(string section, string value)
static void SetLanguageData(Language language, Dictionary< Language, Dictionary< string, Dictionary< string, string > > > data)