Askmethat Aspnet JsonLocalizer

2025-12-07 0 997

Obsolete

This repository was moved to : AlexTeixeira/Askmethat-Aspnet-JsonLocalize

Askmethat-Aspnet-JsonLocalizer

Json Localizer library for .NetStandard and .NetCore Asp.net projects

Nuget

Build

Project

This library allows users to use JSON files instead of RESX in an ASP.NET application.
The code tries to be most compliant with Microsoft guidelines.
The library is compatible with NetStandard & NetCore.

Configuration

An extension method is available for IServiceCollection.
You can have a look at the method here

Options

A set of options is available.
You can define them like this :

services.AddJsonLocalization(options => {
        options.CacheDuration = TimeSpan.FromMinutes(15);
        options.ResourcesPath = \"mypath\";
        options.FileEncoding = Encoding.GetEncoding(\"ISO-8859-1\");
        options.SupportedCultureInfos = new HashSet<CultureInfo>()
        {
          new CultureInfo(\"en-US\"),
          new CultureInfo(\"fr-FR\")
        };
    });

Current Options

  • SupportedCultureInfos : _Default value : List containing only default culture and CurrentUICulture. Optionnal array of cultures that you should provide to plugin. _(Like RequestLocalizationOptions)
  • ResourcesPath : Default value : $\"{_env.WebRootPath}/Resources/\". Base path of your resources. The plugin will browse the folder and sub-folders and load all present JSON files.
  • AdditionalResourcePaths : Default value : null. Optionnal array of additional paths to search for resources.
  • CacheDuration : Default value : 30 minutes. We cache all values to memory to avoid loading files for each request, this parameter defines the time after which the cache is refreshed.
  • FileEncoding : default value : UTF8. Specify the file encoding.
  • IsAbsolutePath : _default value : false. Look for an absolute path instead of project path.
  • UseBaseName : _default value : false. Use base name location for Views and constructors like default Resx localization in ResourcePathFolder. Please have a look at the documentation below to see the different possiblities for structuring your translation files.
  • Caching : _default value: MemoryCache. Internal caching can be overwritted by using custom class that extends IMemoryCache.
  • PluralSeparator : _default value: |. Seperator used to get singular or pluralized version of localization. More information in Pluralization
  • MissingTranslationLogBehavior : _default value: LogConsoleError. Define the logging mode
  • LocalizationMode : _default value: Basic. Define the localization mode for the Json file. Currently Basic and I18n. More information in LocalizationMode
  • MissingTranslationsOutputFile : This enables to specify in which file the missing translations will be written when MissingTranslationLogBehavior = MissingTranslationLogBehavior.CollectToJSON, defaults to MissingTranslations.json
  • IgnoreJsonErrors: This properly will ignore the JSON errors if set to true. Recommended in production but not in development.

Search patterns when UseBaseName = true

If UseBaseName is set to true, it will be searched for lingualization files by the following order – skipping the options below if any option before matches.

  • If you use a non-typed IStringLocalizer all files in the Resources-directory, including all subdirectories, will be used to find a localization. This can cause unpredictable behavior if the same key is used in multiple files.

  • If you use a typed localizer, the following applies – Namespace is the \”short namespace\” without the root namespace:

    • Nested classes will use the translation file of their parent class.
    • If there is a folder named \”Your/Namespace/And/Classname\”, all contents of this folder will be used.
    • If there is a folder named \”Your/Namespace\” the folder will be searched for all json-files beginning with your classname.
    • Otherwise there will be searched for a json-file starting with \”Your.Namespace.And.Classname\” in your Resources-folder.
    • If there any .shared.json file at base path, all the keys that do not exist in other files will be added.
  • If you need a base shared files, just add a file named localization.shared.json in your ResourcesPath

Pluralization

In version 2.0.0, Pluralization was introduced.
You are now able to manage a singular (left) and plural (right) version for the same Key.
PluralSeparator is used as separator between the two strings.

For example : User|Users for key Users

To use plural string, use parameters from IStringLocalizer, if last parameters is a boolean, pluralization will be activated.

Pluralization is available with IStringLocalizer, IViewLocalizer and HtmlStringLocalizer :

In version 3.1.1 and above you can have multiple pluralization, to use it, you should
use IJsonStringLocalizer interface and this method LocalizedString GetPlural(string key, double count, params object[] arguments)

localizer.GetString(\”Users\”, true);

Clean Memory Cache

Version 2.2.0+ allows you to clean cache.
It\’s usefull when you want\’s tu update in live some translations.

Example

public class HomeController{
  private readonly IJsonStringLocalizer _localizer;
  
  public HomeController(IJsonStringLocalizer<HomeController> localizer)
  {
      _localizer = localizer;
      _localizer.ClearMemCache(new List<CultureInfo>()
      {
          new CultureInfo(\"en-US\")
      });
  }
}

Blazor Server HTML parsing

As you know, Blazor Server does not provide IHtmlLocalizer. To avoid this, you can now use
from IJsonStringLocalizer this method MarkupString GetHtmlBlazorString(string name, bool shouldTryDefaultCulture = true)

Information

Platform Support

Version 3.2 and bellow

Platform Version
NetCore 3.0.0+
NetStandard 2.1.0+
Blazor Server 3.0.0+

Version 4 and above

Platform Version
NetCore 5.0.0+
NetStandard 2.1.0+
Blazor Server 5.0.0+
Blazor Wasm 5.0.0+

WithCulture method

WhithCulture method is not implemented and will not be implemented. ASP.NET Team, start to set this method Obsolete for version 3 and will be removed in version 4 of asp.net core.

For more information :
#46

Localization mode

As asked on the request #64, Some user want to have the possiblities to manage file with i18n way.
To answer this demand, a localization mode was introduced with default value Basic. Basic version means the the one describe in the previous parts

I18n

To use the i18n file management, use the the option Localization mode like this : cs LocalizationMode = LocalizationMode.I18n.
After that, you should be able to use this json :

{
   \"Name\": \"Name\",
   \"Color\": \"Color\"
}

File name

File name are important for some purpose (Culture looking, parent culture, fallback).

Please use this pattern : [fileName].[culture].json
If you need a fallback culture that target all culture, you can create a file named localisation.json. Of course, if this file does not exist, the chosen default culture is the fallback.

Important: In this mode, the UseBaseName options should be False.

For more information :
#64

Performances

After talking with others Devs about my package, they asked my about performance.

BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
Intel Core i7-10870H CPU 2.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.101
  [Host]     : .NET 6.0.1 (6.0.121.56705), X64 RyuJIT
  DefaultJob : .NET 6.0.1 (6.0.121.56705), X64 RyuJIT

Method Mean Error StdDev Min Max Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated
Localizer 57.34 ns 0.590 ns 0.523 ns 56.65 ns 58.46 ns 1.00 0.00
JsonLocalizer 41.50 ns 0.552 ns 0.516 ns 40.60 ns 42.46 ns 0.72 0.01 0.0057 48 B
JsonLocalizerWithCreation 169,174.60 ns 1,070.840 ns 1,001.664 ns 167,445.80 ns 170,873.85 ns 2,950.03 33.21 4.6387 2.1973 0.2441 40,706 B
I18nJsonLocalizerWithCreation 228,438.65 ns 4,188.350 ns 6,643.166 ns 218,070.12 ns 245,103.20 ns 4,026.62 130.32 12.2070 6.1035 0.4883 104,172 B
JsonLocalizerWithCreationAndExternalMemoryCache 2,813.26 ns 51.894 ns 48.541 ns 2,731.36 ns 2,920.27 ns 49.04 0.92 0.5264 0.2632 4,424 B
JsonLocalizerDefaultCultureValue 145.34 ns 1.284 ns 1.201 ns 142.61 ns 146.81 ns 2.53 0.04 0.0315 264 B
LocalizerDefaultCultureValue 159.06 ns 0.919 ns 0.859 ns 157.63 ns 160.51 ns 2.77 0.03 0.0257 216 B

Contributors

Michael Monsour

Luka Gospodnetic

Christoph Sonntag

Nacho

Ashley Medway

Serhii Voitovych

James Hill

Ferenc Czirok

rohanreddyg

rickszyr

ErikApption

A special thanks to @Compufreak345 for is hard work. He did a lot for this repo.

A special thanks to @EricApption for is work to improve the repo and making a very good stuff on migrating to net6 and System.Text.Json & making it working for blazor wasm

License

MIT Licence

下载源码

通过命令行克隆项目:

git clone https://github.com/AlexTeixeira/Askmethat-Aspnet-JsonLocalizer.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 Askmethat Aspnet JsonLocalizer https://www.zuozi.net/31504.html

Kerberos.NET
上一篇: Kerberos.NET
PlumberManager
下一篇: PlumberManager
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务