diff --git a/NuSpecs/Humanizer.Core.lt.nuspec b/NuSpecs/Humanizer.Core.lt.nuspec new file mode 100644 index 000000000..8f506e04c --- /dev/null +++ b/NuSpecs/Humanizer.Core.lt.nuspec @@ -0,0 +1,26 @@ + + + + Humanizer.Core.lt + $version$ + Humanizer Locale (lt) + Mehdi Khalili, Claire Novotny + https://github.com/Humanizr/Humanizer + logo.png + false + Humanizer Locale Lithuanian (lt) + Copyright (c) .NET Foundation and Contributors + MIT + + lv + + + + + + + + + + + \ No newline at end of file diff --git a/NuSpecs/Humanizer.nuspec b/NuSpecs/Humanizer.nuspec index 398a50846..a5389fa5e 100644 --- a/NuSpecs/Humanizer.nuspec +++ b/NuSpecs/Humanizer.nuspec @@ -39,6 +39,7 @@ + @@ -66,7 +67,7 @@ - + diff --git a/src/Humanizer.All.sln b/src/Humanizer.All.sln deleted file mode 100644 index c887ea6f0..000000000 --- a/src/Humanizer.All.sln +++ /dev/null @@ -1,194 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Humanizer.Tests", "Humanizer.Tests\Humanizer.Tests.csproj", "{F886A8DA-3EFC-4A89-91DD-06FAF13DA172}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Humanizer", "Humanizer\Humanizer.csproj", "{511A7984-F455-4A6E-ADB9-9CAAC47EA079}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4779A7C9-9ED8-4146-A158-FBE0B1BE09D9}" - ProjectSection(SolutionItems) = preProject - ..\.editorconfig = ..\.editorconfig - ..\.gitattributes = ..\.gitattributes - ..\.gitignore = ..\.gitignore - ..\appveyor.yml = ..\appveyor.yml - ..\NuSpecs\Humanizer.Core.nuspec = ..\NuSpecs\Humanizer.Core.nuspec - ..\NuSpecs\Humanizer.nuspec = ..\NuSpecs\Humanizer.nuspec - ..\LICENSE = ..\LICENSE - ..\readme.md = ..\readme.md - ..\release_notes.md = ..\release_notes.md - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{97AAE24D-0488-42AE-A585-86D882F23D5F}" - ProjectSection(SolutionItems) = preProject - ..\build.cmd = ..\build.cmd - ..\build.proj = ..\build.proj - Humanizer.ruleset = Humanizer.ruleset - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1ABFDC1F-EAB0-48E1-B27E-388619899018}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Humanizer.Tests.Shared", "Humanizer.Tests.Shared\Humanizer.Tests.Shared.shproj", "{FDEC244B-F07E-4A5E-BB80-FBC6AC77A9AA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Humanizer.Tests.Uwp", "Humanizer.Tests.Uwp\Humanizer.Tests.Uwp.csproj", "{261367CA-00C7-4832-BD26-200CFF8F575F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{04B74BEC-A645-4D1A-BE21-F4EB4413A903}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Humanizer.Tests.Uwp.Runner", "Humanizer.Tests.Uwp.Runner\Humanizer.Tests.Uwp.Runner.csproj", "{F0DC7771-CE59-4F3C-B160-56F661F5D220}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuSpecs", "NuSpecs", "{AA449265-E001-486D-A0F4-04ACF0C83DC1}" - ProjectSection(SolutionItems) = preProject - ..\NuSpecs\Humanizer.Core.af.nuspec = ..\NuSpecs\Humanizer.Core.af.nuspec - ..\NuSpecs\Humanizer.Core.ar.nuspec = ..\NuSpecs\Humanizer.Core.ar.nuspec - ..\NuSpecs\Humanizer.Core.bg.nuspec = ..\NuSpecs\Humanizer.Core.bg.nuspec - ..\NuSpecs\Humanizer.Core.bn-BD.nuspec = ..\NuSpecs\Humanizer.Core.bn-BD.nuspec - ..\NuSpecs\Humanizer.Core.cs.nuspec = ..\NuSpecs\Humanizer.Core.cs.nuspec - ..\NuSpecs\Humanizer.Core.da.nuspec = ..\NuSpecs\Humanizer.Core.da.nuspec - ..\NuSpecs\Humanizer.Core.de.nuspec = ..\NuSpecs\Humanizer.Core.de.nuspec - ..\NuSpecs\Humanizer.Core.el.nuspec = ..\NuSpecs\Humanizer.Core.el.nuspec - ..\NuSpecs\Humanizer.Core.es.nuspec = ..\NuSpecs\Humanizer.Core.es.nuspec - ..\NuSpecs\Humanizer.Core.fa.nuspec = ..\NuSpecs\Humanizer.Core.fa.nuspec - ..\NuSpecs\Humanizer.Core.fi-FI.nuspec = ..\NuSpecs\Humanizer.Core.fi-FI.nuspec - ..\NuSpecs\Humanizer.Core.fr-BE.nuspec = ..\NuSpecs\Humanizer.Core.fr-BE.nuspec - ..\NuSpecs\Humanizer.Core.fr.nuspec = ..\NuSpecs\Humanizer.Core.fr.nuspec - ..\NuSpecs\Humanizer.Core.he.nuspec = ..\NuSpecs\Humanizer.Core.he.nuspec - ..\NuSpecs\Humanizer.Core.hr.nuspec = ..\NuSpecs\Humanizer.Core.hr.nuspec - ..\NuSpecs\Humanizer.Core.hu.nuspec = ..\NuSpecs\Humanizer.Core.hu.nuspec - ..\NuSpecs\Humanizer.Core.id.nuspec = ..\NuSpecs\Humanizer.Core.id.nuspec - ..\NuSpecs\Humanizer.Core.it.nuspec = ..\NuSpecs\Humanizer.Core.it.nuspec - ..\NuSpecs\Humanizer.Core.ja.nuspec = ..\NuSpecs\Humanizer.Core.ja.nuspec - ..\NuSpecs\Humanizer.Core.lv.nuspec = ..\NuSpecs\Humanizer.Core.lv.nuspec - ..\NuSpecs\Humanizer.Core.nb-NO.nuspec = ..\NuSpecs\Humanizer.Core.nb-NO.nuspec - ..\NuSpecs\Humanizer.Core.nb.nuspec = ..\NuSpecs\Humanizer.Core.nb.nuspec - ..\NuSpecs\Humanizer.Core.nl.nuspec = ..\NuSpecs\Humanizer.Core.nl.nuspec - ..\NuSpecs\Humanizer.Core.nuspec = ..\NuSpecs\Humanizer.Core.nuspec - ..\NuSpecs\Humanizer.Core.pl.nuspec = ..\NuSpecs\Humanizer.Core.pl.nuspec - ..\NuSpecs\Humanizer.Core.pt.nuspec = ..\NuSpecs\Humanizer.Core.pt.nuspec - ..\NuSpecs\Humanizer.Core.ro.nuspec = ..\NuSpecs\Humanizer.Core.ro.nuspec - ..\NuSpecs\Humanizer.Core.ru.nuspec = ..\NuSpecs\Humanizer.Core.ru.nuspec - ..\NuSpecs\Humanizer.Core.sk.nuspec = ..\NuSpecs\Humanizer.Core.sk.nuspec - ..\NuSpecs\Humanizer.Core.sl.nuspec = ..\NuSpecs\Humanizer.Core.sl.nuspec - ..\NuSpecs\Humanizer.Core.sr-Latn.nuspec = ..\NuSpecs\Humanizer.Core.sr-Latn.nuspec - ..\NuSpecs\Humanizer.Core.sr.nuspec = ..\NuSpecs\Humanizer.Core.sr.nuspec - ..\NuSpecs\Humanizer.Core.sv.nuspec = ..\NuSpecs\Humanizer.Core.sv.nuspec - ..\NuSpecs\Humanizer.Core.tr.nuspec = ..\NuSpecs\Humanizer.Core.tr.nuspec - ..\NuSpecs\Humanizer.Core.uk.nuspec = ..\NuSpecs\Humanizer.Core.uk.nuspec - ..\NuSpecs\Humanizer.Core.uz-Cyrl-UZ.nuspec = ..\NuSpecs\Humanizer.Core.uz-Cyrl-UZ.nuspec - ..\NuSpecs\Humanizer.Core.uz-Latn-UZ.nuspec = ..\NuSpecs\Humanizer.Core.uz-Latn-UZ.nuspec - ..\NuSpecs\Humanizer.Core.vi.nuspec = ..\NuSpecs\Humanizer.Core.vi.nuspec - ..\NuSpecs\Humanizer.Core.zh-CN.nuspec = ..\NuSpecs\Humanizer.Core.zh-CN.nuspec - ..\NuSpecs\Humanizer.Core.zh-Hans.nuspec = ..\NuSpecs\Humanizer.Core.zh-Hans.nuspec - ..\NuSpecs\Humanizer.Core.zh-Hant.nuspec = ..\NuSpecs\Humanizer.Core.zh-Hant.nuspec - ..\NuSpecs\Humanizer.nuspec = ..\NuSpecs\Humanizer.nuspec - EndProjectSection -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - Humanizer.Tests.Shared\Humanizer.Tests.Shared.projitems*{261367ca-00c7-4832-bd26-200cff8f575f}*SharedItemsImports = 4 - Humanizer.Tests.Shared\Humanizer.Tests.Shared.projitems*{f0dc7771-ce59-4f3c-b160-56f661f5d220}*SharedItemsImports = 4 - Humanizer.Tests.Shared\Humanizer.Tests.Shared.projitems*{fdec244b-f07e-4a5e-bb80-fbc6ac77a9aa}*SharedItemsImports = 13 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|ARM.ActiveCfg = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|ARM.Build.0 = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|x64.ActiveCfg = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|x64.Build.0 = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|x86.ActiveCfg = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Debug|x86.Build.0 = Debug|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|Any CPU.Build.0 = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|ARM.ActiveCfg = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|ARM.Build.0 = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|x64.ActiveCfg = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|x64.Build.0 = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|x86.ActiveCfg = Release|Any CPU - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172}.Release|x86.Build.0 = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|Any CPU.Build.0 = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|ARM.ActiveCfg = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|ARM.Build.0 = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|x64.ActiveCfg = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|x64.Build.0 = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|x86.ActiveCfg = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Debug|x86.Build.0 = Debug|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|Any CPU.ActiveCfg = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|Any CPU.Build.0 = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|ARM.ActiveCfg = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|ARM.Build.0 = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|x64.ActiveCfg = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|x64.Build.0 = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|x86.ActiveCfg = Release|Any CPU - {511A7984-F455-4A6E-ADB9-9CAAC47EA079}.Release|x86.Build.0 = Release|Any CPU - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|Any CPU.ActiveCfg = Debug|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|Any CPU.Build.0 = Debug|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|Any CPU.Deploy.0 = Debug|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|ARM.ActiveCfg = Debug|ARM - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|ARM.Build.0 = Debug|ARM - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|ARM.Deploy.0 = Debug|ARM - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|x64.ActiveCfg = Debug|x64 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|x64.Build.0 = Debug|x64 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|x64.Deploy.0 = Debug|x64 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|x86.ActiveCfg = Debug|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|x86.Build.0 = Debug|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Debug|x86.Deploy.0 = Debug|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|Any CPU.ActiveCfg = Release|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|ARM.ActiveCfg = Release|ARM - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|ARM.Build.0 = Release|ARM - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|ARM.Deploy.0 = Release|ARM - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|x64.ActiveCfg = Release|x64 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|x64.Build.0 = Release|x64 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|x64.Deploy.0 = Release|x64 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|x86.ActiveCfg = Release|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|x86.Build.0 = Release|x86 - {261367CA-00C7-4832-BD26-200CFF8F575F}.Release|x86.Deploy.0 = Release|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|Any CPU.ActiveCfg = Debug|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|Any CPU.Build.0 = Debug|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|Any CPU.Deploy.0 = Debug|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|ARM.ActiveCfg = Debug|ARM - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|ARM.Build.0 = Debug|ARM - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|ARM.Deploy.0 = Debug|ARM - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|x64.ActiveCfg = Debug|x64 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|x64.Build.0 = Debug|x64 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|x64.Deploy.0 = Debug|x64 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|x86.ActiveCfg = Debug|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|x86.Build.0 = Debug|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Debug|x86.Deploy.0 = Debug|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|Any CPU.ActiveCfg = Release|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|ARM.ActiveCfg = Release|ARM - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|ARM.Build.0 = Release|ARM - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|ARM.Deploy.0 = Release|ARM - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|x64.ActiveCfg = Release|x64 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|x64.Build.0 = Release|x64 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|x64.Deploy.0 = Release|x64 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|x86.ActiveCfg = Release|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|x86.Build.0 = Release|x86 - {F0DC7771-CE59-4F3C-B160-56F661F5D220}.Release|x86.Deploy.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F886A8DA-3EFC-4A89-91DD-06FAF13DA172} = {04B74BEC-A645-4D1A-BE21-F4EB4413A903} - {97AAE24D-0488-42AE-A585-86D882F23D5F} = {4779A7C9-9ED8-4146-A158-FBE0B1BE09D9} - {FDEC244B-F07E-4A5E-BB80-FBC6AC77A9AA} = {04B74BEC-A645-4D1A-BE21-F4EB4413A903} - {261367CA-00C7-4832-BD26-200CFF8F575F} = {04B74BEC-A645-4D1A-BE21-F4EB4413A903} - {F0DC7771-CE59-4F3C-B160-56F661F5D220} = {04B74BEC-A645-4D1A-BE21-F4EB4413A903} - {AA449265-E001-486D-A0F4-04ACF0C83DC1} = {4779A7C9-9ED8-4146-A158-FBE0B1BE09D9} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E4063A70-EE14-49AE-A6C4-3108B1CA70EF} - EndGlobalSection -EndGlobal diff --git a/src/Humanizer.Tests.Shared/Humanizer.Tests.Shared.projitems b/src/Humanizer.Tests.Shared/Humanizer.Tests.Shared.projitems index 51bc3c02b..3c4952f38 100644 --- a/src/Humanizer.Tests.Shared/Humanizer.Tests.Shared.projitems +++ b/src/Humanizer.Tests.Shared/Humanizer.Tests.Shared.projitems @@ -40,6 +40,9 @@ + + + diff --git a/src/Humanizer.Tests.Shared/Localisation/lt/DateToOrdinalWordsTests.cs b/src/Humanizer.Tests.Shared/Localisation/lt/DateToOrdinalWordsTests.cs new file mode 100644 index 000000000..1a2b0c29b --- /dev/null +++ b/src/Humanizer.Tests.Shared/Localisation/lt/DateToOrdinalWordsTests.cs @@ -0,0 +1,23 @@ +using System; +using Xunit; + +namespace Humanizer.Tests.Localisation.lt +{ + [UseCulture("lt")] + public class DateToOrdinalWordsTests + { + [Fact] + public void OrdinalizeString() + { + Assert.Equal("2015 m. sausio 1 d.", new DateTime(2015, 1, 1).ToOrdinalWords()); + } + +#if NET6_0_OR_GREATER + [Fact] + public void OrdinalizeDateOnlyString() + { + Assert.Equal("2015 m. sausio 1 d.", new DateOnly(2015, 1, 1).ToOrdinalWords()); + } +#endif + } +} diff --git a/src/Humanizer.Tests.Shared/Localisation/lt/NumberToWordsTests.cs b/src/Humanizer.Tests.Shared/Localisation/lt/NumberToWordsTests.cs new file mode 100644 index 000000000..d12658dfd --- /dev/null +++ b/src/Humanizer.Tests.Shared/Localisation/lt/NumberToWordsTests.cs @@ -0,0 +1,556 @@ +using Xunit; + +namespace Humanizer.Tests.Localisation.lt +{ + [UseCulture("lt")] + public class NumberToWordsTests + { + [Theory] + [InlineData(-1, "minus vienas")] + [InlineData(0, "nulis")] + [InlineData(1, "vienas")] + [InlineData(11, "vienuolika")] + [InlineData(21, "dvidešimt vienas")] + [InlineData(22, "dvidešimt du")] + [InlineData(26, "dvidešimt šeši")] + [InlineData(30, "trisdešimt")] + [InlineData(31, "trisdešimt vienas")] + [InlineData(33, "trisdešimt trys")] + [InlineData(37, "trisdešimt septyni")] + [InlineData(40, "keturiasdešimt")] + [InlineData(41, "keturiasdešimt vienas")] + [InlineData(44, "keturiasdešimt keturi")] + [InlineData(48, "keturiasdešimt aštuoni")] + [InlineData(50, "penkiasdešimt")] + [InlineData(51, "penkiasdešimt vienas")] + [InlineData(55, "penkiasdešimt penki")] + [InlineData(59, "penkiasdešimt devyni")] + [InlineData(60, "šešiasdešimt")] + [InlineData(61, "šešiasdešimt vienas")] + [InlineData(62, "šešiasdešimt du")] + [InlineData(66, "šešiasdešimt šeši")] + [InlineData(70, "septyniasdešimt")] + [InlineData(71, "septyniasdešimt vienas")] + [InlineData(73, "septyniasdešimt trys")] + [InlineData(77, "septyniasdešimt septyni")] + [InlineData(80, "aštuoniasdešimt")] + [InlineData(81, "aštuoniasdešimt vienas")] + [InlineData(84, "aštuoniasdešimt keturi")] + [InlineData(88, "aštuoniasdešimt aštuoni")] + [InlineData(90, "devyniasdešimt")] + [InlineData(91, "devyniasdešimt vienas")] + [InlineData(95, "devyniasdešimt penki")] + [InlineData(99, "devyniasdešimt devyni")] + [InlineData(100, "šimtas")] + [InlineData(101, "šimtas vienas")] + [InlineData(105, "šimtas penki")] + [InlineData(110, "šimtas dešimt")] + [InlineData(151, "šimtas penkiasdešimt vienas")] + [InlineData(200, "du šimtai")] + [InlineData(202, "du šimtai du")] + [InlineData(206, "du šimtai šeši")] + [InlineData(220, "du šimtai dvidešimt")] + [InlineData(262, "du šimtai šešiasdešimt du")] + [InlineData(300, "trys šimtai")] + [InlineData(303, "trys šimtai trys")] + [InlineData(307, "trys šimtai septyni")] + [InlineData(330, "trys šimtai trisdešimt")] + [InlineData(373, "trys šimtai septyniasdešimt trys")] + [InlineData(400, "keturi šimtai")] + [InlineData(404, "keturi šimtai keturi")] + [InlineData(408, "keturi šimtai aštuoni")] + [InlineData(440, "keturi šimtai keturiasdešimt")] + [InlineData(484, "keturi šimtai aštuoniasdešimt keturi")] + [InlineData(500, "penki šimtai")] + [InlineData(505, "penki šimtai penki")] + [InlineData(509, "penki šimtai devyni")] + [InlineData(550, "penki šimtai penkiasdešimt")] + [InlineData(595, "penki šimtai devyniasdešimt penki")] + [InlineData(600, "šeši šimtai")] + [InlineData(601, "šeši šimtai vienas")] + [InlineData(606, "šeši šimtai šeši")] + [InlineData(616, "šeši šimtai šešiolika")] + [InlineData(660, "šeši šimtai šešiasdešimt")] + [InlineData(700, "septyni šimtai")] + [InlineData(702, "septyni šimtai du")] + [InlineData(707, "septyni šimtai septyni")] + [InlineData(727, "septyni šimtai dvidešimt septyni")] + [InlineData(770, "septyni šimtai septyniasdešimt")] + [InlineData(800, "aštuoni šimtai")] + [InlineData(803, "aštuoni šimtai trys")] + [InlineData(808, "aštuoni šimtai aštuoni")] + [InlineData(838, "aštuoni šimtai trisdešimt aštuoni")] + [InlineData(880, "aštuoni šimtai aštuoniasdešimt")] + [InlineData(900, "devyni šimtai")] + [InlineData(904, "devyni šimtai keturi")] + [InlineData(909, "devyni šimtai devyni")] + [InlineData(949, "devyni šimtai keturiasdešimt devyni")] + [InlineData(990, "devyni šimtai devyniasdešimt")] + [InlineData(1000, "tūkstantis")] + [InlineData(1001, "tūkstantis vienas")] + [InlineData(1012, "tūkstantis dvylika")] + [InlineData(1100, "tūkstantis šimtas")] + [InlineData(1234, "tūkstantis du šimtai trisdešimt keturi")] + [InlineData(2000, "du tūkstančiai")] + [InlineData(2002, "du tūkstančiai du")] + [InlineData(2023, "du tūkstančiai dvidešimt trys")] + [InlineData(2345, "du tūkstančiai trys šimtai keturiasdešimt penki")] + [InlineData(3000, "trys tūkstančiai")] + [InlineData(3003, "trys tūkstančiai trys")] + [InlineData(3034, "trys tūkstančiai trisdešimt keturi")] + [InlineData(3456, "trys tūkstančiai keturi šimtai penkiasdešimt šeši")] + [InlineData(4000, "keturi tūkstančiai")] + [InlineData(4004, "keturi tūkstančiai keturi")] + [InlineData(4045, "keturi tūkstančiai keturiasdešimt penki")] + [InlineData(4567, "keturi tūkstančiai penki šimtai šešiasdešimt septyni")] + [InlineData(5000, "penki tūkstančiai")] + [InlineData(5005, "penki tūkstančiai penki")] + [InlineData(5056, "penki tūkstančiai penkiasdešimt šeši")] + [InlineData(5678, "penki tūkstančiai šeši šimtai septyniasdešimt aštuoni")] + [InlineData(6000, "šeši tūkstančiai")] + [InlineData(6006, "šeši tūkstančiai šeši")] + [InlineData(6067, "šeši tūkstančiai šešiasdešimt septyni")] + [InlineData(6789, "šeši tūkstančiai septyni šimtai aštuoniasdešimt devyni")] + [InlineData(7000, "septyni tūkstančiai")] + [InlineData(7007, "septyni tūkstančiai septyni")] + [InlineData(7078, "septyni tūkstančiai septyniasdešimt aštuoni")] + [InlineData(7890, "septyni tūkstančiai aštuoni šimtai devyniasdešimt")] + [InlineData(8000, "aštuoni tūkstančiai")] + [InlineData(8008, "aštuoni tūkstančiai aštuoni")] + [InlineData(8089, "aštuoni tūkstančiai aštuoniasdešimt devyni")] + [InlineData(8901, "aštuoni tūkstančiai devyni šimtai vienas")] + [InlineData(9000, "devyni tūkstančiai")] + [InlineData(9009, "devyni tūkstančiai devyni")] + [InlineData(9012, "devyni tūkstančiai dvylika")] + [InlineData(9090, "devyni tūkstančiai devyniasdešimt")] + [InlineData(10000, "dešimt tūkstančių")] + [InlineData(10001, "dešimt tūkstančių vienas")] + [InlineData(20020, "dvidešimt tūkstančių dvidešimt")] + [InlineData(30300, "trisdešimt tūkstančių trys šimtai")] + [InlineData(44000, "keturiasdešimt keturi tūkstančiai")] + [InlineData(44231, "keturiasdešimt keturi tūkstančiai du šimtai trisdešimt vienas")] + [InlineData(100000, "šimtas tūkstančių")] + [InlineData(500000, "penki šimtai tūkstančių")] + [InlineData(1000000, "milijonas")] + [InlineData(6000000, "šeši milijonai")] + [InlineData(10000000, "dešimt milijonų")] + [InlineData(70000000, "septyniasdešimt milijonų")] + [InlineData(100000000, "šimtas milijonų")] + [InlineData(800000000, "aštuoni šimtai milijonų")] + [InlineData(9223372036854775807, "devyni kvintilijonai du šimtai dvidešimt trys kvadrilijonai trys šimtai septyniasdešimt du trilijonai trisdešimt šeši milijardai aštuoni šimtai penkiasdešimt keturi milijonai septyni šimtai septyniasdešimt penki tūkstančiai aštuoni šimtai septyni")] + public void ToWordsMasculine(long number, string expected) + { + Assert.Equal(expected, number.ToWords(gender: GrammaticalGender.Masculine)); + } + + [Theory] + [InlineData(-1, "minus viena")] + [InlineData(0, "nulis")] + [InlineData(1, "viena")] + [InlineData(11, "vienuolika")] + [InlineData(21, "dvidešimt viena")] + [InlineData(22, "dvidešimt dvi")] + [InlineData(26, "dvidešimt šešios")] + [InlineData(30, "trisdešimt")] + [InlineData(31, "trisdešimt viena")] + [InlineData(33, "trisdešimt trys")] + [InlineData(37, "trisdešimt septynios")] + [InlineData(40, "keturiasdešimt")] + [InlineData(41, "keturiasdešimt viena")] + [InlineData(44, "keturiasdešimt keturios")] + [InlineData(48, "keturiasdešimt aštuonios")] + [InlineData(50, "penkiasdešimt")] + [InlineData(51, "penkiasdešimt viena")] + [InlineData(55, "penkiasdešimt penkios")] + [InlineData(59, "penkiasdešimt devynios")] + [InlineData(60, "šešiasdešimt")] + [InlineData(61, "šešiasdešimt viena")] + [InlineData(62, "šešiasdešimt dvi")] + [InlineData(66, "šešiasdešimt šešios")] + [InlineData(70, "septyniasdešimt")] + [InlineData(71, "septyniasdešimt viena")] + [InlineData(73, "septyniasdešimt trys")] + [InlineData(77, "septyniasdešimt septynios")] + [InlineData(80, "aštuoniasdešimt")] + [InlineData(81, "aštuoniasdešimt viena")] + [InlineData(84, "aštuoniasdešimt keturios")] + [InlineData(88, "aštuoniasdešimt aštuonios")] + [InlineData(90, "devyniasdešimt")] + [InlineData(91, "devyniasdešimt viena")] + [InlineData(95, "devyniasdešimt penkios")] + [InlineData(99, "devyniasdešimt devynios")] + [InlineData(100, "šimtas")] + [InlineData(101, "šimtas viena")] + [InlineData(105, "šimtas penkios")] + [InlineData(110, "šimtas dešimt")] + [InlineData(151, "šimtas penkiasdešimt viena")] + [InlineData(200, "du šimtai")] + [InlineData(202, "du šimtai dvi")] + [InlineData(206, "du šimtai šešios")] + [InlineData(220, "du šimtai dvidešimt")] + [InlineData(262, "du šimtai šešiasdešimt dvi")] + [InlineData(300, "trys šimtai")] + [InlineData(303, "trys šimtai trys")] + [InlineData(307, "trys šimtai septynios")] + [InlineData(330, "trys šimtai trisdešimt")] + [InlineData(373, "trys šimtai septyniasdešimt trys")] + [InlineData(400, "keturi šimtai")] + [InlineData(404, "keturi šimtai keturios")] + [InlineData(408, "keturi šimtai aštuonios")] + [InlineData(440, "keturi šimtai keturiasdešimt")] + [InlineData(484, "keturi šimtai aštuoniasdešimt keturios")] + [InlineData(500, "penki šimtai")] + [InlineData(505, "penki šimtai penkios")] + [InlineData(509, "penki šimtai devynios")] + [InlineData(550, "penki šimtai penkiasdešimt")] + [InlineData(595, "penki šimtai devyniasdešimt penkios")] + [InlineData(600, "šeši šimtai")] + [InlineData(601, "šeši šimtai viena")] + [InlineData(606, "šeši šimtai šešios")] + [InlineData(616, "šeši šimtai šešiolika")] + [InlineData(660, "šeši šimtai šešiasdešimt")] + [InlineData(700, "septyni šimtai")] + [InlineData(702, "septyni šimtai dvi")] + [InlineData(707, "septyni šimtai septynios")] + [InlineData(727, "septyni šimtai dvidešimt septynios")] + [InlineData(770, "septyni šimtai septyniasdešimt")] + [InlineData(800, "aštuoni šimtai")] + [InlineData(803, "aštuoni šimtai trys")] + [InlineData(808, "aštuoni šimtai aštuonios")] + [InlineData(838, "aštuoni šimtai trisdešimt aštuonios")] + [InlineData(880, "aštuoni šimtai aštuoniasdešimt")] + [InlineData(900, "devyni šimtai")] + [InlineData(904, "devyni šimtai keturios")] + [InlineData(909, "devyni šimtai devynios")] + [InlineData(949, "devyni šimtai keturiasdešimt devynios")] + [InlineData(990, "devyni šimtai devyniasdešimt")] + [InlineData(1000, "tūkstantis")] + [InlineData(1001, "tūkstantis viena")] + [InlineData(1012, "tūkstantis dvylika")] + [InlineData(1100, "tūkstantis šimtas")] + [InlineData(1234, "tūkstantis du šimtai trisdešimt keturios")] + [InlineData(2000, "du tūkstančiai")] + [InlineData(2002, "du tūkstančiai dvi")] + [InlineData(2023, "du tūkstančiai dvidešimt trys")] + [InlineData(2345, "du tūkstančiai trys šimtai keturiasdešimt penkios")] + [InlineData(3000, "trys tūkstančiai")] + [InlineData(3003, "trys tūkstančiai trys")] + [InlineData(3034, "trys tūkstančiai trisdešimt keturios")] + [InlineData(3456, "trys tūkstančiai keturi šimtai penkiasdešimt šešios")] + [InlineData(4000, "keturi tūkstančiai")] + [InlineData(4004, "keturi tūkstančiai keturios")] + [InlineData(4045, "keturi tūkstančiai keturiasdešimt penkios")] + [InlineData(4567, "keturi tūkstančiai penki šimtai šešiasdešimt septynios")] + [InlineData(5000, "penki tūkstančiai")] + [InlineData(5005, "penki tūkstančiai penkios")] + [InlineData(5056, "penki tūkstančiai penkiasdešimt šešios")] + [InlineData(5678, "penki tūkstančiai šeši šimtai septyniasdešimt aštuonios")] + [InlineData(6000, "šeši tūkstančiai")] + [InlineData(6006, "šeši tūkstančiai šešios")] + [InlineData(6067, "šeši tūkstančiai šešiasdešimt septynios")] + [InlineData(6789, "šeši tūkstančiai septyni šimtai aštuoniasdešimt devynios")] + [InlineData(7000, "septyni tūkstančiai")] + [InlineData(7007, "septyni tūkstančiai septynios")] + [InlineData(7078, "septyni tūkstančiai septyniasdešimt aštuonios")] + [InlineData(7890, "septyni tūkstančiai aštuoni šimtai devyniasdešimt")] + [InlineData(8000, "aštuoni tūkstančiai")] + [InlineData(8008, "aštuoni tūkstančiai aštuonios")] + [InlineData(8089, "aštuoni tūkstančiai aštuoniasdešimt devynios")] + [InlineData(8901, "aštuoni tūkstančiai devyni šimtai viena")] + [InlineData(9000, "devyni tūkstančiai")] + [InlineData(9009, "devyni tūkstančiai devynios")] + [InlineData(9012, "devyni tūkstančiai dvylika")] + [InlineData(9090, "devyni tūkstančiai devyniasdešimt")] + [InlineData(10000, "dešimt tūkstančių")] + [InlineData(10001, "dešimt tūkstančių viena")] + [InlineData(20020, "dvidešimt tūkstančių dvidešimt")] + [InlineData(30300, "trisdešimt tūkstančių trys šimtai")] + [InlineData(44000, "keturiasdešimt keturi tūkstančiai")] + [InlineData(44231, "keturiasdešimt keturi tūkstančiai du šimtai trisdešimt viena")] + [InlineData(100000, "šimtas tūkstančių")] + [InlineData(500000, "penki šimtai tūkstančių")] + [InlineData(1000000, "milijonas")] + [InlineData(6000000, "šeši milijonai")] + [InlineData(10000000, "dešimt milijonų")] + [InlineData(70000000, "septyniasdešimt milijonų")] + [InlineData(100000000, "šimtas milijonų")] + [InlineData(800000000, "aštuoni šimtai milijonų")] + [InlineData(9223372036854775807, "devyni kvintilijonai du šimtai dvidešimt trys kvadrilijonai trys šimtai septyniasdešimt du trilijonai trisdešimt šeši milijardai aštuoni šimtai penkiasdešimt keturi milijonai septyni šimtai septyniasdešimt penki tūkstančiai aštuoni šimtai septynios")] + public void ToWordsFeminine(long number, string expected) + { + Assert.Equal(expected, number.ToWords(gender: GrammaticalGender.Feminine)); + } + + [Theory] + [InlineData(-1, "minus pirmas")] + [InlineData(0, "nulinis")] + [InlineData(1, "pirmas")] + [InlineData(21, "dvidešimt pirmas")] + [InlineData(22, "dvidešimt antras")] + [InlineData(26, "dvidešimt šeštas")] + [InlineData(30, "trisdešimtas")] + [InlineData(31, "trisdešimt pirmas")] + [InlineData(33, "trisdešimt trečias")] + [InlineData(37, "trisdešimt septintas")] + [InlineData(40, "keturiasdešimtas")] + [InlineData(41, "keturiasdešimt pirmas")] + [InlineData(44, "keturiasdešimt ketvirtas")] + [InlineData(48, "keturiasdešimt aštuntas")] + [InlineData(50, "penkiasdešimtas")] + [InlineData(51, "penkiasdešimt pirmas")] + [InlineData(55, "penkiasdešimt penktas")] + [InlineData(59, "penkiasdešimt devintas")] + [InlineData(60, "šešiasdešimtas")] + [InlineData(61, "šešiasdešimt pirmas")] + [InlineData(62, "šešiasdešimt antras")] + [InlineData(66, "šešiasdešimt šeštas")] + [InlineData(70, "septyniasdešimtas")] + [InlineData(71, "septyniasdešimt pirmas")] + [InlineData(73, "septyniasdešimt trečias")] + [InlineData(77, "septyniasdešimt septintas")] + [InlineData(80, "aštuoniasdešimtas")] + [InlineData(81, "aštuoniasdešimt pirmas")] + [InlineData(84, "aštuoniasdešimt ketvirtas")] + [InlineData(88, "aštuoniasdešimt aštuntas")] + [InlineData(90, "devyniasdešimtas")] + [InlineData(91, "devyniasdešimt pirmas")] + [InlineData(95, "devyniasdešimt penktas")] + [InlineData(99, "devyniasdešimt devintas")] + [InlineData(100, "šimtas")] + [InlineData(101, "šimtas pirmas")] + [InlineData(105, "šimtas penktas")] + [InlineData(110, "šimtas dešimtas")] + [InlineData(151, "šimtas penkiasdešimt pirmas")] + [InlineData(200, "du šimtas")] + [InlineData(202, "du šimtai antras")] + [InlineData(206, "du šimtai šeštas")] + [InlineData(220, "du šimtai dvidešimtas")] + [InlineData(262, "du šimtai šešiasdešimt antras")] + [InlineData(300, "trys šimtas")] + [InlineData(303, "trys šimtai trečias")] + [InlineData(307, "trys šimtai septintas")] + [InlineData(330, "trys šimtai trisdešimtas")] + [InlineData(373, "trys šimtai septyniasdešimt trečias")] + [InlineData(400, "keturi šimtas")] + [InlineData(404, "keturi šimtai ketvirtas")] + [InlineData(408, "keturi šimtai aštuntas")] + [InlineData(440, "keturi šimtai keturiasdešimtas")] + [InlineData(484, "keturi šimtai aštuoniasdešimt ketvirtas")] + [InlineData(500, "penki šimtas")] + [InlineData(505, "penki šimtai penktas")] + [InlineData(509, "penki šimtai devintas")] + [InlineData(550, "penki šimtai penkiasdešimtas")] + [InlineData(595, "penki šimtai devyniasdešimt penktas")] + [InlineData(600, "šeši šimtas")] + [InlineData(601, "šeši šimtai pirmas")] + [InlineData(606, "šeši šimtai šeštas")] + [InlineData(616, "šeši šimtai šešioliktas")] + [InlineData(660, "šeši šimtai šešiasdešimtas")] + [InlineData(700, "septyni šimtas")] + [InlineData(702, "septyni šimtai antras")] + [InlineData(707, "septyni šimtai septintas")] + [InlineData(727, "septyni šimtai dvidešimt septintas")] + [InlineData(770, "septyni šimtai septyniasdešimtas")] + [InlineData(800, "aštuoni šimtas")] + [InlineData(803, "aštuoni šimtai trečias")] + [InlineData(808, "aštuoni šimtai aštuntas")] + [InlineData(838, "aštuoni šimtai trisdešimt aštuntas")] + [InlineData(880, "aštuoni šimtai aštuoniasdešimtas")] + [InlineData(900, "devyni šimtas")] + [InlineData(904, "devyni šimtai ketvirtas")] + [InlineData(909, "devyni šimtai devintas")] + [InlineData(949, "devyni šimtai keturiasdešimt devintas")] + [InlineData(990, "devyni šimtai devyniasdešimtas")] + [InlineData(1000, "tūkstantas")] + [InlineData(1001, "tūkstantis pirmas")] + [InlineData(1012, "tūkstantis dvyliktas")] + [InlineData(1100, "tūkstantis šimtas")] + [InlineData(1234, "tūkstantis du šimtai trisdešimt ketvirtas")] + [InlineData(2000, "du tūkstantas")] + [InlineData(2002, "du tūkstančiai antras")] + [InlineData(2023, "du tūkstančiai dvidešimt trečias")] + [InlineData(2345, "du tūkstančiai trys šimtai keturiasdešimt penktas")] + [InlineData(3000, "trys tūkstantas")] + [InlineData(3003, "trys tūkstančiai trečias")] + [InlineData(3034, "trys tūkstančiai trisdešimt ketvirtas")] + [InlineData(3456, "trys tūkstančiai keturi šimtai penkiasdešimt šeštas")] + [InlineData(4000, "keturi tūkstantas")] + [InlineData(4004, "keturi tūkstančiai ketvirtas")] + [InlineData(4045, "keturi tūkstančiai keturiasdešimt penktas")] + [InlineData(4567, "keturi tūkstančiai penki šimtai šešiasdešimt septintas")] + [InlineData(5000, "penki tūkstantas")] + [InlineData(5005, "penki tūkstančiai penktas")] + [InlineData(5056, "penki tūkstančiai penkiasdešimt šeštas")] + [InlineData(5678, "penki tūkstančiai šeši šimtai septyniasdešimt aštuntas")] + [InlineData(6000, "šeši tūkstantas")] + [InlineData(6006, "šeši tūkstančiai šeštas")] + [InlineData(6067, "šeši tūkstančiai šešiasdešimt septintas")] + [InlineData(6789, "šeši tūkstančiai septyni šimtai aštuoniasdešimt devintas")] + [InlineData(7000, "septyni tūkstantas")] + [InlineData(7007, "septyni tūkstančiai septintas")] + [InlineData(7078, "septyni tūkstančiai septyniasdešimt aštuntas")] + [InlineData(7890, "septyni tūkstančiai aštuoni šimtai devyniasdešimtas")] + [InlineData(8000, "aštuoni tūkstantas")] + [InlineData(8008, "aštuoni tūkstančiai aštuntas")] + [InlineData(8089, "aštuoni tūkstančiai aštuoniasdešimt devintas")] + [InlineData(8901, "aštuoni tūkstančiai devyni šimtai pirmas")] + [InlineData(9000, "devyni tūkstantas")] + [InlineData(9009, "devyni tūkstančiai devintas")] + [InlineData(9012, "devyni tūkstančiai dvyliktas")] + [InlineData(9090, "devyni tūkstančiai devyniasdešimtas")] + [InlineData(10000, "dešimt tūkstantas")] + [InlineData(10001, "dešimt tūkstančių pirmas")] + [InlineData(20020, "dvidešimt tūkstančių dvidešimtas")] + [InlineData(30300, "trisdešimt tūkstančių trys šimtas")] + [InlineData(44000, "keturiasdešimt keturi tūkstantas")] + [InlineData(44231, "keturiasdešimt keturi tūkstančiai du šimtai trisdešimt pirmas")] + [InlineData(100000, "šimtas tūkstantas")] + [InlineData(500000, "penki šimtai tūkstantas")] + [InlineData(1000000, "milijonas")] + [InlineData(6000000, "šeši milijonas")] + [InlineData(10000000, "dešimt milijonas")] + [InlineData(70000000, "septyniasdešimt milijonas")] + [InlineData(100000000, "šimtas milijonas")] + [InlineData(800000000, "aštuoni šimtai milijonas")] + public void ToOrdinalWordsMasculine(int number, string expected) + { + Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine)); + } + + [Theory] + [InlineData(-1, "minus pirma")] + [InlineData(0, "nulinė")] + [InlineData(1, "pirma")] + [InlineData(21, "dvidešimt pirma")] + [InlineData(22, "dvidešimt antra")] + [InlineData(26, "dvidešimt šešta")] + [InlineData(30, "trisdešimta")] + [InlineData(31, "trisdešimt pirma")] + [InlineData(33, "trisdešimt trečia")] + [InlineData(37, "trisdešimt septinta")] + [InlineData(40, "keturiasdešimta")] + [InlineData(41, "keturiasdešimt pirma")] + [InlineData(44, "keturiasdešimt ketvirta")] + [InlineData(48, "keturiasdešimt aštunta")] + [InlineData(50, "penkiasdešimta")] + [InlineData(51, "penkiasdešimt pirma")] + [InlineData(55, "penkiasdešimt penkta")] + [InlineData(59, "penkiasdešimt devinta")] + [InlineData(60, "šešiasdešimta")] + [InlineData(61, "šešiasdešimt pirma")] + [InlineData(62, "šešiasdešimt antra")] + [InlineData(66, "šešiasdešimt šešta")] + [InlineData(70, "septyniasdešimta")] + [InlineData(71, "septyniasdešimt pirma")] + [InlineData(73, "septyniasdešimt trečia")] + [InlineData(77, "septyniasdešimt septinta")] + [InlineData(80, "aštuoniasdešimta")] + [InlineData(81, "aštuoniasdešimt pirma")] + [InlineData(84, "aštuoniasdešimt ketvirta")] + [InlineData(88, "aštuoniasdešimt aštunta")] + [InlineData(90, "devyniasdešimta")] + [InlineData(91, "devyniasdešimt pirma")] + [InlineData(95, "devyniasdešimt penkta")] + [InlineData(99, "devyniasdešimt devinta")] + [InlineData(100, "šimta")] + [InlineData(101, "šimtas pirma")] + [InlineData(105, "šimtas penkta")] + [InlineData(110, "šimtas dešimta")] + [InlineData(151, "šimtas penkiasdešimt pirma")] + [InlineData(200, "du šimta")] + [InlineData(202, "du šimtai antra")] + [InlineData(206, "du šimtai šešta")] + [InlineData(220, "du šimtai dvidešimta")] + [InlineData(262, "du šimtai šešiasdešimt antra")] + [InlineData(300, "trys šimta")] + [InlineData(303, "trys šimtai trečia")] + [InlineData(307, "trys šimtai septinta")] + [InlineData(330, "trys šimtai trisdešimta")] + [InlineData(373, "trys šimtai septyniasdešimt trečia")] + [InlineData(400, "keturi šimta")] + [InlineData(404, "keturi šimtai ketvirta")] + [InlineData(408, "keturi šimtai aštunta")] + [InlineData(440, "keturi šimtai keturiasdešimta")] + [InlineData(484, "keturi šimtai aštuoniasdešimt ketvirta")] + [InlineData(500, "penki šimta")] + [InlineData(505, "penki šimtai penkta")] + [InlineData(509, "penki šimtai devinta")] + [InlineData(550, "penki šimtai penkiasdešimta")] + [InlineData(595, "penki šimtai devyniasdešimt penkta")] + [InlineData(600, "šeši šimta")] + [InlineData(601, "šeši šimtai pirma")] + [InlineData(606, "šeši šimtai šešta")] + [InlineData(616, "šeši šimtai šešiolikta")] + [InlineData(660, "šeši šimtai šešiasdešimta")] + [InlineData(700, "septyni šimta")] + [InlineData(702, "septyni šimtai antra")] + [InlineData(707, "septyni šimtai septinta")] + [InlineData(727, "septyni šimtai dvidešimt septinta")] + [InlineData(770, "septyni šimtai septyniasdešimta")] + [InlineData(800, "aštuoni šimta")] + [InlineData(803, "aštuoni šimtai trečia")] + [InlineData(808, "aštuoni šimtai aštunta")] + [InlineData(838, "aštuoni šimtai trisdešimt aštunta")] + [InlineData(880, "aštuoni šimtai aštuoniasdešimta")] + [InlineData(900, "devyni šimta")] + [InlineData(904, "devyni šimtai ketvirta")] + [InlineData(909, "devyni šimtai devinta")] + [InlineData(949, "devyni šimtai keturiasdešimt devinta")] + [InlineData(990, "devyni šimtai devyniasdešimta")] + [InlineData(1000, "tūkstanta")] + [InlineData(1001, "tūkstantis pirma")] + [InlineData(1012, "tūkstantis dvylikta")] + [InlineData(1100, "tūkstantis šimta")] + [InlineData(1234, "tūkstantis du šimtai trisdešimt ketvirta")] + [InlineData(2000, "du tūkstanta")] + [InlineData(2002, "du tūkstančiai antra")] + [InlineData(2023, "du tūkstančiai dvidešimt trečia")] + [InlineData(2345, "du tūkstančiai trys šimtai keturiasdešimt penkta")] + [InlineData(3000, "trys tūkstanta")] + [InlineData(3003, "trys tūkstančiai trečia")] + [InlineData(3034, "trys tūkstančiai trisdešimt ketvirta")] + [InlineData(3456, "trys tūkstančiai keturi šimtai penkiasdešimt šešta")] + [InlineData(4000, "keturi tūkstanta")] + [InlineData(4004, "keturi tūkstančiai ketvirta")] + [InlineData(4045, "keturi tūkstančiai keturiasdešimt penkta")] + [InlineData(4567, "keturi tūkstančiai penki šimtai šešiasdešimt septinta")] + [InlineData(5000, "penki tūkstanta")] + [InlineData(5005, "penki tūkstančiai penkta")] + [InlineData(5056, "penki tūkstančiai penkiasdešimt šešta")] + [InlineData(5678, "penki tūkstančiai šeši šimtai septyniasdešimt aštunta")] + [InlineData(6000, "šeši tūkstanta")] + [InlineData(6006, "šeši tūkstančiai šešta")] + [InlineData(6067, "šeši tūkstančiai šešiasdešimt septinta")] + [InlineData(6789, "šeši tūkstančiai septyni šimtai aštuoniasdešimt devinta")] + [InlineData(7000, "septyni tūkstanta")] + [InlineData(7007, "septyni tūkstančiai septinta")] + [InlineData(7078, "septyni tūkstančiai septyniasdešimt aštunta")] + [InlineData(7890, "septyni tūkstančiai aštuoni šimtai devyniasdešimta")] + [InlineData(8000, "aštuoni tūkstanta")] + [InlineData(8008, "aštuoni tūkstančiai aštunta")] + [InlineData(8089, "aštuoni tūkstančiai aštuoniasdešimt devinta")] + [InlineData(8901, "aštuoni tūkstančiai devyni šimtai pirma")] + [InlineData(9000, "devyni tūkstanta")] + [InlineData(9009, "devyni tūkstančiai devinta")] + [InlineData(9012, "devyni tūkstančiai dvylikta")] + [InlineData(9090, "devyni tūkstančiai devyniasdešimta")] + [InlineData(10000, "dešimt tūkstanta")] + [InlineData(10001, "dešimt tūkstančių pirma")] + [InlineData(20020, "dvidešimt tūkstančių dvidešimta")] + [InlineData(30300, "trisdešimt tūkstančių trys šimta")] + [InlineData(44000, "keturiasdešimt keturi tūkstanta")] + [InlineData(44231, "keturiasdešimt keturi tūkstančiai du šimtai trisdešimt pirma")] + [InlineData(100000, "šimtas tūkstanta")] + [InlineData(500000, "penki šimtai tūkstanta")] + [InlineData(1000000, "milijona")] + [InlineData(6000000, "šeši milijona")] + [InlineData(10000000, "dešimt milijona")] + [InlineData(70000000, "septyniasdešimt milijona")] + [InlineData(100000000, "šimtas milijona")] + [InlineData(800000000, "aštuoni šimtai milijona")] + public void ToOrdinalWordsFeminine(int number, string expected) + { + Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine)); + } + } +} diff --git a/src/Humanizer.Tests.Shared/Localisation/lt/TimeSpanHumanizeTests.cs b/src/Humanizer.Tests.Shared/Localisation/lt/TimeSpanHumanizeTests.cs new file mode 100644 index 000000000..2ec9ce46f --- /dev/null +++ b/src/Humanizer.Tests.Shared/Localisation/lt/TimeSpanHumanizeTests.cs @@ -0,0 +1,119 @@ +using System; +using Humanizer.Localisation; +using Xunit; + +namespace Humanizer.Tests.Localisation.lt +{ + [UseCulture("lt")] + public class TimeSpanHumanizeTests + { + [Theory] + [Trait("Translation", "Native speaker")] + [InlineData(366, "1 metai")] + [InlineData(731, "2 metai")] + [InlineData(1096, "3 metai")] + [InlineData(4018, "11 metų")] + public void Years(int days, string expected) + { + Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year)); + } + + [Theory] + [Trait("Translation", "Native speaker")] + [InlineData(31, "1 mėnuo")] + [InlineData(61, "2 mėnesiai")] + [InlineData(280, "9 mėnesiai")] + [InlineData(330, "10 mėnesių")] + public void Months(int days, string expected) + { + Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year)); + } + + [Theory] + [InlineData(7, "1 savaitė")] + [InlineData(14, "2 savaitės")] + [InlineData(21, "3 savaitės")] + [InlineData(77, "11 savaičių")] + [InlineData(147, "21 savaitė")] + public void Weeks(int days, string expected) + { + Assert.Equal(expected, TimeSpan.FromDays(days).Humanize()); + } + + [Theory] + [InlineData(1, "1 diena")] + [InlineData(2, "2 dienos")] + [InlineData(9, "9 dienos")] + [InlineData(10, "10 dienų")] + [InlineData(17, "17 dienų")] + [InlineData(21, "21 diena")] + public void Days(int days, string expected) + { + Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Day)); + } + + [Theory] + [InlineData(1, "1 valanda")] + [InlineData(2, "2 valandos")] + [InlineData(3, "3 valandos")] + [InlineData(9, "9 valandos")] + [InlineData(10, "10 valandų")] + [InlineData(19, "19 valandų")] + [InlineData(21, "21 valanda")] + public void Hours(int hours, string expected) + { + Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize()); + } + + [Theory] + [InlineData(1, "1 minutė")] + [InlineData(2, "2 minutės")] + [InlineData(3, "3 minutės")] + [InlineData(9, "9 minutės")] + [InlineData(10, "10 minučių")] + [InlineData(19, "19 minučių")] + [InlineData(21, "21 minutė")] + public void Minutes(int minutes, string expected) + { + Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize()); + } + + [Theory] + [InlineData(1, "1 sekundė")] + [InlineData(2, "2 sekundės")] + [InlineData(3, "3 sekundės")] + [InlineData(9, "9 sekundės")] + [InlineData(10, "10 sekundžių")] + [InlineData(19, "19 sekundžių")] + [InlineData(21, "21 sekundė")] + public void Seconds(int seconds, string expected) + { + Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize()); + } + + [Theory] + [InlineData(1, "1 milisekundė")] + [InlineData(2, "2 milisekundės")] + [InlineData(3, "3 milisekundės")] + [InlineData(9, "9 milisekundės")] + [InlineData(10, "10 milisekundžių")] + [InlineData(19, "19 milisekundžių")] + [InlineData(21, "21 milisekundė")] + public void Milliseconds(int milliseconds, string expected) + { + Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize()); + } + + [Fact] + public void NoTime() + { + Assert.Equal("0 milisekundžių", TimeSpan.Zero.Humanize()); + } + + [Fact] + public void NoTimeToWords() + { + Assert.Equal("nėra laiko", TimeSpan.Zero.Humanize(toWords: true)); + } + } +} diff --git a/src/Humanizer/Configuration/DateOnlyToOrdinalWordsConverterRegistry.cs b/src/Humanizer/Configuration/DateOnlyToOrdinalWordsConverterRegistry.cs index b59e7cc0f..1ee7c0864 100644 --- a/src/Humanizer/Configuration/DateOnlyToOrdinalWordsConverterRegistry.cs +++ b/src/Humanizer/Configuration/DateOnlyToOrdinalWordsConverterRegistry.cs @@ -10,6 +10,7 @@ public DateOnlyToOrdinalWordsConverterRegistry() : base(new DefaultDateOnlyToOrd Register("en-US", new UsDateOnlyToOrdinalWordsConverter()); Register("fr", new FrDateOnlyToOrdinalWordsConverter()); Register("es", new EsDateOnlyToOrdinalWordsConverter()); + Register("lt", new LtDateOnlyToOrdinalWordsConverter()); } } } diff --git a/src/Humanizer/Configuration/DateToOrdinalWordsConverterRegistry.cs b/src/Humanizer/Configuration/DateToOrdinalWordsConverterRegistry.cs index 083dd9a3a..bfa0b883d 100644 --- a/src/Humanizer/Configuration/DateToOrdinalWordsConverterRegistry.cs +++ b/src/Humanizer/Configuration/DateToOrdinalWordsConverterRegistry.cs @@ -9,6 +9,7 @@ public DateToOrdinalWordsConverterRegistry() : base(new DefaultDateToOrdinalWord Register("en-US", new UsDateToOrdinalWordsConverter()); Register("fr", new FrDateToOrdinalWordsConverter()); Register("es", new EsDateToOrdinalWordsConverter()); + Register("lt", new LtDateToOrdinalWordsConverter()); } } } diff --git a/src/Humanizer/Configuration/FormatterRegistry.cs b/src/Humanizer/Configuration/FormatterRegistry.cs index f4963d80b..836f3a97c 100644 --- a/src/Humanizer/Configuration/FormatterRegistry.cs +++ b/src/Humanizer/Configuration/FormatterRegistry.cs @@ -60,6 +60,7 @@ public FormatterRegistry() : base(new DefaultFormatter("en-US")) RegisterDefaultFormatter("zh-Hant"); RegisterDefaultFormatter("th-TH"); RegisterDefaultFormatter("en-IN"); + Register("lt", new LithuanianFormatter()); } private void RegisterDefaultFormatter(string localeCode) diff --git a/src/Humanizer/Configuration/NumberToWordsConverterRegistry.cs b/src/Humanizer/Configuration/NumberToWordsConverterRegistry.cs index 283669c71..ad2d7da56 100644 --- a/src/Humanizer/Configuration/NumberToWordsConverterRegistry.cs +++ b/src/Humanizer/Configuration/NumberToWordsConverterRegistry.cs @@ -54,7 +54,7 @@ public NumberToWordsConverterRegistry() Register("lv", new LatvianNumberToWordsConverter()); Register("ko-KR", new KoreanNumberToWordsConverter()); Register("en-IN", new IndianNumberToWordsConverter()); - + Register("lt", new LithuanianNumberToWordsConverter()); } } } diff --git a/src/Humanizer/Localisation/DateToOrdinalWords/LtDateOnlyToOrdinalWordsConverter.cs b/src/Humanizer/Localisation/DateToOrdinalWords/LtDateOnlyToOrdinalWordsConverter.cs new file mode 100644 index 000000000..fac6c5f7c --- /dev/null +++ b/src/Humanizer/Localisation/DateToOrdinalWords/LtDateOnlyToOrdinalWordsConverter.cs @@ -0,0 +1,19 @@ +#if NET6_0_OR_GREATER +using System; + +namespace Humanizer.Localisation.DateToOrdinalWords +{ + internal class LtDateOnlyToOrdinalWordsConverter : IDateOnlyToOrdinalWordConverter + { + public string Convert(DateOnly date) + { + return date.ToString("yyyy 'm.' MMMM d 'd.'"); + } + + public string Convert(DateOnly date, GrammaticalCase grammaticalCase) + { + return Convert(date); + } + } +} +#endif diff --git a/src/Humanizer/Localisation/DateToOrdinalWords/LtDateToOrdinalWordsConverter.cs b/src/Humanizer/Localisation/DateToOrdinalWords/LtDateToOrdinalWordsConverter.cs new file mode 100644 index 000000000..2507bb24a --- /dev/null +++ b/src/Humanizer/Localisation/DateToOrdinalWords/LtDateToOrdinalWordsConverter.cs @@ -0,0 +1,17 @@ +using System; + +namespace Humanizer.Localisation.DateToOrdinalWords +{ + internal class LtDateToOrdinalWordsConverter : IDateToOrdinalWordConverter + { + public string Convert(DateTime date) + { + return date.ToString("yyyy 'm.' MMMM d 'd.'"); + } + + public string Convert(DateTime date, GrammaticalCase grammaticalCase) + { + return Convert(date); + } + } +} diff --git a/src/Humanizer/Localisation/Formatters/LithuanianFormatter.cs b/src/Humanizer/Localisation/Formatters/LithuanianFormatter.cs new file mode 100644 index 000000000..f453bf082 --- /dev/null +++ b/src/Humanizer/Localisation/Formatters/LithuanianFormatter.cs @@ -0,0 +1,39 @@ +using Humanizer.Localisation.GrammaticalNumber; + +namespace Humanizer.Localisation.Formatters +{ + internal class LithuanianFormatter : DefaultFormatter + { + public LithuanianFormatter() + : base("lt") + { + } + + protected override string GetResourceKey(string resourceKey, int number) + { + if (resourceKey == "TimeSpanHumanize_Zero") + { + return resourceKey; + } + + var grammaticalNumber = LithuanianNumberFormDetector.Detect(number); + var suffix = GetSuffix(grammaticalNumber); + return resourceKey + suffix; + } + + private static string GetSuffix(LithuanianNumberForm form) + { + if (form == LithuanianNumberForm.Singular) + { + return "_Singular"; + } + + if (form == LithuanianNumberForm.GenitivePlural) + { + return "_Plural"; + } + + return ""; + } + } +} diff --git a/src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberForm.cs b/src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberForm.cs new file mode 100644 index 000000000..402bd37c7 --- /dev/null +++ b/src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberForm.cs @@ -0,0 +1,9 @@ +namespace Humanizer.Localisation.GrammaticalNumber +{ + internal enum LithuanianNumberForm + { + Singular, + Plural, + GenitivePlural + } +} diff --git a/src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberFormDetector.cs b/src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberFormDetector.cs new file mode 100644 index 000000000..e6ec0b0ce --- /dev/null +++ b/src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberFormDetector.cs @@ -0,0 +1,24 @@ +namespace Humanizer.Localisation.GrammaticalNumber +{ + internal static class LithuanianNumberFormDetector + { + public static LithuanianNumberForm Detect(long number) + { + var tens = number % 100 / 10; + var units = number % 10; + + if (tens == 1 || units == 0) // 10-19, 20, 30, 40 ... 100, 110 .. + { + return LithuanianNumberForm.GenitivePlural; + } + + if (units == 1) // 1, 21, 31, 41 ... 91, 101, 121 ... + { + return LithuanianNumberForm.Singular; + } + + // 2-9, 22-29, 32 ... + return LithuanianNumberForm.Plural; + } + } +} diff --git a/src/Humanizer/Localisation/NumberToWords/LithuanianNumberToWordsConverter.cs b/src/Humanizer/Localisation/NumberToWords/LithuanianNumberToWordsConverter.cs new file mode 100644 index 000000000..3a3f230b8 --- /dev/null +++ b/src/Humanizer/Localisation/NumberToWords/LithuanianNumberToWordsConverter.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections.Generic; + +using Humanizer.Localisation.GrammaticalNumber; + +namespace Humanizer.Localisation.NumberToWords +{ + internal class LithuanianNumberToWordsConverter : GenderedNumberToWordsConverter + { + private static readonly string[] UnitsMap = { "nulis", "vienas", "du", "trys", "keturi", "penki", "šeši", "septyni", "aštuoni", "devyni", "dešimt", "vienuolika", "dvylika", "trylika", "keturiolika", "penkiolika", "šešiolika", "septyniolika", "aštuoniolika", "devyniolika" }; + private static readonly string[] TensMap = { string.Empty, "dešimt", "dvidešimt", "trisdešimt", "keturiasdešimt", "penkiasdešimt", "šešiasdešimt", "septyniasdešimt", "aštuoniasdešimt", "devyniasdešimt" }; + private static readonly string[] HundredsMap = { string.Empty, "šimtas", "du šimtai", "trys šimtai", "keturi šimtai", "penki šimtai", "šeši šimtai", "septyni šimtai", "aštuoni šimtai", "devyni šimtai" }; + + private static readonly string[] OrdinalUnitsMap = { string.Empty, "pirm", "antr", "treči", "ketvirt", "penkt", "šešt", "septint", "aštunt", "devint", "dešimt", "vienuolikt", "dvylikt", "trylikt", "keturiolikt", "penkiolikt", "šešiolikt", "septyniolikt", "aštuoniolikt", "devyniolikt", "dvidešimt" }; + private static readonly string[] OrdinalTensMap = { string.Empty, "dešimt", "dvidešimt", "trisdešimt", "keturiasdešimt", "penkiasdešimt", "šešiasdešimt", "septyniasdešimt", "aštuoniasdešimt", "devyniasdešimt" }; + private static readonly string[] OrdinalHundredsMap = { string.Empty, "šimt", "du šimt", "trys šimt", "keturi šimt", "penki šimt", "šeši šimt", "septyni šimt", "aštuoni šimt", "devyni šimt" }; + + public override string Convert(long input, GrammaticalGender gender, bool addAnd = true) + { + if (gender == GrammaticalGender.Neuter) + { + throw new NotSupportedException(); + } + + var parts = new List(); + var number = input; + + HandleNegative(parts, ref number); + CollectParts(parts, ref number, 1000000000000000000, GrammaticalGender.Masculine, "kvintilijonas", "kvintilijonai", "kvintilijonų"); + CollectParts(parts, ref number, 1000000000000000, GrammaticalGender.Masculine, "kvadrilijonas", "kvadrilijonai", "kvadrilijonų"); + CollectParts(parts, ref number, 1000000000000, GrammaticalGender.Masculine, "trilijonas", "trilijonai", "trilijonų"); + CollectParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, "milijardas", "milijardai", "milijardų"); + CollectParts(parts, ref number, 1000000, GrammaticalGender.Masculine, "milijonas", "milijonai", "milijonų"); + CollectParts(parts, ref number, 1000, GrammaticalGender.Masculine, "tūkstantis", "tūkstančiai", "tūkstančių"); + CollectPartsUnderOneThousand(parts, number, gender); + + return string.Join(" ", parts); + } + + public override string ConvertToOrdinal(int input, GrammaticalGender gender) + { + if (gender == GrammaticalGender.Neuter) + { + throw new NotSupportedException(); + } + + var parts = new List(); + var number = (long)input; + + HandleNegative(parts, ref number); + CollectOrdinalParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, "milijard" + GetOrdinalEndingForGender(gender), "milijardas", "milijardai", "milijardų"); + CollectOrdinalParts(parts, ref number, 1000000, GrammaticalGender.Masculine, "milijon" + GetOrdinalEndingForGender(gender), "milijonas", "milijonai", "milijonų"); + CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Masculine, "tūkstant" + GetOrdinalEndingForGender(gender), "tūkstantis", "tūkstančiai", "tūkstančių"); + CollectOrdinalPartsUnderOneThousand(parts, number, gender, true); + + return string.Join(" ", parts); + } + + private static void HandleNegative(List parts, ref long number) + { + if (number < 0) + { + parts.Add("minus"); + number = -number; + } + } + + private static void CollectParts(ICollection parts, ref long number, long divisor, + GrammaticalGender gender, params string[] forms) + { + var result = number / divisor; + if (result == 0) + { + return; + } + + number %= divisor; + + if (result > 1) + { + CollectPartsUnderOneThousand(parts, result, gender); + } + + parts.Add(ChooseForm(result, forms)); + } + + private static void CollectOrdinalParts(ICollection parts, ref long number, long divisor, + GrammaticalGender gender, string ordinalForm, params string[] forms) + { + var result = number / divisor; + if (result == 0) + { + return; + } + + number %= divisor; + + if (result > 1) + { + CollectOrdinalPartsUnderOneThousand(parts, result, gender); + } + + parts.Add(ChooseCardinalOrOrdinalForm(result, ordinalForm, forms, useOrdinalForm: number == 0)); + } + + private static void CollectPartsUnderOneThousand(ICollection parts, long number, GrammaticalGender gender) + { + if (number >= 100) + { + var hundreds = number / 100; + number %= 100; + parts.Add(HundredsMap[hundreds]); + } + + if (number >= 20) + { + var tens = number / 10; + parts.Add(TensMap[tens]); + number %= 10; + } + + if (number > 0 || parts.Count == 0) + { + parts.Add(GetCardinalNumberForGender(UnitsMap[number], gender)); + } + } + + private static void CollectOrdinalPartsUnderOneThousand(ICollection parts, long number, + GrammaticalGender gender, bool lastNumber = false) + { + if (number >= 100) + { + var hundreds = number / 100; + number %= 100; + + parts.Add(!lastNumber || number > 0 + ? HundredsMap[hundreds] + : OrdinalHundredsMap[hundreds] + GetOrdinalEndingForGender(gender)); + } + + if (number >= 20) + { + var tens = number / 10; + number %= 10; + + parts.Add(!lastNumber || number > 0 + ? TensMap[tens] + : OrdinalTensMap[tens] + GetOrdinalEndingForGender(gender)); + } + + if (number > 0) + { + parts.Add(!lastNumber + ? UnitsMap[number] + : OrdinalUnitsMap[number] + GetOrdinalEndingForGender(gender)); + } + else if (number == 0 && parts.Count == 0) + { + parts.Add(gender == GrammaticalGender.Masculine ? "nulinis" : "nulinė"); + } + } + + private static string ChooseForm(long number, string[] forms) + { + return forms[GetFormIndex(number)]; + } + + private static string ChooseCardinalOrOrdinalForm(long number, string ordinalForm, string[] cardinalForms, + bool useOrdinalForm = false) + { + if (useOrdinalForm) + { + return ordinalForm; + } + + return ChooseForm(number, cardinalForms); + } + + private static int GetFormIndex(long number) + { + var form = LithuanianNumberFormDetector.Detect(number); + + switch (form) + { + case LithuanianNumberForm.Singular: + { + return 0; + } + case LithuanianNumberForm.Plural: + { + return 1; + } + case LithuanianNumberForm.GenitivePlural: + { + return 2; + } + default: + throw new ArgumentOutOfRangeException(nameof(form)); + } + } + + private static string GetCardinalNumberForGender(string number, GrammaticalGender gender) + { + if (gender == GrammaticalGender.Masculine) + { + return number; + } + + if (gender == GrammaticalGender.Feminine) + { + if (number == "du") + { + return "dvi"; + } + + if (number.EndsWith("as")) + { + return number.Substring(0, number.Length - 1); + } + + if (number.EndsWith("i")) + { + return number + "os"; + } + + return number; + } + + throw new ArgumentOutOfRangeException(nameof(gender)); + } + + private static string GetOrdinalEndingForGender(GrammaticalGender gender) + { + switch (gender) + { + case GrammaticalGender.Masculine: + { + return "as"; + } + case GrammaticalGender.Feminine: + { + return "a"; + } + default: + throw new ArgumentOutOfRangeException(nameof(gender)); + } + } + } +} diff --git a/src/Humanizer/Properties/Resources.lt.resx b/src/Humanizer/Properties/Resources.lt.resx new file mode 100644 index 000000000..2a6d240ed --- /dev/null +++ b/src/Humanizer/Properties/Resources.lt.resx @@ -0,0 +1,272 @@ + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + prieš {0} dienas + + + prieš {0} dienų + + + prieš {0} dieną + + + po {0} dienų + + + po {0} dienos + + + prieš {0} valandas + + + prieš {0} valandų + + + prieš {0} valandą + + + po {0} valandų + + + 1 metai + + + 1 savaitė + + + 1 sekundė + + + viena sekundė + + + viena savaitė + + + vieni metai + + + nėra laiko + + + vienas mėnuo + + + 1 mėnuo + + + viena minutė + + + 1 minutė + + + viena milisekundė + + + 1 milisekundė + + + viena valanda + + + 1 valanda + + + viena diena + + + 1 diena + + + {0} metai + + + {0} savaitė + + + {0} savaičių + + + {0} savaitės + + + {0} sekundžių + + + {0} sekundė + + + {0} sekundės + + + {0} mėnesiai + + + {0} minutė + + + {0} minučių + + + {0} minutės + + + {0} milisekundė + + + {0} milisekundžių + + + {0} milisekundės + + + {0} valandų + + + {0} valanda + + + {0} valandos + + + {0} diena + + + {0} dienos + + + po vienerių metų + + + prieš vienerius metus + + + po vienos sekundės + + + prieš vieną sekundę + + + po vieno mėnesio + + + prieš vieną mėnesį + + + po minutės + + + prieš minutę + + + po valandos + + + prieš valandą + + + rytoj + + + vakar + + + dabar + + + niekada + + + po {0} metų + + + po {0} metų + + + po {0} metų + + + prieš {0} metus + + + prieš {0} metų + + + prieš {0} metus + + + po {0} sekundės + + + po {0} sekundžių + + + prieš {0} sekundę + + + prieš {0} sekundes + + + po {0} mėnesio + + + po {0} mėnesių + + + prieš {0} mėnesį + + + prieš {0} mėnesius + + + po {0} minutės + + + po {0} minučių + + + prieš {0} minutę + + + prieš {0} minutes + + + po {0} valandos + + + prieš {0} minučių + + + prieš {0} mėnesių + + + prieš {0} sekundžių + + + {0} dienų + + + {0} mėnuo + + + {0} mėnesių + + + {0} metų + + + {0} metai + + \ No newline at end of file