Localization
ABP's localization system is seamlessly integrated to the Microsoft.Extensions.Localization
package and compatible with the Microsoft's localization documentation. It adds some useful features and enhancements to make it easier to use in real life application scenarios.
Installation
This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually.
You can use the ABP CLI to install the Volo.Abp.Localization package to your project. Execute the following command in the folder of the .csproj file that you want to install the package on:
If you haven't done it yet, you first need to install the ABP CLI. For other installation options, see the package description page.
Then you can add AbpLocalizationModule dependency to your module:
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 generally defines its own localization resource. Localization resource is just a plain class. Example:
Then it should be added using AbpLocalizationOptions
as shown below:
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
AbpVirtualFileSystemOptions
(see virtual file system).
JSON files are located under "/Localization/Resources/Test" project folder as shown below:
A JSON localization file content is shown below:
- 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).
ABP will ignore (skip) the JSON file if the
culture
section is missing.
Default Resource
AbpLocalizationOptions.DefaultResourceType
can be set to a resource type, so it is used when the localization resource was not specified:
The application startup template sets
DefaultResourceType
to the localization resource of the application.
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:
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:
Alternative inheritance by configuring the AbpLocalizationOptions
:
- 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:
- If an extension file defines the same localized string, it overrides the string.
Getting the Localized Texts
Getting the localized text is pretty standard.
Simplest Usage In A Class
Just inject the IStringLocalizer<TResource>
service and use it like shown below:
Format Arguments
Format arguments can be passed after the localization key. If your message is Hello {0}, welcome!
, then you can pass the {0}
argument to the localizer like _localizer["HelloMessage", "John"]
.
Refer to the Microsoft's localization documentation for details about using the localization.
Using In A Razor View/Page
Use IHtmlLocalizer<T>
in razor views/pages;
Special Base Classes
Some ABP Framework base classes provide a L
property to use the localizer even easier.
Example: Localize a text in an application service method
When you set the LocalizationResource
in the constructor, the ApplicationService
class uses that resource type when you use the L
property, just like in the DoIt()
method.
Setting LocalizationResource
in every application service can be tedious. You can create an abstract base application service class, set it there and derive your application services from that base class. This is already implemented when you create a new project with the startup templates. So, you can simply inherit from the base class directly use the L
property:
The L
property is also available for some other base classes like AbpController
and AbpPageModel
.
The Client Side
See the following documents to learn how to reuse the same localization texts in the JavaScript side;