Ruteco.AspNetCore.Translate 1.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ruteco.AspNetCore.Translate --version 1.0.1                
NuGet\Install-Package Ruteco.AspNetCore.Translate -Version 1.0.1                
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="Ruteco.AspNetCore.Translate" Version="1.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Ruteco.AspNetCore.Translate --version 1.0.1                
#r "nuget: Ruteco.AspNetCore.Translate, 1.0.1"                
#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.
// Install Ruteco.AspNetCore.Translate as a Cake Addin
#addin nuget:?package=Ruteco.AspNetCore.Translate&version=1.0.1

// Install Ruteco.AspNetCore.Translate as a Cake Tool
#tool nuget:?package=Ruteco.AspNetCore.Translate&version=1.0.1                

1. The Idea and description

The goal of this procjet is facilitate asp.net backend localization of your sites. It helps to translate texts to different languages by predefined dictionaries.

It was inspired by @ngx-translate. The idea is simple: you create dictionaries in form of json files where you store values which will replace translation keys.

2. Installation

Insatll this package via NuGet

Install-Package Ruteco.AspNetCore.Translate

3. Configuration

Create dictionaries

Create .json files with name of a language you will use and place them into one directory, like:

..\i18n\
        en.json
        en-gb.json
        ru.json

Important note: be aware that asp.net sites as CurrentDirectory use directory of the project (not /bin folder) so if you use class library or application, mark the files Copy to output directory: Copy always in Properties window of Solution explorer.

Add translations services in Startup.cs file for web application:
    var dictionariesLocation = System.IO.Directory.GetCurrentDirectory() + Configuration["TranslationsDictionariesLocation"];
    services.AddTranslations(dictionariesLocation);
For console aplication:
    IServiceCollection services = new ServiceCollection();
    var path = System.IO.Directory.GetParent(Assembly.GetAssembly(typeof(TranslateionServiecTests)).Location) + "\\i18n";
    services.AddTranslations(path);

4. Usage

Dependency injection will provide ITranslationService implementation into your controllers

    public HomeController(ITranslationService translation)
    {
        _translationService = translation;
    }

    ...

    [HttpGet("test")]
    public IActionResult Test()
    {
        return Ok(_translationService.Get("en","Sports.Football"));
    }

or you can get it from IServiceProvider

    IServiceCollection services = new ServiceCollection();
    var path = System.IO.Directory.GetParent(Assembly.GetAssembly(typeof(TranslateionServiecTests)).Location) + "\\i18n";
    services.AddTranslations(path);
    provider = services.BuildServiceProvider();
    translationService = provider.GetService<ITranslationService>();

    var message =  translationService.Get("en","Sports.Football");
ITranslationService properties
Name Type Description
Get() (string, string) ⇒ string) Get translation for particular language for particular key (key is string in form of dot-separated properties hierarchy which applied to json objects). If there is no such language or key inside a dictionary, key itself will be returned value
IsInitialized bool Tells whether dictionaries been loaded
DictionariesLocation string Path which was used for initialization of dictionaries
Languages IEnumerable< string > List of languages (it been took from .json dictionaries files names)

5. Notes

This was quick implementation, probably not in very elegant way which uses static fields in support class. if you want to reinitialize vocabularies or do not want to use Dependancy injection create ITranslationServiceBuilder instance and call Init(path) method.

    IServiceCollection services = new ServiceCollection();
    var builder = new TranslationServiceBuilder(services);
    builder.Init(dictionariesLocation);

    var translationService = new TranslationService();

Feel free to contact me or create pull requests 😃

Product 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. 
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
1.0.2 776 6/25/2019
1.0.1 541 6/25/2019
1.0.0 527 6/25/2019