Xtensive.Orm.Localization
7.0.5
See the version list below for details.
dotnet add package Xtensive.Orm.Localization --version 7.0.5
NuGet\Install-Package Xtensive.Orm.Localization -Version 7.0.5
<PackageReference Include="Xtensive.Orm.Localization" Version="7.0.5" />
<PackageVersion Include="Xtensive.Orm.Localization" Version="7.0.5" />
<PackageReference Include="Xtensive.Orm.Localization" />
paket add Xtensive.Orm.Localization --version 7.0.5
#r "nuget: Xtensive.Orm.Localization, 7.0.5"
#addin nuget:?package=Xtensive.Orm.Localization&version=7.0.5
#tool nuget:?package=Xtensive.Orm.Localization&version=7.0.5
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 7.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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp3.1 is compatible. |
-
.NETCoreApp 3.1
- Xtensive.Orm (>= 7.0.5)
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-2 | 127 | 4/27/2025 |
7.2.0-Beta-1 | 112 | 12/28/2023 |
7.1.5 | 198 | 4/10/2025 |
7.1.4 | 143 | 1/27/2025 |
7.1.2 | 155 | 10/18/2024 |
7.1.1 | 215 | 11/14/2023 |
7.1.0 | 361 | 4/12/2023 |
7.1.0-RC | 175 | 3/9/2023 |
7.1.0-Beta-2 | 237 | 12/19/2022 |
7.1.0-Beta-1 | 195 | 7/4/2022 |
7.0.6 | 119 | 12/19/2024 |
7.0.5 | 150 | 6/3/2024 |
7.0.4 | 110 | 11/12/2023 |
7.0.3 | 568 | 3/21/2022 |
7.0.2 | 534 | 2/8/2022 |
7.0.1 | 409 | 10/29/2021 |
7.0.0 | 415 | 6/2/2021 |
6.0.14 | 111 | 12/17/2024 |
6.0.13 | 164 | 4/4/2024 |
6.0.12 | 122 | 11/10/2023 |
6.0.11 | 340 | 1/12/2023 |
6.0.10 | 499 | 4/29/2022 |
6.0.9 | 553 | 2/2/2022 |
6.0.8 | 472 | 10/28/2021 |
6.0.7 | 427 | 8/27/2021 |
6.0.6 | 470 | 5/24/2021 |
6.0.5 | 505 | 3/9/2021 |
6.0.4 | 551 | 12/22/2020 |
6.0.3 | 564 | 9/29/2020 |
6.0.0 | 731 | 1/28/2020 |
5.1.0-Beta-1 | 1,207 | 1/30/2015 |
5.0.24 | 464 | 4/27/2021 |
5.0.23 | 484 | 2/4/2021 |
5.0.22 | 601 | 11/18/2020 |
5.0.21 | 584 | 11/6/2020 |
5.0.20 | 742 | 12/25/2019 |
5.0.19 | 727 | 5/30/2019 |
5.0.19-Beta-2 | 508 | 4/16/2019 |
5.0.19-Beta-1 | 598 | 12/29/2018 |
5.0.18 | 960 | 9/28/2018 |
5.0.18-Beta-3 | 994 | 7/2/2018 |
5.0.18-Beta-2 | 844 | 6/6/2018 |
5.0.18-Beta-1 | 998 | 4/24/2018 |
5.0.17 | 1,113 | 2/27/2018 |
5.0.17-Beta-3 | 839 | 2/12/2018 |
5.0.17-Beta-2 | 1,001 | 1/12/2018 |
5.0.17-Beta-1 | 1,015 | 12/28/2017 |
5.0.16 | 1,204 | 12/1/2017 |
5.0.16-Beta-1 | 879 | 9/27/2017 |
5.0.15 | 1,144 | 8/1/2017 |
5.0.14 | 1,197 | 6/19/2017 |
5.0.13 | 1,189 | 3/22/2017 |
5.0.12 | 1,187 | 2/14/2017 |
5.0.11 | 1,161 | 1/25/2017 |
5.0.11-RC2 | 970 | 12/16/2016 |
5.0.11-RC | 1,275 | 9/20/2016 |
5.0.10 | 1,245 | 8/5/2016 |
5.0.10-RC | 969 | 6/30/2016 |
5.0.9 | 1,327 | 3/3/2016 |
5.0.8 | 1,242 | 2/15/2016 |
5.0.7 | 1,249 | 1/27/2016 |
5.0.7-RC2 | 975 | 12/8/2015 |
5.0.7-RC | 1,031 | 9/10/2015 |
5.0.6 | 1,344 | 7/3/2015 |
5.0.5 | 1,417 | 4/23/2015 |
5.0.4 | 1,300 | 3/19/2015 |
5.0.4-RC | 1,456 | 2/25/2015 |
5.0.3 | 2,008 | 10/31/2014 |
5.0.2 | 1,302 | 9/11/2014 |
5.0.0 | 1,400 | 8/15/2014 |
5.0.0-RC2 | 1,106 | 8/1/2014 |
5.0.0-RC | 1,073 | 7/21/2014 |
5.0.0-Beta-3 | 1,055 | 5/28/2014 |
5.0.0-Beta-2 | 1,122 | 2/28/2014 |
5.0.0-Beta-1 | 1,145 | 11/14/2013 |
4.6.9 | 1,278 | 7/3/2015 |
4.6.8 | 1,333 | 8/1/2014 |
4.6.7 | 1,414 | 6/23/2014 |
4.6.6 | 1,562 | 4/9/2014 |
4.6.5 | 1,383 | 1/7/2014 |
4.6.4 | 1,534 | 9/30/2013 |
4.6.3 | 1,500 | 2/4/2013 |
4.6.2 | 1,656 | 11/28/2012 |
4.6.0 | 1,630 | 10/11/2012 |
4.6.0-RC | 1,281 | 10/4/2012 |
4.5.8 | 1,379 | 9/30/2013 |
4.5.7 | 1,502 | 2/4/2013 |
4.5.6 | 1,546 | 11/28/2012 |
4.5.5 | 1,584 | 10/11/2012 |
4.5.5-RC | 1,266 | 10/4/2012 |
4.5.3 | 1,580 | 8/6/2012 |
4.5.2 | 1,689 | 5/10/2012 |
4.5.0 | 1,632 | 3/13/2012 |