-
Notifications
You must be signed in to change notification settings - Fork 0
/
HasTranslations.cs
38 lines (36 loc) · 1.27 KB
/
HasTranslations.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
namespace EFTranslatable
{
/// <summary>
/// Give the ability to driven Entity to translate it's self
/// </summary>
/// <typeparam name="T">EntityFrameWork Model</typeparam>
public abstract class HasTranslations<T> where T : class, new()
{
/// <summary>
/// Translate current Entity to the specified locale
/// </summary>
/// <param name="locale">The locale to translate to</param>
/// <returns>New translated Entity with the giving locale</returns>
public T Translate(string locale)
{
var result = new T();
var currentType = GetType();
foreach (var property in currentType.GetProperties())
{
if (property.PropertyType == typeof(Translatable))
{
var value = (Translatable)property.GetValue(this)!;
var tempLocale = value.CurrentLocale;
value.WithLocale(locale);
property.SetValue(result, value);
value.WithLocale(tempLocale);
}
else
{
property.SetValue(result, property.GetValue(this));
}
}
return result;
}
}
}