2016-09-18 9 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ファイルですが、問題は、私はreswでXAMLを置くことができないということです。

.NET/UWPでリッチテキストをローカライズする方法やパターンがありますか?

+0

[グローバル化とローカリゼーション](https://msdn.microsoft.com/en-us/windows/) uwp/globalizing/globalizing-portal)を参照してください。 – IInspectable

+0

@IInspectable、私はすでにドキュメントを読みましたが、すべての文字列をローカライズしましたが、書式付きテキストをローカライズできません。 –

+0

私は理解していない、なぜフォーマットを変更するか。プロセスは同じではありません(ただし、書式設定ディレクティブを翻訳しない点を除きます)。 – IInspectable

答えて

0

フォーマットされたXAMLをUidで自動的にローカライズすることはできませんが、ダイナミックXAMLは.reswファイルのC#コードを使用してロードできます。例えば

reswに私は、この値を持つMY_FORMATTED_XAMLキーがあります:私はリソース文字列をロードするためにヘルパークラスを持つC#で

<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> 

を:

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); 
関連する問題