Ruteco.AspNetCore.Translate
1.0.1
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
<PackageReference Include="Ruteco.AspNetCore.Translate" Version="1.0.1" />
paket add Ruteco.AspNetCore.Translate --version 1.0.1
#r "nuget: Ruteco.AspNetCore.Translate, 1.0.1"
// 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 | 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
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.1.1)
- Newtonsoft.Json (>= 12.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.