Proposed corrections

To address this shortcoming Schematron should make the abstraction of a specific message and its natural language content explicit. Rather than treating localized variants as different diagnostics, they should be treated as one diagnostic with different localized variants. A sch:message element that wraps the mixed-content templates would do the trick.

Figure 4. Multi-lingual schema, improved

<sch:schema xmlns:sch="">
    <sch:title>Improved Example of Multi-Lingual Schema</sch:title>
        <sch:rule context="dog">
            <sch:assert test="bone" diagnostics="bone"/>
        <sch:diagnostic id="bone">
            <sch:message xml:lang="en">A dog should have a bone.</sch:message>
            <sch:message xml:lang="de">Ein Hund sollte ein Bein haben.</sch:message>