mirror of https://github.com/abpframework/abp.git
4 changed files with 154 additions and 2 deletions
@ -0,0 +1,150 @@ |
|||||
|
## Localization |
||||
|
|
||||
|
ABP's localization system is built on top of the `Microsoft.Extensions.Localization` package and compatible with the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization). |
||||
|
|
||||
|
### Volo.Abp.Localization Package |
||||
|
|
||||
|
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 |
||||
|
``` |
||||
|
|
||||
|
> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually. |
||||
|
|
||||
|
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 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(IServiceCollection services) |
||||
|
{ |
||||
|
services.Configure<VirtualFileSystemOptions>(options => |
||||
|
{ |
||||
|
options.FileSets.AddEmbedded<MyModule>(); |
||||
|
}); |
||||
|
|
||||
|
services.Configure<AbpLocalizationOptions>(options => |
||||
|
{ |
||||
|
options.Resources.AddVirtualJson<TestResource>( |
||||
|
"en", |
||||
|
"/Localization/Resources/Test" |
||||
|
); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
```` |
||||
|
|
||||
|
In this example; |
||||
|
|
||||
|
* Used JSON files to store the localization strings. |
||||
|
* JSON files are embedded into the assembly using the [virtual file system](Virtual-File-System.md). |
||||
|
|
||||
|
JSON files are located under "/Localization/Resources/Test" project folder as shown below: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
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# |
||||
|
[ShortLocalizationResourceName("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.AddVirtualJson<TestResource>("en", "/Localization/Resources/Test"); |
||||
|
|
||||
|
//Inherit from an existing resource |
||||
|
options.Resources.AddBaseTypes<TestResource>(typeof(AbpValidationResource)); |
||||
|
}); |
||||
|
```` |
||||
|
|
||||
|
* 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.ExtendWithVirtualJson<TestResource>( |
||||
|
"/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. So, you can refer to the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization). |
||||
|
|
||||
|
##### Client Side |
||||
|
|
||||
|
TODO... |
||||
Loading…
Reference in new issue