Reorganize source code in preparation to move into aspnet/AspNetCore
Prior to reorganization, this source code was found in de1579bdda
This commit is contained in:
commit
d8c434febe
|
|
@ -1,17 +0,0 @@
|
||||||
init:
|
|
||||||
- git config --global core.autocrlf true
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- dev
|
|
||||||
- /^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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
27
.travis.yml
27
.travis.yml
|
|
@ -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:
|
|
||||||
- dev
|
|
||||||
- /^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
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
trigger:
|
|
||||||
- master
|
|
||||||
- release/*
|
|
||||||
|
|
||||||
resources:
|
|
||||||
repositories:
|
|
||||||
- repository: buildtools
|
|
||||||
type: git
|
|
||||||
name: aspnet-BuildTools
|
|
||||||
ref: refs/heads/release/2.2
|
|
||||||
|
|
||||||
phases:
|
|
||||||
- template: .vsts-pipelines/templates/project-ci.yml@buildtools
|
|
||||||
|
|
@ -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/release/2.2
|
|
||||||
|
|
||||||
phases:
|
|
||||||
- template: .vsts-pipelines/templates/project-ci.yml@buildtools
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
Contributing
|
|
||||||
======
|
|
||||||
|
|
||||||
Information on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/Home/blob/dev/CONTRIBUTING.md) in the Home repo.
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
<Project>
|
|
||||||
<Import
|
|
||||||
Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
|
|
||||||
Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />
|
|
||||||
|
|
||||||
<Import Project="version.props" />
|
|
||||||
<Import Project="build\dependencies.props" />
|
|
||||||
<Import Project="build\sources.props" />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<RepositoryUrl>https://github.com/aspnet/Localization</RepositoryUrl>
|
|
||||||
<RepositoryType>git</RepositoryType>
|
|
||||||
<RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
|
|
||||||
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)build\Key.snk</AssemblyOriginatorKeyFile>
|
|
||||||
<SignAssembly>true</SignAssembly>
|
|
||||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
<Project>
|
|
||||||
<PropertyGroup>
|
|
||||||
<RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.0' ">$(MicrosoftNETCoreApp20PackageVersion)</RuntimeFrameworkVersion>
|
|
||||||
<RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">$(MicrosoftNETCoreApp21PackageVersion)</RuntimeFrameworkVersion>
|
|
||||||
<NETStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard2.0' ">$(NETStandardLibrary20PackageVersion)</NETStandardImplicitPackageVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
14
LICENSE.txt
14
LICENSE.txt
|
|
@ -1,14 +0,0 @@
|
||||||
Copyright (c) .NET Foundation and Contributors
|
|
||||||
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
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.
|
|
||||||
122
Localization.sln
122
Localization.sln
|
|
@ -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
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration>
|
|
||||||
<packageSources>
|
|
||||||
<clear />
|
|
||||||
<!-- Restore sources should be defined in build/sources.props. -->
|
|
||||||
</packageSources>
|
|
||||||
</configuration>
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
"Default": {
|
|
||||||
"rules": [
|
|
||||||
"DefaultCompositeRule"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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"
|
|
||||||
8
build.sh
8
build.sh
|
|
@ -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 "$@"
|
|
||||||
BIN
build/Key.snk
BIN
build/Key.snk
Binary file not shown.
|
|
@ -1,32 +0,0 @@
|
||||||
<Project>
|
|
||||||
<PropertyGroup>
|
|
||||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Package Versions">
|
|
||||||
<InternalAspNetCoreSdkPackageVersion>2.2.0-preview1-20180928.5</InternalAspNetCoreSdkPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreHttpExtensionsPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreHttpExtensionsPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreRoutingAbstractionsPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreRoutingAbstractionsPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreRoutingPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreRoutingPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreServerKestrelPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreTestHostPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreTestHostPackageVersion>
|
|
||||||
<MicrosoftAspNetCoreTestingPackageVersion>2.2.0-preview3-35359</MicrosoftAspNetCoreTestingPackageVersion>
|
|
||||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
|
||||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
|
||||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
|
||||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
|
||||||
<MicrosoftExtensionsLoggingConsolePackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsLoggingConsolePackageVersion>
|
|
||||||
<MicrosoftExtensionsLoggingPackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsLoggingPackageVersion>
|
|
||||||
<MicrosoftExtensionsLoggingTestingPackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsLoggingTestingPackageVersion>
|
|
||||||
<MicrosoftExtensionsOptionsPackageVersion>2.2.0-preview3-35359</MicrosoftExtensionsOptionsPackageVersion>
|
|
||||||
<MicrosoftNETCoreApp20PackageVersion>2.0.9</MicrosoftNETCoreApp20PackageVersion>
|
|
||||||
<MicrosoftNETCoreApp21PackageVersion>2.1.3</MicrosoftNETCoreApp21PackageVersion>
|
|
||||||
<MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
|
|
||||||
<MoqPackageVersion>4.7.49</MoqPackageVersion>
|
|
||||||
<NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
|
|
||||||
<XunitPackageVersion>2.3.1</XunitPackageVersion>
|
|
||||||
<XunitRunnerVisualStudioPackageVersion>2.4.0</XunitRunnerVisualStudioPackageVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
|
|
||||||
<PropertyGroup Label="Package Versions: Pinned" />
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
<Project>
|
|
||||||
<Import Project="dependencies.props" />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ExcludeFromTest Include="$(RepositoryRoot)test\LocalizationWebsite\*.csproj" />
|
|
||||||
<ExcludeFromTest Include="$(RepositoryRoot)test\Resources*\*.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<!-- These properties are use by the automation that updates dependencies.props -->
|
|
||||||
<LineupPackageId>Internal.AspNetCore.Universe.Lineup</LineupPackageId>
|
|
||||||
<LineupPackageVersion>2.2.0-*</LineupPackageVersion>
|
|
||||||
<LineupPackageRestoreSource>https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json</LineupPackageRestoreSource>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<DotNetCoreRuntime Include="$(MicrosoftNETCoreApp20PackageVersion)" />
|
|
||||||
<DotNetCoreRuntime Include="$(MicrosoftNETCoreApp21PackageVersion)" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
<Project>
|
|
||||||
<Import Project="$(DotNetRestoreSourcePropsPath)" Condition="'$(DotNetRestoreSourcePropsPath)' != ''"/>
|
|
||||||
|
|
||||||
<PropertyGroup Label="RestoreSources">
|
|
||||||
<RestoreSources>$(DotNetRestoreSources)</RestoreSources>
|
|
||||||
<RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' ">
|
|
||||||
$(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>
|
|
||||||
<RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'">
|
|
||||||
$(RestoreSources);
|
|
||||||
https://api.nuget.org/v3/index.json;
|
|
||||||
</RestoreSources>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
version:2.2.0-preview1-20180928.5
|
|
||||||
commithash:43faa29f679f47b88689d645b39e6be5e0055d70
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/release/2.2/tools/korebuild.schema.json",
|
|
||||||
"channel": "release/2.2"
|
|
||||||
}
|
|
||||||
2
run.cmd
2
run.cmd
|
|
@ -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"
|
|
||||||
209
run.ps1
209
run.ps1
|
|
@ -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
|
|
||||||
}
|
|
||||||
256
run.sh
256
run.sh
|
|
@ -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] [[--] <Arguments>...]"
|
|
||||||
echo ""
|
|
||||||
echo "Arguments:"
|
|
||||||
echo " command The command to be run."
|
|
||||||
echo " <Arguments>... Arguments passed to the command. Variable number of arguments allowed."
|
|
||||||
echo ""
|
|
||||||
echo "Options:"
|
|
||||||
echo " --verbose Show verbose output."
|
|
||||||
echo " -c|--channel <CHANNEL> The channel of KoreBuild to download. Overrides the value from the config file.."
|
|
||||||
echo " --config-file <FILE> The path to the configuration file that stores values. Defaults to korebuild.json."
|
|
||||||
echo " -d|--dotnet-home <DIR> The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet."
|
|
||||||
echo " --path <PATH> The directory to build. Defaults to the directory containing the script."
|
|
||||||
echo " -s|--tools-source|-ToolsSource <URL> The base url where build tools can be downloaded. Overrides the value from the config file."
|
|
||||||
echo " --tools-source-suffix|-ToolsSourceSuffix <SUFFIX> 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" "$@"
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFrameworks>netcoreapp2.1;netcoreapp2.0;net461</TargetFrameworks>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Localization\Microsoft.AspNetCore.Localization.csproj" />
|
|
||||||
<ProjectReference Include="..\..\src\Microsoft.Extensions.Localization\Microsoft.Extensions.Localization.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="$(MicrosoftAspNetCoreServerIISIntegrationPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="$(MicrosoftExtensionsConfigurationCommandLinePackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsolePackageVersion)" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
<Project>
|
|
||||||
<Import Project="..\Directory.Build.props" />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Internal.AspNetCore.Sdk" PrivateAssets="All" Version="$(InternalAspNetCoreSdkPackageVersion)" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents a service that provides localized strings.
|
|
||||||
/// </summary>
|
|
||||||
public interface IStringLocalizer
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the string resource with the given name.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name of the string resource.</param>
|
|
||||||
/// <returns>The string resource as a <see cref="LocalizedString"/>.</returns>
|
|
||||||
LocalizedString this[string name] { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the string resource with the given name and formatted with the supplied arguments.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name of the string resource.</param>
|
|
||||||
/// <param name="arguments">The values to format the string with.</param>
|
|
||||||
/// <returns>The formatted string resource as a <see cref="LocalizedString"/>.</returns>
|
|
||||||
LocalizedString this[string name, params object[] arguments] { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets all string resources.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="includeParentCultures">
|
|
||||||
/// A <see cref="System.Boolean"/> indicating whether to include strings from parent cultures.
|
|
||||||
/// </param>
|
|
||||||
/// <returns>The strings.</returns>
|
|
||||||
IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="IStringLocalizer"/> for a specific <see cref="CultureInfo"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="culture">The <see cref="CultureInfo"/> to use.</param>
|
|
||||||
/// <returns>A culture-specific <see cref="IStringLocalizer"/>.</returns>
|
|
||||||
IStringLocalizer WithCulture(CultureInfo culture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents a factory that creates <see cref="IStringLocalizer"/> instances.
|
|
||||||
/// </summary>
|
|
||||||
public interface IStringLocalizerFactory
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an <see cref="IStringLocalizer"/> using the <see cref="System.Reflection.Assembly"/> and
|
|
||||||
/// <see cref="Type.FullName"/> of the specified <see cref="Type"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resourceSource">The <see cref="Type"/>.</param>
|
|
||||||
/// <returns>The <see cref="IStringLocalizer"/>.</returns>
|
|
||||||
IStringLocalizer Create(Type resourceSource);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an <see cref="IStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="baseName">The base name of the resource to load strings from.</param>
|
|
||||||
/// <param name="location">The location to load resources from.</param>
|
|
||||||
/// <returns>The <see cref="IStringLocalizer"/>.</returns>
|
|
||||||
IStringLocalizer Create(string baseName, string location);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents an <see cref="IStringLocalizer"/> that provides strings for <typeparamref name="T"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="T">The <see cref="System.Type"/> to provide strings for.</typeparam>
|
|
||||||
public interface IStringLocalizer<T> : IStringLocalizer
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// A locale specific string.
|
|
||||||
/// </summary>
|
|
||||||
public class LocalizedString
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="LocalizedString"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name of the string in the resource it was loaded from.</param>
|
|
||||||
/// <param name="value">The actual string.</param>
|
|
||||||
public LocalizedString(string name, string value)
|
|
||||||
: this(name, value, resourceNotFound: false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="LocalizedString"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name of the string in the resource it was loaded from.</param>
|
|
||||||
/// <param name="value">The actual string.</param>
|
|
||||||
/// <param name="resourceNotFound">Whether the string was not found in a resource. Set this to <c>true</c> to indicate an alternate string value was used.</param>
|
|
||||||
public LocalizedString(string name, string value, bool resourceNotFound)
|
|
||||||
: this(name, value, resourceNotFound, searchedLocation: null)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="LocalizedString"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name of the string in the resource it was loaded from.</param>
|
|
||||||
/// <param name="value">The actual string.</param>
|
|
||||||
/// <param name="resourceNotFound">Whether the string was not found in a resource. Set this to <c>true</c> to indicate an alternate string value was used.</param>
|
|
||||||
/// <param name="searchedLocation">The location which was searched for a localization value.</param>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The name of the string in the resource it was loaded from.
|
|
||||||
/// </summary>
|
|
||||||
public string Name { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The actual string.
|
|
||||||
/// </summary>
|
|
||||||
public string Value { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the string was not found in a resource. If <c>true</c>, an alternate string value was used.
|
|
||||||
/// </summary>
|
|
||||||
public bool ResourceNotFound { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The location which was searched for a localization value.
|
|
||||||
/// </summary>
|
|
||||||
public string SearchedLocation { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the actual string.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>The actual string.</returns>
|
|
||||||
public override string ToString() => Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<Product>Microsoft .NET Extensions</Product>
|
|
||||||
<Description>Abstractions of application localization services.
|
|
||||||
Commonly used types:
|
|
||||||
Microsoft.Extensions.Localization.IStringLocalizer
|
|
||||||
Microsoft.Extensions.Localization.IStringLocalizer<T></Description>
|
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
|
||||||
<NoWarn>$(NoWarn);CS1591</NoWarn>
|
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
|
||||||
<PackageTags>localization</PackageTags>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the string resource with the given name.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="stringLocalizer">The <see cref="IStringLocalizer"/>.</param>
|
|
||||||
/// <param name="name">The name of the string resource.</param>
|
|
||||||
/// <returns>The string resource as a <see cref="LocalizedString"/>.</returns>
|
|
||||||
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];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the string resource with the given name and formatted with the supplied arguments.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="stringLocalizer">The <see cref="IStringLocalizer"/>.</param>
|
|
||||||
/// <param name="name">The name of the string resource.</param>
|
|
||||||
/// <param name="arguments">The values to format the string with.</param>
|
|
||||||
/// <returns>The formatted string resource as a <see cref="LocalizedString"/>.</returns>
|
|
||||||
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];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets all string resources including those for parent cultures.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="stringLocalizer">The <see cref="IStringLocalizer"/>.</param>
|
|
||||||
/// <returns>The string resources.</returns>
|
|
||||||
public static IEnumerable<LocalizedString> GetAllStrings(this IStringLocalizer stringLocalizer)
|
|
||||||
{
|
|
||||||
if (stringLocalizer == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(stringLocalizer));
|
|
||||||
}
|
|
||||||
|
|
||||||
return stringLocalizer.GetAllStrings(includeParentCultures: true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Provides strings for <typeparamref name="TResourceSource"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TResourceSource">The <see cref="Type"/> to provide strings for.</typeparam>
|
|
||||||
public class StringLocalizer<TResourceSource> : IStringLocalizer<TResourceSource>
|
|
||||||
{
|
|
||||||
private IStringLocalizer _localizer;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="StringLocalizer{TResourceSource}"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="factory">The <see cref="IStringLocalizerFactory"/> to use.</param>
|
|
||||||
public StringLocalizer(IStringLocalizerFactory factory)
|
|
||||||
{
|
|
||||||
if (factory == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(factory));
|
|
||||||
}
|
|
||||||
|
|
||||||
_localizer = factory.Create(typeof(TResourceSource));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public virtual IStringLocalizer WithCulture(CultureInfo culture) => _localizer.WithCulture(culture);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public virtual LocalizedString this[string name]
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (name == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
return _localizer[name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public virtual LocalizedString this[string name, params object[] arguments]
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (name == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
return _localizer[name, arguments];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures) =>
|
|
||||||
_localizer.GetAllStrings(includeParentCultures);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Microsoft.Extensions.Localization.LocalizedString>",
|
|
||||||
"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<T0>",
|
|
||||||
"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<Microsoft.Extensions.Localization.LocalizedString>",
|
|
||||||
"Static": true,
|
|
||||||
"Extension": true,
|
|
||||||
"Visibility": "Public",
|
|
||||||
"GenericParameter": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"GenericParameters": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "Microsoft.Extensions.Localization.StringLocalizer<T0>",
|
|
||||||
"Visibility": "Public",
|
|
||||||
"Kind": "Class",
|
|
||||||
"ImplementedInterfaces": [
|
|
||||||
"Microsoft.Extensions.Localization.IStringLocalizer<T0>"
|
|
||||||
],
|
|
||||||
"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<Microsoft.Extensions.Localization.LocalizedString>",
|
|
||||||
"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": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents a cache of string names in resources.
|
|
||||||
/// </summary>
|
|
||||||
public interface IResourceNamesCache
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a set of resource names to the cache by using the specified function, if the name does not already exist.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The resource name to add string names for.</param>
|
|
||||||
/// <param name="valueFactory">The function used to generate the string names for the resource.</param>
|
|
||||||
/// <returns>The string names for the resource.</returns>
|
|
||||||
IList<string> GetOrAdd(string name, Func<string, IList<string>> valueFactory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<string> GetAllResourceStrings(CultureInfo culture, bool throwOnMissing);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<ILogger, string, string, CultureInfo, Exception> _searchedLocation;
|
|
||||||
|
|
||||||
static ResourceManagerStringLocalizerLoggerExtensions()
|
|
||||||
{
|
|
||||||
_searchedLocation = LoggerMessage.Define<string, string, CultureInfo>(
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<string> 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<string>();
|
|
||||||
foreach (DictionaryEntry entry in resourceSet)
|
|
||||||
{
|
|
||||||
names.Add((string)entry.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
return names;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Provides programmatic configuration for localization.
|
|
||||||
/// </summary>
|
|
||||||
public class LocalizationOptions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The relative path under application root where resource files are located.
|
|
||||||
/// </summary>
|
|
||||||
public string ResourcesPath { get; set; } = string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Extension methods for setting up localization services in an <see cref="IServiceCollection" />.
|
|
||||||
/// </summary>
|
|
||||||
public static class LocalizationServiceCollectionExtensions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Adds services required for application localization.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddLocalization(this IServiceCollection services)
|
|
||||||
{
|
|
||||||
if (services == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(services));
|
|
||||||
}
|
|
||||||
|
|
||||||
services.AddOptions();
|
|
||||||
|
|
||||||
AddLocalizationServices(services);
|
|
||||||
|
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds services required for application localization.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
|
|
||||||
/// <param name="setupAction">
|
|
||||||
/// An <see cref="Action{LocalizationOptions}"/> to configure the <see cref="LocalizationOptions"/>.
|
|
||||||
/// </param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddLocalization(
|
|
||||||
this IServiceCollection services,
|
|
||||||
Action<LocalizationOptions> 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<IStringLocalizerFactory, ResourceManagerStringLocalizerFactory>();
|
|
||||||
services.TryAddTransient(typeof(IStringLocalizer<>), typeof(StringLocalizer<>));
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void AddLocalizationServices(
|
|
||||||
IServiceCollection services,
|
|
||||||
Action<LocalizationOptions> setupAction)
|
|
||||||
{
|
|
||||||
AddLocalizationServices(services);
|
|
||||||
services.Configure(setupAction);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<Product>Microsoft .NET Extensions</Product>
|
|
||||||
<Description>Application localization services and default implementation based on ResourceManager to load localized assembly resources.</Description>
|
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
|
||||||
<NoWarn>$(NoWarn);CS1591</NoWarn>
|
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
|
||||||
<PackageTags>localization</PackageTags>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\Microsoft.Extensions.Localization.Abstractions\Microsoft.Extensions.Localization.Abstractions.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsPackageVersion)" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
|
|
@ -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")]
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
// <auto-generated />
|
|
||||||
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);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The manifest '{0}' was not found.
|
|
||||||
/// </summary>
|
|
||||||
internal static string Localization_MissingManifest
|
|
||||||
{
|
|
||||||
get { return GetString("Localization_MissingManifest"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The manifest '{0}' was not found.
|
|
||||||
/// </summary>
|
|
||||||
internal static string FormatLocalization_MissingManifest(object p0)
|
|
||||||
{
|
|
||||||
return string.Format(CultureInfo.CurrentCulture, GetString("Localization_MissingManifest"), p0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// No manifests exist for the current culture.
|
|
||||||
/// </summary>
|
|
||||||
internal static string Localization_MissingManifest_Parent
|
|
||||||
{
|
|
||||||
get { return GetString("Localization_MissingManifest_Parent"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// No manifests exist for the current culture.
|
|
||||||
/// </summary>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Provides the location of resources for an Assembly.
|
|
||||||
/// </summary>
|
|
||||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]
|
|
||||||
public class ResourceLocationAttribute : Attribute
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="ResourceLocationAttribute"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resourceLocation">The location of resources for this Assembly.</param>
|
|
||||||
public ResourceLocationAttribute(string resourceLocation)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(resourceLocation))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(resourceLocation));
|
|
||||||
}
|
|
||||||
|
|
||||||
ResourceLocation = resourceLocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The location of resources for this Assembly.
|
|
||||||
/// </summary>
|
|
||||||
public string ResourceLocation { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An <see cref="IStringLocalizer"/> that uses the <see cref="ResourceManager"/> and
|
|
||||||
/// <see cref="ResourceReader"/> to provide localized strings.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>This type is thread-safe.</remarks>
|
|
||||||
public class ResourceManagerStringLocalizer : IStringLocalizer
|
|
||||||
{
|
|
||||||
private readonly ConcurrentDictionary<string, object> _missingManifestCache = new ConcurrentDictionary<string, object>();
|
|
||||||
private readonly IResourceNamesCache _resourceNamesCache;
|
|
||||||
private readonly ResourceManager _resourceManager;
|
|
||||||
private readonly IResourceStringProvider _resourceStringProvider;
|
|
||||||
private readonly string _resourceBaseName;
|
|
||||||
private readonly ILogger _logger;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="ResourceManagerStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resourceManager">The <see cref="ResourceManager"/> to read strings from.</param>
|
|
||||||
/// <param name="resourceAssembly">The <see cref="Assembly"/> that contains the strings as embedded resources.</param>
|
|
||||||
/// <param name="baseName">The base name of the embedded resource that contains the strings.</param>
|
|
||||||
/// <param name="resourceNamesCache">Cache of the list of strings for a given resource assembly name.</param>
|
|
||||||
/// <param name="logger">The <see cref="ILogger"/>.</param>
|
|
||||||
public ResourceManagerStringLocalizer(
|
|
||||||
ResourceManager resourceManager,
|
|
||||||
Assembly resourceAssembly,
|
|
||||||
string baseName,
|
|
||||||
IResourceNamesCache resourceNamesCache,
|
|
||||||
ILogger logger)
|
|
||||||
: this(
|
|
||||||
resourceManager,
|
|
||||||
new AssemblyWrapper(resourceAssembly),
|
|
||||||
baseName,
|
|
||||||
resourceNamesCache,
|
|
||||||
logger)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Intended for testing purposes only.
|
|
||||||
/// </summary>
|
|
||||||
public ResourceManagerStringLocalizer(
|
|
||||||
ResourceManager resourceManager,
|
|
||||||
AssemblyWrapper resourceAssemblyWrapper,
|
|
||||||
string baseName,
|
|
||||||
IResourceNamesCache resourceNamesCache,
|
|
||||||
ILogger logger)
|
|
||||||
: this(
|
|
||||||
resourceManager,
|
|
||||||
new ResourceManagerStringProvider(
|
|
||||||
resourceNamesCache,
|
|
||||||
resourceManager,
|
|
||||||
resourceAssemblyWrapper.Assembly,
|
|
||||||
baseName),
|
|
||||||
baseName,
|
|
||||||
resourceNamesCache,
|
|
||||||
logger)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Intended for testing purposes only.
|
|
||||||
/// </summary>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="ResourceManagerStringLocalizer"/> for a specific <see cref="CultureInfo"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="culture">The <see cref="CultureInfo"/> to use.</param>
|
|
||||||
/// <returns>A culture-specific <see cref="ResourceManagerStringLocalizer"/>.</returns>
|
|
||||||
public IStringLocalizer WithCulture(CultureInfo culture)
|
|
||||||
{
|
|
||||||
return culture == null
|
|
||||||
? new ResourceManagerStringLocalizer(
|
|
||||||
_resourceManager,
|
|
||||||
_resourceStringProvider,
|
|
||||||
_resourceBaseName,
|
|
||||||
_resourceNamesCache,
|
|
||||||
_logger)
|
|
||||||
: new ResourceManagerWithCultureStringLocalizer(
|
|
||||||
_resourceManager,
|
|
||||||
_resourceStringProvider,
|
|
||||||
_resourceBaseName,
|
|
||||||
_resourceNamesCache,
|
|
||||||
culture,
|
|
||||||
_logger);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public virtual IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures) =>
|
|
||||||
GetAllStrings(includeParentCultures, CultureInfo.CurrentUICulture);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns all strings in the specified culture.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="includeParentCultures"></param>
|
|
||||||
/// <param name="culture">The <see cref="CultureInfo"/> to get strings for.</param>
|
|
||||||
/// <returns>The strings.</returns>
|
|
||||||
protected IEnumerable<LocalizedString> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a resource string from the <see cref="_resourceManager"/> and returns <c>null</c> instead of
|
|
||||||
/// throwing exceptions if a match isn't found.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name of the string resource.</param>
|
|
||||||
/// <param name="culture">The <see cref="CultureInfo"/> to get the string for.</param>
|
|
||||||
/// <returns>The resource string, or <c>null</c> if none was found.</returns>
|
|
||||||
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<string> GetResourceNamesFromCultureHierarchy(CultureInfo startingCulture)
|
|
||||||
{
|
|
||||||
var currentCulture = startingCulture;
|
|
||||||
var resourceNames = new HashSet<string>();
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An <see cref="IStringLocalizerFactory"/> that creates instances of <see cref="ResourceManagerStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// <see cref="ResourceManagerStringLocalizerFactory"/> offers multiple ways to set the relative path of
|
|
||||||
/// resources to be used. They are, in order of precedence:
|
|
||||||
/// <see cref="ResourceLocationAttribute"/> -> <see cref="LocalizationOptions.ResourcesPath"/> -> the project root.
|
|
||||||
/// </remarks>
|
|
||||||
public class ResourceManagerStringLocalizerFactory : IStringLocalizerFactory
|
|
||||||
{
|
|
||||||
private readonly IResourceNamesCache _resourceNamesCache = new ResourceNamesCache();
|
|
||||||
private readonly ConcurrentDictionary<string, ResourceManagerStringLocalizer> _localizerCache =
|
|
||||||
new ConcurrentDictionary<string, ResourceManagerStringLocalizer>();
|
|
||||||
private readonly string _resourcesRelativePath;
|
|
||||||
private readonly ILoggerFactory _loggerFactory;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="ResourceManagerStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="localizationOptions">The <see cref="IOptions{LocalizationOptions}"/>.</param>
|
|
||||||
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
|
|
||||||
public ResourceManagerStringLocalizerFactory(
|
|
||||||
IOptions<LocalizationOptions> 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, '.') + ".";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the resource prefix used to look up the resource.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="typeInfo">The type of the resource to be looked up.</param>
|
|
||||||
/// <returns>The prefix for resource lookup.</returns>
|
|
||||||
protected virtual string GetResourcePrefix(TypeInfo typeInfo)
|
|
||||||
{
|
|
||||||
if (typeInfo == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(typeInfo));
|
|
||||||
}
|
|
||||||
|
|
||||||
return GetResourcePrefix(typeInfo, GetRootNamespace(typeInfo.Assembly), GetResourcePath(typeInfo.Assembly));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the resource prefix used to look up the resource.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="typeInfo">The type of the resource to be looked up.</param>
|
|
||||||
/// <param name="baseNamespace">The base namespace of the application.</param>
|
|
||||||
/// <param name="resourcesRelativePath">The folder containing all resources.</param>
|
|
||||||
/// <returns>The prefix for resource lookup.</returns>
|
|
||||||
/// <remarks>
|
|
||||||
/// 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".
|
|
||||||
/// </remarks>
|
|
||||||
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 + ".");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the resource prefix used to look up the resource.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="baseResourceName">The name of the resource to be looked up</param>
|
|
||||||
/// <param name="baseNamespace">The base namespace of the application.</param>
|
|
||||||
/// <returns>The prefix for resource lookup.</returns>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a <see cref="ResourceManagerStringLocalizer"/> using the <see cref="Assembly"/> and
|
|
||||||
/// <see cref="Type.FullName"/> of the specified <see cref="Type"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resourceSource">The <see cref="Type"/>.</param>
|
|
||||||
/// <returns>The <see cref="ResourceManagerStringLocalizer"/>.</returns>
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a <see cref="ResourceManagerStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="baseName">The base name of the resource to load strings from.</param>
|
|
||||||
/// <param name="location">The location to load resources from.</param>
|
|
||||||
/// <returns>The <see cref="ResourceManagerStringLocalizer"/>.</returns>
|
|
||||||
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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Creates a <see cref="ResourceManagerStringLocalizer"/> for the given input.</summary>
|
|
||||||
/// <param name="assembly">The assembly to create a <see cref="ResourceManagerStringLocalizer"/> for.</param>
|
|
||||||
/// <param name="baseName">The base name of the resource to search for.</param>
|
|
||||||
/// <returns>A <see cref="ResourceManagerStringLocalizer"/> for the given <paramref name="assembly"/> and <paramref name="baseName"/>.</returns>
|
|
||||||
/// <remarks>This method is virtual for testing purposes only.</remarks>
|
|
||||||
protected virtual ResourceManagerStringLocalizer CreateResourceManagerStringLocalizer(
|
|
||||||
Assembly assembly,
|
|
||||||
string baseName)
|
|
||||||
{
|
|
||||||
return new ResourceManagerStringLocalizer(
|
|
||||||
new ResourceManager(baseName, assembly),
|
|
||||||
assembly,
|
|
||||||
baseName,
|
|
||||||
_resourceNamesCache,
|
|
||||||
_loggerFactory.CreateLogger<ResourceManagerStringLocalizer>());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the resource prefix used to look up the resource.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="location">The general location of the resource.</param>
|
|
||||||
/// <param name="baseName">The base name of the resource.</param>
|
|
||||||
/// <param name="resourceLocation">The location of the resource within <paramref name="location"/>.</param>
|
|
||||||
/// <returns>The resource prefix used to look up the resource.</returns>
|
|
||||||
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 + ".");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Gets a <see cref="ResourceLocationAttribute"/> from the provided <see cref="Assembly"/>.</summary>
|
|
||||||
/// <param name="assembly">The assembly to get a <see cref="ResourceLocationAttribute"/> from.</param>
|
|
||||||
/// <returns>The <see cref="ResourceLocationAttribute"/> associated with the given <see cref="Assembly"/>.</returns>
|
|
||||||
/// <remarks>This method is protected and virtual for testing purposes only.</remarks>
|
|
||||||
protected virtual ResourceLocationAttribute GetResourceLocationAttribute(Assembly assembly)
|
|
||||||
{
|
|
||||||
return assembly.GetCustomAttribute<ResourceLocationAttribute>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Gets a <see cref="RootNamespaceAttribute"/> from the provided <see cref="Assembly"/>.</summary>
|
|
||||||
/// <param name="assembly">The assembly to get a <see cref="RootNamespaceAttribute"/> from.</param>
|
|
||||||
/// <returns>The <see cref="RootNamespaceAttribute"/> associated with the given <see cref="Assembly"/>.</returns>
|
|
||||||
/// <remarks>This method is protected and virtual for testing purposes only.</remarks>
|
|
||||||
protected virtual RootNamespaceAttribute GetRootNamespaceAttribute(Assembly assembly)
|
|
||||||
{
|
|
||||||
return assembly.GetCustomAttribute<RootNamespaceAttribute>();
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An <see cref="IStringLocalizer"/> that uses the <see cref="ResourceManager"/> and
|
|
||||||
/// <see cref="ResourceReader"/> to provide localized strings for a specific <see cref="CultureInfo"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class ResourceManagerWithCultureStringLocalizer : ResourceManagerStringLocalizer
|
|
||||||
{
|
|
||||||
private readonly string _resourceBaseName;
|
|
||||||
private readonly CultureInfo _culture;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="ResourceManagerWithCultureStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resourceManager">The <see cref="ResourceManager"/> to read strings from.</param>
|
|
||||||
/// <param name="resourceStringProvider">The <see cref="IResourceStringProvider"/> that can find the resources.</param>
|
|
||||||
/// <param name="baseName">The base name of the embedded resource that contains the strings.</param>
|
|
||||||
/// <param name="resourceNamesCache">Cache of the list of strings for a given resource assembly name.</param>
|
|
||||||
/// <param name="culture">The specific <see cref="CultureInfo"/> to use.</param>
|
|
||||||
/// <param name="logger">The <see cref="ILogger"/>.</param>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="ResourceManagerWithCultureStringLocalizer"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resourceManager">The <see cref="ResourceManager"/> to read strings from.</param>
|
|
||||||
/// <param name="resourceAssembly">The <see cref="Assembly"/> that contains the strings as embedded resources.</param>
|
|
||||||
/// <param name="baseName">The base name of the embedded resource that contains the strings.</param>
|
|
||||||
/// <param name="resourceNamesCache">Cache of the list of strings for a given resource assembly name.</param>
|
|
||||||
/// <param name="culture">The specific <see cref="CultureInfo"/> to use.</param>
|
|
||||||
/// <param name="logger">The <see cref="ILogger"/>.</param>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public override IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures) =>
|
|
||||||
GetAllStrings(includeParentCultures, _culture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An implementation of <see cref="IResourceNamesCache"/> backed by a <see cref="ConcurrentDictionary{TKey, TValue}"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class ResourceNamesCache : IResourceNamesCache
|
|
||||||
{
|
|
||||||
private readonly ConcurrentDictionary<string, IList<string>> _cache = new ConcurrentDictionary<string, IList<string>>();
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public IList<string> GetOrAdd(string name, Func<string, IList<string>> valueFactory)
|
|
||||||
{
|
|
||||||
return _cache.GetOrAdd(name, valueFactory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,126 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="Localization_MissingManifest" xml:space="preserve">
|
|
||||||
<value>The manifest '{0}' was not found.</value>
|
|
||||||
</data>
|
|
||||||
<data name="Localization_MissingManifest_Parent" xml:space="preserve">
|
|
||||||
<value>No manifests exist for the current culture.</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
|
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 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.
|
|
||||||
/// </summary>
|
|
||||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]
|
|
||||||
public class RootNamespaceAttribute : Attribute
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new <see cref="RootNamespaceAttribute"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="rootNamespace">The RootNamespace for this Assembly.</param>
|
|
||||||
public RootNamespaceAttribute(string rootNamespace)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rootNamespace))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(rootNamespace));
|
|
||||||
}
|
|
||||||
|
|
||||||
RootNamespace = rootNamespace;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 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.
|
|
||||||
/// </summary>
|
|
||||||
public string RootNamespace { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Microsoft.Extensions.Localization.LocalizationOptions>"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"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<System.String, System.Collections.Generic.IList<System.String>>"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"ReturnType": "System.Collections.Generic.IList<System.String>",
|
|
||||||
"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<Microsoft.Extensions.Localization.LocalizedString>",
|
|
||||||
"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<Microsoft.Extensions.Localization.LocalizedString>",
|
|
||||||
"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<Microsoft.Extensions.Localization.LocalizationOptions>"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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<Microsoft.Extensions.Localization.LocalizedString>",
|
|
||||||
"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<System.String, System.Collections.Generic.IList<System.String>>"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"ReturnType": "System.Collections.Generic.IList<System.String>",
|
|
||||||
"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": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -10,11 +10,8 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Microsoft.AspNetCore.Localization\Microsoft.AspNetCore.Localization.csproj" />
|
<Reference Include="Microsoft.AspNetCore.Localization" />
|
||||||
</ItemGroup>
|
<Reference Include="Microsoft.AspNetCore.Routing.Abstractions" />
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Routing.Abstractions" Version="$(MicrosoftAspNetCoreRoutingAbstractionsPackageVersion)" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>$(StandardTestTfms)</TargetFrameworks>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Localization.Routing" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Routing" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.TestHost" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -1,18 +1,5 @@
|
||||||
Localization
|
Localization
|
||||||
==========
|
============
|
||||||
AppVeyor: [](https://ci.appveyor.com/project/aspnetci/Localization/branch/dev)
|
|
||||||
|
|
||||||
Travis: [](https://travis-ci.org/aspnet/Localization)
|
|
||||||
|
|
||||||
| Package | [aspnet-core](https://dotnet.myget.org/gallery/aspnetcore-dev) | [NuGet](https://nuget.org) |
|
|
||||||
| ------- | ----------------------- | ----------------- |
|
|
||||||
| Microsoft.Extensions.Localization | [](https://dotnet.myget.org/feed/aspnetcore-dev/package/nuget/Microsoft.Extensions.Localization) | [](https://nuget.org/packages/Microsoft.Extensions.Localization) |
|
|
||||||
| Microsoft.AspNetCore.Localization | [](https://dotnet.myget.org/feed/aspnetcore-dev/package/nuget/Microsoft.AspNetCore.Localization) | [](https://nuget.org/packages/Microsoft.AspNetCore.Localization) |
|
|
||||||
|
|
||||||
|
|
||||||
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 [Home](https://github.com/aspnet/home) repo.
|
|
||||||
|
|
||||||
### Localization Samples
|
### Localization Samples
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>netcoreapp2.1;netcoreapp2.0;net461</TargetFrameworks>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Localization" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Server.IISIntegration" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Configuration.CommandLine" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Localization" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Console" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -10,13 +10,10 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Microsoft.Extensions.Localization.Abstractions\Microsoft.Extensions.Localization.Abstractions.csproj" />
|
<Reference Include="Microsoft.AspNetCore.Http.Extensions" />
|
||||||
</ItemGroup>
|
<Reference Include="Microsoft.Extensions.Localization.Abstractions" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||||
<ItemGroup>
|
<Reference Include="Microsoft.Extensions.Options" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="$(MicrosoftAspNetCoreHttpExtensionsPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>$(StandardTestTfms)</TargetFrameworks>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\sample\LocalizationSample.csproj" />
|
||||||
|
<ProjectReference Include="..\..\testassets\LocalizationWebsite\LocalizationWebsite.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Localization" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.TestHost" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Console" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>$(StandardTestTfms)</TargetFrameworks>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Localization" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.TestHost" />
|
||||||
|
<Reference Include="Microsoft.Extensions.DependencyInjection" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\ResourcesClassLibraryNoAttribute\ResourcesClassLibraryNoAttribute.csproj" />
|
||||||
|
<ProjectReference Include="..\ResourcesClassLibraryWithAttribute\ResourcesClassLibraryWithAttribute.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Localization" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Testing" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Configuration.CommandLine" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Localization" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Console" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue