├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ └── bug_report.md ├── dependabot.yml ├── release-drafter.yml └── workflows │ ├── compile.yml │ ├── publish.yml │ └── release-drafter.yaml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docs ├── BLoc-and-FELoc.md ├── FAQ.md ├── Features.md ├── GapText.md ├── Installation-and-dependencies.md ├── Keys.md ├── LocProxy-&-EnumComboBox.md ├── Localization-providers.md ├── Localization.md ├── Localize.md ├── Logo.png ├── MarkupExtension-basics.md ├── Multiple-assemblies-and-dictionaries.md ├── Our-first-localized-text.md ├── Preparing-the-XAML-code.md ├── README.md ├── Resource-files.md ├── SAPLogo.gif ├── Structure.png ├── Supported-platforms.md └── ValueConverters.md ├── src ├── Deprecated │ ├── Engine │ │ ├── GapTextControl.cs │ │ ├── LocBinding.cs │ │ └── LocProxy.cs │ ├── Extensions │ │ └── Compatibility.cs │ └── Providers │ │ ├── CSVEmbeddedLocalizationProvider.cs │ │ ├── CSVLocalizationProvider.cs │ │ └── CSVLocalizationProviderBase.cs ├── Engine │ ├── EnumComboBox.cs │ ├── EnumRun.cs │ ├── FallbackBehavior.cs │ ├── IDictionaryEventListener.cs │ ├── ListenerList.cs │ ├── LocalizeDictionary.cs │ ├── MissingKeyEventArgs.cs │ ├── ObjectDependencyManager.cs │ ├── ParentNotifiers.cs │ ├── SafeTargetInfo.cs │ └── WeakReference.cs ├── Extensions │ ├── BLoc.cs │ ├── FELoc.cs │ └── LocExtension.cs ├── Providers │ ├── FQAssemblyDictionaryKey.cs │ ├── FullyQualifiedResourceKeyBase.cs │ ├── IInheritingLocalizationProvider.cs │ ├── ILocalizationProvider.cs │ ├── InheritingResxLocalizationProvider.cs │ ├── ParentChangedNotifierHelper.cs │ ├── ProviderEventArgs.cs │ ├── ResxLocalizationProvider.cs │ └── ResxLocalizationProviderBase.cs ├── Themes │ └── Generic.xaml ├── TypeConverters │ ├── BitmapSourceTypeConverter.cs │ ├── DefaultConverter.cs │ ├── RegisterMissingTypeConverters.cs │ └── ThicknessConverter.cs ├── ValueConverters │ ├── PrependTypeConverter.cs │ ├── StringFormatConverter.cs │ ├── ToLowerConverter.cs │ ├── ToUpperConverter.cs │ ├── TranslateConverter.cs │ └── TypeValueConverterBase.cs ├── WPFLocalizeExtension.csproj ├── WPFLocalizeExtension.sln ├── XmlnsPrefix.cs ├── packages.lock.json └── public.snk └── tests ├── AssemblyTest ├── App.xaml ├── App.xaml.cs ├── AssemblyTest.csproj ├── CaseConverter.cs ├── CountryRes.Designer.cs ├── CountryRes.de.resx ├── CountryRes.resx ├── Example.csv ├── Example.de.csv ├── Item.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── MyViewModel.cs ├── Properties │ └── AssemblyInfo.cs ├── Resource.With.Dot.Designer.cs ├── Resource.With.Dot.de.resx ├── Resource.With.Dot.en.resx ├── Resource.With.Dot.resx ├── Resources │ ├── Austria.png │ ├── France.png │ ├── Germany.png │ ├── Test.bmp │ ├── Test1.bmp │ ├── Test11.bmp │ ├── Test12.bmp │ └── United_Kingdom.png ├── StringFormatProxy.cs ├── Strings.Designer.cs ├── Strings.de.resx ├── Strings.resx ├── Strings2.Designer.cs ├── Strings2.de.resx ├── Strings2.resx ├── TestDataClass.cs ├── TestEnum.cs └── ViewModelBase.cs ├── AssemblyTestResourceLib ├── AssemblyTest.csproj ├── AssemblyTestResourceLib.csproj ├── Properties │ └── AssemblyInfo.cs ├── Resources │ ├── Test.bmp │ ├── Test1.bmp │ ├── Test11.bmp │ └── Test12.bmp ├── Strings.Designer.cs ├── Strings.de.resx ├── Strings.resx ├── Strings2.Designer.cs ├── Strings2.de.resx └── Strings2.resx ├── FluentLexTest ├── Application.xaml ├── Application.xaml.cs ├── Fluent.Sample.Foundation.csproj ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.de.resx │ └── Resources.resx ├── Window.xaml ├── Window.xaml.cs └── app.config ├── GapTextWpfTest ├── App.config ├── App.xaml ├── App.xaml.cs ├── Converters │ └── ObjectTypeEqualsConverter.cs ├── GapTextWpfTest.csproj ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx └── packages.config ├── HelloWorldWPF.sln ├── HelloWorldWPF ├── App.xaml ├── App.xaml.cs ├── HelloWorldWPF.csproj ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Properties │ └── AssemblyInfo.cs ├── Ressourcen.Designer.cs ├── Ressourcen.ar.resx ├── Ressourcen.de.resx ├── Ressourcen.en.resx ├── Ressourcen.he.resx ├── Ressourcen.resx └── TestVM.cs ├── LeakSample.sln ├── LeakSample ├── App.config ├── App.xaml ├── App.xaml.cs ├── LeakSample.csproj ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── MainWindowViewModel.cs ├── Properties │ ├── Annotations.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings └── Resources │ ├── Localization.Designer.cs │ └── Localization.resx ├── LocalizationTest.sln ├── LocalizationTest ├── App.config ├── App.xaml ├── App.xaml.cs ├── Loader.xaml ├── Loader.xaml.cs ├── LocalizationTest.csproj ├── Popup.xaml ├── Popup.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Settings.Designer.cs │ └── Settings.settings ├── TestResource.Designer.cs ├── TestResource.en-GB.resx ├── TestResource.pl-PL.resx └── TestResource.resx ├── MemoryTest.sln ├── MemoryTest ├── App.xaml ├── App.xaml.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── MemoryTest.csproj ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.de.resx │ ├── Resources.en.resx │ └── Resources.resx ├── TestWindow.xaml ├── TestWindow.xaml.cs ├── TestWindowUnlocalized.xaml └── TestWindowUnlocalized.xaml.cs ├── ProviderExample ├── CSVLocalizationProvider.cs ├── ProviderExample.csproj └── TestProvider.cs ├── ResourceAssembly ├── Properties │ └── AssemblyInfo.cs ├── ResTexts.Designer.cs ├── ResTexts.resx └── ResourceAssembly.csproj ├── SatelliteAssemblyTest.sln ├── SatelliteAssemblyTest ├── App.xaml ├── App.xaml.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Properties │ └── AssemblyInfo.cs ├── SatelliteAssemblyTest.csproj ├── TestRes.Designer.cs ├── TestRes.de.resx ├── TestRes.es.resx ├── TestRes.fr.resx ├── TestRes.resx └── packages.config ├── Tests.sln ├── ThreadPerformance.sln ├── ThreadPerformance ├── App.config ├── App.xaml ├── App.xaml.cs ├── MainView.xaml ├── MainView.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── MainView.Designer.cs │ ├── MainView.de.resx │ └── MainView.resx ├── ThreadPerformance.csproj └── packages.config ├── VbWpfApplication.sln ├── VbWpfApplication ├── Application.xaml ├── Application.xaml.vb ├── MainWindow.xaml ├── MainWindow.xaml.vb ├── My Project │ ├── AssemblyInfo.vb │ ├── MyExtensions │ │ └── MyWpfExtension.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings ├── Strings.Designer.vb ├── Strings.en-GB.Designer.vb ├── Strings.en-GB.resx ├── Strings.resx ├── Strings.sv-SE.Designer.vb ├── Strings.sv-SE.resx ├── VbWpfApplication.vbproj └── packages.config ├── WPFLocalizeExtension.UnitTests ├── ValueConvertersTests │ ├── LocExtensionTests.cs │ └── StringFormatConverterTests.cs └── WPFLocalizeExtension.UnitTests.csproj └── XamlLocalizationTest.sln /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [konne, seriousm] 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Code snipet, or better a small code example that shows the issue 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Enviroment (please complete the following information):** 23 | - OS: [e.g. iOS] 24 | - .NET Framework: [e.g. NET452, netcore30] 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: nuget 4 | directory: "/src" 5 | schedule: 6 | interval: daily 7 | time: "08:00" 8 | timezone: Europe/Berlin 9 | target-branch: development 10 | 11 | - package-ecosystem: "github-actions" 12 | directory: "/" 13 | schedule: 14 | # Check for updates to GitHub Actions every weekday 15 | interval: "daily" 16 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | categories: 2 | - title: 'Features' 3 | labels: 4 | - 'feature' 5 | - 'enhancement' 6 | - title: 'Bug Fixes' 7 | labels: 8 | - 'fix' 9 | - 'bugfix' 10 | - 'bug' 11 | - title: 'Maintenance' 12 | labels: 13 | - 'chore' 14 | - 'dependencies' 15 | change-template: '- $TITLE @$AUTHOR (#$NUMBER)' 16 | template: | 17 | ## Changes 18 | 19 | $CHANGES 20 | -------------------------------------------------------------------------------- /.github/workflows/compile.yml: -------------------------------------------------------------------------------- 1 | name: .NET 2 | 3 | on: 4 | push: 5 | branches: [ master, development ] 6 | paths-ignore: 7 | - '*.md' 8 | - 'docs/**' 9 | 10 | pull_request: 11 | branches: [ master, development ] 12 | paths-ignore: 13 | - '*.md' 14 | - 'docs/**' 15 | 16 | workflow_dispatch: 17 | branches: [ master, development ] 18 | paths-ignore: 19 | - '*.md' 20 | - 'docs/**' 21 | 22 | jobs: 23 | build: 24 | runs-on: windows-latest 25 | 26 | steps: 27 | - name: checkout 28 | uses: actions/checkout@v4 29 | with: 30 | fetch-depth: 0 31 | 32 | - name: Fetch all history for all tags and branches 33 | run: | 34 | git fetch --prune 35 | 36 | - name: Setup MSBuild.exe 37 | uses: microsoft/setup-msbuild@v2 38 | 39 | - name: Cache Nuget 40 | uses: actions/cache@v4.0.2 41 | with: 42 | path: ~/.nuget/packages 43 | key: ${{ runner.os }}-nugetv1-${{ hashFiles('**/packages.lock.json') }} 44 | restore-keys: | 45 | ${{ runner.os }}-nugetv1- 46 | 47 | - name: Build 48 | working-directory: src 49 | run: | 50 | dotnet restore --disable-parallel 51 | # dotnet build --disable-parallel --configuration Release 52 | # can't use pure dotnet build because gitversion issues 53 | msbuild ${{ github.event.repository.name }}.csproj -verbosity:minimal /p:Configuration=Release /property:DisableGitVersionTask=true 54 | 55 | # add check for PR against master from development -> build preRelease to nuget 56 | # if merged into master -> build Release -> nuget 57 | # if: github.ref == 'refs/heads/master' || (startsWith(github.ref, 'refs/tags/') && contains(github.ref,'-alpha')) 58 | #/property:NugetAPIKey=${{ secrets.NugetAPIKey }} 59 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: [ published ] 6 | 7 | jobs: 8 | build: 9 | runs-on: windows-latest 10 | 11 | steps: 12 | - name: checkout 13 | uses: actions/checkout@v4 14 | 15 | - name: Setup MSBuild.exe 16 | uses: microsoft/setup-msbuild@v2 17 | 18 | - name: Write Fullkey.snk 19 | uses: RollyPeres/base64-to-path@v1 20 | with: 21 | filePath: ${{ github.workspace }}/src/fullkey.snk 22 | encodedString: ${{ secrets.SIGNKEY }} 23 | 24 | - name: Create msbuild params 25 | run: | 26 | echo "::set-output name=params::${{ github.event.repository.name }}.csproj -verbosity:minimal /p:Configuration=Release /property:DisableGitVersionTask=true /property:GitVersion_NuGetVersion=${{ github.event.release.tag_name }} /property:Version=${{ github.event.release.tag_name }}" 27 | id: msbuild 28 | 29 | - name: add nuget API Key for releases 30 | if: "!github.event.release.prerelease" 31 | run: | 32 | echo "::set-output name=params::/property:NugetAPIKey=${{ secrets.NugetAPIKey }}" 33 | id: apikey 34 | 35 | - name: Restore 36 | working-directory: src 37 | run: | 38 | dotnet restore --disable-parallel 39 | 40 | - name: Restore & Build & (Publish) 41 | working-directory: src 42 | run: | 43 | msbuild ${{ steps.msbuild.outputs.params }} ${{ steps.apikey.outputs.params }} 44 | rm -R .\obj\Release 45 | msbuild ${{ steps.msbuild.outputs.params }} ${{ steps.apikey.outputs.params }} /property:UnSigned=true 46 | 47 | - name: Upload Release Assets 48 | uses: softprops/action-gh-release@v2 49 | with: 50 | files: src/bin/Release/*.nupkg 51 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yaml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | paths: 7 | - 'src/**' 8 | - '.github/workflows/release-drafter.yml' 9 | 10 | jobs: 11 | release: 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - name: checkout 16 | uses: actions/checkout@v4 17 | with: 18 | fetch-depth: 0 19 | 20 | - name: Fetch all history for all tags and branches 21 | run: | 22 | git fetch --prune 23 | 24 | - name: Install GitVersion 25 | uses: gittools/actions/gitversion/setup@v3.0.0 26 | with: 27 | versionSpec: '5.6.x' 28 | 29 | - name: Use GitVersion 30 | id: gitversion 31 | uses: gittools/actions/gitversion/execute@v3.0.0 32 | 33 | - name: create release 34 | id: create_release 35 | uses: release-drafter/release-drafter@v6 36 | with: 37 | tag: '${{ steps.gitversion.outputs.semVer }}' 38 | name: 'Release ${{ steps.gitversion.outputs.semVer }}' 39 | env: 40 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #ignore thumbnails created by windows 2 | Thumbs.db 3 | #Ignore files build by Visual Studio 4 | *.obj 5 | *.exe 6 | *.pdb 7 | *.user 8 | *.aps 9 | *.pch 10 | *.vspscc 11 | *_i.c 12 | *_p.c 13 | *.ncb 14 | *.suo 15 | *.tlb 16 | *.tlh 17 | *.bak 18 | *.cache 19 | *.ilk 20 | *.log 21 | [Bb]in 22 | [Dd]ebug*/ 23 | *.lib 24 | *.sbr 25 | obj/ 26 | [Rr]elease*/ 27 | _ReSharper*/ 28 | [Tt]est[Rr]esult* 29 | Sandbox 30 | *Sandbox* 31 | *.ncrunchsolution 32 | *.xap 33 | ClientBin/* 34 | *.zip 35 | *.pfx 36 | Example.xlsx 37 | packages/ 38 | .vs/ 39 | *.nupkg 40 | 41 | # Jetbrain Rider Cache 42 | .idea/ -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Thanks for reporting an issue! 2 | 3 | Please keep in mind that this project is not actively developed and that @MrCircuit and I (@SeriousM) don't work full-time on it. 4 | 5 | If you have a clue how to resolve the issue please try to resolve it yourself and send us a Pull Request including unit tests. 6 | 7 | Open-Source means not only the "free" availability of source code, it also means that the users are free to contribute to it to make it better. 8 | 9 | Thank you for your help and understanding. 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Microsoft Public License (Ms-PL) 2 | 3 | This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 4 | 5 | 1. Definitions 6 | 7 | The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. 8 | 9 | A "contribution" is the original software, or any additions or changes to the software. 10 | 11 | A "contributor" is any person that distributes its contribution under this license. 12 | 13 | "Licensed patents" are a contributor's patent claims that read directly on its contribution. 14 | 15 | 2. Grant of Rights 16 | 17 | (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. 18 | 19 | (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 20 | 21 | 3. Conditions and Limitations 22 | 23 | (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. 24 | 25 | (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. 26 | 27 | (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. 28 | 29 | (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. 30 | 31 | (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WPFLocalizeExtension 2 | [![CodeFactor](https://www.codefactor.io/repository/github/xamlmarkupextensions/WPFLocalizeExtension/badge/master)](https://www.codefactor.io/repository/github/xamlmarkupextensions/WPFLocalizeExtension/overview/master) 3 | [![Nuget](https://img.shields.io/nuget/v/WpfLocalizeExtension.svg)](https://www.nuget.org/packages/WpfLocalizeExtension) 4 | ![.NET](https://github.com/XAMLMarkupExtensions/WPFLocalizeExtension/workflows/.NET/badge.svg) 5 | [![Join the chat at https://gitter.im/SeriousM/WPFLocalizationExtension](https://badges.gitter.im/SeriousM/WPFLocalizationExtension.svg)](https://gitter.im/SeriousM/WPFLocalizationExtension?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 6 | 7 | #### ...is a really the easiest way to localize any type of DependencyProperties or native Properties on DependencyObjects since 2008! 8 | 9 | ## Supported Frameworks 10 | 11 | * .Net Framework 4.0+ 12 | * .Net CORE 3.0+ 13 | 14 | ## Installation 15 | 16 | [NuGet Package](https://nuget.org/packages/WpfLocalizeExtension/) 17 | 18 | ```net 19 | dotnet add package WPFLocalizationExtension 20 | ``` 21 | 22 | ## Getting started 23 | 24 | Coming soon 25 | 26 | ## Documentation & Tutorial: 27 | [Documentation / Wiki](docs/README.md) 28 | 29 | ## Localization Tools: 30 | [ResXManager (Visual Studio Plugin and StandAlone)](http://visualstudiogallery.msdn.microsoft.com/3b64e04c-e8de-4b97-8358-06c73a97cc68) 31 | [Zeta Resource Editor (Freeware)](http://www.zeta-resource-editor.com/index.html) 32 | 33 | ----- 34 | 35 | ## Products that use this Solution: 36 | 37 | ![](/docs/SAPLogo.gif) SAP Crystal Reports, Version for Visual Studio .NET 38 | 39 | ## License: 40 | [MS-PL](https://github.com/XAMLMarkupExtensions/WPFLocalizationExtension/blob/master/LICENSE) 41 | -------------------------------------------------------------------------------- /docs/BLoc-and-FELoc.md: -------------------------------------------------------------------------------- 1 | # BLoc 2 | 3 | This Extensions is a 4 | 5 | # FELoc -------------------------------------------------------------------------------- /docs/GapText.md: -------------------------------------------------------------------------------- 1 | # Gap Text 2 | 3 | Use a multibinding with the [StringFormatConverter](ValueConverters.md). 4 | The first **parameter** is the StringFormat 5 | All others are parameter. 6 | ```XML 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ``` 16 | 17 | integrate [SmartFormat](https://github.com/axuno/SmartFormat/wiki) so that we have even a possibility to have real i18n with pluralization,... -------------------------------------------------------------------------------- /docs/Installation-and-dependencies.md: -------------------------------------------------------------------------------- 1 | ### Installation 2 | 3 | The library itself can be obtained by two ways: 4 | 5 | * If you just want to use it without the need of compiling it, use the NuGet package manager of your VisualStudio or download it directly from our [NuGet package](https://www.nuget.org/packages/WpfLocalizeExtension). 6 | * If you are interested in the project details, feel free to get your own copy of the source code from GitHub. 7 | 8 | By using NuGet you just have to choose the projects where you want to use the extension - the rest is done automatically by NuGet as usual. 9 | 10 | ### Dependencies 11 | 12 | Starting with version 1.0.3, the project depends on the project [XAML Markup Extensions](https://github.com/XAMLMarkupExtensions/XAMLMarkupExtensions). NuGet will automatically ask you to download this package along with the LocalizationExtension. 13 | -------------------------------------------------------------------------------- /docs/Keys.md: -------------------------------------------------------------------------------- 1 | Keys are entered either directly after the extension name or using the Key property of the LocExtension class. Both will yield the same result (here with the key named Test): 2 | ```xaml 3 |