l10n_core/
l10n_message.rs

1use crate::l10n::TranslateError;
2use crate::UNEXPECTED_MESSAGE;
3use fluent_bundle::FluentArgs;
4use std::borrow::Cow;
5use unic_langid::LanguageIdentifier;
6
7pub trait L10nMessage<'s, 'r> {
8    fn try_translate_with_args(
9        &'s self,
10        locale: &LanguageIdentifier,
11        args: Option<&'s FluentArgs<'s>>,
12    ) -> Result<Cow<'r, str>, TranslateError>;
13
14    fn translate_with_args(
15        &'s self,
16        locale: &LanguageIdentifier,
17        args: Option<&'s FluentArgs<'s>>,
18    ) -> Cow<'r, str> {
19        self.try_translate_with_args(locale, args)
20            .unwrap_or_else(|_| Cow::from(UNEXPECTED_MESSAGE))
21    }
22
23    fn try_translate(
24        &'s self,
25        locale: &LanguageIdentifier,
26    ) -> Result<Cow<'r, str>, TranslateError> {
27        self.try_translate_with_args(locale, None)
28    }
29
30    fn translate(&'s self, locale: &LanguageIdentifier) -> Cow<'r, str> {
31        self.try_translate_with_args(locale, None)
32            .unwrap_or_else(|_| Cow::from(UNEXPECTED_MESSAGE))
33    }
34}