i18n_message-rizzen-yazston

Crates.ioi18n_message-rizzen-yazston
lib.rsi18n_message-rizzen-yazston
version0.6.1
sourcesrc
created_at2023-07-06 17:07:38.824176
updated_at2023-07-06 17:07:38.824176
descriptionThe `i18n-message` crate of the Internationalisation project.
homepage
repositoryhttps://github.com/rizzen-yazston/i18n
max_upload_size
id910112
size132,417
Rizzen (rizzen-yazston)

documentation

README

= i18n_message Rizzen Yazston

== Message system

The i18n_message crate contains the messaging system.

A message system that connects to a string data store, to obtain strings for the specified language using a string identifier, and formatting the string to replace any placeholders within the string with provided values.

The message is capable of caching retrieved strings that are prepared for placeholder replacement, thus can be reused without the need to parse the string for placeholders.

The message system makes use of all the other component crates that make up the i18n project. Ideally one only needs to use the meta crate i18n, as it includes all the crates including this i18n_message crate.

== Acknowledgement

Stefano Angeleri for advice on various design aspects of implementing the components of the internationalisation project, and also providing the Italian translation of error message strings.

== Cargo.toml

[dependencies]
i18n_message-rizzen-yazston = "0.6.1"
i18n_icu-rizzen-yazston = "0.6.1"
i18n_lexer-rizzen-yazston = "0.6.1" # Needed for Token, TokenType
i18n_pattern-rizzen-yazston = "0.6.1"
i18n_provider-rizzen-yazston = "0.6.1"
i18n_provider_sqlite3-rizzen-yazston = "0.6.1"
i18n_utility-rizzen-yazston = "0.6.1"
tree-rizzen-yazston = "0.4.0"
icu_provider = "1.2.0"

# These are required for the DataProvider.
icu_properties = "1.2.0"
icu_segmenter = "1.2.0"
icu_plurals = "1.2.0"
icu_decimal = "1.2.0"
icu_calendar = "1.2.0"
icu_datetime = "1.2.0"

# This is required for the DataProvider.
[dependencies.fixed_decimal]
version = "0.5.3"
# Needed for floating point support.
features = [ "ryu" ]

== Examples

use i18n_icu::IcuDataProvider;
use i18n_registry::LanguageTagRegistry;
use i18n_provider_sqlite3::ProviderSqlite3;
use i18n_pattern::{PlaceholderValue, CommandRegistry};
use i18n_message::Message;
use icu_testdata::buffer;
use icu_provider::serde::AsDeserializingBufferProvider;
use std::collections::HashMap;
use std::rc::Rc;
use std::error::Error;

fn message() -> Result<(), Box<dyn Error>> {
    let buffer_provider = buffer();
    let data_provider = buffer_provider.as_deserializing();
    let icu_data_provider = Rc::new(
        IcuDataProvider::try_new( &data_provider )?
    );
    let language_tag_registry = Rc::new( LanguageTagRegistry::new() );
    let lstring_provider = ProviderSqlite3::try_new(
        "./i18n/", &language_tag_registry
    )?;
    let command_registry = Rc::new( CommandRegistry::new() );
    let message_system = Message::try_new(
        &icu_data_provider, &language_tag_registry, &lstring_provider, &command_registry, true, true
    )?;
    let mut values = HashMap::<String, PlaceholderValue>::new();
    values.insert(
        "identifier".to_string(),
        PlaceholderValue::String( "i18n_message/string_not_found".to_string() )
    );
    values.insert(
        "language_tag".to_string(),
        PlaceholderValue::String( "en-ZA".to_string() )
    );
    values.insert(
        "fallback".to_string(),
        PlaceholderValue::String( "true".to_string() )
    );
    let lstring = message_system.format(
        "i18n_message/string_not_found",
        &values,
        &language_tag_registry.get_language_tag( "en-ZA" ).unwrap(),
        None,
        None
    )?;
    assert_eq!(
        lstring.as_str(),
        "No string was found for identifier ‘i18n_message/string_not_found’ and language tag ‘en-ZA’. Fallback used: True.",
        "Check placeholder values."
    );
    Ok( () )
}
Commit count: 88

cargo fmt