I-Synergy.Framework.AspNetCore.Globalization 2026.10110.10203

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package I-Synergy.Framework.AspNetCore.Globalization --version 2026.10110.10203
                    
NuGet\Install-Package I-Synergy.Framework.AspNetCore.Globalization -Version 2026.10110.10203
                    
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.10110.10203" />
                    
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.10110.10203" />
                    
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.10110.10203
                    
#r "nuget: I-Synergy.Framework.AspNetCore.Globalization, 2026.10110.10203"
                    
#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.10110.10203
                    
#: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.10110.10203
                    
Install as a Cake Addin
#tool nuget:?package=I-Synergy.Framework.AspNetCore.Globalization&version=2026.10110.10203
                    
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.10116.10015-preview 0 1/15/2026
2026.10110.10203 89 1/10/2026
2026.10110.10121-preview 80 1/10/2026
2026.10109.12335-preview 80 1/9/2026
2026.10105.11358-preview 85 1/5/2026
2026.10105.11229-preview 79 1/5/2026
2025.11231.11750-preview 82 12/31/2025
2025.11225.12213 192 12/25/2025
2025.11225.12003-preview 168 12/25/2025
2025.11218.11301 282 12/18/2025
2025.11218.10050-preview 265 12/18/2025
2025.11211.11307-preview 410 12/11/2025
2025.11211.11225-preview 399 12/11/2025
2025.11210.10145-preview 426 12/10/2025
2025.11209.11459 450 12/9/2025
2025.11209.11422-preview 431 12/9/2025
2025.11207.11553-preview 212 12/7/2025
2025.11204.11448-preview 188 12/4/2025
2025.11130.12248 435 11/30/2025
2025.11130.12134-preview 340 11/30/2025
2025.11130.11725-preview 348 11/30/2025
2025.11130.11553-preview 344 11/30/2025
2025.11130.11515-preview 342 11/30/2025
2025.11130.11420.59-preview 348 11/30/2025
2025.11130.11323.56-preview 248 11/30/2025
2025.11129.10227.14-preview 100 11/29/2025
2025.11120.10114 419 11/20/2025
2025.11119.12324.6-preview 395 11/19/2025
2025.11119.10110 426 11/19/2025
2025.11118.12340.33-preview 393 11/18/2025
2025.11117.12349.4-preview 398 11/17/2025
2025.11117.11937.47-preview 387 11/17/2025
2025.11113.11532.29-preview 276 11/13/2025
2025.11113.10128.57-preview 279 11/13/2025
2025.11110.10306.55-preview 228 11/10/2025
2025.11109.10018.48-preview 143 11/8/2025
2025.11108.10119.29-preview 117 11/8/2025
2025.11106.10037.1-preview 187 11/6/2025
2025.11105.10254.54-preview 188 11/5/2025
2025.11105.10141.16-preview 198 11/5/2025
2025.11104.12308.54-preview 184 11/4/2025
2025.11104.10144.47-preview 190 11/4/2025
2025.11102.12003.8-preview 197 11/2/2025
2025.11102.11228.52-preview 160 11/2/2025
2025.11102.10309.42-preview 128 11/2/2025
2025.11029.11433.38-preview 186 10/29/2025
2025.11029.10201.38-preview 186 10/29/2025
2025.11027.11947.55-preview 187 10/27/2025
2025.11022.12207.12-preview 180 10/22/2025
2025.11019.12053.37-preview 182 10/19/2025
2025.11016.11750.24-preview 171 10/16/2025
2025.11015.10219.44-preview 173 10/15/2025
2025.11014.10245.12-preview 179 10/14/2025
2025.11012.10130.11-preview 116 10/12/2025
2025.11010.10052.52-preview 175 10/9/2025
2025.11001.12118.13-preview 184 10/1/2025
2025.10925.10144.25-preview 195 9/25/2025
2025.10921.11353.29-preview 213 9/21/2025
2025.10913.11841.29-preview 159 9/13/2025
2025.10912.12351.59-preview 108 9/12/2025
2025.10912.10210.52-preview 181 9/12/2025
2025.10911.10131.43-preview 183 9/10/2025
2025.10910.12340.34-preview 187 9/10/2025
2025.10910.11327.15-preview 183 9/10/2025
2025.10910.11206.45-preview 181 9/10/2025
2025.10910.10230.58-preview 194 9/10/2025
2025.10908.12343.47-preview 189 9/8/2025
2025.10904.12337.35-preview 188 9/4/2025
2025.10904.12245.51-preview 190 9/4/2025
2025.10904.11425.5-preview 197 9/4/2025
2025.10904.10323.39-preview 205 9/4/2025
2025.10826.11425.3-preview 255 8/26/2025
2025.10825.12350.9-preview 187 8/25/2025
2025.10810.10248-preview 142 8/10/2025
2025.10809.10146.35-preview 186 8/9/2025
2025.10806.12031.49-preview 268 8/6/2025
2025.10806.11955.54-preview 262 8/6/2025
2025.10806.11433.24-preview 273 8/6/2025
2025.10709.10105.39-preview 191 7/8/2025
2025.10707.12320.3-preview 197 7/7/2025
2025.10706.11957.9-preview 183 7/6/2025
2025.10702.11752.47-preview 180 7/2/2025
2025.10702.11256.17-preview 183 7/2/2025
2025.10702.11119.10-preview 184 7/2/2025
2025.10702.10000.31-preview 183 7/1/2025
2025.10701.11524.1-preview 184 7/1/2025
2025.10701.11310.13-preview 180 7/1/2025
2025.10630.12022.58-preview 189 6/30/2025
2025.10612.12134.8-preview 357 6/12/2025
2025.10611.12313.53-preview 329 6/11/2025
2025.10603.10159.54-preview 189 6/3/2025
2025.10602.11908.9-preview 187 6/2/2025
2025.10601.10124.29-preview 144 5/31/2025
2025.10531.12235.29-preview 147 5/31/2025
2025.10530.10121.50-preview 188 5/29/2025
2025.10527.12202.4-preview 184 5/27/2025
2025.10526.12034.25-preview 182 5/26/2025
2025.10521.11828.30-preview 193 5/21/2025
2025.10520.11715.6-preview 186 5/20/2025
2025.10520.11515.16-preview 178 5/20/2025
2025.10518.12303.43-preview 211 5/18/2025
2025.10518.11257.36-preview 197 5/18/2025
2025.10517.12347.27-preview 150 5/17/2025
2025.10517.12003.6-preview 153 5/17/2025
2025.10516.11720.13-preview 220 5/16/2025
2025.10514.12334.2-preview 287 5/14/2025
2025.10514.10015.27-preview 278 5/13/2025
2025.10511.11032.32-preview 195 5/11/2025
2025.10413.11530 344 4/13/2025
2025.10413.11434.33-preview 240 4/13/2025
2025.10413.10205.50-preview 175 4/13/2025
2025.10412.11526.4-preview 142 4/12/2025
2025.10412.10141 233 4/12/2025
2025.10411.11811.23-preview 180 4/11/2025
2025.10411.11645.1-preview 175 4/11/2025
2025.10410.11458.35-preview 228 4/10/2025
2025.10405.10143.28-preview 138 4/5/2025
2025.10403.12208.1-preview 211 4/3/2025
2025.10403.11954.16-preview 205 4/3/2025
2025.10401.11908.24-preview 209 4/1/2025
2025.10401.11559.45-preview 205 4/1/2025
2025.10331.12215.59-preview 191 3/31/2025
2025.10331.12130.34-preview 194 3/31/2025
2025.10331.10056.40-preview 205 3/30/2025
2025.10328.10150.21-preview 187 3/28/2025
2025.10323.11359-preview 333 3/23/2025
2025.10320.11800 290 3/20/2025
2025.10320.11616.45-preview 197 3/20/2025
2025.10320.10000 269 3/19/2025
2025.10319.12311.26-preview 198 3/19/2025
2025.10319.12238.6-preview 201 3/19/2025
2025.10319.12057.59-preview 183 3/19/2025
2025.10318.10055 281 3/18/2025
2025.10317.11728.13-preview 195 3/17/2025
2025.10317.11201.3-preview 200 3/17/2025
2025.10315.11523.14-preview 136 3/15/2025
2025.10305.12342 349 3/5/2025
2025.10305.12321.9-preview 236 3/5/2025
2025.10301.12313 232 3/1/2025
2025.10301.12129.38-preview 145 3/1/2025
2025.10221.10043.29-preview 174 2/21/2025
2025.1051.1246 235 2/20/2025
2025.1051.44.54-preview 141 2/20/2025
2025.1044.1 243 2/13/2025
2025.1044.0.2-preview 148 2/13/2025
2025.1043.0.2-preview 157 2/12/2025
2025.1041.0.1-preview 154 2/10/2025
2025.1038.1 253 2/7/2025
2025.1038.0.1-preview 137 2/7/2025
2025.1035.1 233 2/4/2025
2025.1035.0.1-preview 153 2/4/2025
2025.1034.1 235 2/3/2025
2025.1034.0.1-preview 145 2/3/2025
2025.1033.0.5-preview 149 2/2/2025
2025.1033.0.3-preview 147 2/2/2025
2025.1033.0.2-preview 146 2/2/2025
2025.1033.0.1-preview 153 2/2/2025
2025.1025.1 250 1/25/2025
2025.1025.0.1-preview 151 1/25/2025
2025.1021.1 241 1/21/2025
2025.1021.0.1-preview 137 1/21/2025
2025.1020.1 219 1/20/2025
2025.1020.0.3-preview 140 1/20/2025
2025.1020.0.1-preview 143 1/20/2025
2025.1018.0.7-preview 140 1/18/2025
2025.1018.0.5-preview 143 1/18/2025
2025.1018.0.4-preview 132 1/18/2025
2025.1017.0.2-preview 131 1/17/2025
2025.1017.0.1-preview 141 1/17/2025
2025.1016.0.1-preview 130 1/16/2025
2025.1010.1 229 1/10/2025
2025.1010.0.1-preview 136 1/9/2025
2025.1009.0.3-preview 127 1/9/2025
2025.1007.1 231 1/7/2025
2025.1007.0.5-preview 140 1/7/2025
2025.1007.0.3-preview 138 1/7/2025
2025.1006.1 240 1/7/2025
2025.1005.1 248 1/5/2025
2025.1005.0.2-preview 144 1/5/2025
2025.1004.1 246 1/4/2025
2024.1366.1 246 12/31/2024
2024.1366.0.2-preview 157 12/31/2024
2024.1366.0.1-preview 161 12/31/2024
2024.1365.0.2-preview 149 12/30/2024
2024.1365.0.1-preview 137 12/30/2024
2024.1361.0.2-preview 144 12/26/2024
2024.1353.0.1-preview 148 12/18/2024
2024.1352.0.3-preview 149 12/17/2024
2024.1352.0.2-preview 147 12/17/2024
2024.1352.0.1-preview 139 12/17/2024
2024.1351.1 239 12/16/2024
2024.1351.0.3-preview 131 12/16/2024
2024.1350.1 228 12/15/2024
2024.1343.1 229 12/8/2024
2024.1339.1 240 12/4/2024
2024.1336.1 237 12/1/2024
2024.1332.1 230 11/27/2024
2024.1330.1 230 11/25/2024
2024.1328.1 224 11/23/2024
2024.1325.1 226 11/20/2024
2024.1323.1 233 11/18/2024
2024.1316.1 187 11/11/2024
2024.1307.1 180 11/2/2024
2024.1300.1 184 10/26/2024
2024.1294.1 206 10/20/2024
2024.1290.1 226 10/16/2024
2024.1283.1 231 10/8/2024
2024.1282.1 220 10/8/2024
2024.1278.1 231 10/4/2024
2024.1277.1 213 10/3/2024
2024.1275.2 226 10/1/2024
2024.1275.1 221 10/1/2024
2024.1274.1 232 9/30/2024
2024.1263.1 237 9/19/2024
2024.1261.1 258 9/17/2024
2024.1258.1 244 9/13/2024
2024.1257.1 243 9/13/2024
2024.1256.1 246 9/12/2024
2024.1254.1 231 9/10/2024
2024.1250.1 240 9/6/2024
2024.1249.1 252 9/5/2024
2024.1246.1 248 9/2/2024
2024.1245.1 244 9/1/2024
2024.1237.1 273 8/24/2024
2024.1235.0.1-preview 155 8/23/2024
2024.1230.1 247 8/18/2024
2024.1229.1 269 8/16/2024
2024.1228.1 254 8/15/2024
2024.1222.1 261 8/8/2024
2024.1221.1 225 8/7/2024
2024.1221.0.2-preview 156 8/8/2024
2024.1221.0.1-preview 158 8/8/2024
2024.1220.1 225 8/7/2024
2024.1219.0.2-preview 143 8/6/2024
2024.1219.0.1-preview 150 8/6/2024
2024.1217.0.2-preview 140 8/4/2024
2024.1217.0.1-preview 145 8/4/2024
2024.1216.0.2-preview 127 8/3/2024
2024.1216.0.1-preview 125 8/3/2024
2024.1208.0.1-preview 131 7/26/2024
2024.1207.0.7-preview 138 7/25/2024
2024.1207.0.5-preview 136 7/25/2024
2024.1166.1 255 6/14/2024
2024.1165.1 233 6/13/2024
2024.1164.1 229 6/12/2024
2024.1162.1 245 6/10/2024
2024.1158.1 251 6/6/2024
2024.1156.1 231 6/4/2024
2024.1152.1 272 5/31/2024
2024.1151.1 257 5/29/2024
2024.1150.2 243 5/29/2024
2024.1150.1 236 5/29/2024
2024.1149.1 235 5/28/2024
2024.1147.1 245 5/26/2024
2024.1146.2 239 5/25/2024
2024.1146.1 242 5/25/2024
2024.1145.1 242 5/24/2024
2024.1135.2 253 5/14/2024
2024.1135.1 231 5/14/2024
2024.1134.1 239 5/13/2024
2024.1130.1 268 5/9/2024
2024.1123.1 255 5/2/2024
2024.1121.1 240 4/30/2024
2024.1114.1 255 4/22/2024
2024.1113.0.5-preview 169 4/22/2024
2024.1113.0.3-preview 169 4/22/2024
2024.1113.0.2-preview 153 4/22/2024
2024.1113.0.1-preview 147 4/22/2024
2024.1108.0.1-preview 159 4/17/2024
2024.1107.0.1-preview 172 4/16/2024
2024.1094.2 262 4/3/2024
2024.1094.1 227 4/3/2024
2024.1092.1 246 4/1/2024
2024.1088.1 259 3/28/2024
2024.1085.1 248 3/25/2024
2024.1080.2 249 3/20/2024
2024.1080.1 283 3/20/2024
2024.1078.1 251 3/18/2024
2024.1077.1 244 3/17/2024
2024.1073.1 260 3/13/2024
2024.1070.1 257 3/10/2024
2024.1069.1 252 3/9/2024
2024.1068.1 252 3/8/2024
2024.1066.2 243 3/6/2024
2024.1066.1 246 3/6/2024
2024.1065.1 267 3/5/2024
2024.1065.0.1-preview 149 3/5/2024
2024.1063.2 254 3/3/2024
2024.1063.1 256 3/3/2024
2024.1062.1 257 3/2/2024
2024.1061.2 274 3/1/2024
2024.1061.1 291 3/1/2024
2024.1060.2 238 2/29/2024
2024.1060.1 239 2/29/2024
2024.1060.0.5-preview 176 2/29/2024
2024.1060.0.3-preview 161 2/29/2024
2024.1059.0.1-preview 155 2/28/2024
2024.1058.1 255 2/27/2024
2024.1056.1 263 2/25/2024
2024.1055.1 236 2/24/2024
2024.1052.1 265 2/21/2024
2024.1050.2 257 2/20/2024
2024.1050.1 249 2/19/2024
2024.1049.1 242 2/18/2024
2024.1048.1 252 2/17/2024
2024.1047.1 255 2/16/2024
2024.1035.1 269 2/4/2024
2024.1034.2 242 2/3/2024
2024.1029.1 259 1/29/2024
2024.1023.1 271 1/23/2024
2024.1022.1 239 1/22/2024
2024.1020.1 245 1/20/2024
2024.1019.1 239 1/19/2024
2024.1017.1 263 1/17/2024
2024.1012.1 265 1/12/2024
2024.1010.1 251 1/10/2024
2024.1008.1 271 1/8/2024
2024.1007.1 266 1/7/2024
2024.1005.1 262 1/5/2024
2024.1004.1 282 1/4/2024
2023.1365.1 275 12/31/2023
2023.1362.1 267 12/28/2023
2023.1361.1 273 12/27/2023
2023.1359.1 282 12/25/2023
2023.1358.1 256 12/24/2023
2023.1357.1 290 12/23/2023
2023.1342.1 288 12/8/2023
2023.1336.1 223 12/2/2023
2023.1332.1 217 11/28/2023
2023.1330.1 184 11/26/2023
2023.1325.1 217 11/21/2023
2023.1323.1 206 11/19/2023
2023.1320.1 201 11/17/2023
2023.1318.1 198 11/15/2023
2023.1317.1 191 11/13/2023
2023.1307.1 215 11/3/2023
2023.1305.1 225 11/1/2023
2023.1304.1 209 10/31/2023
2023.1294.1 238 10/21/2023
2023.1290.1 217 10/16/2023
2023.1289.1 198 10/16/2023
2023.1284.1 232 10/11/2023
2023.1276.1 230 10/3/2023
2023.1275.1 225 10/2/2023
2023.1272.1 221 9/29/2023
2023.1269.1 217 9/26/2023
2023.1242.1 279 8/30/2023
2023.1231.1 286 8/19/2023
2023.1229.1 270 8/17/2023
2023.1228.1 250 8/16/2023
2023.1227.1 272 8/15/2023
2023.1224.2 276 8/12/2023
2023.1224.1 282 8/12/2023
2023.1213.2 296 8/1/2023
2023.1213.1 278 8/1/2023
2023.1209.1 242 7/27/2023
2023.1201.1 267 7/20/2023
2023.1197.1 285 7/16/2023
2023.1178.1 269 6/27/2023
2023.1175.1 276 6/24/2023
2023.1174.1 279 6/22/2023
2023.1169.1 282 6/18/2023
2023.1165.1 312 6/14/2023
2023.1161.1 318 6/11/2023
2023.1159.1 322 6/7/2023
2023.1157.1 322 6/6/2023
2023.1146.1 310 5/27/2023
2023.1139.1 325 5/19/2023
2023.1137.1 320 5/17/2023
2023.1136.1 317 5/16/2023
2023.1118.1 339 4/28/2023
2023.1111.1 384 4/21/2023
2023.1110.1 371 4/20/2023
2023.1105.1 353 4/15/2023
2023.1103.1 339 4/13/2023
2023.1102.1 352 4/12/2023
2023.1101.1 332 4/11/2023
2023.1090.1 384 3/31/2023
2023.1089.1 374 3/30/2023
2023.1088.1 373 3/29/2023
2023.1082.1 408 3/23/2023
2023.1078.1 391 3/19/2023
2023.1075.1 413 3/16/2023
2023.1070.1 390 3/11/2023
2023.1069.1 378 3/10/2023
2023.1064.1 402 3/5/2023
2023.1060.1 431 3/1/2023
2023.1057.1 430 2/26/2023
2023.1046.1 404 2/15/2023
2023.1043.2 430 2/12/2023
2023.1043.1 434 2/12/2023
2023.1042.1 423 2/11/2023
2023.1041.1 439 2/10/2023
2023.1039.1 406 2/8/2023
2023.1036.1 442 2/5/2023
2023.1035.1 441 2/4/2023
2023.1033.1 456 2/2/2023
2023.1030.1 459 1/30/2023
2023.1028.1 467 1/28/2023
2023.1026.1 464 1/26/2023
2023.1025.1 480 1/25/2023
2023.1024.1 462 1/24/2023
2023.1023.1 468 1/23/2023
2022.1319.1 515 11/15/2022
2022.1309.1 550 11/5/2022
2022.1307.1 521 11/3/2022
2022.1295.1 570 10/22/2022
2022.1290.1 563 10/17/2022
2022.1289.2 574 10/16/2022
2022.1289.1 583 10/16/2022
2022.1283.1 591 10/10/2022
2022.1282.1 570 10/9/2022
2022.1278.1 565 10/5/2022
2022.1272.2 600 9/29/2022
2022.1272.1 579 9/29/2022
2022.1271.1 605 9/28/2022
2022.1266.1 605 9/23/2022
2022.1259.1 624 9/16/2022
2022.1257.1 657 9/14/2022
2022.1250.1 592 9/7/2022
2022.1250.0.2-preview 320 9/7/2022
2022.1249.0.2-preview 311 9/6/2022
2022.1249.0.1-preview 300 9/6/2022
2022.1197.1 644 7/16/2022
2022.1196.1 633 7/15/2022
2022.1194.1 642 7/13/2022
2022.1182.1 637 7/1/2022
2022.1178.1 636 6/27/2022
2022.1166.1 637 6/15/2022
2022.1157.1 653 6/6/2022
2022.1150.1 644 5/30/2022
2022.1149.1 646 5/29/2022
2022.1144.1 655 5/24/2022
0.6.2 632 5/23/2022
0.6.1 636 5/23/2022
0.6.0 628 5/14/2022
0.5.3 618 5/8/2022
0.5.2 623 5/1/2022
0.5.1 623 5/1/2022
0.5.0 649 4/23/2022
0.4.1 655 4/15/2022
0.4.0 649 4/9/2022
0.3.3 647 4/8/2022
0.3.2 667 4/1/2022
0.3.1 675 3/29/2022
0.3.0 670 3/28/2022
0.2.3 679 3/28/2022
0.2.2 675 3/25/2022
0.2.1 653 3/21/2022
0.2.0 662 3/18/2022