profileShare

rasmusjy / splitapp-backend-clean-onion

Read-only snapshot

No repository description.

main default branch 429 files Expires Sep 13, 2026, 9:06 AM
LangStr.cs 2,075 bytes
1 namespace Base.Domain;
2
3 public class LangStr : Dictionary<string, string>
4 {
5
6 // look at appsettings.json LangStrDefaultCulture value
7 public static string DefaultCulture { get; set; } = "en";
8
9 // s["en"] = "foo";
10 // var bar = s["en"];
11 public new string this[string key]
12 {
13 get => base[key];
14 set => base[key] = value;
15 }
16
17 public LangStr()
18 {
19 }
20
21 public LangStr(string value) : this(value, Thread.CurrentThread.CurrentUICulture.Name)
22 {
23 }
24
25 public LangStr(string value, string culture)
26 {
27 if (culture.Length < 1) throw new ApplicationException("Culture is required!");
28
29 var neutralCulture = culture.Split('-')[0];
30 this[neutralCulture] = value;
31
32 // check for default culture also. if not set - do so
33 if (!ContainsKey(DefaultCulture))
34 {
35 this[DefaultCulture] = value;
36 }
37 }
38
39 public string? Translate(string? culture = null)
40 {
41 if (Count == 0) return null;
42 culture = culture?.Trim() ?? Thread.CurrentThread.CurrentUICulture.Name;
43
44 if (ContainsKey(culture))
45 {
46 return this[culture];
47 }
48
49 var neutralCulture = culture.Split('-')[0];
50 if (ContainsKey(neutralCulture))
51 {
52 return this[neutralCulture];
53 }
54
55 if (ContainsKey(DefaultCulture))
56 {
57 return this[DefaultCulture];
58 }
59
60 return null;
61 }
62
63 public void SetTranslation(string value, string? culture = null)
64 {
65 culture = culture?.Trim() ?? Thread.CurrentThread.CurrentUICulture.Name;
66 var neutralCulture = culture.Split('-')[0];
67 this[neutralCulture] = value;
68 }
69
70 public override string ToString()
71 {
72 return Translate() ?? "????";
73 }
74
75 // string xxx = new LangStr("foo","et-EE"); xxx == "foo";
76 public static implicit operator string(LangStr? langStr) => langStr?.ToString() ?? "null";
77
78 // LangStr xxx = "foobar";
79 public static implicit operator LangStr(string value) => new LangStr(value);
80 }
81