Repository: SeriousM/WPFLocalizationExtension Branch: master Commit: 6cb138bb0c63 Files: 254 Total size: 910.8 KB Directory structure: gitextract_vs211frg/ ├── .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 │ ├── MarkupExtension-basics.md │ ├── Multiple-assemblies-and-dictionaries.md │ ├── Our-first-localized-text.md │ ├── Preparing-the-XAML-code.md │ ├── README.md │ ├── Resource-files.md │ ├── 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 │ ├── 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 │ ├── 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/ │ ├── 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 ├── HelloWorldWPF.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 ├── LeakSample.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 ├── LocalizationTest.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 ├── MemoryTest.sln ├── ProviderExample/ │ ├── CSVLocalizationProvider.cs │ ├── ProviderExample.csproj │ └── TestProvider.cs ├── ResourceAssembly/ │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── ResTexts.Designer.cs │ ├── ResTexts.resx │ └── ResourceAssembly.csproj ├── 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 ├── SatelliteAssemblyTest.sln ├── Tests.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 ├── ThreadPerformance.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 ├── VbWpfApplication.sln ├── WPFLocalizeExtension.UnitTests/ │ ├── ValueConvertersTests/ │ │ ├── LocExtensionTests.cs │ │ └── StringFormatConverterTests.cs │ └── WPFLocalizeExtension.UnitTests.csproj └── XamlLocalizationTest.sln ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: [konne, seriousm] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Code snipet, or better a small code example that shows the issue **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Enviroment (please complete the following information):** - OS: [e.g. iOS] - .NET Framework: [e.g. NET452, netcore30] **Additional context** Add any other context about the problem here. ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: nuget directory: "/src" schedule: interval: daily time: "08:00" timezone: Europe/Berlin target-branch: development - package-ecosystem: "github-actions" directory: "/" schedule: # Check for updates to GitHub Actions every weekday interval: "daily" ================================================ FILE: .github/release-drafter.yml ================================================ categories: - title: 'Features' labels: - 'feature' - 'enhancement' - title: 'Bug Fixes' labels: - 'fix' - 'bugfix' - 'bug' - title: 'Maintenance' labels: - 'chore' - 'dependencies' change-template: '- $TITLE @$AUTHOR (#$NUMBER)' template: | ## Changes $CHANGES ================================================ FILE: .github/workflows/compile.yml ================================================ name: .NET on: push: branches: [ master, development ] paths-ignore: - '*.md' - 'docs/**' pull_request: branches: [ master, development ] paths-ignore: - '*.md' - 'docs/**' workflow_dispatch: branches: [ master, development ] paths-ignore: - '*.md' - 'docs/**' jobs: build: runs-on: windows-latest steps: - name: checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Fetch all history for all tags and branches run: | git fetch --prune - name: Setup MSBuild.exe uses: microsoft/setup-msbuild@v2 - name: Cache Nuget uses: actions/cache@v4.0.2 with: path: ~/.nuget/packages key: ${{ runner.os }}-nugetv1-${{ hashFiles('**/packages.lock.json') }} restore-keys: | ${{ runner.os }}-nugetv1- - name: Build working-directory: src run: | dotnet restore --disable-parallel # dotnet build --disable-parallel --configuration Release # can't use pure dotnet build because gitversion issues msbuild ${{ github.event.repository.name }}.csproj -verbosity:minimal /p:Configuration=Release /property:DisableGitVersionTask=true # add check for PR against master from development -> build preRelease to nuget # if merged into master -> build Release -> nuget # if: github.ref == 'refs/heads/master' || (startsWith(github.ref, 'refs/tags/') && contains(github.ref,'-alpha')) #/property:NugetAPIKey=${{ secrets.NugetAPIKey }} ================================================ FILE: .github/workflows/publish.yml ================================================ name: Publish on: release: types: [ published ] jobs: build: runs-on: windows-latest steps: - name: checkout uses: actions/checkout@v4 - name: Setup MSBuild.exe uses: microsoft/setup-msbuild@v2 - name: Write Fullkey.snk uses: RollyPeres/base64-to-path@v1 with: filePath: ${{ github.workspace }}/src/fullkey.snk encodedString: ${{ secrets.SIGNKEY }} - name: Create msbuild params run: | 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 }}" id: msbuild - name: add nuget API Key for releases if: "!github.event.release.prerelease" run: | echo "::set-output name=params::/property:NugetAPIKey=${{ secrets.NugetAPIKey }}" id: apikey - name: Restore working-directory: src run: | dotnet restore --disable-parallel - name: Restore & Build & (Publish) working-directory: src run: | msbuild ${{ steps.msbuild.outputs.params }} ${{ steps.apikey.outputs.params }} rm -R .\obj\Release msbuild ${{ steps.msbuild.outputs.params }} ${{ steps.apikey.outputs.params }} /property:UnSigned=true - name: Upload Release Assets uses: softprops/action-gh-release@v2 with: files: src/bin/Release/*.nupkg ================================================ FILE: .github/workflows/release-drafter.yaml ================================================ name: Release on: push: branches: [ master ] paths: - 'src/**' - '.github/workflows/release-drafter.yml' jobs: release: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Fetch all history for all tags and branches run: | git fetch --prune - name: Install GitVersion uses: gittools/actions/gitversion/setup@v3.0.0 with: versionSpec: '5.6.x' - name: Use GitVersion id: gitversion uses: gittools/actions/gitversion/execute@v3.0.0 - name: create release id: create_release uses: release-drafter/release-drafter@v6 with: tag: '${{ steps.gitversion.outputs.semVer }}' name: 'Release ${{ steps.gitversion.outputs.semVer }}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ================================================ FILE: .gitignore ================================================ #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.obj *.exe *.pdb *.user *.aps *.pch *.vspscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *.cache *.ilk *.log [Bb]in [Dd]ebug*/ *.lib *.sbr obj/ [Rr]elease*/ _ReSharper*/ [Tt]est[Rr]esult* Sandbox *Sandbox* *.ncrunchsolution *.xap ClientBin/* *.zip *.pfx Example.xlsx packages/ .vs/ *.nupkg # Jetbrain Rider Cache .idea/ ================================================ FILE: CONTRIBUTING.md ================================================ Thanks for reporting an issue! Please keep in mind that this project is not actively developed and that @MrCircuit and I (@SeriousM) don't work full-time on it. 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. 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. Thank you for your help and understanding. ================================================ FILE: LICENSE ================================================ Microsoft Public License (Ms-PL) 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. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (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. (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. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (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. (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. (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. (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. ================================================ FILE: README.md ================================================ # WPFLocalizeExtension [![CodeFactor](https://www.codefactor.io/repository/github/xamlmarkupextensions/WPFLocalizeExtension/badge/master)](https://www.codefactor.io/repository/github/xamlmarkupextensions/WPFLocalizeExtension/overview/master) [![Nuget](https://img.shields.io/nuget/v/WpfLocalizeExtension.svg)](https://www.nuget.org/packages/WpfLocalizeExtension) ![.NET](https://github.com/XAMLMarkupExtensions/WPFLocalizeExtension/workflows/.NET/badge.svg) [![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) #### ...is a really the easiest way to localize any type of DependencyProperties or native Properties on DependencyObjects since 2008! ## Supported Frameworks * .Net Framework 4.0+ * .Net CORE 3.0+ ## Installation [NuGet Package](https://nuget.org/packages/WpfLocalizeExtension/) ```net dotnet add package WPFLocalizationExtension ``` ## Getting started Coming soon ## Documentation & Tutorial: [Documentation / Wiki](docs/README.md) ## Localization Tools: [ResXManager (Visual Studio Plugin and StandAlone)](http://visualstudiogallery.msdn.microsoft.com/3b64e04c-e8de-4b97-8358-06c73a97cc68) [Zeta Resource Editor (Freeware)](http://www.zeta-resource-editor.com/index.html) ----- ## Products that use this Solution: ![](/docs/SAPLogo.gif) SAP Crystal Reports, Version for Visual Studio .NET ## License: [MS-PL](https://github.com/XAMLMarkupExtensions/WPFLocalizationExtension/blob/master/LICENSE) ================================================ FILE: docs/BLoc-and-FELoc.md ================================================ # BLoc This Extensions is a # FELoc ================================================ FILE: docs/FAQ.md ================================================ # FAQ ## Strong Name and signing The current nuget is public signed, this is in general a good compromise, but there are sometimes issue like: * "Could not load file or assembly 'WPFLocalizeExtension' ... Strong name signature could not be verified * xUnit can be solve with disable shadowCoping see #225 * in general integrate [StrongNameSigner](https://github.com/brutaldev/StrongNameSigner) There is also a long discussion here just some issues: #225 #150 #141 #110 #106 ## Issued Design mode We try to do our best to have the extension as best as possible working in Visual Studio Designer, but in some cases this doesn't work even everything is fine. Here some points / steps that can help: 1. restart / reopen (xaml, sln, complete Visualt Studio) 2. remove cache (bin/obj dirs + %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\\**[VS VERSION]**\Designer\ShadowCache) 3. check .net compile proj with any cpu or 32bit see #217 ## Missing Keys If you like to see what keys are not translated you can easily register to the following event. ```csharp LocalizeDictionary.Instance.MissingKeyEvent += Instance_MissingKeyEvent; ``` The issue or bad design is that this is only triggered if you use the LocExtension, BLoc and not if you make codebehind translation. If you do that you should use a different Event. ```csharp LocalizeDictionary.Instance.GetLocalizedObject(....) LocalizeDictionary.Instance.DefaultProvider.ProviderError += ... ``` ## Binding cannot be changed after it has been used Binding does not support any changes on Properties after it is bound the firts time. So if you like to do thinks like: ```xaml {Binding Source={lex:Loc Foo}} {Binding StringFormat={lex:Loc Bar}} ``` This will crash. For StringFormat use cases we have implemented a [StringFormatConverter](ValueConverters.md). ## Access modifier for resource assemblies The LocalizationExtension will fail to look up a localized value, if the resource is compiled with its access modifier set to internal. To set up the resource build tool to use a public access modifier, open the resource file and change the value of the field. ## NeutralResourcesLanguage in Assembly Manifest The Assembly.cs contains sometimes the line _[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]_ which has side effects on resource lookups. Please remove it. ## Bad ResX Filename As long as you are using custom ResX files that are not located under the Properties folder in your project you **may not call the file Resource**. It will break the lookup mechanism for the resources. ## Startuptime for Available Cultures Search with Resx Provider To reduce the full search through all cultures and all resx files if they are available per culture you can set the searchlist of the culture. _ResxLocalizationProviderBase.SearchCultures_
Example

```csharp (LocalizeDictionary.Instance.DefaultProvider as ResxLocalizationProvider).SearchCultures = new List() { System.Globalization.CultureInfo.GetCultureInfo("de-de"), System.Globalization.CultureInfo.GetCultureInfo("en"), System.Globalization.CultureInfo.GetCultureInfo("he"), System.Globalization.CultureInfo.GetCultureInfo("ar"), }; ```

================================================ FILE: docs/Features.md ================================================ # Features: * First of all: ITS FREE (and will stay free - refer to license section below) * Obtain stable results in * WPF applications using .NET 3.5 and higher * Windows Phone 7.x/8.x applications * **New:** Localization source/provider can be changed freely at arbitrary nodes * Use the Provider property in LocalizeDictionary to change the provider for the particular sub tree * Use the DefaultProvider property to set the provider for the whole application * Built-in RESX provider for resource file lookup (Default) - **fully backward compatible to older versions of this extension** * Interface for custom providers * Notification about provider changes and errors * Notification about resource changes * Get the list of all available cultures from a provider - or just take the bindable merged list from LocalizeDictionary * CSV provider project in the Tests folder as an example for custom providers * **Multiple UI thread support** * BLoc Extension that derives from Binding to support binding scenarios * Supports binding-like write style like "Text = {lex:LocText ResAssembly:ResFile:ResKey}" * Define a default assembly and / or resource file to reduce the key to ResAssembly::ResKey, ResFile:ResKey or even ResKey * Automatic key lookup: If no key is specified, the Name and Property Name of the target are used (e.g. MyButton_Content) * Default assembly, dictionary and culture can be changed dynamically at the RESX provider * Default assembly and dictionary inherit along the visual tree and can be redefined at each node * It is available at designtime (MS Expression Blend 3.0 & 4.0, MS VisualStudio 2008 & 2010 & 2012 * not for dynamic loaded assemblies which only can be found at runtime and as long the resource (.resx) is built at designtime * Even for Silverlight! * No extra preview application needed * Offers a DesignValue Property to support custom values during design mode * Full support of various application scenarios * Works with normal dependency properties * Works with normal properties (e.g. Ribbon) * Works with control/data templates * Various culture setup features * List of available cultures * Culture swapping by Commands (SetCultureCommand) * Works with the .resx-fallback mechanism (e.g. en-us -> en -> invariant culture) * Supports culture forcing (e.g. "this object has to be in english all the time") * Buffering allows fast switching of the language at runtime * Offers a design language for visual testing at designtime * Offers a "SpecificCulture" to use as IFormatProvider (e.g. (123.20).ToString(LocalizeDictionary.SpecificCulture) = "123.20" or "123,20") * Does not alter the culture on Thread.CurrentCulture or Thread.CurrentUICulture (can be changed easily) * Code behind features: * Can be used in code behind to bind localized values to dynamic generated controls * Implements INotifyPropertyChanged for advanced use * Offers some functionality to check and get resource values in code behind (e.g. ResolveLocalizedValue) * Easy to use * Can be used with any resource file (.resx) across all assemblies (also the dynamic loaded one at runtime) * Does not need any initializing process (like "call xyz to register a special localize dictionary") * Can localize any type of data type, as long a TypeConverter exists for it * Example extensions included for * Formating e.g. "this is the '{0}' value" (not bindable at the moment) * Prefix and suffix values (currently with LocText extension) * Upper and lower Text * Last, but not least * Does not create any memory leaks * Leaves the UID property untouched * Does not need an additional build task * Is in use in various productive systems ================================================ FILE: docs/GapText.md ================================================ # Gap Text Use a multibinding with the [StringFormatConverter](ValueConverters.md). The first **parameter** is the StringFormat All others are parameter. ```XML ``` integrate [SmartFormat](https://github.com/axuno/SmartFormat/wiki) so that we have even a possibility to have real i18n with pluralization,... ================================================ FILE: docs/Installation-and-dependencies.md ================================================ ### Installation The library itself can be obtained by two ways: * 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). * If you are interested in the project details, feel free to get your own copy of the source code from GitHub. 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. ### Dependencies 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. ================================================ FILE: docs/Keys.md ================================================ 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): ```xaml