Skip to main content
Version: 4.0.0

Release Notes

v4.0.0

February 2026

Breaking Changes

LanguageService.getList() return type changed

LanguageService.getList() now returns PagedResultDto<LanguageDto> instead of ListResultDto<LanguageDto>. The response now includes a totalCount property:

// Before (v3.2.0)
const result = await languageService.getList(); // ListResultDto<LanguageDto>
// result.items ✅
// result.totalCount ❌ not available

// After (v4.0.0)
const result = await languageService.getList(); // PagedResultDto<LanguageDto>
// result.items ✅
// result.totalCount ✅ now available

LanguageManagement.State.languageResponse type changed

The languageResponse field in LanguageManagement.State changed from ListResultDto<LanguageDto> to PagedResultDto<LanguageDto> to match the updated service return type.

Restored

  • getLanguagesTotalCount() restored on LanguageManagementStateService — This method was removed in v3.0.0 and has been brought back now that LanguageService.getList() returns PagedResultDto with totalCount.

Deprecations

The following are now formally deprecated and will be removed in v5.0:

  • LanguageManagementService — Use proxy services instead: LanguageService, LanguageTextService
  • All LanguageManagement namespace types — Deprecation timeline extended from v4.0 to v5.0

v3.2.0

February 2026

New Features

LanguageService (Proxy Service)

A new typed proxy service for language management operations:

import { LanguageService } from '@abpjs/language-management';
import { useRestService } from '@abpjs/core';

function useLanguages() {
const restService = useRestService();
const languageService = new LanguageService(restService);

// Get all languages
const allLanguages = await languageService.getAllList();

// Get languages with filtering
const languages = await languageService.getList({ filter: 'english' });

// Get a single language
const language = await languageService.get(languageId);

// Create a new language
const newLang = await languageService.create({
displayName: 'French',
cultureName: 'fr-FR',
uiCultureName: 'fr-FR',
flagIcon: 'fr',
isEnabled: true,
});

// Update a language
const updated = await languageService.update(languageId, {
displayName: 'Français',
flagIcon: 'fr',
isEnabled: true,
});

// Set as default language
await languageService.setAsDefault(languageId);

// Delete a language
await languageService.delete(languageId);

// Get available cultures
const cultures = await languageService.getCulturelist();

// Get localization resources
const resources = await languageService.getResources();
}

LanguageTextService (Proxy Service)

A new typed proxy service for language text (localization) operations:

import { LanguageTextService } from '@abpjs/language-management';

const languageTextService = new LanguageTextService(restService);

// Get language texts with filtering
const texts = await languageTextService.getList({
resourceName: 'AbpAccount',
baseCultureName: 'en',
targetCultureName: 'fr',
getOnlyEmptyValues: true,
maxResultCount: 50,
});

// Update a language text
await languageTextService.update({
resourceName: 'AbpAccount',
cultureName: 'fr',
name: 'Login',
value: 'Connexion',
});

// Restore a language text to default value
await languageTextService.restoreToDefault({
resourceName: 'AbpAccount',
cultureName: 'fr',
name: 'Login',
});

New Proxy Models

Typed DTOs for all language management operations:

import type {
// Language DTOs
LanguageDto,
CreateLanguageDto,
UpdateLanguageDto,
// Language Text DTOs
LanguageTextDto,
GetLanguagesTextsInput,
// Other DTOs
CultureInfoDto,
LanguageResourceDto,
} from '@abpjs/language-management';

// LanguageDto
interface LanguageDto {
id: string;
cultureName: string;
uiCultureName: string;
displayName: string;
flagIcon: string;
isEnabled: boolean;
isDefaultLanguage: boolean;
creationTime?: string | Date;
creatorId?: string;
extraProperties?: Record<string, unknown>;
}

// LanguageTextDto
interface LanguageTextDto {
resourceName: string;
cultureName: string;
baseCultureName: string;
baseValue: string;
name: string;
value: string;
}

// CultureInfoDto
interface CultureInfoDto {
displayName: string;
name: string;
}

// LanguageResourceDto
interface LanguageResourceDto {
name: string;
}

Updated State Interface

The LanguageManagement.State interface now uses the new proxy DTOs:

import type { LanguageManagement, LanguageDto, LanguageTextDto } from '@abpjs/language-management';
import type { ListResultDto, PagedResultDto } from '@abpjs/core';

interface State {
languages: ListResultDto<LanguageDto>;
languageTexts: PagedResultDto<LanguageTextDto>;
cultures: CultureInfoDto[];
resources: LanguageResourceDto[];
}

Deprecations

The following legacy types are deprecated and will be removed in v5.0:

DeprecatedReplacement
LanguageManagement.LanguageLanguageDto
LanguageManagement.LanguageResponseListResultDto<LanguageDto>
LanguageManagement.CreateLanguageInputCreateLanguageDto
LanguageManagement.UpdateLanguageInputUpdateLanguageDto
LanguageManagement.LanguageTextLanguageTextDto
LanguageManagement.LanguageTextResponsePagedResultDto<LanguageTextDto>
LanguageManagement.CultureCultureInfoDto
LanguageManagement.ResourceLanguageResourceDto

New Exports

Services:

  • LanguageService - Typed proxy service for language operations
  • LanguageTextService - Typed proxy service for language text operations

Types:

  • LanguageDto - Language data transfer object
  • CreateLanguageDto - DTO for creating languages
  • UpdateLanguageDto - DTO for updating languages
  • LanguageTextDto - Language text data transfer object
  • GetLanguagesTextsInput - Input for querying language texts
  • CultureInfoDto - Culture information DTO
  • LanguageResourceDto - Language resource DTO

v3.1.0

February 2026

  • Version alignment with @abpjs/core

v3.0.0

February 2026

Breaking Changes

Route Names Changes

  • eLanguageManagementRouteNames.Administration removed - Use eThemeSharedRouteNames.Administration from @abpjs/theme-shared instead.
  • eLanguageManagementRouteNames.Languages value changed - From 'LanguageManagement::Menu:Languages' to 'LanguageManagement::Languages'
  • eLanguageManagementRouteNames.LanguageManagement added - New key for parent route ('LanguageManagement::LanguageManagement')
// Before (v2.9.0)
import { eLanguageManagementRouteNames } from '@abpjs/language-management';
const admin = eLanguageManagementRouteNames.Administration; // ❌ Removed

// After (v3.0.0)
import { eThemeSharedRouteNames } from '@abpjs/theme-shared';
const admin = eThemeSharedRouteNames.Administration; // ✅ Use this instead

Removed Methods

  • getLanguagesTotalCount() removed from LanguageManagementStateService - Use the totalCount property from the language response directly:
// Before (v2.9.0)
const total = stateService.getLanguagesTotalCount();

// After (v3.0.0)
const languages = stateService.getLanguages();
// Access totalCount from the response if needed

New Features

Route Providers

New route configuration system using RoutesService from @abpjs/core:

import { initializeLanguageManagementRoutes, configureRoutes } from '@abpjs/language-management';

// Option 1: Use the global RoutesService
const addRoutes = initializeLanguageManagementRoutes();
addRoutes();

// Option 2: Use a custom RoutesService instance
import { getRoutesService } from '@abpjs/core';
const routes = getRoutesService();
const addRoutes = configureRoutes(routes);
addRoutes();

Also available as a provider object:

import { LANGUAGE_MANAGEMENT_ROUTE_PROVIDERS } from '@abpjs/language-management';

LANGUAGE_MANAGEMENT_ROUTE_PROVIDERS.configureRoutes(routes);

Policy Names

New constants for permission checking:

import { eLanguageManagementPolicyNames } from '@abpjs/language-management';

// Available policies:
// eLanguageManagementPolicyNames.LanguageManagement = 'LanguageManagement.Languages || LanguageManagement.LanguageTexts'
// eLanguageManagementPolicyNames.Languages = 'LanguageManagement.Languages'
// eLanguageManagementPolicyNames.LanguageTexts = 'LanguageManagement.LanguageTexts'

Extensions System

New extension tokens and defaults for customizing language management components:

Entity Actions - Row-level actions in grids:

import {
EntityAction,
DEFAULT_LANGUAGES_ENTITY_ACTIONS,
DEFAULT_LANGUAGE_TEXTS_ENTITY_ACTIONS,
LANGUAGE_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS,
} from '@abpjs/language-management';

Toolbar Actions - Grid toolbar buttons:

import {
ToolbarAction,
DEFAULT_LANGUAGES_TOOLBAR_ACTIONS,
LANGUAGE_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS,
} from '@abpjs/language-management';

Entity Props - Grid column definitions:

import {
EntityProp,
DEFAULT_LANGUAGES_ENTITY_PROPS,
LANGUAGE_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS,
} from '@abpjs/language-management';

Form Props - Create/Edit form fields:

import {
FormProp,
DEFAULT_LANGUAGES_CREATE_FORM_PROPS,
DEFAULT_LANGUAGES_EDIT_FORM_PROPS,
LANGUAGE_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS,
LANGUAGE_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS,
} from '@abpjs/language-management';

Extensions Guard

New guard for loading extensions before route activation:

import {
languageManagementExtensionsGuard,
useLanguageManagementExtensionsGuard,
LanguageManagementExtensionsGuard,
} from '@abpjs/language-management';

// Function-based guard
await languageManagementExtensionsGuard();

// React hook
function LanguageManagementLayout() {
const { isLoaded, loading } = useLanguageManagementExtensionsGuard();

if (loading) return <Loading />;
return <Outlet />;
}

New Exports

Config Subpackage:

  • eLanguageManagementPolicyNames - Policy name constants
  • LanguageManagementPolicyNameKey - Type for policy name values
  • configureRoutes() - Configure routes with custom RoutesService
  • initializeLanguageManagementRoutes() - Initialize routes with global RoutesService
  • LANGUAGE_MANAGEMENT_ROUTE_PROVIDERS - Route providers object

Tokens Subpackage:

  • EntityAction<T>, ToolbarAction<T>, EntityProp<T>, FormProp<T> - Extension interfaces
  • DEFAULT_LANGUAGES_ENTITY_ACTIONS, DEFAULT_LANGUAGE_TEXTS_ENTITY_ACTIONS
  • DEFAULT_LANGUAGES_TOOLBAR_ACTIONS, DEFAULT_LANGUAGE_TEXTS_TOOLBAR_ACTIONS
  • DEFAULT_LANGUAGES_ENTITY_PROPS
  • DEFAULT_LANGUAGES_CREATE_FORM_PROPS, DEFAULT_LANGUAGES_EDIT_FORM_PROPS
  • DEFAULT_LANGUAGE_MANAGEMENT_ENTITY_ACTIONS, DEFAULT_LANGUAGE_MANAGEMENT_TOOLBAR_ACTIONS
  • DEFAULT_LANGUAGE_MANAGEMENT_ENTITY_PROPS, DEFAULT_LANGUAGE_MANAGEMENT_CREATE_FORM_PROPS, DEFAULT_LANGUAGE_MANAGEMENT_EDIT_FORM_PROPS
  • Contributor callback types: EntityActionContributorCallback<T>, ToolbarActionContributorCallback<T>, etc.
  • Contributor type definitions: LanguageManagementEntityActionContributors, LanguageManagementToolbarActionContributors, etc.
  • Token symbols: LANGUAGE_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, LANGUAGE_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, etc.

Guards Subpackage:

  • languageManagementExtensionsGuard() - Async guard function
  • useLanguageManagementExtensionsGuard() - React hook
  • LanguageManagementExtensionsGuard - Class-based guard (deprecated)

v2.9.0

February 2026

  • Version alignment with @abpjs/core

v2.7.0

February 2026

New Features

Route Names

New constants for language management route names (localization keys):

import { eLanguageManagementRouteNames } from '@abpjs/language-management';

// Available route names:
// eLanguageManagementRouteNames.Languages = 'LanguageManagement::Menu:Languages'
// eLanguageManagementRouteNames.LanguageTexts = 'LanguageManagement::LanguageTexts'

Note: Administration was removed in v3.0.0. Use eThemeSharedRouteNames.Administration from @abpjs/theme-shared instead.

API Changes

  • eLanguageManagementComponents - Changed from TypeScript enum to const object for better tree-shaking and type inference:

    // Before (v2.4.0)
    enum eLanguageManagementComponents {
    Languages = 'LanguageManagement.LanguagesComponent',
    // ...
    }

    // After (v2.7.0)
    const eLanguageManagementComponents = {
    Languages: 'LanguageManagement.LanguagesComponent',
    // ...
    } as const;

New Exports

  • eLanguageManagementRouteNames - Constants for route names (localization keys)
  • LanguageManagementRouteNameKey - Type for language management route name values
  • LanguageManagementComponentKey - Type for language management component key values

v2.4.0

February 2026

New Features

  • LanguageManagementService.apiName property - New property for REST API configuration. Defaults to 'default'.

  • eLanguageManagementComponents enum - New enum for component identifiers, useful for component registration and customization:

    import { eLanguageManagementComponents } from '@abpjs/language-management';

    // Available components:
    // eLanguageManagementComponents.Languages = 'LanguageManagement.LanguagesComponent'
    // eLanguageManagementComponents.LanguageTexts = 'LanguageManagement.LanguageTextsComponent'

v2.2.0

February 2026

  • Version alignment with @abpjs/core

v2.1.1

February 2026

  • Version alignment with @abpjs/core

v2.0.0

January 2026

New Features

  • LanguageManagementStateService - New state service for programmatic language management operations:

    Language Operations:

    • dispatchGetLanguages(params?) - Fetch languages and update internal state
    • dispatchGetLanguageById(id) - Fetch a single language by ID
    • dispatchCreateUpdateLanguage(body, id?) - Create or update a language
    • dispatchDeleteLanguage(id) - Delete a language
    • dispatchSetAsDefaultLanguage(id) - Set a language as the default

    Language Text Operations:

    • dispatchGetLanguageTexts(params) - Fetch language texts with filters
    • dispatchUpdateLanguageTextByName(params) - Update a language text translation
    • dispatchRestoreLanguageTextByName(params) - Restore a language text to its default value

    Culture & Resource Operations:

    • dispatchGetLanguageCultures() - Fetch available cultures
    • dispatchGetLanguageResources() - Fetch available localization resources

    State Getter Methods:

    • getLanguages() - Access cached languages
    • getLanguageTexts() / getLanguageTextsTotalCount() - Access cached language texts
    • getCultures() - Access cached cultures
    • getResources() - Access cached resources

Note: getLanguagesTotalCount() was removed in v3.0.0 and restored in v4.0.0.

Example

import { LanguageManagementStateService } from '@abpjs/language-management';
import { RestService } from '@abpjs/core';

const restService = new RestService();
const stateService = new LanguageManagementStateService(restService);

// Fetch languages
await stateService.dispatchGetLanguages({ maxResultCount: 10 });
const languages = stateService.getLanguages();
console.log(`Found ${languages.length} languages`);

// Create a new language
await stateService.dispatchCreateUpdateLanguage({
cultureName: 'fr',
uiCultureName: 'fr',
displayName: 'French',
isEnabled: true,
});

// Fetch language texts
await stateService.dispatchGetLanguageTexts({
resourceName: 'AbpAccount',
baseCultureName: 'en',
targetCultureName: 'fr',
});
const texts = stateService.getLanguageTexts();

// Fetch cultures and resources
await stateService.dispatchGetLanguageCultures();
const cultures = stateService.getCultures();

v1.0.0

January 2026

  • Version alignment with @abpjs/core v1.0.0

v0.7.2 (Initial Release)

Components

  • LanguagesComponent - Full language management UI with CRUD operations, culture selection, flag icons, and default language setting
  • LanguageTextsComponent - Localization string management with filtering by resource, culture comparison, and inline editing

Hooks

  • useLanguages - State management for languages with:

    • fetchLanguages() - Get paginated languages
    • fetchCultures() - Get available cultures
    • createLanguage() - Create new language
    • updateLanguage() - Update existing language
    • deleteLanguage() - Delete language
    • setAsDefaultLanguage() - Set default language
  • useLanguageTexts - State management for localization strings with:

    • fetchLanguageTexts() - Get texts with culture filtering
    • fetchResources() - Get localization resources
    • updateLanguageTextByName() - Update translation
    • restoreLanguageTextByName() - Restore to default value

Services

  • LanguageManagementService with methods for:
    • Language CRUD operations
    • Culture and resource listing
    • Language text queries and updates
    • Restore translations to defaults

Constants

  • LANGUAGE_MANAGEMENT_ROUTES - Pre-configured route definitions

TypeScript

  • LanguageManagement namespace with all types:
    • Language, LanguageResponse
    • CreateLanguageInput, UpdateLanguageInput
    • LanguageText, LanguageTextResponse
    • LanguageTextQueryParams, LanguageTextRequestByNameParams, LanguageTextUpdateByNameParams
    • Culture, Resource
    • State interface for state management