Маловероятно, что будет одно решение этой проблемы, потому что есть много разных способов, которыми она может проявиться, и есть так много разных способов ее решения.
Если вы Microsoft, решение состоит в том, чтобы поместить все ваши шаблоны в словарь ресурсов, создать проект, который может использовать Expression Blend для их представления, а затем заставить ваших переводчиков работать с Blend (и, возможно, с кем-то, кто может помочь они используют его), чтобы перевести текст в словарь ресурсов, переупорядочив элементы в шаблоне, где есть идиоматические различия в порядке слов. Это, конечно, самое дорогое решение, но оно имеет то преимущество, что позволяет решить проблемы с форматированием (например, кто-то забыл, что текст на французском языке занимает примерно на 20% больше места, чем текст на английском языке), одновременно с переводом пользовательского интерфейса. Он также имеет то преимущество, что обрабатывает каждую презентацию текста в пользовательском интерфейсе, а не только презентации, которые создаются путем объединения вместе текстовых блоков.
Если вам действительно нужно только исправить стеки текстовых блоков, вы можете создать простое XML-представление размеченного текста и использовать XSLT для создания своего XAML из файла в этом формате. Например, что-то вроде:
<div id="LogoutTime" class="StackPanel">
The user
<strong><span class="User">Bob</span><strong>
logged out at
<strong><span class="Time">22:17</span></strong>
.
</div>
По удивительному стечению обстоятельств этот формат разметки также можно просматривать в веб-браузере, поэтому его можно редактировать с помощью действительно широкого спектра инструментов и корректировать без использования, скажем, Expression Blend. И относительно просто перевести обратно на XAML:
<xsl:template match="div[@class='StackPanel']">
<DataTemplate x:Key="{@id}">
<StackPanel Orientation="Horizontal">
<xsl:apply-templates select="node()"/>
</StackPanel>
</DataTemplate>
</xsl:template>
<xsl:template match="div/text()">
<TextBlock Text="{.}"/>
</xsl:template>
<xsl:template match="strong/span">
<TextBlock FontWeight="Bold">
<xsl:attribute name="Text">
<xsl:text>{Binding </xsl:text>
<xsl:value-of select="@class"/>
<xsl:text>}</xsl:text>
</xsl:attribute>
</TextBlock>
</xsl:template>