2016-09-16 19 views
1

私はAsp.Net Core APIを作成するためにVSCodeを使用しています。私は一日中、ローカリゼーションを動作させる方法を理解するために努力していますが、結果はありません。私がVisual Studio 2015 Community Editionで全く同じことをすると、すべてうまく動作します。私はhttp://localhost:5000/appにHTTP GETを送信するために郵便配達を使用していAsp.Net VSCodeでコアのローカライズが動作しない

enter image description here

:しかしVSCodeで...

は、だから私はVSCodeで、最も単純な構造では、次のスーパー単純なプロジェクトを作成していません。結果JSONはこれです:

{ 
    "name": "test_value", 
    "value": "test_value", 
    "resourceNotFound": true 
} 

VSコミュニティプロジェクトがsimillarです:

enter image description here

結果、JSONは、この(右1)である。

{ 
    "name": "test_value", 
    "value": "This is the test value!", 
    "resourceNotFound": false 
} 

でした誰フィギュアなぜこれがVSCodeから内部で動作していないのですか?どちらのケースでも、私はKestrelを実行しています。両方のプロジェクトがうまくコンパイルされていて、どちらもソースコードとまったく同じです。問題はWindowsとLinux開発環境にあります。これは私を狂ってしまう!

project.json

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.1", 
     "type": "platform" 
    }, 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 
    "Microsoft.AspNetCore.Mvc": "1.0.1" 
    }, 
    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6" 
     ] 
    } 
    }, 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 
    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 
    "tooling": { 
    "defaultNamespace": "Trans" 
    } 
} 

のProgram.cs

using System.IO; 
using Microsoft.AspNetCore.Hosting; 

namespace Trans 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseStartup<Startup>() 
       .Build(); 

      host.Run(); 
     } 
    } 
} 

Startup.cs

using Microsoft.AspNetCore.Builder; 
using Microsoft.Extensions.DependencyInjection; 

namespace Trans 
{ 
    public class Startup 
    { 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddLocalization(options => options.ResourcesPath = "Resources"); 
      services.AddMvc(); 
     } 

     public void Configure(IApplicationBuilder app) 
     { 
      app.UseMvc(); 
     } 
    } 
} 

AppController.cs

using Microsoft.AspNetCore.Mvc; 
using Microsoft.Extensions.Localization; 

namespace Trans.Controllers 
{ 
    [Route("app")] 
    public class AppController : Controller 
    { 
     IStringLocalizer<AppController> _localizer; 

     public AppController(IStringLocalizer<AppController> localizer) 
     { 
      _localizer = localizer; 
     } 

     [HttpGet] 
     public IActionResult Get() 
     { 
      return Json(_localizer["test_value"]); 
     } 
    } 
} 

Controllers.AppController.resx

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <!-- 
    Microsoft ResX Schema 

    Version 2.0 

    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types. 

    Example: 

    ... ado.net/XML headers & schema ... 
    <resheader name="resmimetype">text/microsoft-resx</resheader> 
    <resheader name="version">2.0</resheader> 
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> 
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> 
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> 
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> 
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> 
     <value>[base64 mime encoded serialized .NET Framework object]</value> 
    </data> 
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> 
     <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> 
     <comment>This is a comment</comment> 
    </data> 

    There are any number of "resheader" rows that contain simple 
    name/value pairs. 

    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set. 

    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly: 

    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below. 

    mimetype: application/x-microsoft.net.object.binary.base64 
    value : The object must be serialized with 
      : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
      : and then encoded with base64 encoding. 

    mimetype: application/x-microsoft.net.object.soap.base64 
    value : The object must be serialized with 
      : System.Runtime.Serialization.Formatters.Soap.SoapFormatter 
      : and then encoded with base64 encoding. 

    mimetype: application/x-microsoft.net.object.bytearray.base64 
    value : The object must be serialized into a byte array 
      : using a System.ComponentModel.TypeConverter 
      : and then encoded with base64 encoding. 
    --> 
    <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> 
    <xsd:element name="root" msdata:IsDataSet="true"> 
     <xsd:complexType> 
     <xsd:choice maxOccurs="unbounded"> 
      <xsd:element name="metadata"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="value" type="xsd:string" minOccurs="0" /> 
       </xsd:sequence> 
       <xsd:attribute name="name" use="required" type="xsd:string" /> 
       <xsd:attribute name="type" type="xsd:string" /> 
       <xsd:attribute name="mimetype" type="xsd:string" /> 
       <xsd:attribute ref="xml:space" /> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="assembly"> 
      <xsd:complexType> 
       <xsd:attribute name="alias" type="xsd:string" /> 
       <xsd:attribute name="name" type="xsd:string" /> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="data"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> 
       <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> 
       </xsd:sequence> 
       <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> 
       <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> 
       <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> 
       <xsd:attribute ref="xml:space" /> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="resheader"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> 
       </xsd:sequence> 
       <xsd:attribute name="name" type="xsd:string" use="required" /> 
      </xsd:complexType> 
      </xsd:element> 
     </xsd:choice> 
     </xsd:complexType> 
    </xsd:element> 
    </xsd:schema> 
    <resheader name="resmimetype"> 
    <value>text/microsoft-resx</value> 
    </resheader> 
    <resheader name="version"> 
    <value>2.0</value> 
    </resheader> 
    <resheader name="reader"> 
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 
    </resheader> 
    <resheader name="writer"> 
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 
    </resheader> 
    <data name="test_value" xml:space="preserve"> 
    <value>This is the test value!</value> 
    </data> 
</root> 

答えて

0

私は最終的にこれを考え出しました!

問題は、プロジェクトのフォルダの名前がルート名前空間と異なることでした。プロジェクトのフォルダ名は、my-appのようなものでした。それが私のGithubリポジトリのために選んだ名前でした。だから、、私はまた、リポジトリをクローン化し、ときに作成されたプロジェクトのフォルダの名前、生成されたアセンブリの名前(私-app.dll)それを継承するから名前ですが、私のアプリましたプロジェクトフォルダ。しかし、私が選んだルート名前空間はMyAppでした。

私はVS Communityに問題がなかったのは、私がプロジェクトを作成したときに私はその名前のMyAppという名前のプロジェクトを選んだので、それもプロジェクトのフォルダ名とルート名前空間でした!

実際の問題がフォルダの名前であるか、生成されたアセンブリの名前であるかわかりません。私はそれがアセンブリ名だと思います。

ので、プロジェクトのフォルダ名を動作させるためのローカライズbottomlineは、(それも生成されたアセンブリの名前です)ルート名前空間と同じでなければなりません!

関連する問題