├── .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 | }
--------------------------------------------------------------------------------