├── .gitignore
├── Example
└── BlazorWasmMultiLanguages
│ ├── BlazorWasmMultiLanguages.sln
│ └── BlazorWasmMultiLanguages
│ ├── App.razor
│ ├── BlazorWasmMultiLanguages.csproj
│ ├── Pages
│ ├── Counter.razor
│ ├── FetchData.razor
│ └── Index.razor
│ ├── Program.cs
│ ├── Properties
│ └── launchSettings.json
│ ├── Resources
│ ├── ar-SA.yml
│ ├── bg-BG.yml
│ ├── ca-ES.yml
│ ├── de-DE.yml
│ ├── en-US.yml
│ ├── fi-FI.yml
│ ├── fr-FR.yml
│ ├── it-IT.yml
│ ├── ja-JP.yml
│ └── ml-IN.yml
│ ├── Shared
│ ├── MainLayout.razor
│ ├── NavMenu.razor
│ └── SurveyPrompt.razor
│ ├── TestFolder
│ ├── ar-SA.yml
│ ├── bg-BG.yml
│ ├── ca-ES.yml
│ ├── de-DE.yml
│ ├── en-US.yml
│ ├── fi-FI.yml
│ ├── fr-FR.yml
│ ├── it-IT.yml
│ ├── ja-JP.yml
│ └── ml-IN.yml
│ ├── _Imports.razor
│ └── wwwroot
│ ├── German.png
│ ├── Indian.png
│ ├── Japan.png
│ ├── css
│ ├── bootstrap
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.css.map
│ ├── open-iconic
│ │ ├── FONT-LICENSE
│ │ ├── ICON-LICENSE
│ │ ├── README.md
│ │ └── font
│ │ │ ├── css
│ │ │ └── open-iconic-bootstrap.min.css
│ │ │ └── fonts
│ │ │ ├── open-iconic.eot
│ │ │ ├── open-iconic.otf
│ │ │ ├── open-iconic.svg
│ │ │ ├── open-iconic.ttf
│ │ │ └── open-iconic.woff
│ └── site.css
│ ├── de.png
│ ├── es.png
│ ├── fr.png
│ ├── index.html
│ ├── sample-data
│ └── weather.json
│ └── us.png
├── Images
├── Localization Library latest show.gif
├── Localization Library latest show
│ └── Localization Library latest show.gif
├── MultiLanguages Benchamrking Results.png
└── v6
│ ├── hierarchy-friendly.png
│ ├── interpolation-support.png
│ ├── source-generator.png
│ └── yaml-based.png
├── LICENSE
├── README.md
├── azure-pipelines.yml
├── src
├── AKSoftware.Localization.MultiLanguages.Benchmarks
│ ├── AKSoftware.Localization.MultiLanguages.Benchmarks.csproj
│ ├── Program.cs
│ └── Resources
│ │ ├── ar-SA.yml
│ │ ├── bg-BG.yml
│ │ ├── ca-ES.yml
│ │ ├── de-DE.yml
│ │ ├── en-US.yml
│ │ ├── fi-FI.yml
│ │ ├── fr-FR.yml
│ │ ├── it-IT.yml
│ │ ├── ja-JP.yml
│ │ └── ml-IN.yml
├── AKSoftware.Localization.MultiLanguages.Blazor
│ ├── AKSoftware.Localization.MultiLanguages.Blazor.csproj
│ ├── AkMultiLanguages.png
│ ├── BlazorExtensions.cs
│ ├── ComponentExtension.cs
│ └── _Imports.razor
├── AKSoftware.Localization.MultiLanguages.SourceGenerator.Tests
│ ├── AKSoftware.Localization.MultiLanguages.SourceGenerator.Tests.csproj
│ ├── Resources
│ │ └── en-US.yml
│ └── en-US.yml
├── AKSoftware.Localization.MultiLanguages.SourceGenerator
│ ├── AKSoftware.Localization.MultiLanguages.SourceGenerator.csproj
│ ├── AkMultiLanguages.png
│ ├── DependencyInjectionExtensions.cs
│ ├── Docs
│ │ └── README.md
│ ├── GeneratorExtensions.cs
│ ├── KeysAccessorSourceGenerator.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── StaticKeysSourceGenerator.cs
│ └── build
│ │ └── AKSoftware.Localization.MultiLanguages.SourceGenerator.props
├── AKSoftware.Localization.MultiLanguages.Tests
│ ├── AKSoftware.Localization.MultiLanguages.Tests.csproj
│ ├── CodeGeneratorTests
│ │ ├── KeysAccessorGeneratorTests.cs
│ │ ├── KeysGeneratorTestBase.cs
│ │ └── StaticKeysGeneratorTests.cs
│ ├── GenerateStaticKeysServiceTests.cs
│ ├── LanguageContainerWithFolderKeysProviderTests.cs
│ ├── LanguagesContainerWithEmbeddedKeysProviderTests.cs
│ ├── MyEnum.cs
│ ├── ParseCodeLogicTests.cs
│ ├── Resources
│ │ ├── ar-SA.yml
│ │ ├── bg-BG.yml
│ │ ├── ca-ES.yml
│ │ ├── de-DE.yml
│ │ ├── en-US.yml
│ │ ├── fi-FI.yml
│ │ ├── fr-FR.yml
│ │ ├── it-IT.yml
│ │ ├── ja-JP.yml
│ │ └── ml-IN.yml
│ ├── TestClasses
│ │ └── Customer.cs
│ ├── TestHelper.cs
│ ├── ValidationLocalizationTests.cs
│ └── VerifyLocalization.cs
├── AKSoftware.Localization.MultiLanguages.UWP
│ ├── AKSoftware.Localization.MultiLanguages.UWP.csproj
│ ├── AKSoftware.Localization.MultiLanguages.UWP.nuspec
│ ├── AkMultiLanguages.png
│ ├── Behaviors
│ │ ├── DependencyObjectCollection.cs
│ │ ├── MultiBindingBehavior.cs
│ │ ├── MultiBindingItem.cs
│ │ └── MultiBindingItemCollection.cs
│ ├── Converters
│ │ ├── LocalizationConverter.cs
│ │ └── MultiValueConverterBase.cs
│ ├── Extensions
│ │ ├── LanguageServiceExtension.cs
│ │ └── LocalizeStringExtension.cs
│ ├── ExternalFileKeysProvider.cs
│ ├── IServiceProviderHost.cs
│ ├── LocalizationService.cs
│ └── Properties
│ │ ├── AKSoftware.Localization.MultiLanguages.UWP.rd.xml
│ │ └── AssemblyInfo.cs
├── AKSoftware.Localization.MultiLanguages.sln
├── AKSoftware.Localization.MultiLanguages
│ ├── AKSoftware.Localization.MultiLanguages.csproj
│ ├── AkMultiLanguages.png
│ ├── CodeGeneration
│ │ ├── CodeGenerationExtensions.cs
│ │ ├── CreateCodeLogic.cs
│ │ ├── GenerateStaticKeysService.cs
│ │ ├── IGenerateKeysService.cs
│ │ ├── KeysAccessorGenerator.cs
│ │ └── StaticKeysGenerator.cs
│ ├── DataAttributeParsing.cs
│ ├── Docs
│ │ └── README.md
│ ├── IExtension.cs
│ ├── ILanguageContainerService.cs
│ ├── KeyValueEnumerator.cs
│ ├── Keys.cs
│ ├── LanguageContainer.cs
│ ├── LanguageContainerInAssembly.cs
│ ├── LanguageContainerOptions.cs
│ ├── LocalizationFolderType.cs
│ ├── ParseCodeLogic.cs
│ ├── ParseParms.cs
│ ├── ParseResult.cs
│ ├── Providers
│ │ ├── BaseKeysProvider.cs
│ │ ├── EmbeddedResourceKeysProvider.cs
│ │ ├── FolderResourceKeysProvider.cs
│ │ └── IKeysProvider.cs
│ ├── ServiceExtensions.cs
│ ├── StringUtil.cs
│ └── ValidationLocalization.cs
├── BlazorAKLocalization
│ ├── App.razor
│ ├── BlazorAKLocalization.csproj
│ ├── Pages
│ │ ├── Counter.razor
│ │ ├── FetchData.razor
│ │ └── Index.razor
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── Resources
│ │ ├── ar-SA.yml
│ │ ├── bg-BG.yml
│ │ ├── ca-ES.yml
│ │ ├── de-DE.yml
│ │ ├── en-US.yml
│ │ ├── fi-FI.yml
│ │ ├── fr-FR.yml
│ │ ├── it-IT.yml
│ │ ├── ja-JP.yml
│ │ └── ml-IN.yml
│ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ ├── NavMenu.razor.css
│ │ └── SurveyPrompt.razor
│ ├── _Imports.razor
│ └── wwwroot
│ │ ├── css
│ │ ├── app.css
│ │ ├── bootstrap
│ │ │ ├── bootstrap.min.css
│ │ │ └── bootstrap.min.css.map
│ │ └── open-iconic
│ │ │ ├── FONT-LICENSE
│ │ │ ├── ICON-LICENSE
│ │ │ ├── README.md
│ │ │ └── font
│ │ │ ├── css
│ │ │ └── open-iconic-bootstrap.min.css
│ │ │ └── fonts
│ │ │ ├── open-iconic.eot
│ │ │ ├── open-iconic.otf
│ │ │ ├── open-iconic.svg
│ │ │ ├── open-iconic.ttf
│ │ │ └── open-iconic.woff
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── sample-data
│ │ └── weather.json
├── BlazorServerLocalizationSample
│ ├── App.razor
│ ├── BlazorServerLocalizationSample.csproj
│ ├── Data
│ │ ├── WeatherForecast.cs
│ │ └── WeatherForecastService.cs
│ ├── Pages
│ │ ├── Counter.razor
│ │ ├── Error.cshtml
│ │ ├── Error.cshtml.cs
│ │ ├── FetchData.razor
│ │ ├── Index.razor
│ │ ├── _Host.cshtml
│ │ └── _Layout.cshtml
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── Resources
│ │ ├── ar-SA.yml
│ │ ├── bg-BG.yml
│ │ ├── ca-ES.yml
│ │ ├── de-DE.yml
│ │ ├── en-US.yml
│ │ ├── fi-FI.yml
│ │ ├── fr-FR.yml
│ │ ├── it-IT.yml
│ │ ├── ja-JP.yml
│ │ └── ml-IN.yml
│ ├── Shared
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ ├── NavMenu.razor.css
│ │ └── SurveyPrompt.razor
│ ├── _Imports.razor
│ ├── appsettings.Development.json
│ ├── appsettings.json
│ └── wwwroot
│ │ ├── css
│ │ ├── bootstrap
│ │ │ ├── bootstrap.min.css
│ │ │ └── bootstrap.min.css.map
│ │ ├── open-iconic
│ │ │ ├── FONT-LICENSE
│ │ │ ├── ICON-LICENSE
│ │ │ ├── README.md
│ │ │ └── font
│ │ │ │ ├── css
│ │ │ │ └── open-iconic-bootstrap.min.css
│ │ │ │ └── fonts
│ │ │ │ ├── open-iconic.eot
│ │ │ │ ├── open-iconic.otf
│ │ │ │ ├── open-iconic.svg
│ │ │ │ ├── open-iconic.ttf
│ │ │ │ └── open-iconic.woff
│ │ └── site.css
│ │ └── favicon.ico
├── ConsoleAppSample
│ ├── ConsoleAppSample.csproj
│ ├── Program.cs
│ └── Resources
│ │ ├── ar-SA.yml
│ │ ├── bg-BG.yml
│ │ ├── ca-ES.yml
│ │ ├── de-DE.yml
│ │ ├── en-US.yml
│ │ ├── fi-FI.yml
│ │ ├── fr-FR.yml
│ │ ├── it-IT.yml
│ │ ├── ja-JP.yml
│ │ └── ml-IN.yml
├── TestProject1
│ ├── TestProject1.csproj
│ ├── UnitTest1.cs
│ └── Usings.cs
└── UwpAkLocalization
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── ApplicationResourceLoader.cs
│ ├── Assets
│ ├── LockScreenLogo.scale-200.png
│ ├── SplashScreen.scale-200.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ ├── StoreLogo.png
│ ├── Wide310x150Logo.scale-200.png
│ ├── ar-SA.png
│ ├── bg-BG.png
│ ├── ca-ES.png
│ ├── de-DE.png
│ ├── en-US.png
│ ├── fi-FI.png
│ ├── fr-FR.png
│ ├── it-IT.png
│ ├── ja-JP.png
│ └── ml-IN.png
│ ├── LocalizationKeys.cs
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── Package.appxmanifest
│ ├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
│ ├── Resources
│ ├── ar-SA.yml
│ ├── bg-BG.yml
│ ├── ca-ES.yml
│ ├── de-DE.yml
│ ├── en-US.yml
│ ├── fi-FI.yml
│ ├── fr-FR.yml
│ ├── it-IT.yml
│ ├── ja-JP.yml
│ └── ml-IN.yml
│ └── UwpAkLocalization.csproj
└── tests
└── AKSoftware.Localization.MultiLanguages.UWP.Tests
├── AKSoftware.Localization.MultiLanguages.UWP.Tests.csproj
├── Assets
├── LockScreenLogo.scale-200.png
├── SplashScreen.scale-200.png
├── Square150x150Logo.scale-200.png
├── Square44x44Logo.scale-200.png
├── Square44x44Logo.targetsize-24_altform-unplated.png
├── StoreLogo.png
└── Wide310x150Logo.scale-200.png
├── EmbeddedResourceKeysProviderTests.cs
├── ExternalFileKeysProviderTests.cs
├── Package.appxmanifest
├── Properties
├── AssemblyInfo.cs
└── Default.rd.xml
├── Resources
├── ar-SA.yml
├── bg-BG.yml
├── ca-ES.yml
├── de-DE.yml
├── en-US.yml
├── fi-FI.yml
├── fr-FR.yml
├── it-IT.yml
├── ja-JP.yml
└── ml-IN.yml
├── TestBase.cs
├── UnitTestApp.xaml
└── UnitTestApp.xaml.cs
/Example/BlazorWasmMultiLanguages/BlazorWasmMultiLanguages.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29709.97
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorWasmMultiLanguages", "BlazorWasmMultiLanguages\BlazorWasmMultiLanguages.csproj", "{933F799A-62E7-4EA0-A50C-18BF4A866F0F}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {933F799A-62E7-4EA0-A50C-18BF4A866F0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {933F799A-62E7-4EA0-A50C-18BF4A866F0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {933F799A-62E7-4EA0-A50C-18BF4A866F0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {933F799A-62E7-4EA0-A50C-18BF4A866F0F}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {EACBFD8F-28ED-4586-A02A-7A695D9D4EEB}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/Example/BlazorWasmMultiLanguages/BlazorWasmMultiLanguages/App.razor:
--------------------------------------------------------------------------------
1 | Sorry, there's nothing at this address.
@languageContainer.Keys["Counter:Title"]: @currentCount
7 | 8 | 9 | 10 | @code { 11 | private int currentCount = 0; 12 | 13 | private void IncrementCount() 14 | { 15 | currentCount++; 16 | } 17 | 18 | 19 | protected override void OnInitialized() 20 | { 21 | languageContainer.InitLocalizedComponent(this); 22 | base.OnInitialized(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/BlazorWasmMultiLanguages/BlazorWasmMultiLanguages/Pages/FetchData.razor: -------------------------------------------------------------------------------- 1 | @page "/fetchdata" 2 | @inject HttpClient Http 3 | @inject ILanguageContainerService languageContainer 4 | 5 |@languageContainer.Keys["FetchData:WeatherTitle"]
8 | 9 | @if (forecasts == null) 10 | { 11 |@languageContainer.Keys["FetchData:Loading"]...
12 | } 13 | else 14 | { 15 |@languageContainer.Keys["FetchData:Date"] | 19 |@languageContainer.Keys["FetchData:Temp"]. (C) | 20 |@languageContainer.Keys["FetchData:Temp"]. (F) | 21 |@languageContainer.Keys["FetchData:Summury"] | 22 |
---|---|---|---|
@forecast.Date.ToShortDateString() | 29 |@forecast.TemperatureC | 30 |@forecast.TemperatureF | 31 |@forecast.Summary | 32 |