2016-10-08 9 views
0

"Hello {0}"という文字列をローカライズしようとしています。ここで{0}はユーザーの名前です。私はこれを部分的に行う方法を知っています。 x:Uid "Welcome"でXAMLにTextBlockを作成し、Welcome.Textという名前のリソースと "Hello {0}"の値を持つリソースを含む.reswファイルを作成します。しかし、どのようにしてユーザー名を{0}に括弧で括ることができますか?同様に、「Created on 3/2/2016」や「You have $ 100.24」のような文字列が必要で、指定した値の書式設定を制御したいとします。私のアプリはMVVMを使っていて理想的にはパラメータ化された値をモデルから取り出すのですが、関係なく、string.Formatのようなものを使ってこれらの文字列を構築する方法はありますか?UWPでパラメータ化されたローカライズされた文字列を作成する方法

答えて

1

あなたはコードを経由して文字列を取得することができます

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

は、リソースファイルのパラメータに追加し、String.Formatのを使用します。

var myText = ResourceRetriever.GetString("MyText"); //Hello {0} 
myText = String.Format(myText, username); 
+0

だから、このシナリオでは、私はXを使用しないでください。ローカライズされた文字列をコントロールに取り込むためのUIDメカニズム – JustinM

+0

はい、この場合、x:Uid –

+0

のようなものは使用しないでください。パラメータの有無にかかわらず、文字列には別の方法が必要です。あなたが文字列フォーマッタでデータバインディングを使うことができれば、そして/またはこれのためにコンバータを使うほうがいいでしょう。パラメータの場合は、データバインディングを使用し、ビューモデルプロパティをバインディング式に含めます。しかし、パラメータがなければ、私は何とかRESWファイルにバインドします。 – JustinM

関連する問題