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