2016-09-18 49 views
1

我有一个多语言UWP应用程序,我需要本地化一些文本,包括格式样式。如何本地化UWP应用程序(.NET)中的富文本?

例如,我可以有这样的文字块:

<textblock x:Uid="MyText"> 
<Bold>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer leo turpis, rhoncus ac libero maximus, lacinia eleifend sapien.</Bold><LineBreak/> <Italic> Aenean pulvinar eros <Underline>sit amet sodales eleifend.</Underline></Italic> <LineBreak/><Bold>Aliquam feugiat sit amet risus ac venenatis.<LineBreak/> Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.<Bold><LineBreak/><Hyperlink NavigateUri="https://stackoverflow.com"> Fusce fermentum eleifend leo non pulvinar.</Hyperlink> 
</textblock> 

要本地化我创建了一个“MyText.Text”记录的文本块是resw文件,但问题是,我不能把XAML中resw。

有一种方法或本地化.NET/UWP富文本模式?

+0

[全球化和本地化](https://msdn.microsoft.com/en-us/windows/ UWP /全球化/全球化门户)。 – IInspectable

+0

@IInspectable,我已经阅读文档,我本地化的所有字符串,但我无法本地化格式的文本。 –

+0

我不明白,为什么格式化会有所作为。这个过程是不是一样的(除非你不翻译格式化指令)? – IInspectable

回答

0

本地化格式化XAML使用UID自动是不可能的,但动态XAML可以通过从.resw文件C#代码被加载。

例如,在resw我有钥匙MY_FORMATTED_XAML该值:

<Span Name="SPAN_NAME" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
     <Run>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sodales augue sit amet eros cursus, vitae tincidunt velit dictum. Vivamus in dolor sapien. Nunc ac dictum nulla.</Run> 
     <LineBreak/> 
     <Run Text="------------"/> 
     <LineBreak/> 
     <Run> 
     Ut mollis massa ut tortor commodo cursus. Etiam at nisl eu lectus ornare iaculis. Sed consequat dignissim sapien, a tincidunt dolor rutrum at. Suspendisse accumsan eget ante ac aliquet. Nulla non dictum nisi. Nam ultrices libero ut orci pretium, finibus mollis mauris varius. Duis suscipit sapien cursus sagittis blandit. Donec hendrerit varius facilisis.               
     </Run> 
     <LineBreak/> 
     <LineBreak/> 
     <Run> 
      <Bold>This is a sample for stackoverflow</Bold> 
     </Run>  
     <LineBreak/>  
     <Run>  
      Nunc mollis porttitor arcu ac mattis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed lacinia mattis enim, a tincidunt nisi. Quisque accumsan, sapien quis fringilla pharetra, purus metus maximus velit, ac aliquam enim justo et ante. Aliquam malesuada at velit vel consequat.     
     </Run>&#160; 
<Italic>License:</Italic> 
     <Hyperlink NavigateUri="http://unlicense.org">Unlicense 2016.</Hyperlink> 
     <LineBreak/> 

    </Span> 

在C#中我有一个辅助类加载资源字符串:

public static class ResourceRetriever 
{ 
    private static ResourceMap _resourceMap = null; 
    public static ResourceMap ResourceMap 
    { 
     get 
     { 
      if (_resourceMap == null) 
      { 
       _resourceMap= Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap;      
      } 
      return _resourceMap; 
     } 
    } 

    public static string GetString(string key) 
    { 
     return ResourceMap?.GetValue("Resources/" + key, new ResourceContext())?.ValueAsString; 
    } 

    public static string GetString(string key, ResourceContext context) 
    { 
     return ResourceMap?.GetValue("Resources/"+key, context)?.ValueAsString; 
    } 
} 

我加载与动态XAML此代码:

String dynamicXaml = ResourceRetriever.GetString("MY_FORMATTED_XAML"); 
Span span = XamlReader.Load(dynamicXaml) as Span; 
this.MyTextBlock.Inlines.Add(span);