use phrasebook::{Catalog, Lang, Phrasebook, Phrases, Source, args, check};
const SV_SE: Lang = Lang::new("sv-SE");
mod auth {
use phrasebook::{Catalog, Lang, Source};
pub static L10N: Catalog = Catalog::new(
"auth",
&[Source::new(
Lang::EN_US,
"
auth-sign-in = Sign in
auth-sign-out = Sign out
auth-signed-in-as = Signed in as { $name }
",
)],
)
.with_prefix("auth-");
}
static APP: Catalog = Catalog::new(
"app",
&[
Source::new(
Lang::EN_US,
"
title = Mafia
players = { $count ->
[one] One player
*[other] { $count } players
}
nights = { $count ->
[0] No nights yet
[one] One night
*[other] { $count } nights
}
",
),
Source::new(
SV_SE,
"
title = Maffia
players = { $count ->
[one] En spelare
*[other] { $count } spelare
}
auth-sign-in = Logga in
",
),
],
);
fn main() {
let book = Phrasebook::builder()
.language(Lang::EN_US, "English")
.language(SV_SE, "Svenska")
.catalog(&APP)
.catalog(&auth::L10N)
.build();
println!("Languages, for a picker:");
for language in book.languages() {
println!(" {} ({})", language.name(), language.lang());
}
println!("Starting language for a browser preferring de, sv-FI, en:");
println!(" {}", book.negotiate(["de", "sv-FI", "en"]));
for lang in [Lang::EN_US, SV_SE] {
let phrases = book.phrases(lang);
println!();
println!("In {}:", phrases.lang());
show(&phrases);
}
let bare = Phrasebook::builder()
.language(Lang::EN_US, "English")
.catalog(&APP)
.build();
let phrases = bare.phrases(Lang::EN_US);
println!();
println!("Without the library's catalog:");
println!(" {}", phrases.text("auth-sign-in"));
println!("With it as backstop:");
println!(
" {}",
phrases.with_backstop(&auth::L10N).text("auth-sign-in")
);
let phrases = Phrases::from_catalog(&auth::L10N);
println!("With nothing provided:");
println!(
" {}",
phrases.msg("auth-signed-in-as", &args!(name = "Ada"))
);
println!();
println!("Checks:");
println!(" app catalog: {:?}", check::catalog(&APP).map(|()| "ok"));
println!(
" library catalog: {:?}",
check::catalog(&auth::L10N).map(|()| "ok")
);
if let Err(problems) = check::parity_with(&APP, SV_SE, &[&auth::L10N]) {
println!(" sv-SE parity:");
for problem in &problems {
println!(" {problem}");
}
}
}
fn show(phrases: &Phrases) {
println!(" {}", phrases.text("title"));
for count in [1, 4] {
println!(" {}", phrases.msg("players", &args!(count = count)));
}
for count in [0, 1, 2] {
println!(" {}", phrases.msg("nights", &args!(count = count)));
}
println!(" {}", phrases.text("auth-sign-in"));
println!(
" {}",
phrases.msg("auth-signed-in-as", &args!(name = "Ada"))
);
println!(" {}", phrases.text("missing"));
}