Xtensive.Orm.Localization
6.0.13
See the version list below for details.
dotnet add package Xtensive.Orm.Localization --version 6.0.13
NuGet\Install-Package Xtensive.Orm.Localization -Version 6.0.13
<PackageReference Include="Xtensive.Orm.Localization" Version="6.0.13" />
paket add Xtensive.Orm.Localization --version 6.0.13
#r "nuget: Xtensive.Orm.Localization, 6.0.13"
// Install Xtensive.Orm.Localization as a Cake Addin #addin nuget:?package=Xtensive.Orm.Localization&version=6.0.13 // Install Xtensive.Orm.Localization as a Cake Tool #tool nuget:?package=Xtensive.Orm.Localization&version=6.0.13
Xtensive.Orm.Localization
Summary
The extension transparently solves a task of application or service localization. This implies that localizable resources are a part of domain model so they are stored in database.
Prerequisites
DataObjects.Net 6.0.x or later (http://dataobjects.net)
Implementation
Implement ILocalizable<TLocalization> on your localizable entities, e.g.:
[HierarchyRoot]
public class Page : Entity, ILocalizable<PageLocalization>
{
[Field, Key]
public int Id { get; private set; }
// Localizable field. Note that it is non-persistent
public string Title
{
get { return Localizations.Current.Title; }
set { Localizations.Current.Title = value; }
}
[Field] // This is a storage of all localizations for Page class
public LocalizationSet<PageLocalization> Localizations { get; private set; }
public Page(Session session) : base(session) {}
}
Define corresponding localizations, e.g.:
[HierarchyRoot]
public class PageLocalization : Localization<Page>
{
[Field(Length = 100)]
public string Title { get; set; }
public PageLocalization(Session session, CultureInfo culture, Page target)
: base(session, culture, target) {}
}
Examples of usage
Example #1. Access localizable properties as regular ones, e.g.:
page.Title = "Welcome";
string title = page.Title;
Example #2. Mass editing of localizable properties:
var en = new CultureInfo("en-US");
var sp = new CultureInfo("es-ES");
var page = new Page(session);
page.Localizations[en].Title = "Welcome";
page.Localizations[sp].Title = "Bienvenido";
Example #3. Value of localizable properties reflects culture of the current Thread, e.g.:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
string title = page.Title; // title is "Welcome"
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
string title = page.Title; // title is "Bienvenido"
Example #4. Instead of altering CurrentThread, instance of LocalizationScope can be used, e.g.:
using (new LocalizationScope(new CultureInfo("en-US"))) {
string title = page.Title; // title is "Welcome"
}
using (new LocalizationScope(new CultureInfo("es-ES"))) {
string title = page.Title; // title is "Bienvenido"
}
Example #5. LINQ queries that include localizable properties are transparently translated
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
var query = from p in session.Query.All<Page>()
where p.Title=="Welcome"
select p;
Assert.AreEqual(1, query.Count());
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
var query = from p in session.Query.All<Page>()
where p.Title=="Bienvenido"
select p;
Assert.AreEqual(1, query.Count());
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Xtensive.Orm (>= 6.0.13)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
7.2.0-Beta-1 | 103 | 12/28/2023 |
7.1.2 | 115 | 10/18/2024 |
7.1.1 | 198 | 11/14/2023 |
7.1.0 | 333 | 4/12/2023 |
7.1.0-RC | 142 | 3/9/2023 |
7.1.0-Beta-2 | 211 | 12/19/2022 |
7.1.0-Beta-1 | 161 | 7/4/2022 |
7.0.5 | 116 | 6/3/2024 |
7.0.4 | 98 | 11/12/2023 |
7.0.3 | 516 | 3/21/2022 |
7.0.2 | 486 | 2/8/2022 |
7.0.1 | 361 | 10/29/2021 |
7.0.0 | 367 | 6/2/2021 |
6.0.13 | 132 | 4/4/2024 |
6.0.12 | 110 | 11/10/2023 |
6.0.11 | 309 | 1/12/2023 |
6.0.10 | 454 | 4/29/2022 |
6.0.9 | 500 | 2/2/2022 |
6.0.8 | 420 | 10/28/2021 |
6.0.7 | 376 | 8/27/2021 |
6.0.6 | 422 | 5/24/2021 |
6.0.5 | 445 | 3/9/2021 |
6.0.4 | 490 | 12/22/2020 |
6.0.3 | 503 | 9/29/2020 |
6.0.0 | 665 | 1/28/2020 |
5.1.0-Beta-1 | 1,037 | 1/30/2015 |
5.0.24 | 409 | 4/27/2021 |
5.0.23 | 417 | 2/4/2021 |
5.0.22 | 536 | 11/18/2020 |
5.0.21 | 521 | 11/6/2020 |
5.0.20 | 643 | 12/25/2019 |
5.0.19 | 653 | 5/30/2019 |
5.0.19-Beta-2 | 440 | 4/16/2019 |
5.0.19-Beta-1 | 526 | 12/29/2018 |
5.0.18 | 865 | 9/28/2018 |
5.0.18-Beta-3 | 766 | 7/2/2018 |
5.0.18-Beta-2 | 686 | 6/6/2018 |
5.0.18-Beta-1 | 761 | 4/24/2018 |
5.0.17 | 947 | 2/27/2018 |
5.0.17-Beta-3 | 687 | 2/12/2018 |
5.0.17-Beta-2 | 763 | 1/12/2018 |
5.0.17-Beta-1 | 775 | 12/28/2017 |
5.0.16 | 1,033 | 12/1/2017 |
5.0.16-Beta-1 | 719 | 9/27/2017 |
5.0.15 | 975 | 8/1/2017 |
5.0.14 | 1,023 | 6/19/2017 |
5.0.13 | 1,015 | 3/22/2017 |
5.0.12 | 1,012 | 2/14/2017 |
5.0.11 | 982 | 1/25/2017 |
5.0.11-RC2 | 805 | 12/16/2016 |
5.0.11-RC | 1,112 | 9/20/2016 |
5.0.10 | 1,067 | 8/5/2016 |
5.0.10-RC | 803 | 6/30/2016 |
5.0.9 | 1,148 | 3/3/2016 |
5.0.8 | 1,063 | 2/15/2016 |
5.0.7 | 1,064 | 1/27/2016 |
5.0.7-RC2 | 805 | 12/8/2015 |
5.0.7-RC | 866 | 9/10/2015 |
5.0.6 | 1,163 | 7/3/2015 |
5.0.5 | 1,233 | 4/23/2015 |
5.0.4 | 1,119 | 3/19/2015 |
5.0.4-RC | 1,281 | 2/25/2015 |
5.0.3 | 1,815 | 10/31/2014 |
5.0.2 | 1,119 | 9/11/2014 |
5.0.0 | 1,215 | 8/15/2014 |
5.0.0-RC2 | 929 | 8/1/2014 |
5.0.0-RC | 898 | 7/21/2014 |
5.0.0-Beta-3 | 875 | 5/28/2014 |
5.0.0-Beta-2 | 940 | 2/28/2014 |
5.0.0-Beta-1 | 964 | 11/14/2013 |
4.6.9 | 1,099 | 7/3/2015 |
4.6.8 | 1,143 | 8/1/2014 |
4.6.7 | 1,229 | 6/23/2014 |
4.6.6 | 1,368 | 4/9/2014 |
4.6.5 | 1,185 | 1/7/2014 |
4.6.4 | 1,334 | 9/30/2013 |
4.6.3 | 1,313 | 2/4/2013 |
4.6.2 | 1,460 | 11/28/2012 |
4.6.0 | 1,434 | 10/11/2012 |
4.6.0-RC | 1,098 | 10/4/2012 |
4.5.8 | 1,184 | 9/30/2013 |
4.5.7 | 1,304 | 2/4/2013 |
4.5.6 | 1,352 | 11/28/2012 |
4.5.5 | 1,386 | 10/11/2012 |
4.5.5-RC | 1,085 | 10/4/2012 |
4.5.3 | 1,384 | 8/6/2012 |
4.5.2 | 1,496 | 5/10/2012 |
4.5.0 | 1,431 | 3/13/2012 |