#icu4x #localization #cache #rust-pattern

i18n_message-rizzen-yazston

国际化项目中的 i18n-message

1 个不稳定版本

0.6.1 2023 年 7 月 6 日

#404国际化(i18n)

BSD-3-Clause

325KB
4.5K SLoC

i18n_message

Rizzen Yazston

消息系统

i18n_message 包包含消息系统。

该消息系统连接到字符串数据存储,使用字符串标识符获取指定语言的字符串,并将字符串中的任何占位符替换为提供的值。

消息系统可以缓存已准备用于占位符替换的检索到的字符串,因此可以重复使用,无需解析字符串中的占位符。

消息系统利用了构成 i18n 项目的所有其他组件包。理想情况下,只需使用元包 i18n,因为它包含所有包,包括此 i18n_message 包。

致谢

Stefano Angeleri,为国际化项目组件的各种设计方面提供建议,并提供错误消息字符串的意大利语翻译。

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" ]

示例

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( () )
}

依赖项

~29MB
~537K SLoC