I-Synergy.Framework.AspNetCore.Globalization 2026.10201.12332

Prefix Reserved
dotnet add package I-Synergy.Framework.AspNetCore.Globalization --version 2026.10201.12332
                    
NuGet\Install-Package I-Synergy.Framework.AspNetCore.Globalization -Version 2026.10201.12332
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="I-Synergy.Framework.AspNetCore.Globalization" Version="2026.10201.12332" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="I-Synergy.Framework.AspNetCore.Globalization" Version="2026.10201.12332" />
                    
Directory.Packages.props
<PackageReference Include="I-Synergy.Framework.AspNetCore.Globalization" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add I-Synergy.Framework.AspNetCore.Globalization --version 2026.10201.12332
                    
#r "nuget: I-Synergy.Framework.AspNetCore.Globalization, 2026.10201.12332"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package I-Synergy.Framework.AspNetCore.Globalization@2026.10201.12332
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=I-Synergy.Framework.AspNetCore.Globalization&version=2026.10201.12332
                    
Install as a Cake Addin
#tool nuget:?package=I-Synergy.Framework.AspNetCore.Globalization&version=2026.10201.12332
                    
Install as a Cake Tool

I-Synergy Framework AspNetCore Globalization

Comprehensive globalization and localization support for ASP.NET Core applications. This package provides request culture providers, route-based culture resolution, language services, and seamless integration with ASP.NET Core's localization middleware.

NuGet License .NET

Features

  • Route-based culture resolution with automatic URL pattern detection
  • Multiple culture providers (Route, QueryString, Cookie, Accept-Language header)
  • Culture route constraint for validating culture segments in URLs
  • Language service integration with resource management
  • Configurable globalization options with default and supported cultures
  • ASP.NET Core middleware integration with RequestLocalizationMiddleware
  • Culture fallback support for invalid or missing culture specifications
  • HttpContext accessor for culture management across application layers

Installation

Install the package via NuGet:

dotnet add package I-Synergy.Framework.AspNetCore.Globalization

Quick Start

1. Configure Globalization Services

In your Program.cs:

using ISynergy.Framework.AspNetCore.Globalization.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Add globalization services
builder.AddGlobalization();

builder.Services.AddControllers();

var app = builder.Build();

// Use request localization middleware
app.UseRequestLocalization();

app.MapControllers();
app.Run();

2. Configure Globalization Options

In your appsettings.json:

{
  "GlobalizationOptions": {
    "DefaultCulture": "en-US",
    "SupportedCultures": [
      "en-US",
      "nl-NL",
      "de-DE",
      "fr-FR",
      "es-ES"
    ],
    "ProviderType": "Route"
  }
}

3. Configure Route-Based Culture

For route-based culture resolution, update your routing:

using ISynergy.Framework.AspNetCore.Globalization.Constraints;

var builder = WebApplication.CreateBuilder(args);

builder.AddGlobalization();

builder.Services.AddControllers();

var app = builder.Build();

app.UseRequestLocalization();

// Map controllers with culture route constraint
app.MapControllerRoute(
    name: "default",
    pattern: "{culture:culture}/{controller=Home}/{action=Index}/{id?}");

app.MapControllerRoute(
    name: "fallback",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

4. Using the Language Service

Access localized resources in your code:

using ISynergy.Framework.Core.Abstractions.Services;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("{culture:culture}/api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly ILanguageService _languageService;

    public ProductsController(ILanguageService languageService)
    {
        _languageService = languageService;
    }

    [HttpGet]
    public IActionResult GetProducts()
    {
        var welcomeMessage = _languageService.GetString("WelcomeMessage");
        var productsTitle = _languageService.GetString("ProductsTitle");

        return Ok(new
        {
            Message = welcomeMessage,
            Title = productsTitle
        });
    }
}

Core Components

Options

ISynergy.Framework.AspNetCore.Globalization.Options/
└── GlobalizationOptions              # Configuration for cultures and providers

Providers

ISynergy.Framework.AspNetCore.Globalization.Providers/
└── RouteDataRequestCultureProvider   # Extract culture from route data

Constraints

ISynergy.Framework.AspNetCore.Globalization.Constraints/
└── CultureRouteConstraint            # Validate culture in route segments

Services

ISynergy.Framework.AspNetCore.Globalization.Services/
└── LanguageService                   # Access localized resources

Enumerations

ISynergy.Framework.AspNetCore.Globalization.Enumerations/
└── RequestCultureProviderTypes       # Available provider types

Advanced Features

Multiple Culture Provider Strategies

Configure different provider types based on your application needs:

{
  "GlobalizationOptions": {
    "DefaultCulture": "en-US",
    "SupportedCultures": ["en-US", "nl-NL", "de-DE"],
    "ProviderType": "Route"
  }
}

Available provider types:

  • Route: Extract culture from URL path (e.g., /nl-NL/products)
  • QueryString: Extract culture from query string (e.g., ?culture=nl-NL)
  • Cookie: Read culture from a cookie
  • AcceptLanguageHeader: Use Accept-Language HTTP header

Custom Route Patterns

Define culture-aware routes in your controllers:

using Microsoft.AspNetCore.Mvc;

[Route("{culture:culture}/[controller]")]
[ApiController]
public class LocalizedController : ControllerBase
{
    // URL: /nl-NL/localized/hello
    [HttpGet("hello")]
    public IActionResult Hello()
    {
        var culture = RouteData.Values["culture"]?.ToString();
        return Ok($"Hello in culture: {culture}");
    }
}

[Route("[controller]")]
[ApiController]
public class NonLocalizedController : ControllerBase
{
    // URL: /nonlocalized/hello (uses default culture)
    [HttpGet("hello")]
    public IActionResult Hello()
    {
        return Ok("Hello");
    }
}

Manual Culture Management

Set or override culture programmatically:

using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class CultureController : ControllerBase
{
    [HttpPost("set")]
    public IActionResult SetCulture([FromBody] string culture)
    {
        // Set culture cookie
        Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(
                new RequestCulture(culture)),
            new CookieOptions
            {
                Expires = DateTimeOffset.UtcNow.AddYears(1),
                IsEssential = true,
                SameSite = SameSiteMode.Lax
            });

        return Ok($"Culture set to: {culture}");
    }

    [HttpGet("current")]
    public IActionResult GetCulture()
    {
        var feature = HttpContext.Features.Get<IRequestCultureFeature>();
        var culture = feature?.RequestCulture.Culture.Name ?? "Unknown";
        var uiCulture = feature?.RequestCulture.UICulture.Name ?? "Unknown";

        return Ok(new
        {
            Culture = culture,
            UICulture = uiCulture
        });
    }
}

Resource Management

Configure localized resources for your application:

using ISynergy.Framework.Core.Abstractions.Services;

// In your Program.cs or startup configuration
var languageService = builder.Services
    .BuildServiceProvider()
    .GetRequiredService<ILanguageService>();

// Add resource managers for different assemblies
languageService.AddResourceManager(typeof(AppResources));
languageService.AddResourceManager(typeof(SharedResources));
languageService.AddResourceManager(typeof(ValidationResources));

Create resource files for each supported culture:

  • Resources/AppResources.resx (default/English)
  • Resources/AppResources.nl-NL.resx (Dutch)
  • Resources/AppResources.de-DE.resx (German)

Access resources:

using ISynergy.Framework.Core.Abstractions.Services;

public class LocalizedService
{
    private readonly ILanguageService _languageService;

    public LocalizedService(ILanguageService languageService)
    {
        _languageService = languageService;
    }

    public string GetLocalizedMessage(string key)
    {
        return _languageService.GetString(key);
    }

    public string GetLocalizedMessageWithFormat(string key, params object[] args)
    {
        var format = _languageService.GetString(key);
        return string.Format(format, args);
    }
}

Usage Examples

E-commerce Application with Multiple Languages

Complete example of a multi-language e-commerce API:

using ISynergy.Framework.AspNetCore.Globalization.Extensions;
using ISynergy.Framework.Core.Abstractions.Services;
using Microsoft.AspNetCore.Localization;

var builder = WebApplication.CreateBuilder(args);

// Add globalization
builder.AddGlobalization();

builder.Services.AddControllers();

var app = builder.Build();

// Configure request localization
var localizationOptions = app.Services
    .GetRequiredService<IOptions<RequestLocalizationOptions>>()
    .Value;

app.UseRequestLocalization(localizationOptions);

// Route configuration with culture
app.MapControllerRoute(
    name: "localized",
    pattern: "{culture:culture}/{controller=Home}/{action=Index}/{id?}");

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

// Product Controller
[Route("{culture:culture}/api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
    private readonly ILanguageService _languageService;
    private readonly IProductRepository _productRepository;

    public ProductsController(
        ILanguageService languageService,
        IProductRepository productRepository)
    {
        _languageService = languageService;
        _productRepository = productRepository;
    }

    [HttpGet]
    public IActionResult GetProducts()
    {
        var products = _productRepository.GetAll();

        return Ok(new
        {
            Title = _languageService.GetString("Products_Title"),
            Description = _languageService.GetString("Products_Description"),
            Items = products
        });
    }

    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
        var product = _productRepository.GetById(id);

        if (product == null)
        {
            return NotFound(new
            {
                Error = _languageService.GetString("Product_NotFound")
            });
        }

        return Ok(product);
    }

    [HttpPost]
    public IActionResult CreateProduct([FromBody] ProductDto productDto)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(new
            {
                Error = _languageService.GetString("Validation_Failed"),
                Errors = ModelState
            });
        }

        var product = _productRepository.Create(productDto);

        return CreatedAtAction(
            nameof(GetProduct),
            new { id = product.Id },
            product);
    }
}

Blazor Server with Route-Based Culture

// Program.cs
using ISynergy.Framework.AspNetCore.Globalization.Extensions;

var builder = WebApplication.CreateBuilder(args);

builder.AddGlobalization();

builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();

var app = builder.Build();

app.UseRequestLocalization();
app.UseStaticFiles();
app.UseRouting();

app.MapBlazorHub();
app.MapFallbackToPage("/{culture:culture}/_Host");
app.MapFallbackToPage("/_Host");

app.Run();

@page "/{culture?}"
@using Microsoft.AspNetCore.Localization

@{
    var culture = RouteData.Values["culture"]?.ToString() ?? "en-US";
    var requestCulture = new RequestCulture(culture);

    Context.Features.Set<IRequestCultureFeature>(
        new RequestCultureFeature(requestCulture, null));
}

<!DOCTYPE html>
<html lang="@culture">
<head>
    <meta charset="utf-8" />
    <title>My App - @culture</title>
</head>
<body>
    <component type="typeof(App)" render-mode="ServerPrerendered" />
</body>
</html>

Culture Switcher Component

@inject ILanguageService LanguageService
@inject NavigationManager Navigation

<div class="culture-switcher">
    <label>@LanguageService.GetString("SelectLanguage")</label>
    <select @onchange="OnCultureChanged">
        <option value="en-US" selected="@(CurrentCulture == "en-US")">English</option>
        <option value="nl-NL" selected="@(CurrentCulture == "nl-NL")">Nederlands</option>
        <option value="de-DE" selected="@(CurrentCulture == "de-DE")">Deutsch</option>
        <option value="fr-FR" selected="@(CurrentCulture == "fr-FR")">Français</option>
        <option value="es-ES" selected="@(CurrentCulture == "es-ES")">Español</option>
    </select>
</div>

@code {
    private string CurrentCulture { get; set; } = "en-US";

    protected override void OnInitialized()
    {
        var uri = new Uri(Navigation.Uri);
        var segments = uri.AbsolutePath.Split('/', StringSplitOptions.RemoveEmptyEntries);

        if (segments.Length > 0)
        {
            CurrentCulture = segments[0];
        }
    }

    private void OnCultureChanged(ChangeEventArgs e)
    {
        var newCulture = e.Value?.ToString() ?? "en-US";
        var uri = new Uri(Navigation.Uri);
        var path = uri.AbsolutePath;

        // Remove current culture from path if present
        var segments = path.Split('/', StringSplitOptions.RemoveEmptyEntries);
        if (segments.Length > 0 && IsSupportedCulture(segments[0]))
        {
            path = "/" + string.Join("/", segments.Skip(1));
        }

        // Redirect to new culture
        var newUri = $"/{newCulture}{path}{uri.Query}";
        Navigation.NavigateTo(newUri, forceLoad: true);
    }

    private bool IsSupportedCulture(string culture)
    {
        var supported = new[] { "en-US", "nl-NL", "de-DE", "fr-FR", "es-ES" };
        return supported.Contains(culture);
    }
}

Best Practices

Use route-based culture for SEO-friendly URLs and better user experience with language-specific content.

Always configure a default culture to fall back to when the requested culture is not supported.

Test your application with right-to-left (RTL) languages if you plan to support them (e.g., Arabic, Hebrew).

Culture Configuration

  • Choose route-based culture for public websites (better SEO)
  • Use cookie-based culture for authenticated applications
  • Accept-Language header works well for APIs
  • Always provide a default culture fallback
  • Keep supported cultures list synchronized across configuration
  • Validate culture codes against CultureInfo

Resource Management

  • Organize resources by feature or module
  • Use meaningful resource keys (e.g., "Product_NotFound" not "Err001")
  • Keep resource files in sync across all cultures
  • Implement a translation workflow for new resources
  • Use placeholders for dynamic content
  • Consider using satellite assemblies for large resource files

URL Design

  • Place culture code at the start of the URL (/{culture}/products)
  • Use culture route constraint to validate culture codes
  • Provide culture-neutral routes as fallback
  • Implement culture switcher without losing context
  • Handle culture redirects with 302 (temporary) not 301 (permanent)
  • Preserve query strings when switching cultures

Performance Considerations

  • Cache localized resources to avoid repeated lookups
  • Use compiled resource files (.resources.dll)
  • Consider CDN for static localized content
  • Minimize culture switches during user session
  • Pre-load common resources at startup
  • Use lazy loading for large resource sets

Testing

Example unit tests for globalization:

using ISynergy.Framework.AspNetCore.Globalization.Providers;
using ISynergy.Framework.AspNetCore.Globalization.Options;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Xunit;

public class RouteDataRequestCultureProviderTests
{
    [Fact]
    public async Task DetermineProviderCultureResult_WithValidCulture_ReturnsCulture()
    {
        // Arrange
        var options = Options.Create(new GlobalizationOptions
        {
            DefaultCulture = "en-US",
            SupportedCultures = new[] { "en-US", "nl-NL" }
        });

        var provider = new RouteDataRequestCultureProvider(options);
        var context = new DefaultHttpContext();
        context.Request.Path = "/nl-NL/products";

        // Act
        var result = await provider.DetermineProviderCultureResult(context);

        // Assert
        Assert.NotNull(result);
        Assert.Equal("nl-NL", result.Cultures.First().Value);
    }

    [Fact]
    public async Task DetermineProviderCultureResult_WithInvalidCulture_ReturnsDefault()
    {
        // Arrange
        var options = Options.Create(new GlobalizationOptions
        {
            DefaultCulture = "en-US",
            SupportedCultures = new[] { "en-US", "nl-NL" }
        });

        var provider = new RouteDataRequestCultureProvider(options);
        var context = new DefaultHttpContext();
        context.Request.Path = "/invalid/products";

        // Act
        var result = await provider.DetermineProviderCultureResult(context);

        // Assert
        Assert.NotNull(result);
        Assert.Equal("en-US", result.Cultures.First().Value);
    }
}

Dependencies

  • Microsoft.AspNetCore.Localization - ASP.NET Core localization middleware
  • Microsoft.AspNetCore.Routing - Routing infrastructure
  • Microsoft.Extensions.Localization - Localization abstractions
  • ISynergy.Framework.Core - Core framework utilities

Documentation

For more information about the I-Synergy Framework:

  • I-Synergy.Framework.Core - Core framework components
  • I-Synergy.Framework.AspNetCore - Base ASP.NET Core integration
  • I-Synergy.Framework.AspNetCore.Blazor - Blazor integration
  • I-Synergy.Framework.UI - UI localization support

Support

For issues, questions, or contributions, please visit the GitHub repository.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
2026.10201.12332 43 2/1/2026
2026.10201.12300-preview 44 2/1/2026
2026.10116.10015-preview 82 1/15/2026
2026.10110.10203 102 1/10/2026
2026.10110.10121-preview 86 1/10/2026
2026.10109.12335-preview 86 1/9/2026
2026.10105.11358-preview 88 1/5/2026
2026.10105.11229-preview 83 1/5/2026
2025.11231.11750-preview 85 12/31/2025
2025.11225.12213 202 12/25/2025
2025.11225.12003-preview 170 12/25/2025
2025.11218.11301 291 12/18/2025
2025.11218.10050-preview 267 12/18/2025
2025.11211.11307-preview 419 12/11/2025
2025.11211.11225-preview 402 12/11/2025
2025.11210.10145-preview 431 12/10/2025
2025.11209.11459 461 12/9/2025
2025.11209.11422-preview 437 12/9/2025
2025.11207.11553-preview 216 12/7/2025
2025.11204.11448-preview 193 12/4/2025
2025.11130.12248 442 11/30/2025
2025.11130.12134-preview 345 11/30/2025
2025.11130.11725-preview 352 11/30/2025
2025.11130.11553-preview 346 11/30/2025
2025.11130.11515-preview 346 11/30/2025
2025.11130.11420.59-preview 353 11/30/2025
2025.11130.11323.56-preview 251 11/30/2025
2025.11129.10227.14-preview 108 11/29/2025
2025.11120.10114 432 11/20/2025
2025.11119.12324.6-preview 401 11/19/2025
2025.11119.10110 432 11/19/2025
2025.11118.12340.33-preview 399 11/18/2025
2025.11117.12349.4-preview 402 11/17/2025
2025.11117.11937.47-preview 392 11/17/2025
2025.11113.11532.29-preview 281 11/13/2025
2025.11113.10128.57-preview 282 11/13/2025
2025.11110.10306.55-preview 231 11/10/2025
2025.11109.10018.48-preview 150 11/8/2025
2025.11108.10119.29-preview 121 11/8/2025
2025.11106.10037.1-preview 192 11/6/2025
2025.11105.10254.54-preview 195 11/5/2025
2025.11105.10141.16-preview 204 11/5/2025
2025.11104.12308.54-preview 189 11/4/2025
2025.11104.10144.47-preview 192 11/4/2025
2025.11102.12003.8-preview 200 11/2/2025
2025.11102.11228.52-preview 166 11/2/2025
2025.11102.10309.42-preview 132 11/2/2025
2025.11029.11433.38-preview 190 10/29/2025
2025.11029.10201.38-preview 189 10/29/2025
2025.11027.11947.55-preview 189 10/27/2025
2025.11022.12207.12-preview 185 10/22/2025
2025.11019.12053.37-preview 188 10/19/2025
2025.11016.11750.24-preview 175 10/16/2025
2025.11015.10219.44-preview 175 10/15/2025
2025.11014.10245.12-preview 183 10/14/2025
2025.11012.10130.11-preview 119 10/12/2025
2025.11010.10052.52-preview 186 10/9/2025
2025.11001.12118.13-preview 187 10/1/2025
2025.10925.10144.25-preview 200 9/25/2025
2025.10921.11353.29-preview 216 9/21/2025
2025.10913.11841.29-preview 165 9/13/2025
2025.10912.12351.59-preview 113 9/12/2025
2025.10912.10210.52-preview 183 9/12/2025
2025.10911.10131.43-preview 186 9/10/2025
2025.10910.12340.34-preview 191 9/10/2025
2025.10910.11327.15-preview 188 9/10/2025
2025.10910.11206.45-preview 185 9/10/2025
2025.10910.10230.58-preview 197 9/10/2025
2025.10908.12343.47-preview 194 9/8/2025
2025.10904.12337.35-preview 193 9/4/2025
2025.10904.12245.51-preview 196 9/4/2025
2025.10904.11425.5-preview 200 9/4/2025
2025.10904.10323.39-preview 207 9/4/2025
2025.10826.11425.3-preview 262 8/26/2025
2025.10825.12350.9-preview 192 8/25/2025
2025.10810.10248-preview 144 8/10/2025
2025.10809.10146.35-preview 190 8/9/2025
2025.10806.12031.49-preview 274 8/6/2025
2025.10806.11955.54-preview 264 8/6/2025
2025.10806.11433.24-preview 274 8/6/2025
2025.10709.10105.39-preview 197 7/8/2025
2025.10707.12320.3-preview 200 7/7/2025
2025.10706.11957.9-preview 186 7/6/2025
2025.10702.11752.47-preview 182 7/2/2025
2025.10702.11256.17-preview 189 7/2/2025
2025.10702.11119.10-preview 191 7/2/2025
2025.10702.10000.31-preview 185 7/1/2025
2025.10701.11524.1-preview 188 7/1/2025
2025.10701.11310.13-preview 184 7/1/2025
2025.10630.12022.58-preview 191 6/30/2025
2025.10612.12134.8-preview 360 6/12/2025
2025.10611.12313.53-preview 334 6/11/2025
2025.10603.10159.54-preview 194 6/3/2025
2025.10602.11908.9-preview 193 6/2/2025
2025.10601.10124.29-preview 151 5/31/2025
2025.10531.12235.29-preview 150 5/31/2025
2025.10530.10121.50-preview 193 5/29/2025
2025.10527.12202.4-preview 188 5/27/2025
2025.10526.12034.25-preview 188 5/26/2025
2025.10521.11828.30-preview 199 5/21/2025
2025.10520.11715.6-preview 193 5/20/2025
2025.10520.11515.16-preview 180 5/20/2025
2025.10518.12303.43-preview 213 5/18/2025
2025.10518.11257.36-preview 201 5/18/2025
2025.10517.12347.27-preview 153 5/17/2025
2025.10517.12003.6-preview 158 5/17/2025
2025.10516.11720.13-preview 223 5/16/2025
2025.10514.12334.2-preview 291 5/14/2025
2025.10514.10015.27-preview 285 5/13/2025
2025.10511.11032.32-preview 196 5/11/2025
2025.10413.11530 351 4/13/2025
2025.10413.11434.33-preview 245 4/13/2025
2025.10413.10205.50-preview 180 4/13/2025
2025.10412.11526.4-preview 146 4/12/2025
2025.10412.10141 239 4/12/2025
2025.10411.11811.23-preview 185 4/11/2025
2025.10411.11645.1-preview 178 4/11/2025
2025.10410.11458.35-preview 236 4/10/2025
2025.10405.10143.28-preview 142 4/5/2025
2025.10403.12208.1-preview 214 4/3/2025
2025.10403.11954.16-preview 209 4/3/2025
2025.10401.11908.24-preview 214 4/1/2025
2025.10401.11559.45-preview 211 4/1/2025
2025.10331.12215.59-preview 194 3/31/2025
2025.10331.12130.34-preview 201 3/31/2025
2025.10331.10056.40-preview 207 3/30/2025
2025.10328.10150.21-preview 192 3/28/2025
2025.10323.11359-preview 337 3/23/2025
2025.10320.11800 297 3/20/2025
2025.10320.11616.45-preview 202 3/20/2025
2025.10320.10000 276 3/19/2025
2025.10319.12311.26-preview 203 3/19/2025
2025.10319.12238.6-preview 206 3/19/2025
2025.10319.12057.59-preview 188 3/19/2025
2025.10318.10055 287 3/18/2025
2025.10317.11728.13-preview 198 3/17/2025
2025.10317.11201.3-preview 206 3/17/2025
2025.10315.11523.14-preview 141 3/15/2025
2025.10305.12342 355 3/5/2025
2025.10305.12321.9-preview 241 3/5/2025
2025.10301.12313 239 3/1/2025
2025.10301.12129.38-preview 151 3/1/2025
2025.10221.10043.29-preview 176 2/21/2025
2025.1051.1246 241 2/20/2025
2025.1051.44.54-preview 147 2/20/2025
2025.1044.1 254 2/13/2025
2025.1044.0.2-preview 151 2/13/2025
2025.1043.0.2-preview 163 2/12/2025
2025.1041.0.1-preview 158 2/10/2025
2025.1038.1 260 2/7/2025
2025.1038.0.1-preview 141 2/7/2025
2025.1035.1 241 2/4/2025
2025.1035.0.1-preview 160 2/4/2025
2025.1034.1 242 2/3/2025
2025.1034.0.1-preview 152 2/3/2025
2025.1033.0.5-preview 154 2/2/2025
2025.1033.0.3-preview 151 2/2/2025
2025.1033.0.2-preview 147 2/2/2025
2025.1033.0.1-preview 155 2/2/2025
2025.1025.1 258 1/25/2025
2025.1025.0.1-preview 154 1/25/2025
2025.1021.1 252 1/21/2025
2025.1021.0.1-preview 142 1/21/2025
2025.1020.1 231 1/20/2025
2025.1020.0.3-preview 144 1/20/2025
2025.1020.0.1-preview 147 1/20/2025
2025.1018.0.7-preview 144 1/18/2025
2025.1018.0.5-preview 150 1/18/2025
2025.1018.0.4-preview 136 1/18/2025
2025.1017.0.2-preview 138 1/17/2025
2025.1017.0.1-preview 145 1/17/2025
2025.1016.0.1-preview 135 1/16/2025
2025.1010.1 236 1/10/2025
2025.1010.0.1-preview 140 1/9/2025
2025.1009.0.3-preview 132 1/9/2025
2025.1007.1 240 1/7/2025
2025.1007.0.5-preview 144 1/7/2025
2025.1007.0.3-preview 141 1/7/2025
2025.1006.1 246 1/7/2025
2025.1005.1 257 1/5/2025
2025.1005.0.2-preview 157 1/5/2025
2025.1004.1 254 1/4/2025
2024.1366.1 255 12/31/2024
2024.1366.0.2-preview 158 12/31/2024
2024.1366.0.1-preview 165 12/31/2024
2024.1365.0.2-preview 153 12/30/2024
2024.1365.0.1-preview 142 12/30/2024
2024.1361.0.2-preview 152 12/26/2024
2024.1353.0.1-preview 154 12/18/2024
2024.1352.0.3-preview 155 12/17/2024
2024.1352.0.2-preview 153 12/17/2024
2024.1352.0.1-preview 143 12/17/2024
2024.1351.1 250 12/16/2024
2024.1351.0.3-preview 132 12/16/2024
2024.1350.1 237 12/15/2024
2024.1343.1 236 12/8/2024
2024.1339.1 249 12/4/2024
2024.1336.1 244 12/1/2024
2024.1332.1 239 11/27/2024
2024.1330.1 236 11/25/2024
2024.1328.1 231 11/23/2024
2024.1325.1 231 11/20/2024
2024.1323.1 241 11/18/2024
2024.1316.1 194 11/11/2024
2024.1307.1 188 11/2/2024
2024.1300.1 193 10/26/2024
2024.1294.1 216 10/20/2024
2024.1290.1 235 10/16/2024
2024.1283.1 238 10/8/2024
2024.1282.1 230 10/8/2024
2024.1278.1 238 10/4/2024
2024.1277.1 220 10/3/2024
2024.1275.2 236 10/1/2024
2024.1275.1 229 10/1/2024
2024.1274.1 241 9/30/2024
2024.1263.1 244 9/19/2024
2024.1261.1 266 9/17/2024
2024.1258.1 252 9/13/2024
2024.1257.1 251 9/13/2024
2024.1256.1 254 9/12/2024
2024.1254.1 238 9/10/2024
2024.1250.1 246 9/6/2024
2024.1249.1 259 9/5/2024
2024.1246.1 256 9/2/2024
2024.1245.1 254 9/1/2024
2024.1237.1 281 8/24/2024
2024.1235.0.1-preview 159 8/23/2024
2024.1230.1 258 8/18/2024
2024.1229.1 275 8/16/2024
2024.1228.1 260 8/15/2024
2024.1222.1 269 8/8/2024
2024.1221.1 233 8/7/2024
2024.1221.0.2-preview 158 8/8/2024
2024.1221.0.1-preview 165 8/8/2024
2024.1220.1 230 8/7/2024
2024.1219.0.2-preview 147 8/6/2024
2024.1219.0.1-preview 158 8/6/2024
2024.1217.0.2-preview 145 8/4/2024
2024.1217.0.1-preview 149 8/4/2024
2024.1216.0.2-preview 130 8/3/2024
2024.1216.0.1-preview 130 8/3/2024
2024.1208.0.1-preview 134 7/26/2024
2024.1207.0.7-preview 144 7/25/2024
2024.1207.0.5-preview 141 7/25/2024
2024.1166.1 263 6/14/2024
2024.1165.1 240 6/13/2024
2024.1164.1 236 6/12/2024
2024.1162.1 258 6/10/2024
2024.1158.1 257 6/6/2024
2024.1156.1 240 6/4/2024
2024.1152.1 281 5/31/2024
2024.1151.1 264 5/29/2024
2024.1150.2 250 5/29/2024
2024.1150.1 250 5/29/2024
2024.1149.1 241 5/28/2024
2024.1147.1 252 5/26/2024
2024.1146.2 250 5/25/2024
2024.1146.1 251 5/25/2024
2024.1145.1 249 5/24/2024
2024.1135.2 263 5/14/2024
2024.1135.1 242 5/14/2024
2024.1134.1 250 5/13/2024
2024.1130.1 276 5/9/2024
2024.1123.1 263 5/2/2024
2024.1121.1 246 4/30/2024
2024.1114.1 265 4/22/2024
2024.1113.0.5-preview 174 4/22/2024
2024.1113.0.3-preview 172 4/22/2024
2024.1113.0.2-preview 158 4/22/2024
2024.1113.0.1-preview 149 4/22/2024
2024.1108.0.1-preview 163 4/17/2024
2024.1107.0.1-preview 176 4/16/2024
2024.1094.2 271 4/3/2024
2024.1094.1 238 4/3/2024
2024.1092.1 255 4/1/2024
2024.1088.1 268 3/28/2024
2024.1085.1 255 3/25/2024
2024.1080.2 257 3/20/2024
2024.1080.1 290 3/20/2024
2024.1078.1 259 3/18/2024
2024.1077.1 253 3/17/2024
2024.1073.1 269 3/13/2024
2024.1070.1 264 3/10/2024
2024.1069.1 260 3/9/2024
2024.1068.1 258 3/8/2024
2024.1066.2 254 3/6/2024
2024.1066.1 257 3/6/2024
2024.1065.1 277 3/5/2024
2024.1065.0.1-preview 153 3/5/2024
2024.1063.2 261 3/3/2024
2024.1063.1 261 3/3/2024
2024.1062.1 269 3/2/2024
2024.1061.2 283 3/1/2024
2024.1061.1 298 3/1/2024
2024.1060.2 247 2/29/2024
2024.1060.1 245 2/29/2024
2024.1060.0.5-preview 180 2/29/2024
2024.1060.0.3-preview 163 2/29/2024
2024.1059.0.1-preview 160 2/28/2024
2024.1058.1 267 2/27/2024
2024.1056.1 273 2/25/2024
2024.1055.1 243 2/24/2024
2024.1052.1 274 2/21/2024
2024.1050.2 265 2/20/2024
2024.1050.1 257 2/19/2024
2024.1049.1 250 2/18/2024
2024.1048.1 260 2/17/2024
2024.1047.1 263 2/16/2024
2024.1035.1 276 2/4/2024
2024.1034.2 250 2/3/2024
2024.1029.1 265 1/29/2024
2024.1023.1 276 1/23/2024
2024.1022.1 248 1/22/2024
2024.1020.1 255 1/20/2024
2024.1019.1 246 1/19/2024
2024.1017.1 271 1/17/2024
2024.1012.1 271 1/12/2024
2024.1010.1 258 1/10/2024
2024.1008.1 281 1/8/2024
2024.1007.1 273 1/7/2024
2024.1005.1 268 1/5/2024
2024.1004.1 291 1/4/2024
2023.1365.1 284 12/31/2023
2023.1362.1 274 12/28/2023
2023.1361.1 283 12/27/2023
2023.1359.1 289 12/25/2023
2023.1358.1 266 12/24/2023
2023.1357.1 300 12/23/2023
2023.1342.1 294 12/8/2023
2023.1336.1 229 12/2/2023
2023.1332.1 222 11/28/2023
2023.1330.1 188 11/26/2023
2023.1325.1 223 11/21/2023
2023.1323.1 210 11/19/2023
2023.1320.1 206 11/17/2023
2023.1318.1 201 11/15/2023
2023.1317.1 192 11/13/2023
2023.1307.1 218 11/3/2023
2023.1305.1 231 11/1/2023
2023.1304.1 214 10/31/2023
2023.1294.1 240 10/21/2023
2023.1290.1 219 10/16/2023
2023.1289.1 204 10/16/2023
2023.1284.1 236 10/11/2023
2023.1276.1 239 10/3/2023
2023.1275.1 229 10/2/2023
2023.1272.1 223 9/29/2023
2023.1269.1 225 9/26/2023
2023.1242.1 282 8/30/2023
2023.1231.1 289 8/19/2023
2023.1229.1 274 8/17/2023
2023.1228.1 254 8/16/2023
2023.1227.1 274 8/15/2023
2023.1224.2 277 8/12/2023
2023.1224.1 287 8/12/2023
2023.1213.2 301 8/1/2023
2023.1213.1 280 8/1/2023
2023.1209.1 251 7/27/2023
2023.1201.1 271 7/20/2023
2023.1197.1 291 7/16/2023
2023.1178.1 274 6/27/2023
2023.1175.1 281 6/24/2023
2023.1174.1 285 6/22/2023
2023.1169.1 287 6/18/2023
2023.1165.1 315 6/14/2023
2023.1161.1 325 6/11/2023
2023.1159.1 325 6/7/2023
2023.1157.1 327 6/6/2023
2023.1146.1 315 5/27/2023
2023.1139.1 328 5/19/2023
2023.1137.1 326 5/17/2023
2023.1136.1 319 5/16/2023
2023.1118.1 344 4/28/2023
2023.1111.1 386 4/21/2023
2023.1110.1 374 4/20/2023
2023.1105.1 358 4/15/2023
2023.1103.1 341 4/13/2023
2023.1102.1 356 4/12/2023
2023.1101.1 337 4/11/2023
2023.1090.1 390 3/31/2023
2023.1089.1 377 3/30/2023
2023.1088.1 379 3/29/2023
2023.1082.1 411 3/23/2023
2023.1078.1 397 3/19/2023
2023.1075.1 415 3/16/2023
2023.1070.1 392 3/11/2023
2023.1069.1 381 3/10/2023
2023.1064.1 406 3/5/2023
2023.1060.1 435 3/1/2023
2023.1057.1 432 2/26/2023
2023.1046.1 408 2/15/2023
2023.1043.2 433 2/12/2023
2023.1043.1 436 2/12/2023
2023.1042.1 425 2/11/2023
2023.1041.1 445 2/10/2023
2023.1039.1 412 2/8/2023
2023.1036.1 445 2/5/2023
2023.1035.1 444 2/4/2023
2023.1033.1 460 2/2/2023
2023.1030.1 463 1/30/2023
2023.1028.1 471 1/28/2023
2023.1026.1 470 1/26/2023
2023.1025.1 482 1/25/2023
2023.1024.1 468 1/24/2023
2023.1023.1 472 1/23/2023
2022.1319.1 522 11/15/2022
2022.1309.1 555 11/5/2022
2022.1307.1 528 11/3/2022
2022.1295.1 573 10/22/2022
2022.1290.1 571 10/17/2022
2022.1289.2 578 10/16/2022
2022.1289.1 589 10/16/2022
2022.1283.1 594 10/10/2022
2022.1282.1 573 10/9/2022
2022.1278.1 569 10/5/2022
2022.1272.2 604 9/29/2022
2022.1272.1 580 9/29/2022
2022.1271.1 608 9/28/2022
2022.1266.1 607 9/23/2022
2022.1259.1 629 9/16/2022
2022.1257.1 663 9/14/2022
2022.1250.1 598 9/7/2022
2022.1250.0.2-preview 326 9/7/2022
2022.1249.0.2-preview 316 9/6/2022
2022.1249.0.1-preview 306 9/6/2022
2022.1197.1 647 7/16/2022
2022.1196.1 637 7/15/2022
2022.1194.1 645 7/13/2022
2022.1182.1 640 7/1/2022
2022.1178.1 640 6/27/2022
2022.1166.1 645 6/15/2022
2022.1157.1 659 6/6/2022
2022.1150.1 647 5/30/2022
2022.1149.1 647 5/29/2022
2022.1144.1 659 5/24/2022
0.6.2 638 5/23/2022
0.6.1 642 5/23/2022
0.6.0 632 5/14/2022
0.5.3 623 5/8/2022
0.5.2 624 5/1/2022
0.5.1 626 5/1/2022
0.5.0 652 4/23/2022
0.4.1 657 4/15/2022
0.4.0 653 4/9/2022
0.3.3 652 4/8/2022
0.3.2 670 4/1/2022
0.3.1 680 3/29/2022
0.3.0 676 3/28/2022
0.2.3 681 3/28/2022
0.2.2 680 3/25/2022
0.2.1 655 3/21/2022
0.2.0 663 3/18/2022