Xtensive.Orm.Localization
6.0.14
See the version list below for details.
dotnet add package Xtensive.Orm.Localization --version 6.0.14
NuGet\Install-Package Xtensive.Orm.Localization -Version 6.0.14
<PackageReference Include="Xtensive.Orm.Localization" Version="6.0.14" />
paket add Xtensive.Orm.Localization --version 6.0.14
#r "nuget: Xtensive.Orm.Localization, 6.0.14"
// Install Xtensive.Orm.Localization as a Cake Addin #addin nuget:?package=Xtensive.Orm.Localization&version=6.0.14 // Install Xtensive.Orm.Localization as a Cake Tool #tool nuget:?package=Xtensive.Orm.Localization&version=6.0.14
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.14)
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.3 | 71 | 12/24/2024 |
7.1.2 | 120 | 10/18/2024 |
7.1.1 | 200 | 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.6 | 73 | 12/19/2024 |
7.0.5 | 121 | 6/3/2024 |
7.0.4 | 98 | 11/12/2023 |
7.0.3 | 518 | 3/21/2022 |
7.0.2 | 488 | 2/8/2022 |
7.0.1 | 363 | 10/29/2021 |
7.0.0 | 369 | 6/2/2021 |
6.0.14 | 70 | 12/17/2024 |
6.0.13 | 132 | 4/4/2024 |
6.0.12 | 110 | 11/10/2023 |
6.0.11 | 309 | 1/12/2023 |
6.0.10 | 456 | 4/29/2022 |
6.0.9 | 504 | 2/2/2022 |
6.0.8 | 422 | 10/28/2021 |
6.0.7 | 378 | 8/27/2021 |
6.0.6 | 424 | 5/24/2021 |
6.0.5 | 447 | 3/9/2021 |
6.0.4 | 492 | 12/22/2020 |
6.0.3 | 505 | 9/29/2020 |
6.0.0 | 667 | 1/28/2020 |
5.1.0-Beta-1 | 1,042 | 1/30/2015 |
5.0.24 | 411 | 4/27/2021 |
5.0.23 | 420 | 2/4/2021 |
5.0.22 | 538 | 11/18/2020 |
5.0.21 | 523 | 11/6/2020 |
5.0.20 | 645 | 12/25/2019 |
5.0.19 | 655 | 5/30/2019 |
5.0.19-Beta-2 | 440 | 4/16/2019 |
5.0.19-Beta-1 | 527 | 12/29/2018 |
5.0.18 | 872 | 9/28/2018 |
5.0.18-Beta-3 | 772 | 7/2/2018 |
5.0.18-Beta-2 | 691 | 6/6/2018 |
5.0.18-Beta-1 | 767 | 4/24/2018 |
5.0.17 | 955 | 2/27/2018 |
5.0.17-Beta-3 | 687 | 2/12/2018 |
5.0.17-Beta-2 | 768 | 1/12/2018 |
5.0.17-Beta-1 | 780 | 12/28/2017 |
5.0.16 | 1,040 | 12/1/2017 |
5.0.16-Beta-1 | 724 | 9/27/2017 |
5.0.15 | 982 | 8/1/2017 |
5.0.14 | 1,030 | 6/19/2017 |
5.0.13 | 1,021 | 3/22/2017 |
5.0.12 | 1,018 | 2/14/2017 |
5.0.11 | 989 | 1/25/2017 |
5.0.11-RC2 | 810 | 12/16/2016 |
5.0.11-RC | 1,117 | 9/20/2016 |
5.0.10 | 1,074 | 8/5/2016 |
5.0.10-RC | 809 | 6/30/2016 |
5.0.9 | 1,154 | 3/3/2016 |
5.0.8 | 1,070 | 2/15/2016 |
5.0.7 | 1,070 | 1/27/2016 |
5.0.7-RC2 | 810 | 12/8/2015 |
5.0.7-RC | 871 | 9/10/2015 |
5.0.6 | 1,169 | 7/3/2015 |
5.0.5 | 1,240 | 4/23/2015 |
5.0.4 | 1,126 | 3/19/2015 |
5.0.4-RC | 1,287 | 2/25/2015 |
5.0.3 | 1,821 | 10/31/2014 |
5.0.2 | 1,125 | 9/11/2014 |
5.0.0 | 1,224 | 8/15/2014 |
5.0.0-RC2 | 934 | 8/1/2014 |
5.0.0-RC | 903 | 7/21/2014 |
5.0.0-Beta-3 | 881 | 5/28/2014 |
5.0.0-Beta-2 | 946 | 2/28/2014 |
5.0.0-Beta-1 | 969 | 11/14/2013 |
4.6.9 | 1,105 | 7/3/2015 |
4.6.8 | 1,152 | 8/1/2014 |
4.6.7 | 1,235 | 6/23/2014 |
4.6.6 | 1,375 | 4/9/2014 |
4.6.5 | 1,191 | 1/7/2014 |
4.6.4 | 1,342 | 9/30/2013 |
4.6.3 | 1,319 | 2/4/2013 |
4.6.2 | 1,466 | 11/28/2012 |
4.6.0 | 1,440 | 10/11/2012 |
4.6.0-RC | 1,103 | 10/4/2012 |
4.5.8 | 1,191 | 9/30/2013 |
4.5.7 | 1,310 | 2/4/2013 |
4.5.6 | 1,359 | 11/28/2012 |
4.5.5 | 1,392 | 10/11/2012 |
4.5.5-RC | 1,090 | 10/4/2012 |
4.5.3 | 1,390 | 8/6/2012 |
4.5.2 | 1,502 | 5/10/2012 |
4.5.0 | 1,437 | 3/13/2012 |