diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index d45bd5a1f8..0000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,17 +0,0 @@ -init: -- git config --global core.autocrlf true -branches: - only: - - master - - /^release\/.*$/ - - /^(.*\/)?ci-.*$/ -build_script: -- ps: .\run.ps1 default-build -clone_depth: 1 -environment: - global: - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - DOTNET_CLI_TELEMETRY_OPTOUT: 1 -test: 'off' -deploy: 'off' -os: Visual Studio 2017 diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index d4ee1cb7f3..0000000000 --- a/.gitattributes +++ /dev/null @@ -1,52 +0,0 @@ -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain - -*.jpg binary -*.png binary -*.gif binary - -*.cs text=auto diff=csharp -*.vb text=auto -*.resx text=auto -*.c text=auto -*.cpp text=auto -*.cxx text=auto -*.h text=auto -*.hxx text=auto -*.py text=auto -*.rb text=auto -*.java text=auto -*.html text=auto -*.htm text=auto -*.css text=auto -*.scss text=auto -*.sass text=auto -*.less text=auto -*.js text=auto -*.lisp text=auto -*.clj text=auto -*.sql text=auto -*.php text=auto -*.lua text=auto -*.m text=auto -*.asm text=auto -*.erl text=auto -*.fs text=auto -*.fsx text=auto -*.hs text=auto - -*.csproj text=auto -*.vbproj text=auto -*.fsproj text=auto -*.dbproj text=auto -*.sln text=auto eol=crlf - -*.sh eol=lf diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 101a084f0a..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,3 +0,0 @@ -THIS ISSUE TRACKER IS CLOSED - please log new issues here: https://github.com/aspnet/Home/issues - -For information about this change, see https://github.com/aspnet/Announcements/issues/283 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1ce76e50c8..0000000000 --- a/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -[Oo]bj/ -[Bb]in/ -TestResults/ -.nuget/ -.build/ -.testPublish/ -*.sln.ide/ -_ReSharper.*/ -packages/ -artifacts/ -PublishProfiles/ -.vs/ -debugSettings.json -project.lock.json -*.user -*.suo -*.cache -*.docstates -_ReSharper.* -nuget.exe -*net45.csproj -*net451.csproj -*k10.csproj -*.psess -*.vsp -*.pidb -*.userprefs -*DS_Store -*.ncrunchsolution -*.*sdf -*.ipch -*.sln.ide -*launchSettings.json -**/Resources/*.Designer.cs -.vscode/ -global.json diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ab3980055c..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: csharp -sudo: false -dist: trusty -env: - global: - - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - - DOTNET_CLI_TELEMETRY_OPTOUT: 1 -mono: none -os: -- linux -- osx -osx_image: xcode8.2 -addons: - apt: - packages: - - libunwind8 -branches: - only: - - master - - /^release\/.*$/ - - /^(.*\/)?ci-.*$/ -before_install: -- if test "$TRAVIS_OS_NAME" == "osx"; then brew update; brew install openssl; ln -s - /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/; ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib - /usr/local/lib/; fi -script: -- ./build.sh diff --git a/.vsts-pipelines/builds/ci-internal.yml b/.vsts-pipelines/builds/ci-internal.yml deleted file mode 100644 index c2c5336fd0..0000000000 --- a/.vsts-pipelines/builds/ci-internal.yml +++ /dev/null @@ -1,13 +0,0 @@ -trigger: -- master -- release/* - -resources: - repositories: - - repository: buildtools - type: git - name: aspnet-BuildTools - ref: refs/heads/master - -phases: -- template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/.vsts-pipelines/builds/ci-public.yml b/.vsts-pipelines/builds/ci-public.yml deleted file mode 100644 index 507c89b025..0000000000 --- a/.vsts-pipelines/builds/ci-public.yml +++ /dev/null @@ -1,15 +0,0 @@ -trigger: -- master -- release/* - -# See https://github.com/aspnet/BuildTools -resources: - repositories: - - repository: buildtools - type: github - endpoint: DotNet-Bot GitHub Connection - name: aspnet/BuildTools - ref: refs/heads/master - -phases: -- template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index eac4268e4c..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -Contributing -====== - -Information on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/Home/blob/master/CONTRIBUTING.md) in the Home repo. diff --git a/Directory.Build.props b/Directory.Build.props deleted file mode 100644 index 2c0546536f..0000000000 --- a/Directory.Build.props +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - https://github.com/aspnet/Localization - git - $(MSBuildThisFileDirectory) - $(MSBuildThisFileDirectory)build\Key.snk - true - true - - diff --git a/Directory.Build.targets b/Directory.Build.targets deleted file mode 100644 index 866bbb6d63..0000000000 --- a/Directory.Build.targets +++ /dev/null @@ -1,6 +0,0 @@ - - - $(MicrosoftNETCoreAppPackageVersion) - $(NETStandardLibrary20PackageVersion) - - diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index b3b180cd51..0000000000 --- a/LICENSE.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) .NET Foundation and Contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Localization.sln b/Localization.sln deleted file mode 100644 index 28d7473058..0000000000 --- a/Localization.sln +++ /dev/null @@ -1,122 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.10 -MinimumVisualStudioVersion = 15.0.26730.03 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FB313677-BAB3-4E49-8CDB-4FA4A9564767}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization", "src\Microsoft.Extensions.Localization\Microsoft.Extensions.Localization.csproj", "{29743CFF-120E-40EB-9B89-5818425946FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization", "src\Microsoft.AspNetCore.Localization\Microsoft.AspNetCore.Localization.csproj", "{23E3BC23-3464-4D9B-BF78-02CB2182BEF0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization.Abstractions", "src\Microsoft.Extensions.Localization.Abstractions\Microsoft.Extensions.Localization.Abstractions.csproj", "{A1FCF259-70F6-4605-AA2D-E4B356BE771A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{79878809-8D1C-4BD4-BA99-F1F13FF96FD8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocalizationSample", "samples\LocalizationSample\LocalizationSample.csproj", "{55D9501F-15B9-4339-A0AB-6082850E5FCE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{B723DB83-A670-4BCB-95FB-195361331AD2}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization.Tests", "test\Microsoft.Extensions.Localization.Tests\Microsoft.Extensions.Localization.Tests.csproj", "{287AD58D-DF34-4F16-8616-FD78FA1CADF9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Tests", "test\Microsoft.AspNetCore.Localization.Tests\Microsoft.AspNetCore.Localization.Tests.csproj", "{19A2A931-5C60-47A0-816A-0DC9C4CE5736}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocalizationWebsite", "test\LocalizationWebsite\LocalizationWebsite.csproj", "{EF6C7431-2FB8-4396-8947-F50F31689AF4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.FunctionalTests", "test\Microsoft.AspNetCore.Localization.FunctionalTests\Microsoft.AspNetCore.Localization.FunctionalTests.csproj", "{B1B441BA-3AC8-49F8-850D-E5A178E77DE2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResourcesClassLibraryWithAttribute", "test\ResourcesClassLibraryWithAttribute\ResourcesClassLibraryWithAttribute.csproj", "{F27639B9-913E-43AF-9D64-BBD98D9A420A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResourcesClassLibraryNoAttribute", "test\ResourcesClassLibraryNoAttribute\ResourcesClassLibraryNoAttribute.csproj", "{34740578-D5B5-4FB4-AFD4-5E87B5443E20}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing", "src\Microsoft.AspNetCore.Localization.Routing\Microsoft.AspNetCore.Localization.Routing.csproj", "{E1B8DA18-7885-40ED-94ED-881BB0804F23}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing.Tests", "test\Microsoft.AspNetCore.Localization.Routing.Tests\Microsoft.AspNetCore.Localization.Routing.Tests.csproj", "{375B000B-5DC0-4D16-AC0C-A5432D8E7581}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{169AE1E1-72E6-45FB-B986-31E9A14DE3A9}" - ProjectSection(SolutionItems) = preProject - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {29743CFF-120E-40EB-9B89-5818425946FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29743CFF-120E-40EB-9B89-5818425946FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29743CFF-120E-40EB-9B89-5818425946FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29743CFF-120E-40EB-9B89-5818425946FA}.Release|Any CPU.Build.0 = Release|Any CPU - {23E3BC23-3464-4D9B-BF78-02CB2182BEF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23E3BC23-3464-4D9B-BF78-02CB2182BEF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23E3BC23-3464-4D9B-BF78-02CB2182BEF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23E3BC23-3464-4D9B-BF78-02CB2182BEF0}.Release|Any CPU.Build.0 = Release|Any CPU - {A1FCF259-70F6-4605-AA2D-E4B356BE771A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1FCF259-70F6-4605-AA2D-E4B356BE771A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1FCF259-70F6-4605-AA2D-E4B356BE771A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1FCF259-70F6-4605-AA2D-E4B356BE771A}.Release|Any CPU.Build.0 = Release|Any CPU - {55D9501F-15B9-4339-A0AB-6082850E5FCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {55D9501F-15B9-4339-A0AB-6082850E5FCE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {55D9501F-15B9-4339-A0AB-6082850E5FCE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {55D9501F-15B9-4339-A0AB-6082850E5FCE}.Release|Any CPU.Build.0 = Release|Any CPU - {287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Release|Any CPU.Build.0 = Release|Any CPU - {19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Release|Any CPU.Build.0 = Release|Any CPU - {EF6C7431-2FB8-4396-8947-F50F31689AF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF6C7431-2FB8-4396-8947-F50F31689AF4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF6C7431-2FB8-4396-8947-F50F31689AF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF6C7431-2FB8-4396-8947-F50F31689AF4}.Release|Any CPU.Build.0 = Release|Any CPU - {B1B441BA-3AC8-49F8-850D-E5A178E77DE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1B441BA-3AC8-49F8-850D-E5A178E77DE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1B441BA-3AC8-49F8-850D-E5A178E77DE2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B1B441BA-3AC8-49F8-850D-E5A178E77DE2}.Release|Any CPU.Build.0 = Release|Any CPU - {F27639B9-913E-43AF-9D64-BBD98D9A420A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F27639B9-913E-43AF-9D64-BBD98D9A420A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F27639B9-913E-43AF-9D64-BBD98D9A420A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F27639B9-913E-43AF-9D64-BBD98D9A420A}.Release|Any CPU.Build.0 = Release|Any CPU - {34740578-D5B5-4FB4-AFD4-5E87B5443E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34740578-D5B5-4FB4-AFD4-5E87B5443E20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34740578-D5B5-4FB4-AFD4-5E87B5443E20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34740578-D5B5-4FB4-AFD4-5E87B5443E20}.Release|Any CPU.Build.0 = Release|Any CPU - {E1B8DA18-7885-40ED-94ED-881BB0804F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1B8DA18-7885-40ED-94ED-881BB0804F23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1B8DA18-7885-40ED-94ED-881BB0804F23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1B8DA18-7885-40ED-94ED-881BB0804F23}.Release|Any CPU.Build.0 = Release|Any CPU - {375B000B-5DC0-4D16-AC0C-A5432D8E7581}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {375B000B-5DC0-4D16-AC0C-A5432D8E7581}.Debug|Any CPU.Build.0 = Debug|Any CPU - {375B000B-5DC0-4D16-AC0C-A5432D8E7581}.Release|Any CPU.ActiveCfg = Release|Any CPU - {375B000B-5DC0-4D16-AC0C-A5432D8E7581}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {29743CFF-120E-40EB-9B89-5818425946FA} = {FB313677-BAB3-4E49-8CDB-4FA4A9564767} - {23E3BC23-3464-4D9B-BF78-02CB2182BEF0} = {FB313677-BAB3-4E49-8CDB-4FA4A9564767} - {A1FCF259-70F6-4605-AA2D-E4B356BE771A} = {FB313677-BAB3-4E49-8CDB-4FA4A9564767} - {55D9501F-15B9-4339-A0AB-6082850E5FCE} = {79878809-8D1C-4BD4-BA99-F1F13FF96FD8} - {287AD58D-DF34-4F16-8616-FD78FA1CADF9} = {B723DB83-A670-4BCB-95FB-195361331AD2} - {19A2A931-5C60-47A0-816A-0DC9C4CE5736} = {B723DB83-A670-4BCB-95FB-195361331AD2} - {EF6C7431-2FB8-4396-8947-F50F31689AF4} = {B723DB83-A670-4BCB-95FB-195361331AD2} - {B1B441BA-3AC8-49F8-850D-E5A178E77DE2} = {B723DB83-A670-4BCB-95FB-195361331AD2} - {F27639B9-913E-43AF-9D64-BBD98D9A420A} = {B723DB83-A670-4BCB-95FB-195361331AD2} - {34740578-D5B5-4FB4-AFD4-5E87B5443E20} = {B723DB83-A670-4BCB-95FB-195361331AD2} - {E1B8DA18-7885-40ED-94ED-881BB0804F23} = {FB313677-BAB3-4E49-8CDB-4FA4A9564767} - {375B000B-5DC0-4D16-AC0C-A5432D8E7581} = {B723DB83-A670-4BCB-95FB-195361331AD2} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {23714C47-0F03-4BF3-9E01-1CC2AA537A46} - EndGlobalSection -EndGlobal diff --git a/NuGet.config b/NuGet.config deleted file mode 100644 index e32bddfd51..0000000000 --- a/NuGet.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/NuGetPackageVerifier.json b/NuGetPackageVerifier.json deleted file mode 100644 index b153ab1515..0000000000 --- a/NuGetPackageVerifier.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Default": { - "rules": [ - "DefaultCompositeRule" - ] - } -} \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 3547f19c29..0000000000 --- a/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Localization [Archived] -======================= - -**This GitHub project has been archived.** Ongoing development on this project can be found in . - -Localization abstractions and implementations for ASP.NET Core applications. - -This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [AspNetCore](https://github.com/aspnet/AspNetCore) repo. diff --git a/build.cmd b/build.cmd deleted file mode 100644 index c0050bda12..0000000000 --- a/build.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@ECHO OFF -PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' default-build %*; exit $LASTEXITCODE" diff --git a/build.sh b/build.sh deleted file mode 100755 index 98a4b22765..0000000000 --- a/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs) -chmod +x "$DIR/run.sh"; sync -"$DIR/run.sh" default-build "$@" diff --git a/build/Key.snk b/build/Key.snk deleted file mode 100644 index e10e4889c1..0000000000 Binary files a/build/Key.snk and /dev/null differ diff --git a/build/dependencies.props b/build/dependencies.props deleted file mode 100644 index 20ab2e419e..0000000000 --- a/build/dependencies.props +++ /dev/null @@ -1,31 +0,0 @@ - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - 3.0.0-build-20181114.5 - 3.0.0-alpha1-10742 - 3.0.0-alpha1-10742 - 3.0.0-alpha1-10742 - 3.0.0-alpha1-10742 - 3.0.0-alpha1-10742 - 3.0.0-alpha1-10742 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 - 3.0.0-preview1-26907-05 - 15.6.1 - 4.10.0 - 2.0.3 - 2.3.1 - 2.4.0 - - - - diff --git a/build/repo.props b/build/repo.props deleted file mode 100644 index 11b348163e..0000000000 --- a/build/repo.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - Internal.AspNetCore.Universe.Lineup - https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json - - - - - - diff --git a/build/sources.props b/build/sources.props deleted file mode 100644 index 9215df9751..0000000000 --- a/build/sources.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - $(DotNetRestoreSources) - - $(RestoreSources); - https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; - https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json; - https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json; - - - $(RestoreSources); - https://api.nuget.org/v3/index.json; - - - diff --git a/korebuild-lock.txt b/korebuild-lock.txt deleted file mode 100644 index 73613543d0..0000000000 --- a/korebuild-lock.txt +++ /dev/null @@ -1,2 +0,0 @@ -version:3.0.0-build-20181114.5 -commithash:880e9a204d4ee4a18dfd83c9fb05a192a28bca60 diff --git a/korebuild.json b/korebuild.json deleted file mode 100644 index 8a276a7f35..0000000000 --- a/korebuild.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json", - "channel": "master" -} diff --git a/run.cmd b/run.cmd deleted file mode 100644 index d52d5c7e68..0000000000 --- a/run.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@ECHO OFF -PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' %*; exit $LASTEXITCODE" diff --git a/run.ps1 b/run.ps1 deleted file mode 100644 index 34604c7175..0000000000 --- a/run.ps1 +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/env powershell -#requires -version 4 - -<# -.SYNOPSIS -Executes KoreBuild commands. - -.DESCRIPTION -Downloads korebuild if required. Then executes the KoreBuild command. To see available commands, execute with `-Command help`. - -.PARAMETER Command -The KoreBuild command to run. - -.PARAMETER Path -The folder to build. Defaults to the folder containing this script. - -.PARAMETER Channel -The channel of KoreBuild to download. Overrides the value from the config file. - -.PARAMETER DotNetHome -The directory where .NET Core tools will be stored. - -.PARAMETER ToolsSource -The base url where build tools can be downloaded. Overrides the value from the config file. - -.PARAMETER Update -Updates KoreBuild to the latest version even if a lock file is present. - -.PARAMETER Reinstall -Re-installs KoreBuild - -.PARAMETER ConfigFile -The path to the configuration file that stores values. Defaults to korebuild.json. - -.PARAMETER ToolsSourceSuffix -The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores. - -.PARAMETER CI -Sets up CI specific settings and variables. - -.PARAMETER Arguments -Arguments to be passed to the command - -.NOTES -This function will create a file $PSScriptRoot/korebuild-lock.txt. This lock file can be committed to source, but does not have to be. -When the lockfile is not present, KoreBuild will create one using latest available version from $Channel. - -The $ConfigFile is expected to be an JSON file. It is optional, and the configuration values in it are optional as well. Any options set -in the file are overridden by command line parameters. - -.EXAMPLE -Example config file: -```json -{ - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json", - "channel": "master", - "toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools" -} -``` -#> -[CmdletBinding(PositionalBinding = $false)] -param( - [Parameter(Mandatory = $true, Position = 0)] - [string]$Command, - [string]$Path = $PSScriptRoot, - [Alias('c')] - [string]$Channel, - [Alias('d')] - [string]$DotNetHome, - [Alias('s')] - [string]$ToolsSource, - [Alias('u')] - [switch]$Update, - [switch]$Reinstall, - [string]$ToolsSourceSuffix, - [string]$ConfigFile = $null, - [switch]$CI, - [Parameter(ValueFromRemainingArguments = $true)] - [string[]]$Arguments -) - -Set-StrictMode -Version 2 -$ErrorActionPreference = 'Stop' - -# -# Functions -# - -function Get-KoreBuild { - - $lockFile = Join-Path $Path 'korebuild-lock.txt' - - if (!(Test-Path $lockFile) -or $Update) { - Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $lockFile $ToolsSourceSuffix - } - - $version = Get-Content $lockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1 - if (!$version) { - Write-Error "Failed to parse version from $lockFile. Expected a line that begins with 'version:'" - } - $version = $version.TrimStart('version:').Trim() - $korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version) - - if ($Reinstall -and (Test-Path $korebuildPath)) { - Remove-Item -Force -Recurse $korebuildPath - } - - if (!(Test-Path $korebuildPath)) { - Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version" - New-Item -ItemType Directory -Path $korebuildPath | Out-Null - $remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip" - - try { - $tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip" - Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix - if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) { - # Use built-in commands where possible as they are cross-plat compatible - Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath - } - else { - # Fallback to old approach for old installations of PowerShell - Add-Type -AssemblyName System.IO.Compression.FileSystem - [System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath) - } - } - catch { - Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore - throw - } - finally { - Remove-Item $tmpfile -ErrorAction Ignore - } - } - - return $korebuildPath -} - -function Join-Paths([string]$path, [string[]]$childPaths) { - $childPaths | ForEach-Object { $path = Join-Path $path $_ } - return $path -} - -function Get-RemoteFile([string]$RemotePath, [string]$LocalPath, [string]$RemoteSuffix) { - if ($RemotePath -notlike 'http*') { - Copy-Item $RemotePath $LocalPath - return - } - - $retries = 10 - while ($retries -gt 0) { - $retries -= 1 - try { - Invoke-WebRequest -UseBasicParsing -Uri $($RemotePath + $RemoteSuffix) -OutFile $LocalPath - return - } - catch { - Write-Verbose "Request failed. $retries retries remaining" - } - } - - Write-Error "Download failed: '$RemotePath'." -} - -# -# Main -# - -# Load configuration or set defaults - -$Path = Resolve-Path $Path -if (!$ConfigFile) { $ConfigFile = Join-Path $Path 'korebuild.json' } - -if (Test-Path $ConfigFile) { - try { - $config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json - if ($config) { - if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel } - if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource} - } - } - catch { - Write-Host -ForegroundColor Red $Error[0] - Write-Error "$ConfigFile contains invalid JSON." - exit 1 - } -} - -if (!$DotNetHome) { - $DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } ` - elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} ` - elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}` - else { Join-Path $PSScriptRoot '.dotnet'} -} - -if (!$Channel) { $Channel = 'master' } -if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' } - -# Execute - -$korebuildPath = Get-KoreBuild -Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1') - -try { - Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI - Invoke-KoreBuildCommand $Command @Arguments -} -finally { - Remove-Module 'KoreBuild' -ErrorAction Ignore -} diff --git a/run.sh b/run.sh deleted file mode 100755 index 4c1fed5646..0000000000 --- a/run.sh +++ /dev/null @@ -1,256 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -# -# variables -# - -RESET="\033[0m" -RED="\033[0;31m" -YELLOW="\033[0;33m" -MAGENTA="\033[0;95m" -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -[ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet" -verbose=false -update=false -reinstall=false -repo_path="$DIR" -channel='' -tools_source='' -tools_source_suffix='' -ci=false - -# -# Functions -# -__usage() { - echo "Usage: $(basename "${BASH_SOURCE[0]}") command [options] [[--] ...]" - echo "" - echo "Arguments:" - echo " command The command to be run." - echo " ... Arguments passed to the command. Variable number of arguments allowed." - echo "" - echo "Options:" - echo " --verbose Show verbose output." - echo " -c|--channel The channel of KoreBuild to download. Overrides the value from the config file.." - echo " --config-file The path to the configuration file that stores values. Defaults to korebuild.json." - echo " -d|--dotnet-home The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet." - echo " --path The directory to build. Defaults to the directory containing the script." - echo " -s|--tools-source|-ToolsSource The base url where build tools can be downloaded. Overrides the value from the config file." - echo " --tools-source-suffix|-ToolsSourceSuffix The suffix to append to tools-source. Useful for query strings." - echo " -u|--update Update to the latest KoreBuild even if the lock file is present." - echo " --reinstall Reinstall KoreBuild." - echo " --ci Apply CI specific settings and environment variables." - echo "" - echo "Description:" - echo " This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be." - echo " When the lockfile is not present, KoreBuild will create one using latest available version from \$channel." - - if [[ "${1:-}" != '--no-exit' ]]; then - exit 2 - fi -} - -get_korebuild() { - local version - local lock_file="$repo_path/korebuild-lock.txt" - if [ ! -f "$lock_file" ] || [ "$update" = true ]; then - __get_remote_file "$tools_source/korebuild/channels/$channel/latest.txt" "$lock_file" "$tools_source_suffix" - fi - version="$(grep 'version:*' -m 1 "$lock_file")" - if [[ "$version" == '' ]]; then - __error "Failed to parse version from $lock_file. Expected a line that begins with 'version:'" - return 1 - fi - version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" - local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version" - - if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then - rm -rf "$korebuild_path" - fi - - { - if [ ! -d "$korebuild_path" ]; then - mkdir -p "$korebuild_path" - local remote_path="$tools_source/korebuild/artifacts/$version/korebuild.$version.zip" - tmpfile="$(mktemp)" - echo -e "${MAGENTA}Downloading KoreBuild ${version}${RESET}" - if __get_remote_file "$remote_path" "$tmpfile" "$tools_source_suffix"; then - unzip -q -d "$korebuild_path" "$tmpfile" - fi - rm "$tmpfile" || true - fi - - source "$korebuild_path/KoreBuild.sh" - } || { - if [ -d "$korebuild_path" ]; then - echo "Cleaning up after failed installation" - rm -rf "$korebuild_path" || true - fi - return 1 - } -} - -__error() { - echo -e "${RED}error: $*${RESET}" 1>&2 -} - -__warn() { - echo -e "${YELLOW}warning: $*${RESET}" -} - -__machine_has() { - hash "$1" > /dev/null 2>&1 - return $? -} - -__get_remote_file() { - local remote_path=$1 - local local_path=$2 - local remote_path_suffix=$3 - - if [[ "$remote_path" != 'http'* ]]; then - cp "$remote_path" "$local_path" - return 0 - fi - - local failed=false - if __machine_has wget; then - wget --tries 10 --quiet -O "$local_path" "${remote_path}${remote_path_suffix}" || failed=true - else - failed=true - fi - - if [ "$failed" = true ] && __machine_has curl; then - failed=false - curl --retry 10 -sSL -f --create-dirs -o "$local_path" "${remote_path}${remote_path_suffix}" || failed=true - fi - - if [ "$failed" = true ]; then - __error "Download failed: $remote_path" 1>&2 - return 1 - fi -} - -# -# main -# - -command="${1:-}" -shift - -while [[ $# -gt 0 ]]; do - case $1 in - -\?|-h|--help) - __usage --no-exit - exit 0 - ;; - -c|--channel|-Channel) - shift - channel="${1:-}" - [ -z "$channel" ] && __usage - ;; - --config-file|-ConfigFile) - shift - config_file="${1:-}" - [ -z "$config_file" ] && __usage - if [ ! -f "$config_file" ]; then - __error "Invalid value for --config-file. $config_file does not exist." - exit 1 - fi - ;; - -d|--dotnet-home|-DotNetHome) - shift - DOTNET_HOME="${1:-}" - [ -z "$DOTNET_HOME" ] && __usage - ;; - --path|-Path) - shift - repo_path="${1:-}" - [ -z "$repo_path" ] && __usage - ;; - -s|--tools-source|-ToolsSource) - shift - tools_source="${1:-}" - [ -z "$tools_source" ] && __usage - ;; - --tools-source-suffix|-ToolsSourceSuffix) - shift - tools_source_suffix="${1:-}" - [ -z "$tools_source_suffix" ] && __usage - ;; - -u|--update|-Update) - update=true - ;; - --reinstall|-[Rr]einstall) - reinstall=true - ;; - --ci|-[Cc][Ii]) - ci=true - ;; - --verbose|-Verbose) - verbose=true - ;; - --) - shift - break - ;; - *) - break - ;; - esac - shift -done - -if ! __machine_has unzip; then - __error 'Missing required command: unzip' - exit 1 -fi - -if ! __machine_has curl && ! __machine_has wget; then - __error 'Missing required command. Either wget or curl is required.' - exit 1 -fi - -[ -z "${config_file:-}" ] && config_file="$repo_path/korebuild.json" -if [ -f "$config_file" ]; then - if __machine_has jq ; then - if jq '.' "$config_file" >/dev/null ; then - config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")" - config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")" - else - __error "$config_file contains invalid JSON." - exit 1 - fi - elif __machine_has python ; then - if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then - config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" - config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" - else - __error "$config_file contains invalid JSON." - exit 1 - fi - elif __machine_has python3 ; then - if python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then - config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" - config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" - else - __error "$config_file contains invalid JSON." - exit 1 - fi - else - __error 'Missing required command: jq or python. Could not parse the JSON file.' - exit 1 - fi - - [ ! -z "${config_channel:-}" ] && channel="$config_channel" - [ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source" -fi - -[ -z "$channel" ] && channel='master' -[ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools' - -get_korebuild -set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci" -invoke_korebuild_command "$command" "$@" diff --git a/samples/LocalizationSample/LocalizationSample.csproj b/samples/LocalizationSample/LocalizationSample.csproj deleted file mode 100644 index 36eeda36d8..0000000000 --- a/samples/LocalizationSample/LocalizationSample.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - diff --git a/src/Directory.Build.props b/src/Directory.Build.props deleted file mode 100644 index 1e0980f663..0000000000 --- a/src/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizer.cs b/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizer.cs deleted file mode 100644 index 0e1145bbca..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizer.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections.Generic; -using System.Globalization; - -namespace Microsoft.Extensions.Localization -{ - /// - /// Represents a service that provides localized strings. - /// - public interface IStringLocalizer - { - /// - /// Gets the string resource with the given name. - /// - /// The name of the string resource. - /// The string resource as a . - LocalizedString this[string name] { get; } - - /// - /// Gets the string resource with the given name and formatted with the supplied arguments. - /// - /// The name of the string resource. - /// The values to format the string with. - /// The formatted string resource as a . - LocalizedString this[string name, params object[] arguments] { get; } - - /// - /// Gets all string resources. - /// - /// - /// A indicating whether to include strings from parent cultures. - /// - /// The strings. - IEnumerable GetAllStrings(bool includeParentCultures); - - /// - /// Creates a new for a specific . - /// - /// The to use. - /// A culture-specific . - IStringLocalizer WithCulture(CultureInfo culture); - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizerFactory.cs b/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizerFactory.cs deleted file mode 100644 index 559fa69c30..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizerFactory.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; - -namespace Microsoft.Extensions.Localization -{ - /// - /// Represents a factory that creates instances. - /// - public interface IStringLocalizerFactory - { - /// - /// Creates an using the and - /// of the specified . - /// - /// The . - /// The . - IStringLocalizer Create(Type resourceSource); - - /// - /// Creates an . - /// - /// The base name of the resource to load strings from. - /// The location to load resources from. - /// The . - IStringLocalizer Create(string baseName, string location); - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizerOfT.cs b/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizerOfT.cs deleted file mode 100644 index 695678a900..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/IStringLocalizerOfT.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.Extensions.Localization -{ - /// - /// Represents an that provides strings for . - /// - /// The to provide strings for. - public interface IStringLocalizer : IStringLocalizer - { - - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization.Abstractions/LocalizedString.cs b/src/Microsoft.Extensions.Localization.Abstractions/LocalizedString.cs deleted file mode 100644 index 6556da40a0..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/LocalizedString.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; - -namespace Microsoft.Extensions.Localization -{ - /// - /// A locale specific string. - /// - public class LocalizedString - { - /// - /// Creates a new . - /// - /// The name of the string in the resource it was loaded from. - /// The actual string. - public LocalizedString(string name, string value) - : this(name, value, resourceNotFound: false) - { - } - - /// - /// Creates a new . - /// - /// The name of the string in the resource it was loaded from. - /// The actual string. - /// Whether the string was not found in a resource. Set this to true to indicate an alternate string value was used. - public LocalizedString(string name, string value, bool resourceNotFound) - : this(name, value, resourceNotFound, searchedLocation: null) - { - } - - /// - /// Creates a new . - /// - /// The name of the string in the resource it was loaded from. - /// The actual string. - /// Whether the string was not found in a resource. Set this to true to indicate an alternate string value was used. - /// The location which was searched for a localization value. - public LocalizedString(string name, string value, bool resourceNotFound, string searchedLocation) - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - if (value == null) - { - throw new ArgumentNullException(nameof(value)); - } - - Name = name; - Value = value; - ResourceNotFound = resourceNotFound; - SearchedLocation = searchedLocation; - } - - public static implicit operator string(LocalizedString localizedString) - { - return localizedString?.Value; - } - - /// - /// The name of the string in the resource it was loaded from. - /// - public string Name { get; } - - /// - /// The actual string. - /// - public string Value { get; } - - /// - /// Whether the string was not found in a resource. If true, an alternate string value was used. - /// - public bool ResourceNotFound { get; } - - /// - /// The location which was searched for a localization value. - /// - public string SearchedLocation { get; } - - /// - /// Returns the actual string. - /// - /// The actual string. - public override string ToString() => Value; - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization.Abstractions/Microsoft.Extensions.Localization.Abstractions.csproj b/src/Microsoft.Extensions.Localization.Abstractions/Microsoft.Extensions.Localization.Abstractions.csproj deleted file mode 100644 index 8508eb071a..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/Microsoft.Extensions.Localization.Abstractions.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Microsoft .NET Extensions - Abstractions of application localization services. -Commonly used types: -Microsoft.Extensions.Localization.IStringLocalizer -Microsoft.Extensions.Localization.IStringLocalizer<T> - netstandard2.0 - $(NoWarn);CS1591 - true - localization - - - diff --git a/src/Microsoft.Extensions.Localization.Abstractions/StringLocalizerExtensions.cs b/src/Microsoft.Extensions.Localization.Abstractions/StringLocalizerExtensions.cs deleted file mode 100644 index bde47f74f3..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/StringLocalizerExtensions.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; - -namespace Microsoft.Extensions.Localization -{ - public static class StringLocalizerExtensions - { - /// - /// Gets the string resource with the given name. - /// - /// The . - /// The name of the string resource. - /// The string resource as a . - public static LocalizedString GetString( - this IStringLocalizer stringLocalizer, - string name) - { - if (stringLocalizer == null) - { - throw new ArgumentNullException(nameof(stringLocalizer)); - } - - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - return stringLocalizer[name]; - } - - /// - /// Gets the string resource with the given name and formatted with the supplied arguments. - /// - /// The . - /// The name of the string resource. - /// The values to format the string with. - /// The formatted string resource as a . - public static LocalizedString GetString( - this IStringLocalizer stringLocalizer, - string name, - params object[] arguments) - { - if (stringLocalizer == null) - { - throw new ArgumentNullException(nameof(stringLocalizer)); - } - - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - return stringLocalizer[name, arguments]; - } - - /// - /// Gets all string resources including those for parent cultures. - /// - /// The . - /// The string resources. - public static IEnumerable GetAllStrings(this IStringLocalizer stringLocalizer) - { - if (stringLocalizer == null) - { - throw new ArgumentNullException(nameof(stringLocalizer)); - } - - return stringLocalizer.GetAllStrings(includeParentCultures: true); - } - } -} diff --git a/src/Microsoft.Extensions.Localization.Abstractions/StringLocalizerOfT.cs b/src/Microsoft.Extensions.Localization.Abstractions/StringLocalizerOfT.cs deleted file mode 100644 index 131c1126ec..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/StringLocalizerOfT.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Globalization; - -namespace Microsoft.Extensions.Localization -{ - /// - /// Provides strings for . - /// - /// The to provide strings for. - public class StringLocalizer : IStringLocalizer - { - private IStringLocalizer _localizer; - - /// - /// Creates a new . - /// - /// The to use. - public StringLocalizer(IStringLocalizerFactory factory) - { - if (factory == null) - { - throw new ArgumentNullException(nameof(factory)); - } - - _localizer = factory.Create(typeof(TResourceSource)); - } - - /// - public virtual IStringLocalizer WithCulture(CultureInfo culture) => _localizer.WithCulture(culture); - - /// - public virtual LocalizedString this[string name] - { - get - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - return _localizer[name]; - } - } - - /// - public virtual LocalizedString this[string name, params object[] arguments] - { - get - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - return _localizer[name, arguments]; - } - } - - /// - public IEnumerable GetAllStrings(bool includeParentCultures) => - _localizer.GetAllStrings(includeParentCultures); - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization.Abstractions/baseline.netcore.json b/src/Microsoft.Extensions.Localization.Abstractions/baseline.netcore.json deleted file mode 100644 index 02ba71db8e..0000000000 --- a/src/Microsoft.Extensions.Localization.Abstractions/baseline.netcore.json +++ /dev/null @@ -1,413 +0,0 @@ -{ - "AssemblyIdentity": "Microsoft.Extensions.Localization.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", - "Types": [ - { - "Name": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "arguments", - "Type": "System.Object[]", - "IsParams": true - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAllStrings", - "Parameters": [ - { - "Name": "includeParentCultures", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Collections.Generic.IEnumerable", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WithCulture", - "Parameters": [ - { - "Name": "culture", - "Type": "System.Globalization.CultureInfo" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.IStringLocalizerFactory", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Create", - "Parameters": [ - { - "Name": "resourceSource", - "Type": "System.Type" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Create", - "Parameters": [ - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "location", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [ - "Microsoft.Extensions.Localization.IStringLocalizer" - ], - "Members": [], - "GenericParameters": [ - { - "ParameterName": "T", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Name": "Microsoft.Extensions.Localization.LocalizedString", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "op_Implicit", - "Parameters": [ - { - "Name": "localizedString", - "Type": "Microsoft.Extensions.Localization.LocalizedString" - } - ], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Name", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Value", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ResourceNotFound", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SearchedLocation", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ToString", - "Parameters": [], - "ReturnType": "System.String", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "System.String" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "System.String" - }, - { - "Name": "resourceNotFound", - "Type": "System.Boolean" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "System.String" - }, - { - "Name": "resourceNotFound", - "Type": "System.Boolean" - }, - { - "Name": "searchedLocation", - "Type": "System.String" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.StringLocalizerExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetString", - "Parameters": [ - { - "Name": "stringLocalizer", - "Type": "Microsoft.Extensions.Localization.IStringLocalizer" - }, - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetString", - "Parameters": [ - { - "Name": "stringLocalizer", - "Type": "Microsoft.Extensions.Localization.IStringLocalizer" - }, - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "arguments", - "Type": "System.Object[]", - "IsParams": true - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAllStrings", - "Parameters": [ - { - "Name": "stringLocalizer", - "Type": "Microsoft.Extensions.Localization.IStringLocalizer" - } - ], - "ReturnType": "System.Collections.Generic.IEnumerable", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.StringLocalizer", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.Extensions.Localization.IStringLocalizer" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "arguments", - "Type": "System.Object[]", - "IsParams": true - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAllStrings", - "Parameters": [ - { - "Name": "includeParentCultures", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Collections.Generic.IEnumerable", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WithCulture", - "Parameters": [ - { - "Name": "culture", - "Type": "System.Globalization.CultureInfo" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "factory", - "Type": "Microsoft.Extensions.Localization.IStringLocalizerFactory" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [ - { - "ParameterName": "TResourceSource", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/IResourceNamesCache.cs b/src/Microsoft.Extensions.Localization/IResourceNamesCache.cs deleted file mode 100644 index 90d104aa68..0000000000 --- a/src/Microsoft.Extensions.Localization/IResourceNamesCache.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; - -namespace Microsoft.Extensions.Localization -{ - /// - /// Represents a cache of string names in resources. - /// - public interface IResourceNamesCache - { - /// - /// Adds a set of resource names to the cache by using the specified function, if the name does not already exist. - /// - /// The resource name to add string names for. - /// The function used to generate the string names for the resource. - /// The string names for the resource. - IList GetOrAdd(string name, Func> valueFactory); - } -} diff --git a/src/Microsoft.Extensions.Localization/Internal/AssemblyWrapper.cs b/src/Microsoft.Extensions.Localization/Internal/AssemblyWrapper.cs deleted file mode 100644 index b0c3c2bce1..0000000000 --- a/src/Microsoft.Extensions.Localization/Internal/AssemblyWrapper.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.IO; -using System.Reflection; - -namespace Microsoft.Extensions.Localization.Internal -{ - public class AssemblyWrapper - { - public AssemblyWrapper(Assembly assembly) - { - if (assembly == null) - { - throw new ArgumentNullException(nameof(assembly)); - } - - Assembly = assembly; - } - - public Assembly Assembly { get; } - - public virtual string FullName => Assembly.FullName; - - public virtual Stream GetManifestResourceStream(string name) => Assembly.GetManifestResourceStream(name); - } -} diff --git a/src/Microsoft.Extensions.Localization/Internal/IResourceStringProvider.cs b/src/Microsoft.Extensions.Localization/Internal/IResourceStringProvider.cs deleted file mode 100644 index b74bd80eda..0000000000 --- a/src/Microsoft.Extensions.Localization/Internal/IResourceStringProvider.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections.Generic; -using System.Globalization; - -namespace Microsoft.Extensions.Localization.Internal -{ - public interface IResourceStringProvider - { - IList GetAllResourceStrings(CultureInfo culture, bool throwOnMissing); - } -} diff --git a/src/Microsoft.Extensions.Localization/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs b/src/Microsoft.Extensions.Localization/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs deleted file mode 100644 index 456e07009e..0000000000 --- a/src/Microsoft.Extensions.Localization/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Globalization; -using Microsoft.Extensions.Logging; - -namespace Microsoft.Extensions.Localization.Internal -{ - internal static class ResourceManagerStringLocalizerLoggerExtensions - { - private static readonly Action _searchedLocation; - - static ResourceManagerStringLocalizerLoggerExtensions() - { - _searchedLocation = LoggerMessage.Define( - LogLevel.Debug, - 1, - $"{nameof(ResourceManagerStringLocalizer)} searched for '{{Key}}' in '{{LocationSearched}}' with culture '{{Culture}}'."); - } - - public static void SearchedLocation(this ILogger logger, string key, string searchedLocation, CultureInfo culture) - { - _searchedLocation(logger, key, searchedLocation, culture, null); - } - } -} diff --git a/src/Microsoft.Extensions.Localization/Internal/ResourceManagerStringProvider.cs b/src/Microsoft.Extensions.Localization/Internal/ResourceManagerStringProvider.cs deleted file mode 100644 index 9eef8c84a8..0000000000 --- a/src/Microsoft.Extensions.Localization/Internal/ResourceManagerStringProvider.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.Reflection; -using System.Resources; - -namespace Microsoft.Extensions.Localization.Internal -{ - public class ResourceManagerStringProvider : IResourceStringProvider - { - private readonly IResourceNamesCache _resourceNamesCache; - private readonly ResourceManager _resourceManager; - private readonly Assembly _assembly; - private readonly string _resourceBaseName; - - public ResourceManagerStringProvider( - IResourceNamesCache resourceCache, - ResourceManager resourceManager, - Assembly assembly, - string baseName) - { - _resourceManager = resourceManager; - _resourceNamesCache = resourceCache; - _assembly = assembly; - _resourceBaseName = baseName; - } - - private string GetResourceCacheKey(CultureInfo culture) - { - var resourceName = _resourceManager.BaseName; - - return $"Culture={culture.Name};resourceName={resourceName};Assembly={_assembly.FullName}"; - } - - private string GetResourceName(CultureInfo culture) - { - var resourceStreamName = _resourceBaseName; - if (!string.IsNullOrEmpty(culture.Name)) - { - resourceStreamName += "." + culture.Name; - } - resourceStreamName += ".resources"; - - return resourceStreamName; - } - - public IList GetAllResourceStrings(CultureInfo culture, bool throwOnMissing) - { - var cacheKey = GetResourceCacheKey(culture); - - return _resourceNamesCache.GetOrAdd(cacheKey, _ => - { - // We purposly don't dispose the ResourceSet because it causes an ObjectDisposedException when you try to read the values later. - var resourceSet = _resourceManager.GetResourceSet(culture, createIfNotExists: true, tryParents: false); - if (resourceSet == null) - { - if (throwOnMissing) - { - throw new MissingManifestResourceException(Resources.FormatLocalization_MissingManifest(GetResourceName(culture))); - } - else - { - return null; - } - } - - var names = new List(); - foreach (DictionaryEntry entry in resourceSet) - { - names.Add((string)entry.Key); - } - - return names; - }); - } - } -} diff --git a/src/Microsoft.Extensions.Localization/LocalizationOptions.cs b/src/Microsoft.Extensions.Localization/LocalizationOptions.cs deleted file mode 100644 index 1b7408fe67..0000000000 --- a/src/Microsoft.Extensions.Localization/LocalizationOptions.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.Extensions.Localization -{ - /// - /// Provides programmatic configuration for localization. - /// - public class LocalizationOptions - { - /// - /// The relative path under application root where resource files are located. - /// - public string ResourcesPath { get; set; } = string.Empty; - } -} diff --git a/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs b/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs deleted file mode 100644 index 111c1c40d9..0000000000 --- a/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using Microsoft.Extensions.DependencyInjection.Extensions; -using Microsoft.Extensions.Localization; - -namespace Microsoft.Extensions.DependencyInjection -{ - /// - /// Extension methods for setting up localization services in an . - /// - public static class LocalizationServiceCollectionExtensions - { - /// - /// Adds services required for application localization. - /// - /// The to add the services to. - /// The so that additional calls can be chained. - public static IServiceCollection AddLocalization(this IServiceCollection services) - { - if (services == null) - { - throw new ArgumentNullException(nameof(services)); - } - - services.AddOptions(); - - AddLocalizationServices(services); - - return services; - } - - /// - /// Adds services required for application localization. - /// - /// The to add the services to. - /// - /// An to configure the . - /// - /// The so that additional calls can be chained. - public static IServiceCollection AddLocalization( - this IServiceCollection services, - Action setupAction) - { - if (services == null) - { - throw new ArgumentNullException(nameof(services)); - } - - if (setupAction == null) - { - throw new ArgumentNullException(nameof(setupAction)); - } - - AddLocalizationServices(services, setupAction); - - return services; - } - - // To enable unit testing - internal static void AddLocalizationServices(IServiceCollection services) - { - services.TryAddSingleton(); - services.TryAddTransient(typeof(IStringLocalizer<>), typeof(StringLocalizer<>)); - } - - internal static void AddLocalizationServices( - IServiceCollection services, - Action setupAction) - { - AddLocalizationServices(services); - services.Configure(setupAction); - } - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/Microsoft.Extensions.Localization.csproj b/src/Microsoft.Extensions.Localization/Microsoft.Extensions.Localization.csproj deleted file mode 100644 index d0e6e26596..0000000000 --- a/src/Microsoft.Extensions.Localization/Microsoft.Extensions.Localization.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - Microsoft .NET Extensions - Application localization services and default implementation based on ResourceManager to load localized assembly resources. - netstandard2.0 - $(NoWarn);CS1591 - true - localization - - - - - - - - - - - - - diff --git a/src/Microsoft.Extensions.Localization/Properties/AssemblyInfo.cs b/src/Microsoft.Extensions.Localization/Properties/AssemblyInfo.cs deleted file mode 100644 index 3e297b801e..0000000000 --- a/src/Microsoft.Extensions.Localization/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("Microsoft.Extensions.Localization.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] diff --git a/src/Microsoft.Extensions.Localization/Properties/Resources.Designer.cs b/src/Microsoft.Extensions.Localization/Properties/Resources.Designer.cs deleted file mode 100644 index 1123d648ad..0000000000 --- a/src/Microsoft.Extensions.Localization/Properties/Resources.Designer.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -namespace Microsoft.Extensions.Localization -{ - using System.Globalization; - using System.Reflection; - using System.Resources; - - internal static class Resources - { - private static readonly ResourceManager _resourceManager - = new ResourceManager("Microsoft.Extensions.Localization.Resources", typeof(Resources).GetTypeInfo().Assembly); - - /// - /// The manifest '{0}' was not found. - /// - internal static string Localization_MissingManifest - { - get { return GetString("Localization_MissingManifest"); } - } - - /// - /// The manifest '{0}' was not found. - /// - internal static string FormatLocalization_MissingManifest(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("Localization_MissingManifest"), p0); - } - - /// - /// No manifests exist for the current culture. - /// - internal static string Localization_MissingManifest_Parent - { - get { return GetString("Localization_MissingManifest_Parent"); } - } - - /// - /// No manifests exist for the current culture. - /// - internal static string FormatLocalization_MissingManifest_Parent() - { - return GetString("Localization_MissingManifest_Parent"); - } - - private static string GetString(string name, params string[] formatterNames) - { - var value = _resourceManager.GetString(name); - - System.Diagnostics.Debug.Assert(value != null); - - if (formatterNames != null) - { - for (var i = 0; i < formatterNames.Length; i++) - { - value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}"); - } - } - - return value; - } - } -} diff --git a/src/Microsoft.Extensions.Localization/ResourceLocationAttribute.cs b/src/Microsoft.Extensions.Localization/ResourceLocationAttribute.cs deleted file mode 100644 index 5bf281d90e..0000000000 --- a/src/Microsoft.Extensions.Localization/ResourceLocationAttribute.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; - -namespace Microsoft.Extensions.Localization -{ - /// - /// Provides the location of resources for an Assembly. - /// - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] - public class ResourceLocationAttribute : Attribute - { - /// - /// Creates a new . - /// - /// The location of resources for this Assembly. - public ResourceLocationAttribute(string resourceLocation) - { - if (string.IsNullOrEmpty(resourceLocation)) - { - throw new ArgumentNullException(nameof(resourceLocation)); - } - - ResourceLocation = resourceLocation; - } - - /// - /// The location of resources for this Assembly. - /// - public string ResourceLocation { get; } - } -} diff --git a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs deleted file mode 100644 index e2e1a3f234..0000000000 --- a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Globalization; -using System.Reflection; -using System.Resources; -using Microsoft.Extensions.Localization.Internal; -using Microsoft.Extensions.Logging; - -namespace Microsoft.Extensions.Localization -{ - /// - /// An that uses the and - /// to provide localized strings. - /// - /// This type is thread-safe. - public class ResourceManagerStringLocalizer : IStringLocalizer - { - private readonly ConcurrentDictionary _missingManifestCache = new ConcurrentDictionary(); - private readonly IResourceNamesCache _resourceNamesCache; - private readonly ResourceManager _resourceManager; - private readonly IResourceStringProvider _resourceStringProvider; - private readonly string _resourceBaseName; - private readonly ILogger _logger; - - /// - /// Creates a new . - /// - /// The to read strings from. - /// The that contains the strings as embedded resources. - /// The base name of the embedded resource that contains the strings. - /// Cache of the list of strings for a given resource assembly name. - /// The . - public ResourceManagerStringLocalizer( - ResourceManager resourceManager, - Assembly resourceAssembly, - string baseName, - IResourceNamesCache resourceNamesCache, - ILogger logger) - : this( - resourceManager, - new AssemblyWrapper(resourceAssembly), - baseName, - resourceNamesCache, - logger) - { - } - - /// - /// Intended for testing purposes only. - /// - public ResourceManagerStringLocalizer( - ResourceManager resourceManager, - AssemblyWrapper resourceAssemblyWrapper, - string baseName, - IResourceNamesCache resourceNamesCache, - ILogger logger) - : this( - resourceManager, - new ResourceManagerStringProvider( - resourceNamesCache, - resourceManager, - resourceAssemblyWrapper.Assembly, - baseName), - baseName, - resourceNamesCache, - logger) - { - } - - /// - /// Intended for testing purposes only. - /// - public ResourceManagerStringLocalizer( - ResourceManager resourceManager, - IResourceStringProvider resourceStringProvider, - string baseName, - IResourceNamesCache resourceNamesCache, - ILogger logger) - { - if (resourceManager == null) - { - throw new ArgumentNullException(nameof(resourceManager)); - } - - if (resourceStringProvider == null) - { - throw new ArgumentNullException(nameof(resourceStringProvider)); - } - - if (baseName == null) - { - throw new ArgumentNullException(nameof(baseName)); - } - - if (resourceNamesCache == null) - { - throw new ArgumentNullException(nameof(resourceNamesCache)); - } - - if (logger == null) - { - throw new ArgumentNullException(nameof(logger)); - } - - _resourceStringProvider = resourceStringProvider; - _resourceManager = resourceManager; - _resourceBaseName = baseName; - _resourceNamesCache = resourceNamesCache; - _logger = logger; - } - - /// - public virtual LocalizedString this[string name] - { - get - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - var value = GetStringSafely(name, null); - - return new LocalizedString(name, value ?? name, resourceNotFound: value == null, searchedLocation: _resourceBaseName); - } - } - - /// - public virtual LocalizedString this[string name, params object[] arguments] - { - get - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - var format = GetStringSafely(name, null); - var value = string.Format(format ?? name, arguments); - - return new LocalizedString(name, value, resourceNotFound: format == null, searchedLocation: _resourceBaseName); - } - } - - /// - /// Creates a new for a specific . - /// - /// The to use. - /// A culture-specific . - public IStringLocalizer WithCulture(CultureInfo culture) - { - return culture == null - ? new ResourceManagerStringLocalizer( - _resourceManager, - _resourceStringProvider, - _resourceBaseName, - _resourceNamesCache, - _logger) - : new ResourceManagerWithCultureStringLocalizer( - _resourceManager, - _resourceStringProvider, - _resourceBaseName, - _resourceNamesCache, - culture, - _logger); - } - - /// - public virtual IEnumerable GetAllStrings(bool includeParentCultures) => - GetAllStrings(includeParentCultures, CultureInfo.CurrentUICulture); - - /// - /// Returns all strings in the specified culture. - /// - /// - /// The to get strings for. - /// The strings. - protected IEnumerable GetAllStrings(bool includeParentCultures, CultureInfo culture) - { - if (culture == null) - { - throw new ArgumentNullException(nameof(culture)); - } - - var resourceNames = includeParentCultures - ? GetResourceNamesFromCultureHierarchy(culture) - : _resourceStringProvider.GetAllResourceStrings(culture, true); - - foreach (var name in resourceNames) - { - var value = GetStringSafely(name, culture); - yield return new LocalizedString(name, value ?? name, resourceNotFound: value == null, searchedLocation: _resourceBaseName); - } - } - - /// - /// Gets a resource string from the and returns null instead of - /// throwing exceptions if a match isn't found. - /// - /// The name of the string resource. - /// The to get the string for. - /// The resource string, or null if none was found. - protected string GetStringSafely(string name, CultureInfo culture) - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - var keyCulture = culture ?? CultureInfo.CurrentUICulture; - - var cacheKey = $"name={name}&culture={keyCulture.Name}"; - - _logger.SearchedLocation(name, _resourceBaseName, keyCulture); - - if (_missingManifestCache.ContainsKey(cacheKey)) - { - return null; - } - - try - { - return culture == null ? _resourceManager.GetString(name) : _resourceManager.GetString(name, culture); - } - catch (MissingManifestResourceException) - { - _missingManifestCache.TryAdd(cacheKey, null); - return null; - } - } - - private IEnumerable GetResourceNamesFromCultureHierarchy(CultureInfo startingCulture) - { - var currentCulture = startingCulture; - var resourceNames = new HashSet(); - - var hasAnyCultures = false; - - while (true) - { - - var cultureResourceNames = _resourceStringProvider.GetAllResourceStrings(currentCulture, false); - - if (cultureResourceNames != null) - { - foreach (var resourceName in cultureResourceNames) - { - resourceNames.Add(resourceName); - } - hasAnyCultures = true; - } - - if (currentCulture == currentCulture.Parent) - { - // currentCulture begat currentCulture, probably time to leave - break; - } - - currentCulture = currentCulture.Parent; - } - - if (!hasAnyCultures) - { - throw new MissingManifestResourceException(Resources.Localization_MissingManifest_Parent); - } - - return resourceNames; - } - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs deleted file mode 100644 index 2eb737eaa7..0000000000 --- a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Concurrent; -using System.IO; -using System.Reflection; -using System.Resources; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; - -namespace Microsoft.Extensions.Localization -{ - /// - /// An that creates instances of . - /// - /// - /// offers multiple ways to set the relative path of - /// resources to be used. They are, in order of precedence: - /// -> -> the project root. - /// - public class ResourceManagerStringLocalizerFactory : IStringLocalizerFactory - { - private readonly IResourceNamesCache _resourceNamesCache = new ResourceNamesCache(); - private readonly ConcurrentDictionary _localizerCache = - new ConcurrentDictionary(); - private readonly string _resourcesRelativePath; - private readonly ILoggerFactory _loggerFactory; - - /// - /// Creates a new . - /// - /// The . - /// The . - public ResourceManagerStringLocalizerFactory( - IOptions localizationOptions, - ILoggerFactory loggerFactory) - { - if (localizationOptions == null) - { - throw new ArgumentNullException(nameof(localizationOptions)); - } - - if (loggerFactory == null) - { - throw new ArgumentNullException(nameof(loggerFactory)); - } - - _resourcesRelativePath = localizationOptions.Value.ResourcesPath ?? string.Empty; - _loggerFactory = loggerFactory; - - if (!string.IsNullOrEmpty(_resourcesRelativePath)) - { - _resourcesRelativePath = _resourcesRelativePath.Replace(Path.AltDirectorySeparatorChar, '.') - .Replace(Path.DirectorySeparatorChar, '.') + "."; - } - } - - /// - /// Gets the resource prefix used to look up the resource. - /// - /// The type of the resource to be looked up. - /// The prefix for resource lookup. - protected virtual string GetResourcePrefix(TypeInfo typeInfo) - { - if (typeInfo == null) - { - throw new ArgumentNullException(nameof(typeInfo)); - } - - return GetResourcePrefix(typeInfo, GetRootNamespace(typeInfo.Assembly), GetResourcePath(typeInfo.Assembly)); - } - - /// - /// Gets the resource prefix used to look up the resource. - /// - /// The type of the resource to be looked up. - /// The base namespace of the application. - /// The folder containing all resources. - /// The prefix for resource lookup. - /// - /// For the type "Sample.Controllers.Home" if there's a resourceRelativePath return - /// "Sample.Resourcepath.Controllers.Home" if there isn't one then it would return "Sample.Controllers.Home". - /// - protected virtual string GetResourcePrefix(TypeInfo typeInfo, string baseNamespace, string resourcesRelativePath) - { - if (typeInfo == null) - { - throw new ArgumentNullException(nameof(typeInfo)); - } - - if (string.IsNullOrEmpty(baseNamespace)) - { - throw new ArgumentNullException(nameof(baseNamespace)); - } - - if (string.IsNullOrEmpty(resourcesRelativePath)) - { - return typeInfo.FullName; - } - else - { - // This expectation is defined by dotnet's automatic resource storage. - // We have to conform to "{RootNamespace}.{ResourceLocation}.{FullTypeName - AssemblyName}". - var assemblyName = new AssemblyName(typeInfo.Assembly.FullName).Name; - return baseNamespace + "." + resourcesRelativePath + TrimPrefix(typeInfo.FullName, assemblyName + "."); - } - } - - /// - /// Gets the resource prefix used to look up the resource. - /// - /// The name of the resource to be looked up - /// The base namespace of the application. - /// The prefix for resource lookup. - protected virtual string GetResourcePrefix(string baseResourceName, string baseNamespace) - { - if (string.IsNullOrEmpty(baseResourceName)) - { - throw new ArgumentNullException(nameof(baseResourceName)); - } - - if (string.IsNullOrEmpty(baseNamespace)) - { - throw new ArgumentNullException(nameof(baseNamespace)); - } - - var assemblyName = new AssemblyName(baseNamespace); - var assembly = Assembly.Load(assemblyName); - var rootNamespace = GetRootNamespace(assembly); - var resourceLocation = GetResourcePath(assembly); - var locationPath = rootNamespace + "." + resourceLocation; - - baseResourceName = locationPath + TrimPrefix(baseResourceName, baseNamespace + "."); - - return baseResourceName; - } - - /// - /// Creates a using the and - /// of the specified . - /// - /// The . - /// The . - public IStringLocalizer Create(Type resourceSource) - { - if (resourceSource == null) - { - throw new ArgumentNullException(nameof(resourceSource)); - } - - var typeInfo = resourceSource.GetTypeInfo(); - - var baseName = GetResourcePrefix(typeInfo); - - var assembly = typeInfo.Assembly; - - return _localizerCache.GetOrAdd(baseName, _ => CreateResourceManagerStringLocalizer(assembly, baseName)); - } - - /// - /// Creates a . - /// - /// The base name of the resource to load strings from. - /// The location to load resources from. - /// The . - public IStringLocalizer Create(string baseName, string location) - { - if (baseName == null) - { - throw new ArgumentNullException(nameof(baseName)); - } - - if (location == null) - { - throw new ArgumentNullException(nameof(location)); - } - - return _localizerCache.GetOrAdd($"B={baseName},L={location}", _ => - { - var assemblyName = new AssemblyName(location); - var assembly = Assembly.Load(assemblyName); - baseName = GetResourcePrefix(baseName, location); - - return CreateResourceManagerStringLocalizer(assembly, baseName); - }); - } - - /// Creates a for the given input. - /// The assembly to create a for. - /// The base name of the resource to search for. - /// A for the given and . - /// This method is virtual for testing purposes only. - protected virtual ResourceManagerStringLocalizer CreateResourceManagerStringLocalizer( - Assembly assembly, - string baseName) - { - return new ResourceManagerStringLocalizer( - new ResourceManager(baseName, assembly), - assembly, - baseName, - _resourceNamesCache, - _loggerFactory.CreateLogger()); - } - - /// - /// Gets the resource prefix used to look up the resource. - /// - /// The general location of the resource. - /// The base name of the resource. - /// The location of the resource within . - /// The resource prefix used to look up the resource. - protected virtual string GetResourcePrefix(string location, string baseName, string resourceLocation) - { - // Re-root the base name if a resources path is set - return location + "." + resourceLocation + TrimPrefix(baseName, location + "."); - } - - /// Gets a from the provided . - /// The assembly to get a from. - /// The associated with the given . - /// This method is protected and virtual for testing purposes only. - protected virtual ResourceLocationAttribute GetResourceLocationAttribute(Assembly assembly) - { - return assembly.GetCustomAttribute(); - } - - /// Gets a from the provided . - /// The assembly to get a from. - /// The associated with the given . - /// This method is protected and virtual for testing purposes only. - protected virtual RootNamespaceAttribute GetRootNamespaceAttribute(Assembly assembly) - { - return assembly.GetCustomAttribute(); - } - - private string GetRootNamespace(Assembly assembly) - { - var rootNamespaceAttribute = GetRootNamespaceAttribute(assembly); - - return rootNamespaceAttribute?.RootNamespace ?? - new AssemblyName(assembly.FullName).Name; - } - - private string GetResourcePath(Assembly assembly) - { - var resourceLocationAttribute = GetResourceLocationAttribute(assembly); - - // If we don't have an attribute assume all assemblies use the same resource location. - var resourceLocation = resourceLocationAttribute == null - ? _resourcesRelativePath - : resourceLocationAttribute.ResourceLocation + "."; - resourceLocation = resourceLocation - .Replace(Path.DirectorySeparatorChar, '.') - .Replace(Path.AltDirectorySeparatorChar, '.'); - - return resourceLocation; - } - - private static string TrimPrefix(string name, string prefix) - { - if (name.StartsWith(prefix, StringComparison.Ordinal)) - { - return name.Substring(prefix.Length); - } - - return name; - } - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/ResourceManagerWithCultureStringLocalizer.cs b/src/Microsoft.Extensions.Localization/ResourceManagerWithCultureStringLocalizer.cs deleted file mode 100644 index 65b6ae242c..0000000000 --- a/src/Microsoft.Extensions.Localization/ResourceManagerWithCultureStringLocalizer.cs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Reflection; -using System.Resources; -using Microsoft.Extensions.Localization.Internal; -using Microsoft.Extensions.Logging; - -namespace Microsoft.Extensions.Localization -{ - /// - /// An that uses the and - /// to provide localized strings for a specific . - /// - public class ResourceManagerWithCultureStringLocalizer : ResourceManagerStringLocalizer - { - private readonly string _resourceBaseName; - private readonly CultureInfo _culture; - - /// - /// Creates a new . - /// - /// The to read strings from. - /// The that can find the resources. - /// The base name of the embedded resource that contains the strings. - /// Cache of the list of strings for a given resource assembly name. - /// The specific to use. - /// The . - internal ResourceManagerWithCultureStringLocalizer( - ResourceManager resourceManager, - IResourceStringProvider resourceStringProvider, - string baseName, - IResourceNamesCache resourceNamesCache, - CultureInfo culture, - ILogger logger) - : base(resourceManager, resourceStringProvider, baseName, resourceNamesCache, logger) - { - if (resourceManager == null) - { - throw new ArgumentNullException(nameof(resourceManager)); - } - - if (resourceStringProvider == null) - { - throw new ArgumentNullException(nameof(resourceStringProvider)); - } - - if (baseName == null) - { - throw new ArgumentNullException(nameof(baseName)); - } - - if (resourceNamesCache == null) - { - throw new ArgumentNullException(nameof(resourceNamesCache)); - } - - if (culture == null) - { - throw new ArgumentNullException(nameof(culture)); - } - - if (logger == null) - { - throw new ArgumentNullException(nameof(logger)); - } - - _resourceBaseName = baseName; - _culture = culture; - } - - /// - /// Creates a new . - /// - /// The to read strings from. - /// The that contains the strings as embedded resources. - /// The base name of the embedded resource that contains the strings. - /// Cache of the list of strings for a given resource assembly name. - /// The specific to use. - /// The . - public ResourceManagerWithCultureStringLocalizer( - ResourceManager resourceManager, - Assembly resourceAssembly, - string baseName, - IResourceNamesCache resourceNamesCache, - CultureInfo culture, - ILogger logger) - : base(resourceManager, resourceAssembly, baseName, resourceNamesCache, logger) - { - if (resourceManager == null) - { - throw new ArgumentNullException(nameof(resourceManager)); - } - - if (resourceAssembly == null) - { - throw new ArgumentNullException(nameof(resourceAssembly)); - } - - if (baseName == null) - { - throw new ArgumentNullException(nameof(baseName)); - } - - if (resourceNamesCache == null) - { - throw new ArgumentNullException(nameof(resourceNamesCache)); - } - - if (culture == null) - { - throw new ArgumentNullException(nameof(culture)); - } - - if (logger == null) - { - throw new ArgumentNullException(nameof(logger)); - } - - _resourceBaseName = baseName; - _culture = culture; - } - - /// - public override LocalizedString this[string name] - { - get - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - var value = GetStringSafely(name, _culture); - - return new LocalizedString(name, value ?? name, resourceNotFound: value == null, searchedLocation: _resourceBaseName); - } - } - - /// - public override LocalizedString this[string name, params object[] arguments] - { - get - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - var format = GetStringSafely(name, _culture); - var value = string.Format(_culture, format ?? name, arguments); - - return new LocalizedString(name, value, resourceNotFound: format == null, searchedLocation: _resourceBaseName); - } - } - - /// - public override IEnumerable GetAllStrings(bool includeParentCultures) => - GetAllStrings(includeParentCultures, _culture); - } -} \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/ResourceNamesCache.cs b/src/Microsoft.Extensions.Localization/ResourceNamesCache.cs deleted file mode 100644 index 86e94c102a..0000000000 --- a/src/Microsoft.Extensions.Localization/ResourceNamesCache.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; - -namespace Microsoft.Extensions.Localization -{ - /// - /// An implementation of backed by a . - /// - public class ResourceNamesCache : IResourceNamesCache - { - private readonly ConcurrentDictionary> _cache = new ConcurrentDictionary>(); - - /// - public IList GetOrAdd(string name, Func> valueFactory) - { - return _cache.GetOrAdd(name, valueFactory); - } - } -} diff --git a/src/Microsoft.Extensions.Localization/Resources.resx b/src/Microsoft.Extensions.Localization/Resources.resx deleted file mode 100644 index b679f04664..0000000000 --- a/src/Microsoft.Extensions.Localization/Resources.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - The manifest '{0}' was not found. - - - No manifests exist for the current culture. - - \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/RootNamespaceAttribute.cs b/src/Microsoft.Extensions.Localization/RootNamespaceAttribute.cs deleted file mode 100644 index f28b4ea1fd..0000000000 --- a/src/Microsoft.Extensions.Localization/RootNamespaceAttribute.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; - -namespace Microsoft.Extensions.Localization -{ - /// - /// Provides the RootNamespace of an Assembly. The RootNamespace of the assembly is used by Localization to - /// determine the resource name to look for when RootNamespace differs from the AssemblyName. - /// - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] - public class RootNamespaceAttribute : Attribute - { - /// - /// Creates a new . - /// - /// The RootNamespace for this Assembly. - public RootNamespaceAttribute(string rootNamespace) - { - if (string.IsNullOrEmpty(rootNamespace)) - { - throw new ArgumentNullException(nameof(rootNamespace)); - } - - RootNamespace = rootNamespace; - } - - /// - /// The RootNamespace of this Assembly. The RootNamespace of the assembly is used by Localization to - /// determine the resource name to look for when RootNamespace differs from the AssemblyName. - /// - public string RootNamespace { get; } - } -} diff --git a/src/Microsoft.Extensions.Localization/baseline.netcore.json b/src/Microsoft.Extensions.Localization/baseline.netcore.json deleted file mode 100644 index 860db76899..0000000000 --- a/src/Microsoft.Extensions.Localization/baseline.netcore.json +++ /dev/null @@ -1,687 +0,0 @@ -{ - "AssemblyIdentity": "Microsoft.Extensions.Localization, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", - "Types": [ - { - "Name": "Microsoft.Extensions.DependencyInjection.LocalizationServiceCollectionExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "AddLocalization", - "Parameters": [ - { - "Name": "services", - "Type": "Microsoft.Extensions.DependencyInjection.IServiceCollection" - } - ], - "ReturnType": "Microsoft.Extensions.DependencyInjection.IServiceCollection", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddLocalization", - "Parameters": [ - { - "Name": "services", - "Type": "Microsoft.Extensions.DependencyInjection.IServiceCollection" - }, - { - "Name": "setupAction", - "Type": "System.Action" - } - ], - "ReturnType": "Microsoft.Extensions.DependencyInjection.IServiceCollection", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.IResourceNamesCache", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetOrAdd", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "valueFactory", - "Type": "System.Func>" - } - ], - "ReturnType": "System.Collections.Generic.IList", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.LocalizationOptions", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_ResourcesPath", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ResourcesPath", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.ResourceLocationAttribute", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "System.Attribute", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_ResourceLocation", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "resourceLocation", - "Type": "System.String" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.ResourceManagerStringLocalizer", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.Extensions.Localization.IStringLocalizer" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "arguments", - "Type": "System.Object[]", - "IsParams": true - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WithCulture", - "Parameters": [ - { - "Name": "culture", - "Type": "System.Globalization.CultureInfo" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAllStrings", - "Parameters": [ - { - "Name": "includeParentCultures", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Collections.Generic.IEnumerable", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAllStrings", - "Parameters": [ - { - "Name": "includeParentCultures", - "Type": "System.Boolean" - }, - { - "Name": "culture", - "Type": "System.Globalization.CultureInfo" - } - ], - "ReturnType": "System.Collections.Generic.IEnumerable", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetStringSafely", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "culture", - "Type": "System.Globalization.CultureInfo" - } - ], - "ReturnType": "System.String", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "resourceManager", - "Type": "System.Resources.ResourceManager" - }, - { - "Name": "resourceAssembly", - "Type": "System.Reflection.Assembly" - }, - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "resourceNamesCache", - "Type": "Microsoft.Extensions.Localization.IResourceNamesCache" - }, - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "resourceManager", - "Type": "System.Resources.ResourceManager" - }, - { - "Name": "resourceAssemblyWrapper", - "Type": "Microsoft.Extensions.Localization.Internal.AssemblyWrapper" - }, - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "resourceNamesCache", - "Type": "Microsoft.Extensions.Localization.IResourceNamesCache" - }, - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "resourceManager", - "Type": "System.Resources.ResourceManager" - }, - { - "Name": "resourceStringProvider", - "Type": "Microsoft.Extensions.Localization.Internal.IResourceStringProvider" - }, - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "resourceNamesCache", - "Type": "Microsoft.Extensions.Localization.IResourceNamesCache" - }, - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.Extensions.Localization.IStringLocalizerFactory" - ], - "Members": [ - { - "Kind": "Method", - "Name": "GetResourcePrefix", - "Parameters": [ - { - "Name": "typeInfo", - "Type": "System.Reflection.TypeInfo" - } - ], - "ReturnType": "System.String", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetResourcePrefix", - "Parameters": [ - { - "Name": "typeInfo", - "Type": "System.Reflection.TypeInfo" - }, - { - "Name": "baseNamespace", - "Type": "System.String" - }, - { - "Name": "resourcesRelativePath", - "Type": "System.String" - } - ], - "ReturnType": "System.String", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetResourcePrefix", - "Parameters": [ - { - "Name": "baseResourceName", - "Type": "System.String" - }, - { - "Name": "baseNamespace", - "Type": "System.String" - } - ], - "ReturnType": "System.String", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Create", - "Parameters": [ - { - "Name": "resourceSource", - "Type": "System.Type" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizerFactory", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Create", - "Parameters": [ - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "location", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.IStringLocalizer", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizerFactory", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateResourceManagerStringLocalizer", - "Parameters": [ - { - "Name": "assembly", - "Type": "System.Reflection.Assembly" - }, - { - "Name": "baseName", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.ResourceManagerStringLocalizer", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetResourcePrefix", - "Parameters": [ - { - "Name": "location", - "Type": "System.String" - }, - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "resourceLocation", - "Type": "System.String" - } - ], - "ReturnType": "System.String", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetResourceLocationAttribute", - "Parameters": [ - { - "Name": "assembly", - "Type": "System.Reflection.Assembly" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.ResourceLocationAttribute", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetRootNamespaceAttribute", - "Parameters": [ - { - "Name": "assembly", - "Type": "System.Reflection.Assembly" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.RootNamespaceAttribute", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "localizationOptions", - "Type": "Microsoft.Extensions.Options.IOptions" - }, - { - "Name": "loggerFactory", - "Type": "Microsoft.Extensions.Logging.ILoggerFactory" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.ResourceManagerWithCultureStringLocalizer", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.Extensions.Localization.ResourceManagerStringLocalizer", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Virtual": true, - "Override": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Item", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "arguments", - "Type": "System.Object[]", - "IsParams": true - } - ], - "ReturnType": "Microsoft.Extensions.Localization.LocalizedString", - "Virtual": true, - "Override": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAllStrings", - "Parameters": [ - { - "Name": "includeParentCultures", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Collections.Generic.IEnumerable", - "Virtual": true, - "Override": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IStringLocalizer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "resourceManager", - "Type": "System.Resources.ResourceManager" - }, - { - "Name": "resourceAssembly", - "Type": "System.Reflection.Assembly" - }, - { - "Name": "baseName", - "Type": "System.String" - }, - { - "Name": "resourceNamesCache", - "Type": "Microsoft.Extensions.Localization.IResourceNamesCache" - }, - { - "Name": "culture", - "Type": "System.Globalization.CultureInfo" - }, - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.ResourceNamesCache", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.Extensions.Localization.IResourceNamesCache" - ], - "Members": [ - { - "Kind": "Method", - "Name": "GetOrAdd", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "valueFactory", - "Type": "System.Func>" - } - ], - "ReturnType": "System.Collections.Generic.IList", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Localization.IResourceNamesCache", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.Extensions.Localization.RootNamespaceAttribute", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "System.Attribute", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_RootNamespace", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "rootNamespace", - "Type": "System.String" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - } - ] -} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Localization.Routing/Microsoft.AspNetCore.Localization.Routing.csproj b/src/Middleware/Localization.Routing/src/Microsoft.AspNetCore.Localization.Routing.csproj similarity index 63% rename from src/Microsoft.AspNetCore.Localization.Routing/Microsoft.AspNetCore.Localization.Routing.csproj rename to src/Middleware/Localization.Routing/src/Microsoft.AspNetCore.Localization.Routing.csproj index be1be0e733..18d5d0788e 100644 --- a/src/Microsoft.AspNetCore.Localization.Routing/Microsoft.AspNetCore.Localization.Routing.csproj +++ b/src/Middleware/Localization.Routing/src/Microsoft.AspNetCore.Localization.Routing.csproj @@ -10,11 +10,8 @@ - - - - - + + diff --git a/src/Microsoft.AspNetCore.Localization.Routing/RouteDataRequestCultureProvider.cs b/src/Middleware/Localization.Routing/src/RouteDataRequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization.Routing/RouteDataRequestCultureProvider.cs rename to src/Middleware/Localization.Routing/src/RouteDataRequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization.Routing/baseline.netcore.json b/src/Middleware/Localization.Routing/src/baseline.netcore.json similarity index 100% rename from src/Microsoft.AspNetCore.Localization.Routing/baseline.netcore.json rename to src/Middleware/Localization.Routing/src/baseline.netcore.json diff --git a/src/Middleware/Localization.Routing/test/Microsoft.AspNetCore.Localization.Routing.Tests.csproj b/src/Middleware/Localization.Routing/test/Microsoft.AspNetCore.Localization.Routing.Tests.csproj new file mode 100644 index 0000000000..90885d402f --- /dev/null +++ b/src/Middleware/Localization.Routing/test/Microsoft.AspNetCore.Localization.Routing.Tests.csproj @@ -0,0 +1,13 @@ + + + + netcoreapp3.0 + + + + + + + + + diff --git a/test/Microsoft.AspNetCore.Localization.Routing.Tests/RouteDataRequestCultureProviderTest.cs b/src/Middleware/Localization.Routing/test/RouteDataRequestCultureProviderTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Routing.Tests/RouteDataRequestCultureProviderTest.cs rename to src/Middleware/Localization.Routing/test/RouteDataRequestCultureProviderTest.cs diff --git a/src/Middleware/Localization/README.md b/src/Middleware/Localization/README.md new file mode 100644 index 0000000000..d5d82d9a30 --- /dev/null +++ b/src/Middleware/Localization/README.md @@ -0,0 +1,26 @@ +Localization +============ + +Localization abstractions and implementations for ASP.NET Core applications. + +### Localization Samples + +Here are a few samples that demonstrate different localization features including: localized views, localized strings in data annotations, creating custom localization resources ... etc. + + * [Localization.StarterWeb](https://github.com/aspnet/Entropy/tree/master/samples/Localization.StarterWeb) - comprehensive localization sample demonstrates almost all of the localization features + * [Localization.EntityFramework](https://github.com/aspnet/Entropy/tree/master/samples/Localization.EntityFramework) - localization sample that uses an EntityFramework based localization provider for resources + * [Localization.CustomResourceManager](https://github.com/aspnet/Entropy/tree/master/samples/Localization.CustomResourceManager) - localization sample that uses a custom `ResourceManagerStringLocalizer` + +### Localization Providers + +Community projects adapt _RequestCultureProvider_ for determining the culture information of an `HttpRequest`. + + * [My.AspNetCore.Localization.Json](https://github.com/hishamco/My.AspNetCore.Localization.Json) - determines the culture information for a request from a JSON file. + * [My.AspNetCore.Localization.Session](https://github.com/hishamco/My.AspNetCore.Localization.Session) - determines the culture information for a request via values in the session state. + + ### Localization Resources + +Community projects adapt _IStringLocalizer_ for fetching the localiztion resources. + + * [My.Extensions.Localization.Json](https://github.com/hishamco/My.Extensions.Localization.Json) - fetches the localization resources from JSON file(s). + * [OrchardCore.Localization.PortableObject](https://github.com/OrchardCMS/OrchardCore/tree/dev/src/OrchardCore/OrchardCore.Localization.Core/PortableObject) - fetches the localization resources from PO file(s). diff --git a/src/Middleware/Localization/sample/LocalizationSample.csproj b/src/Middleware/Localization/sample/LocalizationSample.csproj new file mode 100644 index 0000000000..6fb61d7925 --- /dev/null +++ b/src/Middleware/Localization/sample/LocalizationSample.csproj @@ -0,0 +1,16 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + diff --git a/samples/LocalizationSample/My/Resources/Startup.es-ES.resx b/src/Middleware/Localization/sample/My/Resources/Startup.es-ES.resx similarity index 100% rename from samples/LocalizationSample/My/Resources/Startup.es-ES.resx rename to src/Middleware/Localization/sample/My/Resources/Startup.es-ES.resx diff --git a/samples/LocalizationSample/My/Resources/Startup.fr-FR.resx b/src/Middleware/Localization/sample/My/Resources/Startup.fr-FR.resx similarity index 100% rename from samples/LocalizationSample/My/Resources/Startup.fr-FR.resx rename to src/Middleware/Localization/sample/My/Resources/Startup.fr-FR.resx diff --git a/samples/LocalizationSample/My/Resources/Startup.ja-JP.resx b/src/Middleware/Localization/sample/My/Resources/Startup.ja-JP.resx similarity index 100% rename from samples/LocalizationSample/My/Resources/Startup.ja-JP.resx rename to src/Middleware/Localization/sample/My/Resources/Startup.ja-JP.resx diff --git a/samples/LocalizationSample/My/Resources/Startup.zh-CN.resx b/src/Middleware/Localization/sample/My/Resources/Startup.zh-CN.resx similarity index 100% rename from samples/LocalizationSample/My/Resources/Startup.zh-CN.resx rename to src/Middleware/Localization/sample/My/Resources/Startup.zh-CN.resx diff --git a/samples/LocalizationSample/My/Resources/Startup.zh.resx b/src/Middleware/Localization/sample/My/Resources/Startup.zh.resx similarity index 100% rename from samples/LocalizationSample/My/Resources/Startup.zh.resx rename to src/Middleware/Localization/sample/My/Resources/Startup.zh.resx diff --git a/samples/LocalizationSample/Startup.cs b/src/Middleware/Localization/sample/Startup.cs similarity index 100% rename from samples/LocalizationSample/Startup.cs rename to src/Middleware/Localization/sample/Startup.cs diff --git a/src/Microsoft.AspNetCore.Localization/AcceptLanguageHeaderRequestCultureProvider.cs b/src/Middleware/Localization/src/AcceptLanguageHeaderRequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/AcceptLanguageHeaderRequestCultureProvider.cs rename to src/Middleware/Localization/src/AcceptLanguageHeaderRequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization/ApplicationBuilderExtensions.cs b/src/Middleware/Localization/src/ApplicationBuilderExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/ApplicationBuilderExtensions.cs rename to src/Middleware/Localization/src/ApplicationBuilderExtensions.cs diff --git a/src/Microsoft.AspNetCore.Localization/CookieRequestCultureProvider.cs b/src/Middleware/Localization/src/CookieRequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/CookieRequestCultureProvider.cs rename to src/Middleware/Localization/src/CookieRequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization/CustomRequestCultureProvider.cs b/src/Middleware/Localization/src/CustomRequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/CustomRequestCultureProvider.cs rename to src/Middleware/Localization/src/CustomRequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization/IRequestCultureFeature.cs b/src/Middleware/Localization/src/IRequestCultureFeature.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/IRequestCultureFeature.cs rename to src/Middleware/Localization/src/IRequestCultureFeature.cs diff --git a/src/Microsoft.AspNetCore.Localization/IRequestCultureProvider.cs b/src/Middleware/Localization/src/IRequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/IRequestCultureProvider.cs rename to src/Middleware/Localization/src/IRequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization/Internal/RequestCultureProviderLoggerExtensions.cs b/src/Middleware/Localization/src/Internal/RequestCultureProviderLoggerExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/Internal/RequestCultureProviderLoggerExtensions.cs rename to src/Middleware/Localization/src/Internal/RequestCultureProviderLoggerExtensions.cs diff --git a/src/Microsoft.AspNetCore.Localization/Microsoft.AspNetCore.Localization.csproj b/src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj similarity index 51% rename from src/Microsoft.AspNetCore.Localization/Microsoft.AspNetCore.Localization.csproj rename to src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj index 7fe6aaf4df..00f43deee7 100644 --- a/src/Microsoft.AspNetCore.Localization/Microsoft.AspNetCore.Localization.csproj +++ b/src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj @@ -10,13 +10,10 @@ - - - - - - - + + + + diff --git a/src/Microsoft.AspNetCore.Localization/Properties/Resources.Designer.cs b/src/Middleware/Localization/src/Properties/Resources.Designer.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/Properties/Resources.Designer.cs rename to src/Middleware/Localization/src/Properties/Resources.Designer.cs diff --git a/src/Microsoft.AspNetCore.Localization/ProviderCultureResult.cs b/src/Middleware/Localization/src/ProviderCultureResult.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/ProviderCultureResult.cs rename to src/Middleware/Localization/src/ProviderCultureResult.cs diff --git a/src/Microsoft.AspNetCore.Localization/QueryStringRequestCultureProvider.cs b/src/Middleware/Localization/src/QueryStringRequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/QueryStringRequestCultureProvider.cs rename to src/Middleware/Localization/src/QueryStringRequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization/RequestCulture.cs b/src/Middleware/Localization/src/RequestCulture.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/RequestCulture.cs rename to src/Middleware/Localization/src/RequestCulture.cs diff --git a/src/Microsoft.AspNetCore.Localization/RequestCultureFeature.cs b/src/Middleware/Localization/src/RequestCultureFeature.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/RequestCultureFeature.cs rename to src/Middleware/Localization/src/RequestCultureFeature.cs diff --git a/src/Microsoft.AspNetCore.Localization/RequestCultureProvider.cs b/src/Middleware/Localization/src/RequestCultureProvider.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/RequestCultureProvider.cs rename to src/Middleware/Localization/src/RequestCultureProvider.cs diff --git a/src/Microsoft.AspNetCore.Localization/RequestLocalizationMiddleware.cs b/src/Middleware/Localization/src/RequestLocalizationMiddleware.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/RequestLocalizationMiddleware.cs rename to src/Middleware/Localization/src/RequestLocalizationMiddleware.cs diff --git a/src/Microsoft.AspNetCore.Localization/RequestLocalizationOptions.cs b/src/Middleware/Localization/src/RequestLocalizationOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/RequestLocalizationOptions.cs rename to src/Middleware/Localization/src/RequestLocalizationOptions.cs diff --git a/src/Microsoft.AspNetCore.Localization/RequestLocalizationOptionsExtensions.cs b/src/Middleware/Localization/src/RequestLocalizationOptionsExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Localization/RequestLocalizationOptionsExtensions.cs rename to src/Middleware/Localization/src/RequestLocalizationOptionsExtensions.cs diff --git a/src/Microsoft.AspNetCore.Localization/Resources.resx b/src/Middleware/Localization/src/Resources.resx similarity index 100% rename from src/Microsoft.AspNetCore.Localization/Resources.resx rename to src/Middleware/Localization/src/Resources.resx diff --git a/src/Microsoft.AspNetCore.Localization/baseline.netcore.json b/src/Middleware/Localization/src/baseline.netcore.json similarity index 100% rename from src/Microsoft.AspNetCore.Localization/baseline.netcore.json rename to src/Middleware/Localization/src/baseline.netcore.json diff --git a/test/Microsoft.AspNetCore.Localization.FunctionalTests/LocalizationSampleTest.cs b/src/Middleware/Localization/test/FunctionalTests/LocalizationSampleTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.FunctionalTests/LocalizationSampleTest.cs rename to src/Middleware/Localization/test/FunctionalTests/LocalizationSampleTest.cs diff --git a/test/Microsoft.AspNetCore.Localization.FunctionalTests/LocalizationTest.cs b/src/Middleware/Localization/test/FunctionalTests/LocalizationTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.FunctionalTests/LocalizationTest.cs rename to src/Middleware/Localization/test/FunctionalTests/LocalizationTest.cs diff --git a/src/Middleware/Localization/test/FunctionalTests/Microsoft.AspNetCore.Localization.FunctionalTests.csproj b/src/Middleware/Localization/test/FunctionalTests/Microsoft.AspNetCore.Localization.FunctionalTests.csproj new file mode 100644 index 0000000000..46b23f256c --- /dev/null +++ b/src/Middleware/Localization/test/FunctionalTests/Microsoft.AspNetCore.Localization.FunctionalTests.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + + + + diff --git a/test/Microsoft.AspNetCore.Localization.Tests/AcceptLanguageHeaderRequestCultureProviderTest.cs b/src/Middleware/Localization/test/UnitTests/AcceptLanguageHeaderRequestCultureProviderTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Tests/AcceptLanguageHeaderRequestCultureProviderTest.cs rename to src/Middleware/Localization/test/UnitTests/AcceptLanguageHeaderRequestCultureProviderTest.cs diff --git a/test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs b/src/Middleware/Localization/test/UnitTests/CookieRequestCultureProviderTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs rename to src/Middleware/Localization/test/UnitTests/CookieRequestCultureProviderTest.cs diff --git a/test/Microsoft.AspNetCore.Localization.Tests/CustomRequestCultureProviderTest.cs b/src/Middleware/Localization/test/UnitTests/CustomRequestCultureProviderTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Tests/CustomRequestCultureProviderTest.cs rename to src/Middleware/Localization/test/UnitTests/CustomRequestCultureProviderTest.cs diff --git a/src/Middleware/Localization/test/UnitTests/Microsoft.AspNetCore.Localization.Tests.csproj b/src/Middleware/Localization/test/UnitTests/Microsoft.AspNetCore.Localization.Tests.csproj new file mode 100644 index 0000000000..0ad51bdc59 --- /dev/null +++ b/src/Middleware/Localization/test/UnitTests/Microsoft.AspNetCore.Localization.Tests.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp3.0 + + + + + + + + + + + diff --git a/test/Microsoft.AspNetCore.Localization.Tests/QueryStringRequestCultureProviderTest.cs b/src/Middleware/Localization/test/UnitTests/QueryStringRequestCultureProviderTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Tests/QueryStringRequestCultureProviderTest.cs rename to src/Middleware/Localization/test/UnitTests/QueryStringRequestCultureProviderTest.cs diff --git a/test/Microsoft.AspNetCore.Localization.Tests/RequestLocalizationOptionsExtensionsTest.cs b/src/Middleware/Localization/test/UnitTests/RequestLocalizationOptionsExtensionsTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Tests/RequestLocalizationOptionsExtensionsTest.cs rename to src/Middleware/Localization/test/UnitTests/RequestLocalizationOptionsExtensionsTest.cs diff --git a/test/Microsoft.AspNetCore.Localization.Tests/RequestLocalizationOptionsTest.cs b/src/Middleware/Localization/test/UnitTests/RequestLocalizationOptionsTest.cs similarity index 100% rename from test/Microsoft.AspNetCore.Localization.Tests/RequestLocalizationOptionsTest.cs rename to src/Middleware/Localization/test/UnitTests/RequestLocalizationOptionsTest.cs diff --git a/src/Middleware/Localization/testassets/LocalizationWebsite/LocalizationWebsite.csproj b/src/Middleware/Localization/testassets/LocalizationWebsite/LocalizationWebsite.csproj new file mode 100644 index 0000000000..d9244e4330 --- /dev/null +++ b/src/Middleware/Localization/testassets/LocalizationWebsite/LocalizationWebsite.csproj @@ -0,0 +1,21 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + + + + + + diff --git a/test/LocalizationWebsite/Models/Customer.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/Models/Customer.cs similarity index 100% rename from test/LocalizationWebsite/Models/Customer.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/Models/Customer.cs diff --git a/test/LocalizationWebsite/Models/Customer.fr-FR.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/Models/Customer.fr-FR.resx similarity index 100% rename from test/LocalizationWebsite/Models/Customer.fr-FR.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/Models/Customer.fr-FR.resx diff --git a/test/LocalizationWebsite/Program.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/Program.cs similarity index 100% rename from test/LocalizationWebsite/Program.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/Program.cs diff --git a/test/LocalizationWebsite/Resources/Models.Customer.fr-FR.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/Resources/Models.Customer.fr-FR.resx similarity index 100% rename from test/LocalizationWebsite/Resources/Models.Customer.fr-FR.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/Resources/Models.Customer.fr-FR.resx diff --git a/test/LocalizationWebsite/Resources/StartupCustomCulturePreserved.en-US.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/Resources/StartupCustomCulturePreserved.en-US.resx similarity index 100% rename from test/LocalizationWebsite/Resources/StartupCustomCulturePreserved.en-US.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/Resources/StartupCustomCulturePreserved.en-US.resx diff --git a/test/LocalizationWebsite/Resources/StartupResourcesInFolder.fr-FR.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/Resources/StartupResourcesInFolder.fr-FR.resx similarity index 100% rename from test/LocalizationWebsite/Resources/StartupResourcesInFolder.fr-FR.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/Resources/StartupResourcesInFolder.fr-FR.resx diff --git a/test/LocalizationWebsite/Resources/Test.fr-FR.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/Resources/Test.fr-FR.resx similarity index 100% rename from test/LocalizationWebsite/Resources/Test.fr-FR.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/Resources/Test.fr-FR.resx diff --git a/test/LocalizationWebsite/StartupBuilderAPIs.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupBuilderAPIs.cs similarity index 100% rename from test/LocalizationWebsite/StartupBuilderAPIs.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupBuilderAPIs.cs diff --git a/test/LocalizationWebsite/StartupCustomCulturePreserved.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupCustomCulturePreserved.cs similarity index 100% rename from test/LocalizationWebsite/StartupCustomCulturePreserved.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupCustomCulturePreserved.cs diff --git a/test/LocalizationWebsite/StartupGetAllStrings.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupGetAllStrings.cs similarity index 100% rename from test/LocalizationWebsite/StartupGetAllStrings.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupGetAllStrings.cs diff --git a/test/LocalizationWebsite/StartupResourcesAtRootFolder.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesAtRootFolder.cs similarity index 100% rename from test/LocalizationWebsite/StartupResourcesAtRootFolder.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesAtRootFolder.cs diff --git a/test/LocalizationWebsite/StartupResourcesAtRootFolder.fr-FR.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesAtRootFolder.fr-FR.resx similarity index 100% rename from test/LocalizationWebsite/StartupResourcesAtRootFolder.fr-FR.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesAtRootFolder.fr-FR.resx diff --git a/test/LocalizationWebsite/StartupResourcesInClassLibrary.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesInClassLibrary.cs similarity index 100% rename from test/LocalizationWebsite/StartupResourcesInClassLibrary.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesInClassLibrary.cs diff --git a/test/LocalizationWebsite/StartupResourcesInFolder.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesInFolder.cs similarity index 100% rename from test/LocalizationWebsite/StartupResourcesInFolder.cs rename to src/Middleware/Localization/testassets/LocalizationWebsite/StartupResourcesInFolder.cs diff --git a/test/LocalizationWebsite/Test.fr-FR.resx b/src/Middleware/Localization/testassets/LocalizationWebsite/Test.fr-FR.resx similarity index 100% rename from test/LocalizationWebsite/Test.fr-FR.resx rename to src/Middleware/Localization/testassets/LocalizationWebsite/Test.fr-FR.resx diff --git a/test/ResourcesClassLibraryNoAttribute/Model.cs b/src/Middleware/Localization/testassets/ResourcesClassLibraryNoAttribute/Model.cs similarity index 100% rename from test/ResourcesClassLibraryNoAttribute/Model.cs rename to src/Middleware/Localization/testassets/ResourcesClassLibraryNoAttribute/Model.cs diff --git a/test/ResourcesClassLibraryNoAttribute/Resources/Model.resx b/src/Middleware/Localization/testassets/ResourcesClassLibraryNoAttribute/Resources/Model.resx similarity index 100% rename from test/ResourcesClassLibraryNoAttribute/Resources/Model.resx rename to src/Middleware/Localization/testassets/ResourcesClassLibraryNoAttribute/Resources/Model.resx diff --git a/test/ResourcesClassLibraryNoAttribute/ResourcesClassLibraryNoAttribute.csproj b/src/Middleware/Localization/testassets/ResourcesClassLibraryNoAttribute/ResourcesClassLibraryNoAttribute.csproj similarity index 100% rename from test/ResourcesClassLibraryNoAttribute/ResourcesClassLibraryNoAttribute.csproj rename to src/Middleware/Localization/testassets/ResourcesClassLibraryNoAttribute/ResourcesClassLibraryNoAttribute.csproj diff --git a/test/ResourcesClassLibraryWithAttribute/AssemblyInfo.cs b/src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/AssemblyInfo.cs similarity index 100% rename from test/ResourcesClassLibraryWithAttribute/AssemblyInfo.cs rename to src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/AssemblyInfo.cs diff --git a/test/ResourcesClassLibraryWithAttribute/Model.cs b/src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/Model.cs similarity index 100% rename from test/ResourcesClassLibraryWithAttribute/Model.cs rename to src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/Model.cs diff --git a/test/ResourcesClassLibraryWithAttribute/ResourceFolder/Model.resx b/src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/ResourceFolder/Model.resx similarity index 100% rename from test/ResourcesClassLibraryWithAttribute/ResourceFolder/Model.resx rename to src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/ResourceFolder/Model.resx diff --git a/test/ResourcesClassLibraryWithAttribute/ResourcesClassLibraryWithAttribute.csproj b/src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/ResourcesClassLibraryWithAttribute.csproj similarity index 65% rename from test/ResourcesClassLibraryWithAttribute/ResourcesClassLibraryWithAttribute.csproj rename to src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/ResourcesClassLibraryWithAttribute.csproj index 692d903799..9d1523c3be 100644 --- a/test/ResourcesClassLibraryWithAttribute/ResourcesClassLibraryWithAttribute.csproj +++ b/src/Middleware/Localization/testassets/ResourcesClassLibraryWithAttribute/ResourcesClassLibraryWithAttribute.csproj @@ -6,7 +6,7 @@ - + diff --git a/test/Directory.Build.props b/test/Directory.Build.props deleted file mode 100644 index 1e0980f663..0000000000 --- a/test/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/test/LocalizationWebsite/LocalizationWebsite.csproj b/test/LocalizationWebsite/LocalizationWebsite.csproj deleted file mode 100644 index 0547ec8dda..0000000000 --- a/test/LocalizationWebsite/LocalizationWebsite.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - - - diff --git a/test/Microsoft.AspNetCore.Localization.FunctionalTests/Microsoft.AspNetCore.Localization.FunctionalTests.csproj b/test/Microsoft.AspNetCore.Localization.FunctionalTests/Microsoft.AspNetCore.Localization.FunctionalTests.csproj deleted file mode 100644 index ba3c8d5580..0000000000 --- a/test/Microsoft.AspNetCore.Localization.FunctionalTests/Microsoft.AspNetCore.Localization.FunctionalTests.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - - - - diff --git a/test/Microsoft.AspNetCore.Localization.Routing.Tests/Microsoft.AspNetCore.Localization.Routing.Tests.csproj b/test/Microsoft.AspNetCore.Localization.Routing.Tests/Microsoft.AspNetCore.Localization.Routing.Tests.csproj deleted file mode 100644 index 0f9fe43666..0000000000 --- a/test/Microsoft.AspNetCore.Localization.Routing.Tests/Microsoft.AspNetCore.Localization.Routing.Tests.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - diff --git a/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj b/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj deleted file mode 100644 index 5a5f0a6caa..0000000000 --- a/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - - - diff --git a/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs b/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs deleted file mode 100644 index d78581655c..0000000000 --- a/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Linq; -using Microsoft.Extensions.Localization; -using Microsoft.Extensions.Options; -using Xunit; - -namespace Microsoft.Extensions.DependencyInjection -{ - public class LocalizationServiceCollectionExtensionsTest - { - [Fact] - public void AddLocalization_AddsNeededServices() - { - // Arrange - var collection = new ServiceCollection(); - - // Act - LocalizationServiceCollectionExtensions.AddLocalizationServices(collection); - - // Assert - AssertContainsSingle(collection, typeof(IStringLocalizerFactory), typeof(ResourceManagerStringLocalizerFactory)); - AssertContainsSingle(collection, typeof(IStringLocalizer<>), typeof(StringLocalizer<>)); - } - - [Fact] - public void AddLocalizationWithLocalizationOptions_AddsNeededServices() - { - // Arrange - var collection = new ServiceCollection(); - - // Act - LocalizationServiceCollectionExtensions.AddLocalizationServices( - collection, - options => options.ResourcesPath = "Resources"); - - AssertContainsSingle(collection, typeof(IStringLocalizerFactory), typeof(ResourceManagerStringLocalizerFactory)); - AssertContainsSingle(collection, typeof(IStringLocalizer<>), typeof(StringLocalizer<>)); - } - - private void AssertContainsSingle( - IServiceCollection services, - Type serviceType, - Type implementationType) - { - var matches = services - .Where(sd => - sd.ServiceType == serviceType && - sd.ImplementationType == implementationType) - .ToArray(); - - if (matches.Length == 0) - { - Assert.True( - false, - $"Could not find an instance of {implementationType} registered as {serviceType}"); - } - else if (matches.Length > 1) - { - Assert.True( - false, - $"Found multiple instances of {implementationType} registered as {serviceType}"); - } - } - } -} diff --git a/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj b/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj deleted file mode 100644 index 3d0113b6aa..0000000000 --- a/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - netcoreapp3.0;net461 - - - - - - - - - - - - - - - - - diff --git a/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs b/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs deleted file mode 100644 index 7a18c0e4bd..0000000000 --- a/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.IO; -using System.Reflection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Options; -using Moq; -using Xunit; - -// This namespace intentionally matches the default assembly namespace. -namespace Microsoft.Extensions.Localization.Tests -{ - public class TestResourceManagerStringLocalizerFactory : ResourceManagerStringLocalizerFactory - { - private ResourceLocationAttribute _resourceLocationAttribute; - - private RootNamespaceAttribute _rootNamespaceAttribute; - - public Assembly Assembly { get; private set; } - public string BaseName { get; private set; } - - public TestResourceManagerStringLocalizerFactory( - IOptions localizationOptions, - ResourceLocationAttribute resourceLocationAttribute, - RootNamespaceAttribute rootNamespaceAttribute, - ILoggerFactory loggerFactory) - : base(localizationOptions, loggerFactory) - { - _resourceLocationAttribute = resourceLocationAttribute; - _rootNamespaceAttribute = rootNamespaceAttribute; - } - - protected override ResourceLocationAttribute GetResourceLocationAttribute(Assembly assembly) - { - return _resourceLocationAttribute; - } - - protected override RootNamespaceAttribute GetRootNamespaceAttribute(Assembly assembly) - { - return _rootNamespaceAttribute; - } - - protected override ResourceManagerStringLocalizer CreateResourceManagerStringLocalizer(Assembly assembly, string baseName) - { - BaseName = baseName; - Assembly = assembly; - - return base.CreateResourceManagerStringLocalizer(assembly, baseName); - } - } - - public class ResourceManagerStringLocalizerFactoryTest - { - [Fact] - public void Create_OverloadsProduceSameResult() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - - var resourceLocationAttribute = new ResourceLocationAttribute(Path.Combine("My", "Resources")); - var loggerFactory = NullLoggerFactory.Instance; - var typeFactory = new TestResourceManagerStringLocalizerFactory( - options.Object, - resourceLocationAttribute, - rootNamespaceAttribute: null, - loggerFactory: loggerFactory); - var stringFactory = new TestResourceManagerStringLocalizerFactory( - options.Object, - resourceLocationAttribute, - rootNamespaceAttribute: null, - loggerFactory: loggerFactory); - var type = typeof(ResourceManagerStringLocalizerFactoryTest); - var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName); - - // Act - typeFactory.Create(type); - stringFactory.Create(type.Name, assemblyName.Name); - - // Assert - Assert.Equal(typeFactory.BaseName, stringFactory.BaseName); - Assert.Equal(typeFactory.Assembly.FullName, stringFactory.Assembly.FullName); - } - - [Fact] - public void Create_FromType_ReturnsCachedResultForSameType() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); - - // Act - var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest)); - var result2 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest)); - - // Assert - Assert.Same(result1, result2); - } - - [Fact] - public void Create_FromType_ReturnsNewResultForDifferentType() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); - - // Act - var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest)); - var result2 = factory.Create(typeof(LocalizationOptions)); - - // Assert - Assert.NotSame(result1, result2); - } - - [Fact] - public void Create_ResourceLocationAttribute_RootNamespaceIgnoredWhenNoLocation() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - - var resourcePath = Path.Combine("My", "Resources"); - var rootNamespace = "MyNamespace"; - var rootNamespaceAttribute = new RootNamespaceAttribute(rootNamespace); - - var typeFactory = new TestResourceManagerStringLocalizerFactory( - options.Object, - resourceLocationAttribute: null, - rootNamespaceAttribute: rootNamespaceAttribute, - loggerFactory: loggerFactory); - - var type = typeof(ResourceManagerStringLocalizerFactoryTest); - // Act - typeFactory.Create(type); - - // Assert - Assert.Equal($"Microsoft.Extensions.Localization.Tests.ResourceManagerStringLocalizerFactoryTest", typeFactory.BaseName); - } - - [Fact] - public void Create_ResourceLocationAttribute_UsesRootNamespace() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - - var resourcePath = Path.Combine("My", "Resources"); - var rootNamespace = "MyNamespace"; - var resourceLocationAttribute = new ResourceLocationAttribute(resourcePath); - var rootNamespaceAttribute = new RootNamespaceAttribute(rootNamespace); - - var typeFactory = new TestResourceManagerStringLocalizerFactory( - options.Object, - resourceLocationAttribute, - rootNamespaceAttribute, - loggerFactory); - - var type = typeof(ResourceManagerStringLocalizerFactoryTest); - // Act - typeFactory.Create(type); - - // Assert - Assert.Equal($"MyNamespace.My.Resources.ResourceManagerStringLocalizerFactoryTest", typeFactory.BaseName); - } - - [Fact] - public void Create_FromType_ResourcesPathDirectorySeperatorToDot() - { - // Arrange - var locOptions = new LocalizationOptions(); - locOptions.ResourcesPath = Path.Combine("My", "Resources"); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new TestResourceManagerStringLocalizerFactory( - options.Object, - resourceLocationAttribute: null, - rootNamespaceAttribute: null, - loggerFactory: loggerFactory); - - // Act - factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest)); - - // Assert - Assert.Equal("Microsoft.Extensions.Localization.Tests.My.Resources." + nameof(ResourceManagerStringLocalizerFactoryTest), factory.BaseName); - } - - [Fact] - public void Create_FromNameLocation_ReturnsCachedResultForSameNameLocation() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); - var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName; - - // Act - var result1 = factory.Create("baseName", location); - var result2 = factory.Create("baseName", location); - - // Assert - Assert.Same(result1, result2); - } - - [Fact] - public void Create_FromNameLocation_ReturnsNewResultForDifferentName() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); - var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName; - - // Act - var result1 = factory.Create("baseName1", location); - var result2 = factory.Create("baseName2", location); - - // Assert - Assert.NotSame(result1, result2); - } - - [Fact] - public void Create_FromNameLocation_ReturnsNewResultForDifferentLocation() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); - var location1 = new AssemblyName(typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName).Name; - var location2 = new AssemblyName(typeof(ResourceManagerStringLocalizerFactoryTest).GetTypeInfo().Assembly.FullName).Name; - - // Act - var result1 = factory.Create("baseName", location1); - var result2 = factory.Create("baseName", location2); - - // Assert - Assert.NotSame(result1, result2); - } - - [Fact] - public void Create_FromNameLocation_ResourcesPathDirectorySeparatorToDot() - { - // Arrange - var locOptions = new LocalizationOptions(); - locOptions.ResourcesPath = Path.Combine("My", "Resources"); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new TestResourceManagerStringLocalizerFactory( - options.Object, - resourceLocationAttribute: null, - rootNamespaceAttribute: null, - loggerFactory: loggerFactory); - - // Act - var result1 = factory.Create("baseName", location: "Microsoft.Extensions.Localization.Tests"); - - // Assert - Assert.Equal("Microsoft.Extensions.Localization.Tests.My.Resources.baseName", factory.BaseName); - } - - [Fact] - public void Create_FromNameLocation_NullLocationThrows() - { - // Arrange - var locOptions = new LocalizationOptions(); - var options = new Mock>(); - options.Setup(o => o.Value).Returns(locOptions); - var loggerFactory = NullLoggerFactory.Instance; - var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); - - // Act & Assert - Assert.Throws(() => factory.Create("baseName", location: null)); - } - } -} diff --git a/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs b/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs deleted file mode 100644 index ff7bfa9933..0000000000 --- a/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs +++ /dev/null @@ -1,299 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Resources; -using Microsoft.AspNetCore.Testing; -using Microsoft.Extensions.Localization.Internal; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Testing; -using Xunit; - -namespace Microsoft.Extensions.Localization -{ - public class ResourceManagerStringLocalizerTest - { - [Fact] - public void EnumeratorCachesCultureWalkForSameAssembly() - { - // Arrange - var resourceNamesCache = new ResourceNamesCache(); - var baseName = "test"; - var resourceAssembly = new TestAssemblyWrapper(); - var resourceManager = new TestResourceManager(baseName, resourceAssembly); - var resourceStreamManager = new TestResourceStringProvider( - resourceNamesCache, - resourceManager, - resourceAssembly.Assembly, - baseName); - var logger = Logger; - var localizer1 = new ResourceManagerStringLocalizer(resourceManager, - resourceStreamManager, - baseName, - resourceNamesCache, - logger); - var localizer2 = new ResourceManagerStringLocalizer(resourceManager, - resourceStreamManager, - baseName, - resourceNamesCache, - logger); - - // Act - for (var i = 0; i < 5; i++) - { - localizer1.GetAllStrings().ToList(); - localizer2.GetAllStrings().ToList(); - } - - // Assert - var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture); - Assert.Equal(expectedCallCount, resourceAssembly.ManifestResourceStreamCallCount); - } - - [Fact] - public void EnumeratorCacheIsScopedByAssembly() - { - // Arrange - var resourceNamesCache = new ResourceNamesCache(); - var baseName = "test"; - var resourceAssembly1 = new TestAssemblyWrapper(typeof(ResourceManagerStringLocalizerTest)); - var resourceAssembly2 = new TestAssemblyWrapper(typeof(ResourceManagerStringLocalizer)); - var resourceManager1 = new TestResourceManager(baseName, resourceAssembly1); - var resourceManager2 = new TestResourceManager(baseName, resourceAssembly2); - var resourceStreamManager1 = new TestResourceStringProvider(resourceNamesCache, resourceManager1, resourceAssembly1.Assembly, baseName); - var resourceStreamManager2 = new TestResourceStringProvider(resourceNamesCache, resourceManager2, resourceAssembly2.Assembly, baseName); - var logger = Logger; - var localizer1 = new ResourceManagerStringLocalizer( - resourceManager1, - resourceStreamManager1, - baseName, - resourceNamesCache, - logger); - var localizer2 = new ResourceManagerStringLocalizer( - resourceManager2, - resourceStreamManager2, - baseName, - resourceNamesCache, - logger); - - // Act - localizer1.GetAllStrings().ToList(); - localizer2.GetAllStrings().ToList(); - - // Assert - var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture); - Assert.Equal(expectedCallCount, resourceAssembly1.ManifestResourceStreamCallCount); - Assert.Equal(expectedCallCount, resourceAssembly2.ManifestResourceStreamCallCount); - } - - [Fact] - public void GetString_PopulatesSearchedLocationOnLocalizedString() - { - // Arrange - var baseName = "Resources.TestResource"; - var resourceNamesCache = new ResourceNamesCache(); - var resourceAssembly = new TestAssemblyWrapper(); - var resourceManager = new TestResourceManager(baseName, resourceAssembly); - var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceManager, resourceAssembly.Assembly, baseName); - var logger = Logger; - var localizer = new ResourceManagerStringLocalizer( - resourceManager, - resourceStreamManager, - baseName, - resourceNamesCache, - logger); - - // Act - var value = localizer["name"]; - - // Assert - Assert.Equal("Resources.TestResource", value.SearchedLocation); - } - - [Fact] - [ReplaceCulture("en-US", "en-US")] - public void GetString_LogsLocationSearched() - { - // Arrange - var baseName = "Resources.TestResource"; - var resourceNamesCache = new ResourceNamesCache(); - var resourceAssembly = new TestAssemblyWrapper(); - var resourceManager = new TestResourceManager(baseName, resourceAssembly); - var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceManager, resourceAssembly.Assembly, baseName); - var logger = Logger; - - var localizer = new ResourceManagerStringLocalizer( - resourceManager, - resourceStreamManager, - baseName, - resourceNamesCache, - logger); - - // Act - var value = localizer["a key!"]; - - // Assert - var write = Assert.Single(Sink.Writes); - Assert.Equal("ResourceManagerStringLocalizer searched for 'a key!' in 'Resources.TestResource' with culture 'en-US'.", write.State.ToString()); - } - - [Theory] - [InlineData(true)] - [InlineData(false)] - public void ResourceManagerStringLocalizer_GetAllStrings_ReturnsExpectedValue(bool includeParentCultures) - { - // Arrange - var baseName = "test"; - var resourceNamesCache = new ResourceNamesCache(); - var resourceAssembly = new TestAssemblyWrapper(); - var resourceManager = new TestResourceManager(baseName, resourceAssembly); - var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceManager, resourceAssembly.Assembly, baseName); - var logger = Logger; - var localizer = new ResourceManagerStringLocalizer( - resourceManager, - resourceStreamManager, - baseName, - resourceNamesCache, - logger); - - // Act - // We have to access the result so it evaluates. - var strings = localizer.GetAllStrings(includeParentCultures).ToList(); - - // Assert - var value = Assert.Single(strings); - Assert.Equal("TestName", value.Value); - } - - [Theory] - [InlineData(true)] - [InlineData(false)] - public void ResourceManagerStringLocalizer_GetAllStrings_MissingResourceThrows(bool includeParentCultures) - { - // Arrange - var resourceNamesCache = new ResourceNamesCache(); - var baseName = "testington"; - var resourceAssembly = new TestAssemblyWrapper(); - resourceAssembly.HasResources = false; - var resourceManager = new TestResourceManager(baseName, resourceAssembly); - var logger = Logger; - - var localizer = new ResourceManagerWithCultureStringLocalizer( - resourceManager, - resourceAssembly.Assembly, - baseName, - resourceNamesCache, - CultureInfo.CurrentCulture, - logger); - - // Act & Assert - var exception = Assert.Throws(() => - { - // We have to access the result so it evaluates. - localizer.GetAllStrings(includeParentCultures).ToArray(); - }); - - var expectedTries = includeParentCultures ? 3 : 1; - var expected = includeParentCultures - ? "No manifests exist for the current culture." - : $"The manifest 'testington.{CultureInfo.CurrentCulture}.resources' was not found."; - Assert.Equal(expected, exception.Message); - Assert.Equal(expectedTries, resourceAssembly.ManifestResourceStreamCallCount); - } - - private static Stream MakeResourceStream() - { - var stream = new MemoryStream(); - var resourceWriter = new ResourceWriter(stream); - resourceWriter.AddResource("TestName", "value"); - resourceWriter.Generate(); - stream.Position = 0; - return stream; - } - - private static int GetCultureInfoDepth(CultureInfo culture) - { - var result = 0; - var currentCulture = culture; - - while (true) - { - result++; - - if (currentCulture == currentCulture.Parent) - { - break; - } - - currentCulture = currentCulture.Parent; - } - - return result; - } - - - private TestSink Sink { get; } = new TestSink(); - - private ILogger Logger => new TestLoggerFactory(Sink, enabled: true).CreateLogger(); - - public class TestResourceManager : ResourceManager - { - private AssemblyWrapper _assemblyWrapper; - - public TestResourceManager(string baseName, AssemblyWrapper assemblyWrapper) - : base(baseName, assemblyWrapper.Assembly) - { - _assemblyWrapper = assemblyWrapper; - } - - public override string GetString(string name, CultureInfo culture) => null; - - public override ResourceSet GetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents) - { - var resourceStream = _assemblyWrapper.GetManifestResourceStream(BaseName); - - return resourceStream != null ? new ResourceSet(resourceStream) : null; - } - } - - public class TestResourceStringProvider : ResourceManagerStringProvider - { - public TestResourceStringProvider( - IResourceNamesCache resourceCache, - TestResourceManager resourceManager, - Assembly assembly, - string resourceBaseName) - : base(resourceCache, resourceManager, assembly, resourceBaseName) - { - } - } - - public class TestAssemblyWrapper : AssemblyWrapper - { - public TestAssemblyWrapper() - : this(typeof(TestAssemblyWrapper)) - { - } - - public TestAssemblyWrapper(Type type) - : base(type.GetTypeInfo().Assembly) - { - } - - public bool HasResources { get; set; } = true; - - public int ManifestResourceStreamCallCount { get; private set; } - - public override Stream GetManifestResourceStream(string name) - { - ManifestResourceStreamCallCount++; - - return HasResources ? MakeResourceStream() : null; - } - } - } -} diff --git a/version.props b/version.props deleted file mode 100644 index 71a78cddd8..0000000000 --- a/version.props +++ /dev/null @@ -1,12 +0,0 @@ - - - 3.0.0 - alpha1 - $(VersionPrefix) - $(VersionPrefix)-$(VersionSuffix)-final - t000 - a- - $(FeatureBranchVersionPrefix)$(VersionSuffix)-$([System.Text.RegularExpressions.Regex]::Replace('$(FeatureBranchVersionSuffix)', '[^\w-]', '-')) - $(VersionSuffix)-$(BuildNumber) - -