diff --git a/Rules/Languages/de/SharedRules/general.yaml b/Rules/Languages/de/SharedRules/general.yaml index a5792c745..4c0f252fb 100644 --- a/Rules/Languages/de/SharedRules/general.yaml +++ b/Rules/Languages/de/SharedRules/general.yaml @@ -317,7 +317,23 @@ then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))", ct: " "] else: [x: "concat('\uF8FE', $Word)", ct: "s"] - +# Currency symbols precede amounts in MathML but are spoken after them in German: $ 3 -> 3 dollar. +- name: currency + tag: mrow + match: "count(*)=3 and DefinitionValue(*[1], 'Speech', 'CurrencySymbols') != ''" + variables: + - IsSingular: "*[3][self::m:mn and .=1] and *[2]='\u2062'" + - CurrencyWord: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')" + replace: + - bookmark: "*[3]/@id" + - x: "*[3]" + - test: + - if: "$IsSingular" + then: [x: "$CurrencyWord"] + - else_if: "DefinitionValue($CurrencyWord, 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue($CurrencyWord, 'Speech', 'PluralForms')"] + else: [x: "$CurrencyWord"] + - name: sin tag: mi match: ".='sin'" diff --git a/tests/Languages/de/units.rs b/tests/Languages/de/units.rs index fffd6ac5a..605ac2ed1 100644 --- a/tests/Languages/de/units.rs +++ b/tests/Languages/de/units.rs @@ -103,6 +103,23 @@ fn non_si_unit_plural_regression() -> Result<()> { Ok(()) } +#[test] +fn currency_symbol_precedes_amount() -> Result<()> { + // German speaks a prefixed currency symbol after its amount. + let expr = r#"$3"#; + test("de", "ClearSpeak", expr, "3 dollar")?; + test("de", "SimpleSpeak", expr, "3 dollar")?; + + let expr = r#"€1"#; + test("de", "ClearSpeak", expr, "1 euro")?; + test("de", "SimpleSpeak", expr, "1 euro")?; + + let expr = r#"£4,7"#; + test("de", "ClearSpeak", expr, "4,7 pfund")?; + test("de", "SimpleSpeak", expr, "4,7 pfund")?; + Ok(()) +} + /* #[test] fn si_base_with_prefixes() -> Result<()> {