Skip to content

add message localization infrastructure #169

@fembina

Description

@fembina

Ideas

Add easy localise message infrastructure with message-content styles and arguments support with easy to use api.

The localisation infrastructure should have ability to support custom localisation provider.

Project will be independent library in talkie-framework solution with name Falko.Talkie.Platforms.Localization.

Features

  • Localisation should support message styles and arguments;
  • Localisation should work from ISignalContext or directly;
  • Localisation can have many localisation providers;
  • Different localisation providers (or factory of that) should support different localisation layouts;
  • Localisation context contains localisation layout and localisation provider, you put that into Localize method.

Examples

The perfect examples of localisation infrastructure stored at the @busquita-bot.

But that's is static one... We need to inspire by that and create own.

¡Important!

That task not include providers implementation, only infrastructure for that.

The task should created in spitted branch that are @message-content-localization. Cuz that's will be added in future releases, when providers with be implemented in other tasks.

Usages

{
    "Introduction": "I'm **{first_name}** (@{user_name})"
}
public sealed class MyLocalizationLayout : ILocalizationLayout
{
    ILocalizationContent Introduction { get; }
}
public sealed class MyLocalizationContext(MyLocalizationLayout layout, JsonLocalizationProvider provider)
    : LocalizationContext<MyLocalizationLayout, JsonLocalizationProvider>(layout, provider);
await new HostBuilder()
    // ...
    .UseLocalization((services, builder) => builder
        .AddProvider<JsonLocalizationProvider>()
        .AddLayout<MyLocalizationLayout>()
        .AddContext<MyLocalizationContext>())
    // ...
    .RunConsoleAsync();
MyLocalizationContext localization = //* ... *//;

await context
    .ToMessageController()
    .PublishMessageAsync(context
        .Localize(localization, localization => localization.Introduction)
        .Where("first_name", "rima")
        .Where("user_name", "fembina"));

Metadata

Metadata

Assignees

No one assigned

    Labels

    PlatformsThis issue is platforms project part

    Projects

    Status

    Do

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions