How to override localization strings of depending modules

Source Code

You can find the source of the example solution used in this article here.

Getting Started

This example is based on the following document
https://docs.abp.io/en/abp/latest/Localization#extending-existing-resource

We will change the default DisplayName:Abp.Timing.Timezone and Description:Abp.Timing.Timezone of AbpTimingResource and add localized text in Russian language(ru).

I created the AbpTiming folder in the Localization directory of the ExtendLocalizationResource.Domain.Shared project.

Create en.json and ru.json in its directory.

en.json

{
  "culture": "en",
  "texts": {
    "DisplayName:Abp.Timing.Timezone": "My Time zone",
    "Description:Abp.Timing.Timezone": "My Application time zone"
  }
}

ru.json

{
  "culture": "ru",
  "texts": {
    "DisplayName:Abp.Timing.Timezone": "Часовой пояс",
    "Description:Abp.Timing.Timezone": "Часовой пояс приложения"
  }
}

We have below content in ExtendLocalizationResource.Domain.Shared.csproj file, See Virtual-File-System understand how it works.

<ItemGroup>
    <EmbeddedResource Include="Localization\ExtendLocalizationResource\*.json" />
    <Content Remove="Localization\ExtendLocalizationResource\*.json" />
</ItemGroup>

<ItemGroup>
    <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.*" />
</ItemGroup>

Change the code of the ConfigureServices method in ExtendLocalizationResourceDomainSharedModule.

Configure<AbpLocalizationOptions>(options =>
{
    options.Resources
        .Add<ExtendLocalizationResourceResource>("en")
        .AddBaseTypes(typeof(AbpValidationResource))
        .AddVirtualJson("/Localization/ExtendLocalizationResource");

    //add following code
    options.Resources
        .Get<AbpTimingResource>()
        .AddVirtualJson("/Localization/AbpTiming");

    options.DefaultResourceType = typeof(ExtendLocalizationResourceResource);
});

Execute ExtendLocalizationResource.DbMigrator to migrate the database and run ExtendLocalizationResource.Web.

We have changed the English localization text and added Russian localization.

Index page

<p>@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]</p>
@using(CultureHelper.Use("ru"))
{
    <p>@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]</p>
}