Platform.I18n.Sdk 1.0.1

dotnet add package Platform.I18n.Sdk --version 1.0.1
                    
NuGet\Install-Package Platform.I18n.Sdk -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Platform.I18n.Sdk" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Platform.I18n.Sdk" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="Platform.I18n.Sdk" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Platform.I18n.Sdk --version 1.0.1
                    
#r "nuget: Platform.I18n.Sdk, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Platform.I18n.Sdk@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Platform.I18n.Sdk&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=Platform.I18n.Sdk&version=1.0.1
                    
Install as a Cake Tool

Platform.I18n.Sdk

SDK для генерации и валидации ключей локализации в соответствии со стандартами платформы Steos.

Описание

Platform.I18n.Sdk — это библиотека, которая обеспечивает единообразную генерацию ключей локализации для интеграции микросервисов с централизованной системой переводов (Translation Service). SDK гарантирует стандартизацию формата ключей, выполняет строгую валидацию входных данных и предотвращает ошибки на ранних этапах разработки.

Установка

Через Package Manager Console

Install-Package Platform.I18n.Sdk -Version 1.0.0

Через .NET CLI

dotnet add package Platform.I18n.Sdk --version 1.0.0

Через PackageReference

<PackageReference Include="Platform.I18n.Sdk" Version="1.0.0" />

Быстрый старт

1. Инициализация

Создайте экземпляр LocalizationKeyGenerator, передав системное имя вашего микросервиса:

using Platform.I18n.Sdk;

// Инициализация для микросервиса "hr"
var keyGenerator = new LocalizationKeyGenerator("hr");

// Регистрация в DI-контейнере (например, в Program.cs)
builder.Services.AddSingleton(keyGenerator);

Важно: Имя микросервиса должно соответствовать формату: ^[a-z][a-z0-9_]{1,30}$ (начинается с маленькой буквы, содержит только маленькие буквы, цифры и подчеркивание, длина от 2 до 31 символа).

2. Генерация ключей для справочников

Используйте метод ForReference для системных справочников (reference data):

// Генерация ключа для профессии "Software Engineer"
string professionKey = keyGenerator.ForReference(
    domain: "hr",           // Предметная область (обычно имя микросервиса)
    concept: "profession",   // Логическое имя сущности
    code: "software_engineer" // Стабильный бизнес-код
);

// Результат: "hr:profession:software_engineer"

3. Генерация ключей для пользовательского контента

Используйте метод ForUserContent для динамического контента, создаваемого пользователями:

// С UUID
string postTitleKey = keyGenerator.ForUserContent(
    entityType: "post",                                    // Тип сущности
    entityId: "550e8400-e29b-41d4-a716-446655440000",    // UUID записи
    fieldName: "title"                                     // Имя поля
);

// Результат: "hr:post:550e8400-e29b-41d4-a716-446655440000:title"

// С бизнес-ID
string articleKey = keyGenerator.ForUserContent(
    entityType: "article",
    entityId: "article-12345",  // Бизнес-ID (буквы, цифры, '-', '_', до 64 символов)
    fieldName: "content"
);

// Результат: "hr:article:article-12345:content"

4. Валидация ключей

Для проверки ключей, полученных извне, используйте статический метод ValidateKey:

// Валидация ключа справочника
bool isValid = LocalizationKeyGenerator.ValidateKey("hr:profession:software_engineer");
// → true

// Валидация ключа пользовательского контента
bool isAlsoValid = LocalizationKeyGenerator.ValidateKey("hr:post:550e8400-e29b-41d4-a716-446655440000:title");
// → true

// Неверный ключ
bool isInvalid = LocalizationKeyGenerator.ValidateKey("invalid-key");
// → false

API Документация

LocalizationKeyGenerator

Конструктор
public LocalizationKeyGenerator(string microserviceName)

Параметры:

  • microserviceName — системное имя микросервиса (например, "hr", "blog")

Исключения:

  • ArgumentException — если имя микросервиса null, пустое или имеет неверный формат
ForReference

Генерирует ключ локализации для системного справочника.

public string ForReference(string domain, string concept, string code)

Параметры:

  • domain — предметная область (обычно имя микросервиса)
  • concept — логическое имя сущности (например, "profession")
  • code — стабильный бизнес-код сущности (например, "software_engineer")

Возвращает: Строку в формате {domain}:{concept}:{code}

Исключения:

  • ArgumentException — если любой из параметров имеет неверный формат
ForUserContent

Генерирует ключ локализации для пользовательского контента.

public string ForUserContent(string entityType, string entityId, string fieldName)

Параметры:

  • entityType — логический тип сущности (например, "post")
  • entityId — уникальный стабильный идентификатор (UUID или бизнес-ID)
  • fieldName — имя переводимого поля (например, "title")

Возвращает: Строку в формате {microservice}:{entityType}:{entityId}:{fieldName}

Исключения:

  • ArgumentException — если любой из параметров имеет неверный формат
ValidateKey (статический)

Проверяет, является ли строка валидным ключом локализации.

public static bool ValidateKey(string key)

Параметры:

  • key — ключ для проверки

Возвращает: true, если ключ имеет верный формат, иначе false

Правила форматирования

Формат сегментов ключа

Сегмент Формат Описание
domain, microserviceName, concept, entityType, fieldName ^[a-z][a-z0-9_]{1,30}$ Начинается с маленькой буквы. Содержит только маленькие буквы, цифры и _. Длина от 2 до 31 символа.
code (для справочников) ^[a-zA-Z0-9_-]{1,50}$ Буквы любого регистра, цифры, - и _. Длина от 1 до 50 символов.
entityId (пользовательский контент) UUID или BusinessID Должен быть либо стандартным UUID, либо строкой (буквы, цифры, -, _) длиной до 64 символов.

Форматы ключей

Справочник (Reference Data):

{domain}:{concept}:{code}

Пример: hr:profession:software_engineer

Пользовательский контент (User Content):

{microservice}:{entityType}:{entityId}:{fieldName}

Пример: hr:post:550e8400-e29b-41d4-a716-446655440000:title

Примеры использования

Интеграция в микросервис

// Program.cs
using Platform.I18n.Sdk;

var builder = WebApplication.CreateBuilder(args);

// Инициализация генератора ключей
var keyGenerator = new LocalizationKeyGenerator("hr");
builder.Services.AddSingleton(keyGenerator);

var app = builder.Build();

Генерация ключей при создании справочника

public class ProfessionService
{
    private readonly LocalizationKeyGenerator _keyGenerator;

    public ProfessionService(LocalizationKeyGenerator keyGenerator)
    {
        _keyGenerator = keyGenerator;
    }

    public void CreateProfession(string code, string name)
    {
        // Создание записи в БД
        var profession = new Profession
        {
            Code = code,
            Name = name,
            NameLangId = 2 // ID языка оригинала (например, английский)
        };

        // Генерация ключа для перевода
        var translationKey = _keyGenerator.ForReference(
            domain: "hr",
            concept: "profession",
            code: profession.Code
        );

        // Публикация события для Translation Service
        // messageBus.Publish(new TranslationRequestEvent(translationKey, ...));
    }
}

Генерация ключей для пользовательского контента

public class PostService
{
    private readonly LocalizationKeyGenerator _keyGenerator;

    public PostService(LocalizationKeyGenerator keyGenerator)
    {
        _keyGenerator = keyGenerator;
    }

    public PostDto GetPost(Guid postId, int requestedLanguageId)
    {
        var post = _dbContext.Posts.Find(postId);

        // Если запрошенный язык отличается от языка оригинала
        if (requestedLanguageId != post.TitleLangId)
        {
            var titleKey = _keyGenerator.ForUserContent(
                entityType: "post",
                entityId: postId.ToString(),
                fieldName: "title"
            );

            // Запрос перевода из Translation Service
            // var translatedTitle = await _translationService.GetTranslation(titleKey, requestedLanguageId);
        }

        return new PostDto { /* ... */ };
    }
}

Требования

  • .NET Standard 2.0 или выше

Авторы

Steos

Дополнительная документация

Для полного руководства по интеграции с Translation Service см. документацию в репозитории проекта.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 488 11/26/2025
1.0.0 209 11/26/2025