diff --git a/assets/voxygen/i18n/en/hud/ability.ftl b/assets/voxygen/i18n/en/hud/ability.ftl index 6a1e7c1a10..6d11bd42f3 100644 --- a/assets/voxygen/i18n/en/hud/ability.ftl +++ b/assets/voxygen/i18n/en/hud/ability.ftl @@ -1,16 +1,14 @@ -common-abilities-debug-possess-name = Possessing Arrow -common-abilities-debug-possess-desc = Shoots a poisonous arrow. Lets you control your target. -common-abilities-sword-spin-name = Whirlwind -common-abilities-sword-spin-desc = Move forward while spinning with your sword. -common-abilities-axe-leap-name = Axe Jump -common-abilities-axe-leap-desc = A jump with the slashing leap to position of cursor. -common-abilities-hammer-leap-name = Smash of Doom -common-abilities-hammer-leap-desc = An AOE attack with knockback. Leaps to position of cursor. -common-abilities-bow-shotgun-name = Burst -common-abilities-bow-shotgun-desc = Launches a burst of arrows -common-abilities-staff-fireshockwave-name = Ring of Fire -common-abilities-staff-fireshockwave-desc = Ignites the ground with fiery shockwave. -common-abilities-sceptre-wardingaura-name = Warding Aura -common-abilities-sceptre-wardingaura-desc = Wards your allies against enemy attacks. -common-abilities-unknown-name = Ability has no title -common-abilities-unknown-desc = Ability has no description \ No newline at end of file +common-abilities-debug-possess = Possessing Arrow + .desc = Shoots a poisonous arrow. Lets you control your target. +common-abilities-sword-spin = Whirlwind + .desc = Move forward while spinning with your sword. +common-abilities-axe-leap = Axe Jump + .desc = A jump with the slashing leap to position of cursor. +common-abilities-hammer-leap = Smash of Doom + .desc = An AOE attack with knockback. Leaps to position of cursor. +common-abilities-bow-shotgun = Burst + .desc = Launches a burst of arrows +common-abilities-staff-fireshockwave = Ring of Fire + .desc = Ignites the ground with fiery shockwave. +common-abilities-sceptre-wardingaura = Warding Aura + .desc = Wards your allies against enemy attacks. diff --git a/assets/voxygen/i18n/pl_PL/hud/ability.ftl b/assets/voxygen/i18n/pl_PL/hud/ability.ftl index b4c6224b2b..6aaf695e33 100644 --- a/assets/voxygen/i18n/pl_PL/hud/ability.ftl +++ b/assets/voxygen/i18n/pl_PL/hud/ability.ftl @@ -1,16 +1,14 @@ -common-abilities-debug-possess-name = Strzała Opętania -common-abilities-debug-possess-desc = Pozwala przejąć kontrolę nad twoim celem. -common-abilities-sword-spin-name = Cyklon -common-abilities-sword-spin-desc = Poruszasz się do przodu kręcąc się z Twoim mieczem. -common-abilities-axe-leap-name = Skok Drwala -common-abilities-axe-leap-desc = Skaczesz w kierunku kursora, tnąc swoją siekierą. -common-abilities-hammer-leap-name = Uderzenie Zagłady -common-abilities-hammer-leap-desc = Atak obszarowy z odrzutem. Skaczesz w kierunku kursora, uderzając w ziemię swoim młotem. -common-abilities-bow-shotgun-name = Salwa -common-abilities-bow-shotgun-desc = Wystrzeliwujesz salwę strzał. -common-abilities-staff-fireshockwave-name = Pierścień Ognia -common-abilities-staff-fireshockwave-desc = Przywołujesz ognisty pierścień odrzucający przeciwników. -common-abilities-sceptre-wardingaura-name = Ochronna Aura -common-abilities-sceptre-wardingaura-desc = Chroni twoich sojuszników przed atakami. -common-abilities-unknown-name = Umiejętność bez nazwy -common-abilities-unknown-desc = Umiejętność bez opisu \ No newline at end of file +common-abilities-debug-possess = Strzała Opętania + .desc = Pozwala przejąć kontrolę nad twoim celem. +common-abilities-sword-spin = Cyklon + .desc = Poruszasz się do przodu kręcąc się z Twoim mieczem. +common-abilities-axe-leap = Skok Drwala + .desc = Skaczesz w kierunku kursora, tnąc swoją siekierą. +common-abilities-hammer-leap = Uderzenie Zagłady + .desc = Atak obszarowy z odrzutem. Skaczesz w kierunku kursora, uderzając w ziemię swoim młotem. +common-abilities-bow-shotgun = Salwa + .desc = Wystrzeliwujesz salwę strzał. +common-abilities-staff-fireshockwave = Pierścień Ognia + .desc = Przywołujesz ognisty pierścień odrzucający przeciwników. +common-abilities-sceptre-wardingaura = Ochronna Aura + .desc = Chroni twoich sojuszników przed atakami. diff --git a/assets/voxygen/i18n/pt_BR/hud/ability.ftl b/assets/voxygen/i18n/pt_BR/hud/ability.ftl index 6b53f9ec3f..ba3e9fec38 100644 --- a/assets/voxygen/i18n/pt_BR/hud/ability.ftl +++ b/assets/voxygen/i18n/pt_BR/hud/ability.ftl @@ -1,16 +1,14 @@ -common-abilities-debug-possess-name = Flecha Marionete -common-abilities-debug-possess-desc = Atira uma flecha venenosa que deixa você controlar seu alvo. -common-abilities-sword-spin-name = Redemoinho -common-abilities-sword-spin-desc = Movimento frontal girando com sua espada. -common-abilities-axe-leap-name = Machadada Pulante -common-abilities-axe-leap-desc = Um pulo cortante na direção do cursor do mouse. -common-abilities-hammer-leap-name = Golpe da Ruína -common-abilities-hammer-leap-desc = Um Ataque em Área que inflige Empurrão. Salta na direção do cursor do mouse. -common-abilities-bow-shotgun-name = Estrondo -common-abilities-bow-shotgun-desc = Atira uma sequência de flechas -common-abilities-staff-fireshockwave-name = Anel de Fogo -common-abilities-staff-fireshockwave-desc = Incendeia o chão com uma onda de chamas. -common-abilities-sceptre-wardingaura-name = Aura Protetora -common-abilities-sceptre-wardingaura-desc = Protege seus aliados contra ataques inimigos. -common-abilities-unknown-name = Habilidade sem título -common-abilities-unknown-desc = Habilidade sem descrição \ No newline at end of file +common-abilities-debug-possess = Flecha Marionete + .desc = Atira uma flecha venenosa que deixa você controlar seu alvo. +common-abilities-sword-spin = Redemoinho + .desc = Movimento frontal girando com sua espada. +common-abilities-axe-leap = Machadada Pulante + .desc = Um pulo cortante na direção do cursor do mouse. +common-abilities-hammer-leap = Golpe da Ruína + .desc = Um Ataque em Área que inflige Empurrão. Salta na direção do cursor do mouse. +common-abilities-bow-shotgun = Estrondo + .desc = Atira uma sequência de flechas +common-abilities-staff-fireshockwave = Anel de Fogo + .desc = Incendeia o chão com uma onda de chamas. +common-abilities-sceptre-wardingaura = Aura Protetora + .desc = Protege seus aliados contra ataques inimigos. diff --git a/assets/voxygen/i18n/ro_RO/hud/ability.ftl b/assets/voxygen/i18n/ro_RO/hud/ability.ftl index 1874c47748..efde84cc12 100644 --- a/assets/voxygen/i18n/ro_RO/hud/ability.ftl +++ b/assets/voxygen/i18n/ro_RO/hud/ability.ftl @@ -1,16 +1,14 @@ -common-abilities-debug-possess-name = Săgeată Manipulatoare -common-abilities-debug-possess-desc = Trage o săgeată otrăvitoare care te lasă să controlezi inamicul. -common-abilities-sword-spin-name = Vârtej de vânt -common-abilities-sword-spin-desc = Mișcă-te înainte în timp ce te rotești cu sabia. -common-abilities-axe-leap-name = Saltul Toporului -common-abilities-axe-leap-desc = Un salt cu mișcare tăioasă la poziția cursorului. -common-abilities-hammer-leap-name = Lovitura Morții -common-abilities-hammer-leap-desc = Un atac „Zonă de Efect” cu aruncare. Salt la poziția cursorului. -common-abilities-bow-shotgun-name = Burst -common-abilities-bow-shotgun-desc = Trage rapid mai multe sageți -common-abilities-staff-fireshockwave-name = Inel de Foc -common-abilities-staff-fireshockwave-desc = Aprinde pământul cu undă de șoc în flăcări. -common-abilities-sceptre-wardingaura-name = Aură Protectoare -common-abilities-sceptre-wardingaura-desc = Protejează aliații tăi împotriva atacutilor inamicilor -common-abilities-unknown-name = Ablitatea nu are titlu -common-abilities-unknown-desc = Ablitatea nu are descripție \ No newline at end of file +common-abilities-debug-possess = Săgeată Manipulatoare + .desc = Trage o săgeată otrăvitoare care te lasă să controlezi inamicul. +common-abilities-sword-spin = Vârtej de vânt + .desc = Mișcă-te înainte în timp ce te rotești cu sabia. +common-abilities-axe-leap = Saltul Toporului + .desc = Un salt cu mișcare tăioasă la poziția cursorului. +common-abilities-hammer-leap = Lovitura Morții + .desc = Un atac „Zonă de Efect” cu aruncare. Salt la poziția cursorului. +common-abilities-bow-shotgun = Burst + .desc = Trage rapid mai multe sageți +common-abilities-staff-fireshockwave = Inel de Foc + .desc = Aprinde pământul cu undă de șoc în flăcări. +common-abilities-sceptre-wardingaura = Aură Protectoare + .desc = Protejează aliații tăi împotriva atacutilor inamicilor diff --git a/assets/voxygen/i18n/sv_SE/hud/ability.ftl b/assets/voxygen/i18n/sv_SE/hud/ability.ftl index 5b9ef08ce2..21d2e08afd 100644 --- a/assets/voxygen/i18n/sv_SE/hud/ability.ftl +++ b/assets/voxygen/i18n/sv_SE/hud/ability.ftl @@ -1,16 +1,14 @@ -common-abilities-debug-possess-name = Besittningspil -common-abilities-debug-possess-desc = Skjuter en förgiftad pil. Låter dig kontrollera ditt mål. -common-abilities-sword-spin-name = Virvelvind -common-abilities-sword-spin-desc = Flytta dig framåt medan du snurrar med ditt svärd. -common-abilities-axe-leap-name = Yxhopp -common-abilities-axe-leap-desc = Ett hopp med det skärande språnget riktat mot pekarens position. -common-abilities-hammer-leap-name = Nederslag -common-abilities-hammer-leap-desc = En attack som träffar ett område och knuffar fiender. Hoppar mot pekarens position. -common-abilities-bow-shotgun-name = Pilskur -common-abilities-bow-shotgun-desc = Skjuter iväg en skur av pilar. -common-abilities-staff-fireshockwave-name = Eldens ring -common-abilities-staff-fireshockwave-desc = Tänder eld på marken med en eldig stötvåg. -common-abilities-sceptre-wardingaura-name = Vårdande Aura -common-abilities-sceptre-wardingaura-desc = Skyddar dina allierade mot fiendens attacker. -common-abilities-unknown-name = Förmågan har ingen titel -common-abilities-unknown-desc = Förmågan har ingen beskrivning \ No newline at end of file +common-abilities-debug-possess = Besittningspil + .desc = Skjuter en förgiftad pil. Låter dig kontrollera ditt mål. +common-abilities-sword-spin = Virvelvind + .desc = Flytta dig framåt medan du snurrar med ditt svärd. +common-abilities-axe-leap = Yxhopp + .desc = Ett hopp med det skärande språnget riktat mot pekarens position. +common-abilities-hammer-leap = Nederslag + .desc = En attack som träffar ett område och knuffar fiender. Hoppar mot pekarens position. +common-abilities-bow-shotgun = Pilskur + .desc = Skjuter iväg en skur av pilar. +common-abilities-staff-fireshockwave = Eldens ring + .desc = Tänder eld på marken med en eldig stötvåg. +common-abilities-sceptre-wardingaura = Vårdande Aura + .desc = Skyddar dina allierade mot fiendens attacker. diff --git a/assets/voxygen/i18n/uk_UA/hud/ability.ftl b/assets/voxygen/i18n/uk_UA/hud/ability.ftl index 9962c8dfa2..54916957d2 100644 --- a/assets/voxygen/i18n/uk_UA/hud/ability.ftl +++ b/assets/voxygen/i18n/uk_UA/hud/ability.ftl @@ -1,16 +1,14 @@ -common-abilities-debug-possess-name = Заклинаюча Стріла -common-abilities-debug-possess-desc = Стріляє отруйною стрілою. Дає тобі контроль над ціллю. -common-abilities-sword-spin-name = Буревій -common-abilities-sword-spin-desc = Рушай вперед кружляючи з мечем. -common-abilities-axe-leap-name = Стрибок Сокири -common-abilities-axe-leap-desc = Стрибок з рубаним ударом, слідує за курсором. -common-abilities-hammer-leap-name = Погром -common-abilities-hammer-leap-desc = Атака по області. Стрибок спрямований за курсором. -common-abilities-bow-shotgun-name = Стріловик -common-abilities-bow-shotgun-desc = Постріл купою стріл за раз. -common-abilities-staff-fireshockwave-name = Кільце Вогню -common-abilities-staff-fireshockwave-desc = Підпалює землю вогненною ударною хвилєю. -common-abilities-sceptre-wardingaura-name = Захисна Аура -common-abilities-sceptre-wardingaura-desc = Укріплює тебе і твоїх спільників силами природи на деякий час. -common-abilities-unknown-name = Неназвана Здатність -common-abilities-unknown-desc = Здатність без опису \ No newline at end of file +common-abilities-debug-possess = Заклинаюча Стріла + .desc = Стріляє отруйною стрілою. Дає тобі контроль над ціллю. +common-abilities-sword-spin = Буревій + .desc = Рушай вперед кружляючи з мечем. +common-abilities-axe-leap = Стрибок Сокири + .desc = Стрибок з рубаним ударом, слідує за курсором. +common-abilities-hammer-leap = Погром + .desc = Атака по області. Стрибок спрямований за курсором. +common-abilities-bow-shotgun = Стріловик + .desc = Постріл купою стріл за раз. +common-abilities-staff-fireshockwave = Кільце Вогню + .desc = Підпалює землю вогненною ударною хвилєю. +common-abilities-sceptre-wardingaura = Захисна Аура + .desc = Укріплює тебе і твоїх спільників силами природи на деякий час. diff --git a/voxygen/i18n/src/lib.rs b/voxygen/i18n/src/lib.rs index 3a4f2b4835..2125aa486b 100644 --- a/voxygen/i18n/src/lib.rs +++ b/voxygen/i18n/src/lib.rs @@ -86,6 +86,26 @@ impl Language { Some(msg) } + fn try_attr<'a>( + &'a self, + key: &str, + attr: &str, + args: Option<&'a FluentArgs>, + ) -> Option> { + let bundle = &self.bundle; + let msg = bundle.get_message(key)?; + let attr = msg.get_attribute(attr)?; + let attr = attr.value(); + + let mut errs = Vec::new(); + let msg = bundle.format_pattern(attr, args, &mut errs); + for err in errs { + tracing::error!("err: {err} for {key}"); + } + + Some(msg) + } + fn try_variation<'a>( &'a self, key: &str, @@ -291,6 +311,10 @@ impl LocalizationGuard { .unwrap_or_else(|| Cow::Owned(key.to_owned())) } + /// Get a localized text from the variation of given key + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). pub fn try_variation(&self, key: &str, seed: u16) -> Option> { self.active.try_variation(key, seed, None).or_else(|| { self.fallback @@ -299,11 +323,22 @@ impl LocalizationGuard { }) } + /// Get a localized text from the variation of given key + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). + /// If the key is not present in the localization object + /// then the key itself is returned. pub fn get_variation(&self, key: &str, seed: u16) -> Cow { self.try_variation(key, seed) .unwrap_or_else(|| Cow::Owned(key.to_owned())) } + /// Get a localized text from the variation of given key with given + /// arguments + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). pub fn try_variation_ctx<'a>( &'a self, key: &str, @@ -325,11 +360,77 @@ impl LocalizationGuard { }) } + /// Get a localized text from the variation of given key with given + /// arguments + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). + /// If the key is not present in the localization object + /// then the key itself is returned. pub fn get_variation_ctx<'a>(&'a self, key: &str, seed: u16, args: &'a FluentArgs) -> Cow { self.try_variation_ctx(key, seed, args) .unwrap_or_else(|| Cow::Owned(key.to_owned())) } + /// Get a localized text from the given key by given attribute + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). + pub fn try_attr(&self, key: &str, attr: &str) -> Option> { + self.active.try_attr(key, attr, None).or_else(|| { + self.fallback + .as_ref() + .and_then(|fb| fb.try_attr(key, attr, None)) + }) + } + + /// Get a localized text from the given key by given attribute + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). + /// If the key is not present in the localization object + /// then the key itself is returned. + pub fn get_attr(&self, key: &str, attr: &str) -> Cow { + self.try_attr(key, attr) + .unwrap_or_else(|| Cow::Owned(format!("{key}.{attr}"))) + } + + /// Get a localized text from the given key by given attribute and arguments + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). + pub fn try_attr_ctx<'a>( + &'a self, + key: &str, + attr: &str, + args: &'a FluentArgs, + ) -> Option> { + self.active + .try_attr(key, attr, Some(args)) + .or_else(|| { + self.fallback + .as_ref() + .and_then(|fb| fb.try_attr(key, attr, Some(args))) + }) + .map(|x| { + // NOTE: + // Hack. Remove Unicode Directionality Marks, conrod doesn't support them. + let res = x.replace('\u{2068}', "").replace('\u{2069}', ""); + Cow::Owned(res) + }) + } + + /// Get a localized text from the given key by given attribute and arguments + /// + /// First lookup is done in the active language, second in + /// the fallback (if present). + /// If the key is not present in the localization object + /// then the key itself is returned. + pub fn get_attr_ctx<'a>(&'a self, key: &str, attr: &str, args: &'a FluentArgs) -> Cow { + self.try_attr_ctx(key, attr, args) + .unwrap_or_else(|| Cow::Owned(format!("{key}.{attr}"))) + } + #[must_use] pub fn fonts(&self) -> &Fonts { &self.active.fonts } diff --git a/voxygen/src/hud/util.rs b/voxygen/src/hud/util.rs index c5c5393b25..2e8d47561c 100644 --- a/voxygen/src/hud/util.rs +++ b/voxygen/src/hud/util.rs @@ -359,22 +359,7 @@ pub fn ability_description<'a>( ability_id: &str, loc: &'a Localization, ) -> (Cow<'a, str>, Cow<'a, str>) { - // TODO: Use fluent attribute mechanic - let (name, desc) = ( - format!("{}.name", ability_id).replace('.', "-"), - format!("{}.desc", ability_id).replace('.', "-"), - ); + let ability = ability_id.replace('.', "-"); - // 1) Try localize ability - // 2) If not, say that ability is unknown - // 3) If unknown key is missed, just return id - // TODO: better algorithm? - ( - loc.try_msg(&name) - .or_else(|| loc.try_msg("common-abilities-unknown-name")) - .unwrap_or(Cow::Owned(name)), - loc.try_msg(&desc) - .or_else(|| loc.try_msg("common-abilities-unknown-desc")) - .unwrap_or(Cow::Owned(desc)), - ) + (loc.get_msg(&ability), loc.get_attr(&ability, "desc")) }