Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add localization for Central Kurdish (ku) #1044

Merged
merged 9 commits into from
Apr 23, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions NuSpecs/Humanizer.Core.ku.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata minClientVersion="2.12">
<id>Humanizer.Core.ku</id>
<version>$version$</version>
<title>Humanizer Locale (ku)</title>
<authors>Mehdi Khalili, Claire Novotny</authors>
<projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>
<icon>logo.png</icon>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Humanizer Locale Central Kurdish (ku)</description>
<copyright>Copyright (c) .NET Foundation and Contributors</copyright>
<license type="expression">MIT</license>
<repository type="$RepositoryType$" url="$RepositoryUrl$" commit="$RepositoryCommit$" />
<language>ku</language>
<dependencies>
<dependency id="Humanizer.Core" version="[$version$]" />
</dependencies>
</metadata>
<files>
<file src="Humanizer\bin\Release\netstandard1.0\ku\*.*" target="lib\netstandard1.0\ku" />
<file src="Humanizer\bin\Release\netstandard2.0\ku\*.*" target="lib\netstandard2.0\ku" />
<file src="..\logo.png" target="logo.png" />
</files>
</package>
1 change: 1 addition & 0 deletions NuSpecs/Humanizer.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
<dependency id="Humanizer.Core.zh-CN" version="$version$" />
<dependency id="Humanizer.Core.zh-Hans" version="$version$" />
<dependency id="Humanizer.Core.zh-Hant" version="$version$" />
<dependency id="Humanizer.Core.ku" version="$version$" />
</dependencies>
</metadata>
<files>
Expand Down
3 changes: 3 additions & 0 deletions src/Humanizer.Tests.Shared/Humanizer.Tests.Shared.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Localisation\bn-BD\DateHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\bn-BD\NumberToWordsTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\bn-BD\TimeSpanHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\ku\DateHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\cs\DateHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\cs\NumberToWordsTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\cs\TimeSpanHumanizeTests.cs" />
Expand Down Expand Up @@ -106,6 +107,8 @@
<Compile Include="$(MSBuildThisFileDirectory)Localisation\ja\DateHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\ja\NumberToWordsTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\ja\TimeSpanHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\ku\NumberToWordsTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\ku\TimeSpanHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\mt\DateHumanizeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\mt\NumberToWordsTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Localisation\mt\TimeSpanHumanizeTests.cs" />
Expand Down
130 changes: 130 additions & 0 deletions src/Humanizer.Tests.Shared/Localisation/ku/DateHumanizeTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
using Humanizer.Localisation;
using Xunit;

namespace Humanizer.Tests.Localisation.ku
{
[UseCulture("ku")]
public class DateHumanizeTests
{
[Theory]
[InlineData(-1, "دوێنێ")]
[InlineData(-2, "2 ڕۆژ لەمەوبەر")]
[InlineData(-3, "3 ڕۆژ لەمەوبەر")]
[InlineData(-11, "11 ڕۆژ لەمەوبەر")]
public void DaysAgo(int days, string expected)
{
DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);
}

[Theory]
[InlineData(1, "بەیانی")]
[InlineData(2, "2 ڕۆژی دیکە")]
[InlineData(10, "10 ڕۆژی دیکە")]
[InlineData(17, "17 ڕۆژی دیکە")]
public void DaysFromNow(int days, string expected)
{
DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);
}

[Theory]
[InlineData(-2, "2 کاتژمێر لەمەوبەر")]
[InlineData(-1, "کاتژمێرێک لەمەوبەر")]
[InlineData(-3, "3 کاتژمێر لەمەوبەر")]
[InlineData(-11, "11 کاتژمێر لەمەوبەر")]
public void HoursAgo(int hours, string expected)
{
DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);
}

[Theory]
[InlineData(1, "کاتژمێرێکی دیکە")]
[InlineData(2, "2 کاتژمێری دیکە")]
[InlineData(10, "10 کاتژمێری دیکە")]
[InlineData(23, "23 کاتژمێری دیکە")]
public void HoursFromNow(int hours, string expected)
{
DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);
}

[Theory]
[InlineData(-2, "2 خولەک لەمەوبەر")]
[InlineData(-1, "خولەکێک لەمەوبەر")]
[InlineData(-3, "3 خولەک لەمەوبەر")]
[InlineData(-11, "11 خولەک لەمەوبەر")]
[InlineData(60, "کاتژمێرێک لەمەوبەر")]
public void MinutesAgo(int minutes, string expected)
{
DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);
}

[Theory]
[InlineData(1, "خولەکێکی دیکە")]
[InlineData(2, "2 خولەکی دیکە")]
[InlineData(10, "10 خولەکی دیکە")]
[InlineData(23, "23 خولەکی دیکە")]
public void MinutesFromNow(int minutes, string expected)
{
DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);
}

[Theory]
[InlineData(-2, "2 مانگ لەمەوبەر")]
[InlineData(-1, "مانگێک لەمەوبەر")]
[InlineData(-3, "3 مانگ لەمەوبەر")]
[InlineData(-11, "11 مانگ لەمەوبەر")]
public void MonthsAgo(int months, string expected)
{
DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);
}

[Theory]
[InlineData(1, "مانگێکی دیکە")]
[InlineData(2, "2 مانگی دیکە")]
[InlineData(10, "10 مانگی دیکە")]
public void MonthsFromNow(int months, string expected)
{
DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);
}

[Theory]
[InlineData(-2, "2 چرکە لەمەوبەر")]
[InlineData(-1, "چرکەیەک لەمەوبەر")]
[InlineData(-3, "3 چرکە لەمەوبەر")]
[InlineData(-11, "11 چرکە لەمەوبەر")]
public void SecondsAgo(int seconds, string expected)
{
DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);
}

[Theory]
[InlineData(0, "ئێستا")]
[InlineData(1, "چرکەیەکی دیکە")]
[InlineData(2, "2 چرکەی دیکە")]
[InlineData(10, "10 چرکەی دیکە")]
[InlineData(24, "24 چرکەی دیکە")]
public void SecondsFromNow(int seconds, string expected)
{
DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);
}

[Theory]
[InlineData(-2, "2 ساڵ لەمەوبەر")]
[InlineData(-1, "ساڵێک لەمەوبەر")]
[InlineData(-3, "3 ساڵ لەمەوبەر")]
[InlineData(-11, "11 ساڵ لەمەوبەر")]
public void YearsAgo(int years, string expected)
{
DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);
}

[Theory]
[InlineData(1, "ساڵێکی دیکە")]
[InlineData(2, "2 ساڵی دیکە")]
[InlineData(7, "7 ساڵی دیکە")]
[InlineData(55, "55 ساڵی دیکە")]
public void YearsFromNow(int years, string expected)
{
DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);
}
}
}
86 changes: 86 additions & 0 deletions src/Humanizer.Tests.Shared/Localisation/ku/NumberToWordsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
using Xunit;

namespace Humanizer.Tests.Localisation.ku
{
[UseCulture("ku")]
public class NumberToWordsTests
{
[Theory]
[InlineData(-1, "نێگەتیڤ یەک")]
[InlineData(-10, "نێگەتیڤ دە")]
[InlineData(-100, "نێگەتیڤ سەد")]
[InlineData(-999, "نێگەتیڤ نۆ سەد و نەوەد و نۆ")]
[InlineData(-1000, "نێگەتیڤ هەزار")]
[InlineData(-1000000, "نێگەتیڤ یەک میلیۆن")]
[InlineData(1, "یەک")]
[InlineData(10, "دە")]
[InlineData(11, "یازدە")]
[InlineData(122, "سەد و بیست و دوو")]
[InlineData(3501, "سێ هەزار و پێنج سەد و یەک")]
[InlineData(100, "سەد")]
[InlineData(1000, "هەزار")]
[InlineData(100000, "سەد هەزار")]
[InlineData(1000000, "یەک میلیۆن")]
[InlineData(10000000, "دە میلیۆن")]
[InlineData(100000000, "سەد میلیۆن")]
[InlineData(1000000000, "یەک میلیارد")]
[InlineData(111, "سەد و یازدە")]
[InlineData(1111, "هەزار و سەد و یازدە")]
[InlineData(111111, "سەد و یازدە هەزار و سەد و یازدە")]
[InlineData(1001001, "یەک میلیۆن و هەزار و یەک")]
[InlineData(1111111, "یەک میلیۆن و سەد و یازدە هەزار و سەد و یازدە")]
[InlineData(11111111, "یازدە میلیۆن و سەد و یازدە هەزار و سەد و یازدە")]
[InlineData(111111111, "سەد و یازدە میلیۆن و سەد و یازدە هەزار و سەد و یازدە")]
[InlineData(1111111111, "یەک میلیارد و سەد و یازدە میلیۆن و سەد و یازدە هەزار و سەد و یازدە")]
[InlineData(123, "سەد و بیست و سێ")]
[InlineData(1234, "هەزار و دوو سەد و سی و چوار")]
[InlineData(12345, "دوازدە هەزار و سێ سەد و چل و پێنج")]
[InlineData(123456, "سەد و بیست و سێ هەزار و چوار سەد و پەنجا و شەش")]
[InlineData(1234567, "یەک میلیۆن و دوو سەد و سی و چوار هەزار و پێنج سەد و شەست و حەوت")]
[InlineData(12345678, "دوازدە میلیۆن و سێ سەد و چل و پێنج هەزار و شەش سەد و حەفتا و هەشت")]
[InlineData(123456789, "سەد و بیست و سێ میلیۆن و چوار سەد و پەنجا و شەش هەزار و حەوت سەد و هەشتا و نۆ")]
[InlineData(1234567890, "یەک میلیارد و دوو سەد و سی و چوار میلیۆن و پێنج سەد و شەست و حەوت هەزار و هەشت سەد و نەوەد")]
public void ToWordsKurdish(int number, string expected)
{
Assert.Equal(expected, number.ToWords());
}

[Theory]
[InlineData(0, "سفرەم")]
[InlineData(1, "یەکەم")]
[InlineData(2, "دووەم")]
[InlineData(3, "سێیەم")]
[InlineData(4, "چوارەم")]
[InlineData(5, "پێنجەم")]
[InlineData(6, "شەشەم")]
[InlineData(7, "حەوتەم")]
[InlineData(8, "هەشتەم")]
[InlineData(9, "نۆیەم")]
[InlineData(10, "دەیەم")]
[InlineData(11, "یازدەیەم")]
[InlineData(12, "دوازدەیەم")]
[InlineData(13, "سێزدەیەم")]
[InlineData(21, "بیست و یەکەم")]
[InlineData(22, "بیست و دووەم")]
[InlineData(23, "بیست و سێیەم")]
[InlineData(24, "بیست و چوارەم")]
[InlineData(25, "بیست و پێنجەم")]
[InlineData(30, "سییەم")]
[InlineData(40, "چلەم")]
[InlineData(50, "پەنجایەم")]
[InlineData(60, "شەستەم")]
[InlineData(70, "حەفتایەم")]
[InlineData(80, "هەشتایەم")]
[InlineData(90, "نەوەدەم")]
[InlineData(100, "سەدەم")]
[InlineData(200, "دوو سەدەم")]
[InlineData(1000, "هەزارەم")]
[InlineData(1001, "هەزار و یەکەم")]
[InlineData(1333, "هەزار و سێ سەد و سی و سێیەم")]
[InlineData(1000000, "یەک میلیۆنەم")]
public void ToOrdinalWordsKurdish(int number, string words)
{
Assert.Equal(words, number.ToOrdinalWords());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
using System;
using Xunit;

namespace Humanizer.Tests.Localisation.ku
{
[UseCulture("ku")]
public class TimeSpanHumanizeTests
{

[Theory]
[Trait("Translation", "Native speaker")]
[InlineData(366, "1 ساڵ")]
[InlineData(731, "2 ساڵ")]
[InlineData(1096, "3 ساڵ")]
[InlineData(4018, "11 ساڵ")]
public void Years(int days, string expected)
{
Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: Humanizer.Localisation.TimeUnit.Year));
}

[Theory]
[Trait("Translation", "Native speaker")]
[InlineData(31, "1 مانگ")]
[InlineData(61, "2 مانگ")]
[InlineData(92, "3 مانگ")]
[InlineData(335, "11 مانگ")]
public void Months(int days, string expected)
{
Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: Humanizer.Localisation.TimeUnit.Year));
}

[Theory]
[InlineData(7, "1 هەفتە")]
[InlineData(77, "11 هەفتە")]
public void Weeks(int days, string expected)
{
Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());
}

[Theory]
[InlineData(1, "1 ڕۆژ")]
[InlineData(3, "3 ڕۆژ")]
public void Days(int days, string expected)
{
Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());
}

[Theory]
[InlineData(1, "1 کاتژمێر")]
[InlineData(11, "11 کاتژمێر")]
public void Hours(int hours, string expected)
{
Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());
}

[Theory]
[InlineData(1, "1 خولەک")]
[InlineData(11, "11 خولەک")]
public void Minutes(int minutes, string expected)
{
Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());
}

[Theory]
[InlineData(1, "1 چرکە")]
[InlineData(11, "11 چرکە")]
public void Seconds(int seconds, string expected)
{
Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());
}

[Theory]
[InlineData(1, "1 میلیچرکە")]
[InlineData(11, "11 میلیچرکە")]
public void Milliseconds(int milliseconds, string expected)
{
Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());
}

[Fact]
public void NoTime()
{
Assert.Equal("0 میلیچرکە", TimeSpan.Zero.Humanize());
}

[Fact]
public void NoTimeToWords()
{
Assert.Equal("ئێستا", TimeSpan.Zero.Humanize(toWords: true));
}
}
}
1 change: 1 addition & 0 deletions src/Humanizer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuSpecs", "NuSpecs", "{AA44
..\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.ku.nuspec = ..\NuSpecs\Humanizer.Core.ku.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
Expand Down
1 change: 1 addition & 0 deletions src/Humanizer/Configuration/FormatterRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public FormatterRegistry() : base(new DefaultFormatter("en-US"))
RegisterCzechSlovakPolishFormatter("pl");
RegisterCzechSlovakPolishFormatter("sk");
RegisterDefaultFormatter("bg");
RegisterDefaultFormatter("ku");
RegisterDefaultFormatter("pt");
RegisterDefaultFormatter("sv");
RegisterDefaultFormatter("tr");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public NumberToWordsConverterRegistry()
Register("hy", new ArmenianNumberToWordsConverter());
Register("az", new AzerbaijaniNumberToWordsConverter());
Register("ja", new JapaneseNumberToWordsConverter());
Register("ku", new CentralKurdishNumberToWordsConverter());
Register("el", new GreekNumberToWordsConverter());
Register("th-TH", new ThaiNumberToWordsConverter());
}
Expand Down
Loading