1 个不稳定版本
0.6.1 | 2023 年 7 月 6 日 |
---|
#404 在 国际化(i18n)
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