c# - Asp.Net Core localization not working using VSCode -
i'm using vscode create asp.net core api. i'm trying day figure out how make localization work no results. when exact same thing in visual studio 2015 community edition works fine. not vscode...
so created following super simple project simplest structure in vscode:
i'm using postman send http on http://localhost:5000/app. result json this:
{ "name": "test_value", "value": "test_value", "resourcenotfound": true } the vs community project simillar:
the result json (the right one):
{ "name": "test_value", "value": "this test value!", "resourcenotfound": false } could figure out why not working inside vscode? in both cases running kestrel, both projects complile fine, both have exact same following source code. problem there in windows , in linux development enviroment. drives me crazy!
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 primary goals of format allow simple xml format human readable. generation , parsing of various data types done through typeconverter classes associated 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 long string</value><comment>this 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 byte array form of .net framework object]</value> <comment>this comment</comment> </data> there number of "resheader" rows contain simple name/value pairs. each data row contains name, , value. row contains type or mimetype. type corresponds .net class support text/value conversion through typeconverter architecture. classes don't support serialized , stored mimetype set. mimetype used serialized objects, , tells resxresourcereader how depersist object. not extensible. given mimetype value must set accordingly: note - application/x-microsoft.net.object.binary.base64 format resxresourcewriter generate, reader can read of formats listed below. mimetype: application/x-microsoft.net.object.binary.base64 value : object must serialized : system.runtime.serialization.formatters.binary.binaryformatter : , encoded base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 value : object must serialized : system.runtime.serialization.formatters.soap.soapformatter : , encoded base64 encoding. mimetype: application/x-microsoft.net.object.bytearray.base64 value : object must serialized byte array : using system.componentmodel.typeconverter : , encoded 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 test value!</value> </data> </root>
i figured out!
the problem name of project's folder different root namespace! project's folder name my-app. name picked github repository. my-app name of project's folder created when cloned repository and, also, name of produced assembly (my-app.dll) inherits it's name project folder. however, root namespace picked myapp.
the reason had no problem vs community when created project picked solution name myapp , project's folder name , root namespace too!
i not sure if actual problem folder's name or name of produced assembly. guess it's assembly name.
so, bottomline, localization work the project's folder name (that name of produced assembly too) must same root namespace!


Comments
Post a Comment