mirror of https://github.com/abpframework/abp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.4 KiB
192 lines
5.4 KiB
# Localization
|
|
|
|
ABP's localization system is seamlessly integrated to the `Microsoft.Extensions.Localization` package and compatible with the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization). It adds some useful features and enhancements to make it easier to use in real life application scenarios.
|
|
|
|
## Volo.Abp.Localization Package
|
|
|
|
> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually.
|
|
|
|
Volo.Abp.Localization is the core package of the localization system. Install it to your project using the package manager console (PMC):
|
|
|
|
```
|
|
Install-Package Volo.Abp.Localization
|
|
```
|
|
|
|
Then you can add **AbpLocalizationModule** dependency to your module:
|
|
|
|
```c#
|
|
using Volo.Abp.Modularity;
|
|
using Volo.Abp.Localization;
|
|
|
|
namespace MyCompany.MyProject
|
|
{
|
|
[DependsOn(typeof(AbpLocalizationModule))]
|
|
public class MyModule : AbpModule
|
|
{
|
|
//...
|
|
}
|
|
}
|
|
```
|
|
|
|
## Creating A Localization Resource
|
|
|
|
A localization resource is used to group related localization strings together and separate them from other localization strings of the application. A [module](Module-Development-Basics.md) generally defines its own localization resource. Localization resource is just a plain class. Example:
|
|
|
|
````C#
|
|
public class TestResource
|
|
{
|
|
}
|
|
````
|
|
|
|
Then it should be added using `AbpLocalizationOptions` as shown below:
|
|
|
|
````C#
|
|
[DependsOn(typeof(AbpLocalizationModule))]
|
|
public class MyModule : AbpModule
|
|
{
|
|
public override void ConfigureServices(ServiceConfigurationContext context)
|
|
{
|
|
Configure<VirtualFileSystemOptions>(options =>
|
|
{
|
|
options.FileSets.AddEmbedded<MyModule>();
|
|
});
|
|
|
|
Configure<AbpLocalizationOptions>(options =>
|
|
{
|
|
//Define a new localization resource (TestResource)
|
|
options.Resources
|
|
.Add<TestResource>("en")
|
|
.AddVirtualJson("/Localization/Resources/Test");
|
|
});
|
|
}
|
|
}
|
|
````
|
|
|
|
In this example;
|
|
|
|
* Added a new localization resource with "en" (English) as the default culture.
|
|
* Used JSON files to store the localization strings.
|
|
* JSON files are embedded into the assembly using `VirtualFileSystemOptions` (see [virtual file system](Virtual-File-System.md)).
|
|
|
|
JSON files are located under "/Localization/Resources/Test" project folder as shown below:
|
|
|
|
![localization-resource-json-files](images/localization-resource-json-files.png)
|
|
|
|
A JSON localization file content is shown below:
|
|
|
|
````json
|
|
{
|
|
"culture": "en",
|
|
"texts": {
|
|
"HelloWorld": "Hello World!"
|
|
}
|
|
}
|
|
````
|
|
|
|
* Every localization file should define the `culture` code for the file (like "en" or "en-US").
|
|
* `texts` section just contains key-value collection of the localization strings (keys may have spaces too).
|
|
|
|
### Short Localization Resource Name
|
|
|
|
Localization resources are also available in the client (JavaScript) side. So, setting a short name for the localization resource makes it easy to use localization texts. Example:
|
|
|
|
````C#
|
|
[LocalizationResourceName("Test")]
|
|
public class TestResource
|
|
{
|
|
}
|
|
````
|
|
|
|
See the Getting Localized Test / Client Side section below.
|
|
|
|
### Inherit From Other Resources
|
|
|
|
A resource can inherit from other resources which makes possible to re-use existing localization strings without referring the existing resource. Example:
|
|
|
|
````C#
|
|
[InheritResource(typeof(AbpValidationResource))]
|
|
public class TestResource
|
|
{
|
|
}
|
|
````
|
|
|
|
Alternative inheritance by configuring the `AbpLocalizationOptions`:
|
|
|
|
````C#
|
|
services.Configure<AbpLocalizationOptions>(options =>
|
|
{
|
|
options.Resources
|
|
.Add<TestResource>("en") //Define the resource by "en" default culture
|
|
.AddVirtualJson("/Localization/Resources/Test") //Add strings from virtual json files
|
|
.AddBaseTypes(typeof(AbpValidationResource)); //Inherit from an existing resource
|
|
});
|
|
````
|
|
|
|
* A resource may inherit from multiple resources.
|
|
* If the new resource defines the same localized string, it overrides the string.
|
|
|
|
### Extending Existing Resource
|
|
|
|
Inheriting from a resource creates a new resource without modifying the existing one. In some cases, you may want to not create a new resource but directly extend an existing resource. Example:
|
|
|
|
````C#
|
|
services.Configure<AbpLocalizationOptions>(options =>
|
|
{
|
|
options.Resources
|
|
.Get<TestResource>()
|
|
.AddVirtualJson("/Localization/Resources/Test/Extensions");
|
|
});
|
|
````
|
|
|
|
* If an extension file defines the same localized string, it overrides the string.
|
|
|
|
## Getting Localized Texts
|
|
|
|
### Server Side
|
|
|
|
Getting the localized text on the server side is pretty standard.
|
|
|
|
#### Simplest Usage In A Class
|
|
|
|
````C#
|
|
public class MyService
|
|
{
|
|
private readonly IStringLocalizer<TestResource> _localizer;
|
|
|
|
public MyService(IStringLocalizer<TestResource> localizer)
|
|
{
|
|
_localizer = localizer;
|
|
}
|
|
|
|
public void Foo()
|
|
{
|
|
var str = _localizer["HelloWorld"];
|
|
}
|
|
}
|
|
````
|
|
|
|
#### Simplest Usage In A Razor View/Page
|
|
|
|
````c#
|
|
@inject IHtmlLocalizer<TestResource> Localizer
|
|
|
|
<h1>@Localizer["HelloWorld"]</h1>
|
|
````
|
|
|
|
Refer to the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) for details about using localization on the server side.
|
|
|
|
### Client Side
|
|
|
|
ABP provides JavaScript services to use the same localized texts in the client side.
|
|
|
|
Get a localization resource:
|
|
|
|
````js
|
|
var testResource = abp.localization.getResource('Test');
|
|
````
|
|
|
|
Localize a string:
|
|
|
|
````js
|
|
var str = testResource('HelloWorld');
|
|
```` |