├── .gitignore ├── Icon.png ├── LICENSE ├── PluralNet.Portable ├── PluralNet.Portable.csproj └── Properties │ └── AssemblyInfo.cs ├── PluralNet.Shared ├── Converters │ └── PluralConverter.cs ├── Interfaces │ └── IPluralProvider.cs ├── PluralNet.Shared.projitems ├── PluralNet.Shared.shproj ├── PluralProviders │ ├── ArabicProvider.cs │ ├── BreizhProvider.cs │ ├── CentralAtlasTamazightProvider.cs │ ├── CroatProvider.cs │ ├── CzechProvider.cs │ ├── DanishProvider.cs │ ├── FilipinoProvider.cs │ ├── HebrewProvider.cs │ ├── IcelandicProvider.cs │ ├── IntOneOrZeroProvider.cs │ ├── IrishProvider.cs │ ├── LatvianProvider.cs │ ├── LithuanianProvider.cs │ ├── MacedonianProvider.cs │ ├── MalteseProvider.cs │ ├── ManxProvider.cs │ ├── OneOrTwoProvider.cs │ ├── OneOrZeroProvider.cs │ ├── OneOrZeroToOneExcludedProvider.cs │ ├── OnlyOneProvider.cs │ ├── OtherProvider.cs │ ├── PolishProvider.cs │ ├── RomanianProvider.cs │ ├── ScottishGaelicProvider.cs │ ├── SinhalaProvider.cs │ ├── SlavicProvider.cs │ ├── SlovenianProvider.cs │ ├── TachelhitProvider.cs │ ├── WelshProvider.cs │ ├── ZeroToOneProvider.cs │ └── ZeroToTwoExcludedProvider.cs ├── PluralTypeEnum.cs ├── ResourceLoaderExtension.cs └── Utils │ ├── DecimalExt.cs │ ├── IntExt.cs │ └── PluralHelper.cs ├── PluralNet.Silverlight ├── PluralNet.Silverlight.csproj └── Properties │ └── AssemblyInfo.cs ├── PluralNet.SilverlightPhone ├── PluralNet.SilverlightPhone.csproj └── Properties │ └── AssemblyInfo.cs ├── PluralNet.WinRT ├── PluralNet.WinRT.csproj └── Properties │ └── AssemblyInfo.cs ├── PluralNet.sln ├── Properties └── AssemblyInfo.cs ├── README.md └── project.json /.gitignore: -------------------------------------------------------------------------------- 1 | obj/ 2 | bin/ 3 | *.nuspec 4 | *.user 5 | *.suo 6 | *.nupkg 7 | project.lock.json -------------------------------------------------------------------------------- /Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rudyhuyn/PluralNet/c4fc0a28dec927f820fe6289246ea10879a57bc5/Icon.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-2018 Rudy Huyn Van Phuong. 2 | 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /PluralNet.Portable/PluralNet.Portable.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10.0 6 | Debug 7 | AnyCPU 8 | {9601B867-0732-4DDA-9C75-E0653E4D5A58} 9 | Library 10 | Properties 11 | PluralNet 12 | PluralNet 13 | en-US 14 | 512 15 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 16 | Profile111 17 | v4.5 18 | 19 | 20 | true 21 | full 22 | false 23 | bin\Debug\ 24 | TRACE;DEBUG;PORTABLE 25 | prompt 26 | 4 27 | 28 | 29 | pdbonly 30 | true 31 | bin\Release\ 32 | TRACE;PORTABLE 33 | prompt 34 | 4 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 51 | -------------------------------------------------------------------------------- /PluralNet.Portable/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("PluralNet.CrossMobile")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("PluralNet.CrossMobile")] 14 | [assembly: AssemblyCopyright("Copyright © 2016")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /PluralNet.Shared/Converters/PluralConverter.cs: -------------------------------------------------------------------------------- 1 | #if WINRT || SILVERLIGHT 2 | 3 | using System; 4 | using System.Globalization; 5 | 6 | #if WINRT 7 | using Windows.ApplicationModel.Resources; 8 | using Windows.UI.Xaml.Data; 9 | #elif SILVERLIGHT 10 | using System.Windows.Data; 11 | using System.Resources; 12 | #endif 13 | 14 | namespace Huyn.PluralNet.Converters 15 | { 16 | public class PluralConverter : IValueConverter 17 | { 18 | #if SILVERLIGHT 19 | public ResourceManager ResourceManager { get; set; } 20 | 21 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 22 | { 23 | if (ResourceManager == null) 24 | { 25 | throw new NullReferenceException("PluralConverter.ResourceManager can't be null"); 26 | } 27 | #elif WINRT 28 | 29 | public object Convert(object value, Type targetType, object parameter, string language) 30 | { 31 | var culture = !string.IsNullOrWhiteSpace(language) ? new CultureInfo(language) : null; 32 | #endif 33 | var key = parameter as string; 34 | 35 | if (string.IsNullOrWhiteSpace(key)) 36 | { 37 | return string.Empty; 38 | } 39 | 40 | var number = System.Convert.ToDecimal(value); 41 | 42 | #if SILVERLIGHT 43 | var pluralFormat = ResourceManager.GetPlural(key, number); 44 | #elif WINRT 45 | var resource = ResourceLoader.GetForCurrentView(); 46 | var pluralFormat = resource.GetPlural(key, number); 47 | #endif 48 | 49 | return string.Format(culture, pluralFormat, number); 50 | } 51 | 52 | #if SILVERLIGHT || DESKTOP 53 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 54 | #elif WINRT 55 | public object ConvertBack(object value, Type targetType, object parameter, string language) 56 | #endif 57 | { 58 | return null; 59 | } 60 | } 61 | } 62 | 63 | #endif -------------------------------------------------------------------------------- /PluralNet.Shared/Interfaces/IPluralProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | namespace Huyn.PluralNet.Interfaces 10 | { 11 | public interface IPluralProvider 12 | { 13 | PluralTypeEnum ComputePlural(decimal n); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralNet.Shared.projitems: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | true 6 | 1cee422a-f0fc-4d54-b606-5f942c8f6159 7 | 8 | 9 | PluralNet.Shared 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralNet.Shared.shproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 1cee422a-f0fc-4d54-b606-5f942c8f6159 5 | 14.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/ArabicProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | using Huyn.PluralNet.Utils; 10 | using Huyn.PluralNet.Interfaces; 11 | 12 | 13 | namespace Huyn.PluralNet.Providers 14 | { 15 | public class ArabicProvider : IPluralProvider 16 | { 17 | public PluralTypeEnum ComputePlural(decimal n) 18 | { 19 | if (n.IsInt()) 20 | { 21 | if (n == 0) 22 | { 23 | return PluralTypeEnum.ZERO; 24 | } 25 | if (n == 1) 26 | { 27 | return PluralTypeEnum.ONE; 28 | } 29 | if (n == 2) 30 | { 31 | return PluralTypeEnum.TWO; 32 | } 33 | if ((n % 100).IsBetween(3, 10)) 34 | { 35 | return PluralTypeEnum.FEW; 36 | } 37 | if ((n % 100).IsBetween(11, 99)) 38 | { 39 | return PluralTypeEnum.MANY; 40 | } 41 | } 42 | return PluralTypeEnum.OTHER; 43 | 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/BreizhProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class BreizhProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsInt()) 18 | { 19 | var mod10 = n % 10; 20 | var mod100 = n % 100; 21 | if (mod10 == 1 && mod100 != 11 && mod100 != 71 && mod100 != 91) 22 | { 23 | return PluralTypeEnum.ONE; 24 | } 25 | if (mod10 == 2 && mod100 != 12 && mod100 != 72 && mod100 != 92) 26 | { 27 | return PluralTypeEnum.TWO; 28 | } 29 | var diffMod = mod100 - mod10; 30 | if ((mod10 == 3 || mod10 == 4 || mod10 == 9) && diffMod != 10 && diffMod != 70 && diffMod != 90) 31 | { 32 | return PluralTypeEnum.FEW; 33 | } 34 | if (n != 0 && n % 1000000 == 0) 35 | return PluralTypeEnum.MANY; 36 | } 37 | return PluralTypeEnum.OTHER; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/CentralAtlasTamazightProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | using Huyn.PluralNet.Utils; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class CentralAtlasTamazightProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n == 0 || n == 1 || (n.IsInt() && n.IsBetween(11, 99))) 18 | { 19 | return PluralTypeEnum.ONE; 20 | } 21 | return PluralTypeEnum.OTHER; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/CroatProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class CroatProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsInt()) 18 | { 19 | var integer = (int)n; 20 | if (integer % 10 == 1 && integer % 100 != 11) 21 | { 22 | return PluralTypeEnum.ONE; 23 | } 24 | if ((integer % 10).IsBetween(2, 4) && !(integer % 100).IsBetween(12, 14)) 25 | { 26 | return PluralTypeEnum.FEW; 27 | } 28 | } 29 | var f = n.DigitsAfterDecimal(); 30 | if (f % 10 == 1 && f % 100 != 11) 31 | { 32 | return PluralTypeEnum.ONE; 33 | } 34 | 35 | if ((f % 10).IsBetween(2, 4) && !(f % 100).IsBetween(12, 14)) 36 | { 37 | return PluralTypeEnum.FEW; 38 | } 39 | 40 | return PluralTypeEnum.OTHER; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/CzechProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class CzechProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n == 1) 18 | return PluralTypeEnum.ONE; 19 | 20 | if (n.GetNumberOfDigitsAfterDecimal() != 0) 21 | { 22 | return PluralTypeEnum.MANY; 23 | } 24 | 25 | if (n.IsBetween(2, 4)) 26 | return PluralTypeEnum.FEW; 27 | 28 | return PluralTypeEnum.OTHER; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/DanishProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class DanishProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n != 0 && n.IsBetween(0, 1)) 18 | return PluralTypeEnum.ONE; 19 | return PluralTypeEnum.OTHER; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/FilipinoProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | using Huyn.PluralNet.Utils; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class FilipinoProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | var isInt = n.IsInt(); 18 | 19 | if (isInt) 20 | { 21 | if (n.IsBetween(1, 3)) 22 | return PluralTypeEnum.ONE; 23 | var imod10 = n % 10; 24 | if (imod10 != 4 && imod10 != 6 || imod10 != 9) 25 | return PluralTypeEnum.ONE; 26 | } 27 | else 28 | { 29 | var f = n.DigitsAfterDecimal(); 30 | var imod10 = f % 10; 31 | if (imod10 != 4 && imod10 != 6 || imod10 != 9) 32 | return PluralTypeEnum.ONE; 33 | 34 | } 35 | 36 | 37 | return PluralTypeEnum.OTHER; 38 | 39 | } 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/HebrewProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | using Huyn.PluralNet.Utils; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class HebrewProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsInt()) 18 | { 19 | switch ((int)n) 20 | { 21 | case 1: 22 | return PluralTypeEnum.ONE; 23 | case 2: 24 | return PluralTypeEnum.TWO; 25 | } 26 | 27 | if (n != 0 && (n % 10) == 0) 28 | { 29 | return PluralTypeEnum.MANY; 30 | } 31 | } 32 | return PluralTypeEnum.OTHER; 33 | 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/IcelandicProvider.cs: -------------------------------------------------------------------------------- 1 | using Huyn.PluralNet; 2 | using Huyn.PluralNet.Interfaces; 3 | using Huyn.PluralNet.Utils; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace Huyn.PluralNet.Providers 11 | { 12 | public class IcelandicProvider : IPluralProvider 13 | { 14 | public PluralTypeEnum ComputePlural(decimal n) 15 | { 16 | if (n.IsInt()) 17 | { 18 | var integer = (int)n; 19 | if (integer % 10 == 1 && integer % 100 != 11) 20 | { 21 | return PluralTypeEnum.ONE; 22 | } 23 | return PluralTypeEnum.OTHER; 24 | } 25 | else 26 | { 27 | return PluralTypeEnum.ONE; 28 | } 29 | 30 | 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/IntOneOrZeroProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | 10 | namespace Huyn.PluralNet.Providers 11 | { 12 | public class IntOneOrZeroProvider : IPluralProvider 13 | { 14 | public PluralTypeEnum ComputePlural(decimal n) 15 | { 16 | if (n == 0 || n == 1) 17 | { 18 | return PluralTypeEnum.ONE; 19 | } 20 | else 21 | { 22 | return PluralTypeEnum.OTHER; 23 | } 24 | } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/IrishProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class IrishProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsInt()) 18 | { 19 | if (n == 1) 20 | { 21 | return PluralTypeEnum.ONE; 22 | } 23 | if (n == 2) 24 | { 25 | return PluralTypeEnum.TWO; 26 | } 27 | if ((n.IsBetween(3, 6))) 28 | { 29 | return PluralTypeEnum.FEW; 30 | } 31 | if ((n.IsBetween(7, 10))) 32 | { 33 | return PluralTypeEnum.MANY; 34 | } 35 | } 36 | return PluralTypeEnum.OTHER; 37 | 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/LatvianProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | using Huyn.PluralNet.Utils; 10 | 11 | 12 | namespace Huyn.PluralNet.Providers 13 | { 14 | public class LatvianProvider : IPluralProvider 15 | { 16 | public PluralTypeEnum ComputePlural(decimal n) 17 | { 18 | if (n == 0 || (n % 100).IsBetween(11, 19)) 19 | { 20 | return PluralTypeEnum.ZERO; 21 | } 22 | 23 | var f = n.DigitsAfterDecimal(); 24 | if (f.IsBetween(11, 19)) 25 | return PluralTypeEnum.ZERO; 26 | 27 | if (n % 10 == 1 && n % 100 != 11) 28 | return PluralTypeEnum.ONE; 29 | if (f % 10 == 1) 30 | { 31 | if (n.GetNumberOfDigitsAfterDecimal() == 2) 32 | { 33 | if (f % 100 != 11) 34 | return PluralTypeEnum.ONE; 35 | } 36 | else 37 | { 38 | return PluralTypeEnum.ONE; 39 | } 40 | } 41 | return PluralTypeEnum.OTHER; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/LithuanianProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class LithuanianProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if ((n % 10).IsBetween(2, 9) && !(n % 100).IsBetween(11, 19)) 18 | { 19 | return PluralTypeEnum.FEW; 20 | } 21 | if ((n % 10) == 1 && !(n % 100).IsBetween(11, 19)) 22 | { 23 | return PluralTypeEnum.ONE; 24 | } 25 | if (n.GetNumberOfDigitsAfterDecimal() != 0) 26 | return PluralTypeEnum.MANY; 27 | return PluralTypeEnum.OTHER; 28 | 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/MacedonianProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class MacedonianProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | 18 | if (n.IsInt()) 19 | { 20 | if (n % 10 == 1) 21 | return PluralTypeEnum.ONE; 22 | } 23 | else 24 | { 25 | var f = n.DigitsAfterDecimal(); 26 | if (f % 10 == 1) 27 | return PluralTypeEnum.ONE; 28 | 29 | } 30 | return PluralTypeEnum.OTHER; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/MalteseProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | using Huyn.PluralNet.Utils; 10 | using Huyn.PluralNet.Interfaces; 11 | 12 | 13 | namespace Huyn.PluralNet.Providers 14 | { 15 | public class MalteseProvider : IPluralProvider 16 | { 17 | public PluralTypeEnum ComputePlural(decimal n) 18 | { 19 | var isInt = n.IsInt(); 20 | if (isInt) 21 | { 22 | var i = (int)n; 23 | if (i == 1) 24 | { 25 | return PluralTypeEnum.ONE; 26 | } 27 | if (i == 0 || (i % 100).IsBetween(2, 10)) 28 | { 29 | return PluralTypeEnum.FEW; 30 | } 31 | if ((i % 100).IsBetween(11, 19)) 32 | { 33 | return PluralTypeEnum.MANY; 34 | } 35 | } 36 | 37 | return PluralTypeEnum.OTHER; 38 | 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/ManxProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | using Huyn.PluralNet.Utils; 10 | using Huyn.PluralNet.Interfaces; 11 | 12 | 13 | namespace Huyn.PluralNet.Providers 14 | { 15 | public class ManxProvider : IPluralProvider 16 | { 17 | public PluralTypeEnum ComputePlural(decimal n) 18 | { 19 | var isInt = n.IsInt(); 20 | var i = (int)n; 21 | if (isInt) 22 | { 23 | if (i % 10 == 1) 24 | return PluralTypeEnum.ONE; 25 | if (i % 10 == 2) 26 | return PluralTypeEnum.TWO; 27 | if (i % 20 == 0) 28 | return PluralTypeEnum.FEW; 29 | return PluralTypeEnum.OTHER; 30 | } 31 | else 32 | { 33 | return PluralTypeEnum.MANY; 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/OneOrTwoProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | 10 | namespace Huyn.PluralNet.Providers 11 | { 12 | public class OneOrTwoProvider : IPluralProvider 13 | { 14 | public PluralTypeEnum ComputePlural(decimal n) 15 | { 16 | if (n == 1) 17 | { 18 | return PluralTypeEnum.ONE; 19 | } 20 | else if (n==2) 21 | { 22 | return PluralTypeEnum.TWO; 23 | } 24 | else 25 | { 26 | return PluralTypeEnum.OTHER; 27 | } 28 | } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/OneOrZeroProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | 10 | namespace Huyn.PluralNet.Providers 11 | { 12 | public class OneOrZeroProvider : IPluralProvider 13 | { 14 | public PluralTypeEnum ComputePlural(decimal n) 15 | { 16 | if (n == 0) 17 | return PluralTypeEnum.ZERO; 18 | if (n == 1) 19 | { 20 | return PluralTypeEnum.ONE; 21 | } 22 | else 23 | { 24 | return PluralTypeEnum.OTHER; 25 | } 26 | } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/OneOrZeroToOneExcludedProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | 10 | namespace Huyn.PluralNet.Providers 11 | { 12 | public class OneOrZeroToOneExcludedProvider : IPluralProvider 13 | { 14 | public PluralTypeEnum ComputePlural(decimal n) 15 | { 16 | if (n == 0) 17 | return PluralTypeEnum.ZERO; 18 | if ((int)n == 0 || (int)n == 1) 19 | { 20 | return PluralTypeEnum.ONE; 21 | } 22 | else 23 | { 24 | return PluralTypeEnum.OTHER; 25 | } 26 | } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/OnlyOneProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | 10 | namespace Huyn.PluralNet.Providers 11 | { 12 | public class OnlyOneProvider : IPluralProvider 13 | { 14 | public PluralTypeEnum ComputePlural(decimal n) 15 | { 16 | if (n == 1) 17 | { 18 | return PluralTypeEnum.ONE; 19 | } 20 | else 21 | { 22 | return PluralTypeEnum.OTHER; 23 | } 24 | } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/OtherProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Interfaces; 9 | 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class OtherProvider:IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | return PluralTypeEnum.OTHER; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/PolishProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | using Huyn.PluralNet.Utils; 10 | using Huyn.PluralNet.Interfaces; 11 | 12 | 13 | namespace Huyn.PluralNet.Providers 14 | { 15 | public class PolishProvider : IPluralProvider 16 | { 17 | public PluralTypeEnum ComputePlural(decimal n) 18 | { 19 | if ((n % 10).IsBetween(2, 4) && !(n % 100).IsBetween(12, 14)) 20 | { 21 | return PluralTypeEnum.FEW; 22 | } 23 | if (n != 1 && (n % 10).IsBetween(0, 1) || 24 | (n % 10).IsBetween(5, 9) || 25 | (n % 100).IsBetween(12, 14)) 26 | { 27 | return PluralTypeEnum.MANY; 28 | } 29 | if (n == 1) 30 | { 31 | return PluralTypeEnum.ONE; 32 | } 33 | return PluralTypeEnum.OTHER; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/RomanianProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | 12 | namespace Huyn.PluralNet.Providers 13 | { 14 | public class RomanianProvider : IPluralProvider 15 | { 16 | public PluralTypeEnum ComputePlural(decimal n) 17 | { 18 | if (n.GetNumberOfDigitsAfterDecimal()>0 || n == 0 || (n != 1 && (n % 100).IsBetween(1, 19))) 19 | { 20 | return PluralTypeEnum.FEW; 21 | } 22 | if (n == 1) 23 | { 24 | return PluralTypeEnum.ONE; 25 | } 26 | return PluralTypeEnum.OTHER; 27 | 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/ScottishGaelicProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | 12 | namespace Huyn.PluralNet.Providers 13 | { 14 | public class ScottishGaelicProvider : IPluralProvider 15 | { 16 | public PluralTypeEnum ComputePlural(decimal n) 17 | { 18 | if (n.IsInt()) 19 | { 20 | var i = (int)n; 21 | switch (i) 22 | { 23 | case 1: 24 | case 11: 25 | return PluralTypeEnum.ONE; 26 | case 2: 27 | case 12: 28 | return PluralTypeEnum.TWO; 29 | } 30 | if (i <= 19) 31 | return PluralTypeEnum.FEW; 32 | } 33 | return PluralTypeEnum.OTHER; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/SinhalaProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class SinhalaProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n == 0 || n == 1 || n.DigitsAfterDecimal() == 1) 18 | return PluralTypeEnum.ONE; 19 | return PluralTypeEnum.OTHER; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/SlavicProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class SlavicProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsInt()) 18 | { 19 | if ((n % 10) == 1 && (n % 100) != 11) 20 | { 21 | return PluralTypeEnum.ONE; 22 | } 23 | if ((n % 10).IsBetween(2, 4) && !(n % 100).IsBetween(12, 14)) 24 | { 25 | return PluralTypeEnum.FEW; 26 | } 27 | if ((n % 10) == 0 || 28 | (n % 10).IsBetween(5, 9) || 29 | (n % 100).IsBetween(11, 14)) 30 | { 31 | return PluralTypeEnum.MANY; 32 | } 33 | 34 | } 35 | return PluralTypeEnum.OTHER; 36 | 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/SlovenianProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class SlovenianProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | var isInt = n.IsInt(); 18 | if (isInt) 19 | { 20 | switch ((int)n) 21 | { 22 | case 1: 23 | return PluralTypeEnum.ONE; 24 | case 2: 25 | return PluralTypeEnum.TWO; 26 | case 3: 27 | case 4: 28 | return PluralTypeEnum.TWO; 29 | } 30 | 31 | return PluralTypeEnum.OTHER; 32 | } 33 | else 34 | { 35 | return PluralTypeEnum.FEW; 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/TachelhitProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class TachelhitProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if ((int)n == 0 || n == 1) 18 | { 19 | return PluralTypeEnum.ONE; 20 | } 21 | if (n <= 10 && (int)n == n) 22 | return PluralTypeEnum.FEW; 23 | 24 | return PluralTypeEnum.OTHER; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/WelshProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | using Huyn.PluralNet.Utils; 10 | using Huyn.PluralNet.Interfaces; 11 | 12 | 13 | namespace Huyn.PluralNet.Providers 14 | { 15 | public class WelshProvider : IPluralProvider 16 | { 17 | public PluralTypeEnum ComputePlural(decimal n) 18 | { 19 | var isInt = n.IsInt(); 20 | if (isInt) 21 | { 22 | var i = (int)n; 23 | switch (i) 24 | { 25 | case 0: 26 | return PluralTypeEnum.ZERO; 27 | case 1: 28 | return PluralTypeEnum.ONE; 29 | case 2: 30 | return PluralTypeEnum.TWO; 31 | case 3: 32 | return PluralTypeEnum.FEW; 33 | case 6: 34 | return PluralTypeEnum.MANY; 35 | } 36 | } 37 | return PluralTypeEnum.OTHER; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/ZeroToOneProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class ZeroToOneProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsBetween(0, 1)) 18 | { 19 | return PluralTypeEnum.ONE; 20 | } 21 | return PluralTypeEnum.OTHER; 22 | 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralProviders/ZeroToTwoExcludedProvider.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | using Huyn.PluralNet.Utils; 9 | using Huyn.PluralNet.Interfaces; 10 | 11 | namespace Huyn.PluralNet.Providers 12 | { 13 | public class ZeroToTwoExcludedProvider : IPluralProvider 14 | { 15 | public PluralTypeEnum ComputePlural(decimal n) 16 | { 17 | if (n.IsBetweenEndNotIncluded(0, 2)) 18 | { 19 | return PluralTypeEnum.ONE; 20 | } 21 | else 22 | { 23 | return PluralTypeEnum.OTHER; 24 | } 25 | } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /PluralNet.Shared/PluralTypeEnum.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | namespace Huyn.PluralNet 10 | { 11 | public enum PluralTypeEnum 12 | { 13 | ZERO, 14 | ONE, 15 | TWO, 16 | OTHER, 17 | FEW, 18 | MANY 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /PluralNet.Shared/ResourceLoaderExtension.cs: -------------------------------------------------------------------------------- 1 | using Huyn.PluralNet; 2 | using System.Globalization; 3 | using Huyn.PluralNet.Interfaces; 4 | using Huyn.PluralNet.Utils; 5 | 6 | #if SILVERLIGHT || DESKTOP || PORTABLE 7 | using System.Resources; 8 | #endif 9 | 10 | #if WINRT 11 | using Windows.ApplicationModel.Resources; 12 | #endif 13 | 14 | namespace Huyn.PluralNet 15 | { 16 | public static class ResourceLoaderExtension 17 | { 18 | private static IPluralProvider _pluralProvider; 19 | private static object _objLock = new object(); 20 | 21 | #if WINRT 22 | public static string GetPlural(this ResourceLoader resource, string key, decimal number) 23 | #endif 24 | #if SILVERLIGHT || DESKTOP || PORTABLE 25 | public static string GetPlural(this ResourceManager resource, string key, decimal number) 26 | #endif 27 | { 28 | 29 | if (_pluralProvider == null) 30 | { 31 | lock (_objLock) 32 | { 33 | if (_pluralProvider == null) 34 | { 35 | CultureInfo cultureToUse = null; 36 | var forcedCulture = resource.GetString("ResourceLanguage"); 37 | if (!string.IsNullOrEmpty(forcedCulture)) 38 | { 39 | try 40 | { 41 | cultureToUse = new CultureInfo(forcedCulture); 42 | } 43 | catch 44 | { 45 | cultureToUse = new CultureInfo(CultureInfo.CurrentUICulture.Name); 46 | } 47 | } 48 | else 49 | { 50 | cultureToUse = new CultureInfo(CultureInfo.CurrentUICulture.Name); 51 | } 52 | 53 | _pluralProvider = PluralHelper.GetPluralChooser(cultureToUse); 54 | } 55 | } 56 | } 57 | string selectedSentence = null; 58 | var pluralType = _pluralProvider.ComputePlural(number); 59 | try 60 | { 61 | switch (pluralType) 62 | { 63 | case PluralTypeEnum.ZERO: 64 | selectedSentence = resource.GetString(key + "_Zero"); 65 | break; 66 | case PluralTypeEnum.ONE: 67 | selectedSentence = resource.GetString(key + "_One"); 68 | break; 69 | case PluralTypeEnum.OTHER: 70 | selectedSentence = resource.GetString(key + "_Other"); 71 | break; 72 | case PluralTypeEnum.TWO: 73 | selectedSentence = resource.GetString(key + "_Two"); 74 | break; 75 | case PluralTypeEnum.FEW: 76 | selectedSentence = resource.GetString(key + "_Few"); 77 | break; 78 | case PluralTypeEnum.MANY: 79 | selectedSentence = resource.GetString(key + "_Many"); 80 | break; 81 | } 82 | } 83 | catch { } 84 | return selectedSentence ?? ""; 85 | } 86 | 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /PluralNet.Shared/Utils/DecimalExt.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | namespace Huyn.PluralNet.Utils 10 | { 11 | public static class DecimalExtension 12 | { 13 | public static bool IsBetween(this decimal number, decimal start, decimal end) 14 | { 15 | return start <= number && number <= end; 16 | } 17 | public static bool IsBetweenEndNotIncluded(this decimal number, decimal start, decimal end) 18 | { 19 | return start <= number && number < end; 20 | } 21 | 22 | public static bool IsInt(this decimal number) 23 | { 24 | return (int)number == number; 25 | } 26 | 27 | public static uint GetNumberOfDigitsAfterDecimal(this decimal number) 28 | { 29 | return (uint)((number - (int)number).ToString()).Length - 2; 30 | } 31 | 32 | 33 | public static long DigitsAfterDecimal(this decimal number) 34 | { 35 | try 36 | { 37 | //need optimization 38 | var str = ((number - (int)number).ToString()).Substring(2); 39 | if (str == "") 40 | return 0; 41 | return long.Parse(str); 42 | } 43 | catch 44 | { 45 | return 0; 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /PluralNet.Shared/Utils/IntExt.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | namespace Huyn.PluralNet.Utils 10 | { 11 | public static class IntExtension 12 | { 13 | public static bool IsBetween(this int number, int start, int end) 14 | { 15 | return start <= number && number <= end; 16 | } 17 | public static bool IsBetweenEndNotIncluded(this int number, int start, int end) 18 | { 19 | return start <= number && number < end; 20 | } 21 | 22 | public static bool IsBetween(this long number, long start, long end) 23 | { 24 | return start <= number && number <= end; 25 | } 26 | public static bool IsBetweenEndNotIncluded(this long number, long start, long end) 27 | { 28 | return start <= number && number < end; 29 | } 30 | 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /PluralNet.Shared/Utils/PluralHelper.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Huyn.PluralNet 3 | * Author Rudy Huyn (6Studio) 4 | * License MIT / http://bit.ly/mit-license 5 | * 6 | * Version 1.00 7 | */ 8 | 9 | using System.Globalization; 10 | using Huyn.PluralNet.Providers; 11 | using Huyn.PluralNet.Interfaces; 12 | 13 | namespace Huyn.PluralNet.Utils 14 | { 15 | public static class PluralHelper 16 | { 17 | public static IPluralProvider GetPluralChooser(CultureInfo culture) 18 | { 19 | 20 | switch (culture.TwoLetterISOLanguageName) 21 | { 22 | 23 | 24 | case "ak": // Akan 25 | case "bh": // Bihari 26 | case "guw": // Gun 27 | case "ln": // Lingala 28 | case "mg": // Malagasy 29 | case "nso": // Northern Sotho 30 | case "pa": // Punjabi 31 | case "ti": // Tigrinya 32 | case "wa": // Walloon 33 | return new IntOneOrZeroProvider(); 34 | case "am": // Amharic 35 | case "bn": // Bengali 36 | case "ff": // Fulah 37 | case "gu": // Gujarati 38 | case "hi": // Hindi 39 | case "kn": // Kannada 40 | case "mr": // Marathi 41 | case "fa": // Persian 42 | case "zu": // Zulu 43 | return new ZeroToOneProvider(); 44 | case "hy": // Armenian 45 | case "fr": // French 46 | case "kab": // Kabyle 47 | return new ZeroToTwoExcludedProvider(); 48 | 49 | ///////////////////////////////////////////////////////////////////////////////////////// 50 | case "af": // Afrikaans 51 | case "sq": // Albanian 52 | case "ast": // Asturian 53 | case "asa": // Asu 54 | case "az": // Azerbaijani 55 | case "eu": // Basque 56 | case "bem": // Bemba 57 | case "bez": // Bena 58 | case "brx": // Bodo 59 | case "bg": // Bulgarian 60 | case "ca": // Catalan 61 | case "chr": // Cherokee 62 | case "cgg": // Chiga 63 | 64 | case "dv": // Divehi 65 | case "nl": // Dutch 66 | case "en": // English 67 | case "eo": // Esperanto 68 | case "et": // Estonian 69 | case "pt": // European Portuguese 70 | case "ee": // Ewe 71 | case "fo": // Faroese 72 | case "fi": // Finnish 73 | case "fur": // Friulian 74 | case "gl": // Galician 75 | case "lg": // Ganda 76 | case "ka": // Georgian 77 | case "de": // German 78 | case "el": // Greek 79 | case "ha": // Hausa 80 | case "haw": // Hawaiian 81 | case "hu": // Hungarian 82 | case "it": // Italian 83 | case "kaj": // Jju 84 | case "kkj": // Kako 85 | case "kl": // Kalaallisut 86 | case "ks": // Kashmiri 87 | case "kk": // Kazakh 88 | case "ku": // Kurdish 89 | case "ky": // Kyrgyz 90 | case "lb": // Luxembourgish 91 | case "jmc": // Machame 92 | case "ml": // Malayalam 93 | case "mas": // Masai 94 | case "mgo": // Meta' 95 | case "mn": // Mongolian 96 | case "nah": // Nahuatl 97 | case "ne": // Nepali 98 | case "nnh": // Ngiemboon 99 | case "jgo": // Ngomba 100 | case "nd": // North Ndebele 101 | case "no": // Norwegian 102 | case "nb": // Norwegian Bokmål 103 | case "nn": // Norwegian Nynorsk 104 | case "ny": // Nyanja 105 | case "nyn": // Nyankole 106 | case "or": // Oriya 107 | case "om": // Oromo 108 | case "os": // Ossetic 109 | case "pap": // Papiamento 110 | case "ps": // Pashto 111 | case "rm": // Romansh 112 | case "rof": // Rombo 113 | case "rwk": // Rwa 114 | case "ssy": // Saho 115 | case "sag": // Samburu 116 | case "seh": // Sena 117 | case "ksb": // Shambala 118 | case "sn": // Shona 119 | case "xog": // Soga 120 | case "so": // Somali 121 | case "ckb": // Sorani Kurdish 122 | case "nr": // South Ndebele 123 | case "st": // Southern Sotho 124 | case "es": // Spanish 125 | case "sw": // Swahili 126 | case "ss": // Swati 127 | case "sv": // Swedish 128 | case "gsw": // Swiss German 129 | case "syr": // Syriac 130 | case "ta": // Tamil 131 | case "te": // Telugu 132 | case "teo": // Teso 133 | case "tig": // Tigre 134 | case "ts": // Tsonga 135 | case "tn": // Tswana 136 | case "tr": // Turkish 137 | case "tk": // Turkmen 138 | case "kcg": // Tyap 139 | case "ur": // Urdu 140 | case "ug": // Uyghur 141 | case "uz": // Uzbek 142 | case "ve": // Venda 143 | case "vo": // Volapük 144 | case "vun": // Vunjo 145 | case "wae": // Walser 146 | case "fy": // Western Frisian 147 | case "xh": // Xhosa 148 | case "yi": // Yiddish 149 | case "ji": // ji 150 | return new OnlyOneProvider(); 151 | //////////////////////////////////////////////////////////////////////////////////// 152 | case "si": // Sinhala 153 | return new SinhalaProvider(); 154 | case "lv": // Latvian 155 | case "prg": // Prussian 156 | return new LatvianProvider(); 157 | case "ga": // Irish 158 | return new IrishProvider(); 159 | case "ro": // Romanian 160 | case "mo": // Moldavian 161 | return new RomanianProvider(); 162 | case "lt": // Lithuanian 163 | return new LithuanianProvider(); 164 | 165 | case "ru": // Russian 166 | case "uk": // Ukrainian 167 | case "be": // Belarusian 168 | return new SlavicProvider(); 169 | case "cs": // Czech 170 | case "sk": // Slovak 171 | return new CzechProvider(); 172 | case "pl": // Polish 173 | return new PolishProvider(); 174 | case "sl": // Slovenian 175 | return new SlovenianProvider(); 176 | // Arabic 177 | case "ar": 178 | return new ArabicProvider(); 179 | case "he": // Hebrew 180 | case "iw": // Iw 181 | return new HebrewProvider(); 182 | case "fil": // Filipino 183 | case "tl": // Tagalog 184 | return new FilipinoProvider(); 185 | case "mk": 186 | return new MacedonianProvider(); 187 | case "br": // Breton 188 | return new BreizhProvider(); 189 | case "tzm": // Central Atlas Tamazight 190 | return new CentralAtlasTamazightProvider(); 191 | case "ksh": //Colognian 192 | return new OneOrZeroProvider(); 193 | case "lag": //Langi 194 | return new OneOrZeroToOneExcludedProvider(); 195 | case "kw": // Cornish 196 | case "smn": // Inari Sami 197 | case "iu": // Inuktitut 198 | case "smj": // Lule Sami 199 | case "naq": // Nama 200 | case "se": // Northern Sami 201 | case "smi": // Sami languages [Other] 202 | case "sms": // Skolt Sami 203 | case "sma": // Southern Sami 204 | return new OneOrTwoProvider(); 205 | case "bs": // Bosnian 206 | case "hr": // Croatian 207 | case "sr": // Serbian 208 | case "sh": // Serbo-Croatian 209 | return new CroatProvider(); 210 | case "shi": 211 | return new TachelhitProvider(); 212 | case "is": 213 | return new IcelandicProvider(); 214 | case "gv": 215 | return new ManxProvider(); 216 | case "gd": 217 | return new ScottishGaelicProvider(); 218 | case "mt": // Maltese 219 | return new MalteseProvider(); 220 | case "cy": // Welsh 221 | return new WelshProvider(); 222 | case "da": // Danish 223 | return new DanishProvider(); 224 | default: 225 | return new OtherProvider(); 226 | } 227 | 228 | } 229 | } 230 | } 231 | -------------------------------------------------------------------------------- /PluralNet.Silverlight/PluralNet.Silverlight.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 8.0.50727 7 | 2.0 8 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7} 9 | {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} 10 | Library 11 | Properties 12 | PluralNet 13 | PluralNet 14 | Silverlight 15 | v5.0 16 | $(TargetFrameworkVersion) 17 | false 18 | true 19 | true 20 | 21 | 24 | 25 | v3.5 26 | 27 | 28 | true 29 | full 30 | false 31 | Bin\Debug 32 | DEBUG;TRACE;SILVERLIGHT 33 | true 34 | true 35 | prompt 36 | 4 37 | 38 | 39 | pdbonly 40 | true 41 | Bin\Release 42 | TRACE;SILVERLIGHT 43 | true 44 | true 45 | prompt 46 | 4 47 | 48 | 49 | 50 | 51 | 52 | 53 | $(TargetFrameworkDirectory)System.Core.dll 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 78 | -------------------------------------------------------------------------------- /PluralNet.Silverlight/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("PluralNet.Silverlight")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PluralNet.Silverlight")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("ff419b3f-9dea-4597-8124-39acfd467af7")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /PluralNet.SilverlightPhone/PluralNet.SilverlightPhone.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 10.0.20506 7 | 2.0 8 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC} 9 | {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} 10 | Library 11 | Properties 12 | PluralNet 13 | PluralNet 14 | WindowsPhone 15 | v8.0 16 | $(TargetFrameworkVersion) 17 | false 18 | true 19 | 11.0 20 | true 21 | 22 | 23 | true 24 | full 25 | false 26 | Bin\Debug 27 | DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE 28 | true 29 | true 30 | prompt 31 | 4 32 | 33 | 34 | pdbonly 35 | true 36 | Bin\Release 37 | TRACE;SILVERLIGHT;WINDOWS_PHONE 38 | true 39 | true 40 | prompt 41 | 4 42 | 43 | 44 | true 45 | full 46 | false 47 | Bin\x86\Debug 48 | DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE 49 | true 50 | true 51 | prompt 52 | 4 53 | 54 | 55 | pdbonly 56 | true 57 | Bin\x86\Release 58 | TRACE;SILVERLIGHT;WINDOWS_PHONE 59 | true 60 | true 61 | prompt 62 | 4 63 | 64 | 65 | true 66 | full 67 | false 68 | Bin\ARM\Debug 69 | DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE 70 | true 71 | true 72 | prompt 73 | 4 74 | 75 | 76 | pdbonly 77 | true 78 | Bin\ARM\Release 79 | TRACE;SILVERLIGHT;WINDOWS_PHONE 80 | true 81 | true 82 | prompt 83 | 4 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 99 | -------------------------------------------------------------------------------- /PluralNet.SilverlightPhone/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using System.Resources; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("PluralNet.SilverlightPhone")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("PluralNet.SilverlightPhone")] 14 | [assembly: AssemblyCopyright("Copyright © 2016")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | 18 | // Setting ComVisible to false makes the types in this assembly not visible 19 | // to COM components. If you need to access a type in this assembly from 20 | // COM, set the ComVisible attribute to true on that type. 21 | [assembly: ComVisible(false)] 22 | 23 | // The following GUID is for the ID of the typelib if this project is exposed to COM 24 | [assembly: Guid("f0ce0fcd-9784-4999-afab-e411d61f65fc")] 25 | 26 | // Version information for an assembly consists of the following four values: 27 | // 28 | // Major Version 29 | // Minor Version 30 | // Build Number 31 | // Revision 32 | // 33 | // You can specify all the values or you can default the Revision and Build Numbers 34 | // by using the '*' as shown below: 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | [assembly: NeutralResourcesLanguageAttribute("en-US")] 38 | -------------------------------------------------------------------------------- /PluralNet.WinRT/PluralNet.WinRT.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 12.0 6 | Debug 7 | AnyCPU 8 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144} 9 | Library 10 | Properties 11 | PluralNet 12 | PluralNet 13 | en-US 14 | 512 15 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 16 | Profile32 17 | v4.6 18 | 19 | 20 | true 21 | full 22 | false 23 | bin\Debug\ 24 | TRACE;DEBUG;WINRT 25 | prompt 26 | 4 27 | 28 | 29 | pdbonly 30 | true 31 | bin\Release\ 32 | TRACE;WINRT 33 | prompt 34 | 4 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 55 | -------------------------------------------------------------------------------- /PluralNet.WinRT/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("PluralNet")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("PortalNet.WinRT")] 14 | [assembly: AssemblyCopyright("Copyright © 2016")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /PluralNet.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "PluralNet.Shared", "PluralNet.Shared\PluralNet.Shared.shproj", "{1CEE422A-F0FC-4D54-B606-5F942C8F6159}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluralNet.WinRT", "PluralNet.WinRT\PluralNet.WinRT.csproj", "{26C68EEB-B24A-4BCF-943A-A46C3E76A144}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluralNet.SilverlightPhone", "PluralNet.SilverlightPhone\PluralNet.SilverlightPhone.csproj", "{F0CE0FCD-9784-4999-AFAB-E411D61F65FC}" 11 | EndProject 12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluralNet.Silverlight", "PluralNet.Silverlight\PluralNet.Silverlight.csproj", "{FF419B3F-9DEA-4597-8124-39ACFD467AF7}" 13 | EndProject 14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluralNet.Portable", "PluralNet.Portable\PluralNet.Portable.csproj", "{9601B867-0732-4DDA-9C75-E0653E4D5A58}" 15 | EndProject 16 | Global 17 | GlobalSection(SharedMSBuildProjectFiles) = preSolution 18 | PluralNet.Shared\PluralNet.Shared.projitems*{1cee422a-f0fc-4d54-b606-5f942c8f6159}*SharedItemsImports = 13 19 | PluralNet.Shared\PluralNet.Shared.projitems*{26c68eeb-b24a-4bcf-943a-a46c3e76a144}*SharedItemsImports = 4 20 | PluralNet.Shared\PluralNet.Shared.projitems*{9601b867-0732-4dda-9c75-e0653e4d5a58}*SharedItemsImports = 4 21 | PluralNet.Shared\PluralNet.Shared.projitems*{f0ce0fcd-9784-4999-afab-e411d61f65fc}*SharedItemsImports = 4 22 | PluralNet.Shared\PluralNet.Shared.projitems*{ff419b3f-9dea-4597-8124-39acfd467af7}*SharedItemsImports = 4 23 | EndGlobalSection 24 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 25 | Debug|Any CPU = Debug|Any CPU 26 | Debug|ARM = Debug|ARM 27 | Debug|x64 = Debug|x64 28 | Debug|x86 = Debug|x86 29 | Release|Any CPU = Release|Any CPU 30 | Release|ARM = Release|ARM 31 | Release|x64 = Release|x64 32 | Release|x86 = Release|x86 33 | EndGlobalSection 34 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 35 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 36 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|Any CPU.Build.0 = Debug|Any CPU 37 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|ARM.ActiveCfg = Debug|Any CPU 38 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|ARM.Build.0 = Debug|Any CPU 39 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|x64.ActiveCfg = Debug|Any CPU 40 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|x64.Build.0 = Debug|Any CPU 41 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|x86.ActiveCfg = Debug|Any CPU 42 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Debug|x86.Build.0 = Debug|Any CPU 43 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|Any CPU.ActiveCfg = Release|Any CPU 44 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|Any CPU.Build.0 = Release|Any CPU 45 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|ARM.ActiveCfg = Release|Any CPU 46 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|ARM.Build.0 = Release|Any CPU 47 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|x64.ActiveCfg = Release|Any CPU 48 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|x64.Build.0 = Release|Any CPU 49 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|x86.ActiveCfg = Release|Any CPU 50 | {26C68EEB-B24A-4BCF-943A-A46C3E76A144}.Release|x86.Build.0 = Release|Any CPU 51 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 52 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|Any CPU.Build.0 = Debug|Any CPU 53 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|ARM.ActiveCfg = Debug|ARM 54 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|ARM.Build.0 = Debug|ARM 55 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|x64.ActiveCfg = Debug|Any CPU 56 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|x64.Build.0 = Debug|Any CPU 57 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|x86.ActiveCfg = Debug|x86 58 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Debug|x86.Build.0 = Debug|x86 59 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|Any CPU.ActiveCfg = Release|Any CPU 60 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|Any CPU.Build.0 = Release|Any CPU 61 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|ARM.ActiveCfg = Release|ARM 62 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|ARM.Build.0 = Release|ARM 63 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|x64.ActiveCfg = Release|Any CPU 64 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|x64.Build.0 = Release|Any CPU 65 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|x86.ActiveCfg = Release|x86 66 | {F0CE0FCD-9784-4999-AFAB-E411D61F65FC}.Release|x86.Build.0 = Release|x86 67 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 68 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|Any CPU.Build.0 = Debug|Any CPU 69 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|ARM.ActiveCfg = Debug|Any CPU 70 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|ARM.Build.0 = Debug|Any CPU 71 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|x64.ActiveCfg = Debug|Any CPU 72 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|x64.Build.0 = Debug|Any CPU 73 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|x86.ActiveCfg = Debug|Any CPU 74 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Debug|x86.Build.0 = Debug|Any CPU 75 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|Any CPU.ActiveCfg = Release|Any CPU 76 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|Any CPU.Build.0 = Release|Any CPU 77 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|ARM.ActiveCfg = Release|Any CPU 78 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|ARM.Build.0 = Release|Any CPU 79 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|x64.ActiveCfg = Release|Any CPU 80 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|x64.Build.0 = Release|Any CPU 81 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|x86.ActiveCfg = Release|Any CPU 82 | {FF419B3F-9DEA-4597-8124-39ACFD467AF7}.Release|x86.Build.0 = Release|Any CPU 83 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 84 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|Any CPU.Build.0 = Debug|Any CPU 85 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|ARM.ActiveCfg = Debug|Any CPU 86 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|ARM.Build.0 = Debug|Any CPU 87 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|x64.ActiveCfg = Debug|Any CPU 88 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|x64.Build.0 = Debug|Any CPU 89 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|x86.ActiveCfg = Debug|Any CPU 90 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Debug|x86.Build.0 = Debug|Any CPU 91 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|Any CPU.ActiveCfg = Release|Any CPU 92 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|Any CPU.Build.0 = Release|Any CPU 93 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|ARM.ActiveCfg = Release|Any CPU 94 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|ARM.Build.0 = Release|Any CPU 95 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|x64.ActiveCfg = Release|Any CPU 96 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|x64.Build.0 = Release|Any CPU 97 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|x86.ActiveCfg = Release|Any CPU 98 | {9601B867-0732-4DDA-9C75-E0653E4D5A58}.Release|x86.Build.0 = Release|Any CPU 99 | EndGlobalSection 100 | GlobalSection(SolutionProperties) = preSolution 101 | HideSolutionNode = FALSE 102 | EndGlobalSection 103 | EndGlobal 104 | -------------------------------------------------------------------------------- /Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("Huyn.PluralNet")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("Huyn.PluralNet")] 14 | [assembly: AssemblyCopyright("Copyright © 2014")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Important 4 | 5 | __PluralNet is now deprecated, all features from PluralNet are now part of a more advanced toolset created/managed by the same team, named ReswPlus: https://github.com/dotnetplus/reswplus__ 6 | 7 | # PluralNet - Pluralization for Resx and Resw files 8 | 9 | __PluralNet__ adds support of pluralization and plural forms to your application. Very easy to use and compatible with RESW and RESX files. 10 | 11 | #How to use it? 12 | 13 | A Nuget package is available, you can install it from Visual Studio or using the following command line: 14 | 15 | ```nuget 16 | Install-Package PluralNet 17 | ``` 18 | 19 | #Support plural forms in your resource files 20 | 21 | Instead of one entry in your resource files, you must create one entry for each plural forms used by the language (One, Other, Few?, Many?, Zero?, Two?), used the ``_`` symbol to separate the resource name to the plural form id 22 | 23 | Example: 24 | 25 | English: 26 | * __TimeStampDay_One__ {0} day 27 | * __TimeStampDay_Other__ {0} days 28 | 29 | Polish (4 plural forms) 30 | * __TimestampMonth_One__ {0} miesiąc temu 31 | * __TimestampMonth_Few__ {0} miesiące temu 32 | * __TimestampMonth_Many__ {0} miesięcy temu 33 | * __TimestampMonth_Other__ {0} miesiąca temu 34 | 35 | ## Silverlight only: 36 | 37 | In order to use the correct plural rules, the library needs to know the language used by the app and not by the system (for example a polish phone displaying an english application need to use the english rule instead of polish). 38 | To do that, you need to add an extra entry in your RESW file (if not already done by Visual Studio): 39 | 40 | 41 | * __ResourceLanguage__ fr-FR 42 | 43 | # Manage plural forms code-behind 44 | 45 | ## If you use RESW: 46 | 47 | An extension is available to extend the ResourceLoader class, instead of 48 | 49 | ```csharp 50 | ResourceLoader.GetForCurrentView().GetString("TimeStampDay"); 51 | ``` 52 | 53 | you must use: 54 | 55 | ```csharp 56 | ResourceLoader.GetForCurrentView().GetPlural("TimeStampDay", ); 57 | ``` 58 | 59 | And optionally use string.Format(...) if your string supports formatting. 60 | 61 | ## If you use RESX: 62 | 63 | Instead of 64 | 65 | ```csharp 66 | AppResources.TimeStampDay; 67 | ``` 68 | use: 69 | 70 | ```csharp 71 | AppResources.ResourceManager.GetPlural("TimeStampDay", ); 72 | ``` 73 | 74 | You can then use string.Format(...) if your string supports formatting. 75 | 76 | # XAML 77 | To use pluralization XAML-side, you can use the converter ``PluralConverter``: 78 | 79 | ```xaml 80 | 81 | ``` 82 | 83 | If your localized string uses formatting, ``{0}`` will be automatically replaced by the number. 84 | 85 | # Platforms 86 | 87 | The library supports: 88 | * UWP 89 | * Silverlight 5 90 | * Windows Phone Silverlight 8.0 91 | * Windows 8 and 8.1 WinRT apps 92 | * Windows Phone 8.1 WinPRT apps 93 | * ASP.Net Core 94 | * .Net Desktop apps (winform, wpf, etc...) 95 | * Xamarin Android and iOS 96 | 97 | # Language supported 98 | 99 | Afrikaans, Akan, Albanian, Amharic, Arabic, Armenian, Assamese, Asturian, Asu, Azerbaijani, Bambara, Basque, Belarusian, Bemba, Bena, Bengali, Bihari, Bodo, Bosnian, Breton, Bulgarian, Burmese, Catalan, Central Atlas Tamazight, Central Kurdish, Chechen, Cherokee, Chiga, Chinese, Colognian, Cornish, Croatian, Czech, Danish, Divehi, Dutch, Dzongkha, English, Esperanto, Estonian, European Portuguese, Ewe, Faroese, Filipino, Finnish, French, Friulian, Fulah, Galician, Ganda, Georgian, German, Greek, Gujarati, Gun, Hausa, Hawaiian, Hebrew, Hindi, Hungarian, Icelandic, Igbo, Inari Sami, Indonesian, Inuktitut, Irish, Italian, Japanese, Javanese, Jju, Kabuverdianu, Kabyle, Kako, Kalaallisut, Kannada, Kashmiri, Kazakh, Khmer, Korean, Koyraboro Senni, Kurdish, Kyrgyz, Lakota, Langi, Lao, Latvian, Lingala, Lithuanian, Lojban, Lower Sorbian, Lule Sami, Luxembourgish, Macedonian, Machame, Makonde, Malagasy, Malay, Malayalam, Maltese, Manx, Marathi, Masai, Metaʼ, Moldavian, Mongolian, Nahuatl, Nama, Nepali, Ngiemboon, Ngomba, North Ndebele, Northern Sami, Northern Sotho, Norwegian, Norwegian Bokmål, Norwegian Nynorsk, Nyanja, Nyankole, N’Ko, Oriya, Oromo, Ossetic, Papiamento, Pashto, Persian, Polish, Portuguese, Prussian, Punjabi, Romanian, Romansh, Rombo, Root, Russian, Rwa, Saho, Sakha, Samburu, Sami languages [Other], Sango, Scottish Gaelic, Sena, Serbian, Serbo-Croatian, Shambala, Shona, Sichuan Yi, Sinhala, Skolt Sami, Slovak, Slovenian, Soga, Somali, South Ndebele, Southern Kurdish, Southern Sami, Southern Sotho, Spanish, Swahili, Swati, Swedish, Swiss German, Syriac, Tachelhit, Tagalog, Tamil, Telugu, Teso, Thai, Tibetan, Tigre, Tigrinya, Tongan, Tsonga, Tswana, Turkish, Turkmen, Tyap, Ukrainian, Upper Sorbian, Urdu, Uyghur, Uzbek, Venda, Vietnamese, Volapük, Vunjo, Walloon, Walser, Welsh, Western Frisian, Wolof, Xhosa, Yiddish, Yoruba, Zulu 100 | 101 | 102 | # How to help? 103 | 104 | If you detect an issue, want to add a language, don't hesitate to submit a pull request! 105 | 106 | # more info 107 | 108 | http://www.rudyhuyn.com/blog/?p=5341 109 | 110 |   111 | -------------------------------------------------------------------------------- /project.json: -------------------------------------------------------------------------------- 1 | { 2 | "supports": {}, 3 | "dependencies": {}, 4 | "frameworks": { 5 | ".NETPortable,Version=v4.6,Profile=Profile151": {} 6 | } 7 | } --------------------------------------------------------------------------------