Skip to content

correct plural forms for week and millisecond in relative date phrases#1735

Open
sigmade wants to merge 2 commits into
Humanizr:mainfrom
sigmade:fix/ru-locale-plural-forms
Open

correct plural forms for week and millisecond in relative date phrases#1735
sigmade wants to merge 2 commits into
Humanizr:mainfrom
sigmade:fix/ru-locale-plural-forms

Conversation

@sigmade

@sigmade sigmade commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

Here is a checklist you should tick through before submitting a pull request:

  • Implementation is clean
  • Code adheres to the existing coding standards; e.g. no curlies for one-line blocks, no redundant empty lines between methods or code blocks, spaces rather than tabs, etc.
  • No Code Analysis warnings
  • There is proper unit test coverage
  • If the code is copied from StackOverflow (or a blog or OSS) full disclosure is included. That includes required license files and/or file headers explaining where the code came from with proper attribution
  • There are very few or no comments (because comments shouldn't be needed if you write clean code)
  • Xml documentation is added/updated for the addition/change
  • Your PR is (re)based on top of the latest commits from the main branch (more info below)
  • Link to the issue(s) you're fixing from your PR description. Use fixes #<the issue number>
  • Readme is updated if you change an existing feature or add a new one
  • Run either build.cmd or build.ps1 and ensure there are no test failures

Copilot AI review requested due to automatic review settings April 19, 2026 06:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates Russian (ru) relative date phrase data so that week and millisecond use correct Russian grammatical-number forms (e.g., 2 недели, 2 миллисекунды) and adds regression coverage in the localisation phrase theory tests.

Changes:

  • Extend ru relative date phrase definitions for week and millisecond to use form maps (default/singular/dual) instead of a single plural form.
  • Add localisation theory test cases validating past/future phrasing for 1, 2, and 7 weeks/milliseconds in ru.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
tests/Humanizer.Tests/Localisation/LocalePhraseTheoryData.cs Adds RU test cases for week/millisecond relative date phrases to verify corrected grammatical forms.
src/Humanizer/Locales/ru.yml Updates RU relativeDate week and millisecond multiple.forms to support Russian singular/paucal/default selection.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adjusts Russian locale phrase data to use grammar-aware plural forms for relative date phrases so that counted expressions (e.g., “через 2 …”) use the correct Russian inflections.

Changes:

  • Updated ru.yml relative-date phrases for week and millisecond to provide default/singular/dual forms instead of a single scalar form.
  • Updated the generated locale migration test to assert the presence of the Russian dual form for week in the phrase table.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs Updates expectations to validate the added Russian dual form for weeks in the phrase table.
src/Humanizer/Locales/ru.yml Adds grammar-aware plural forms for Russian relative-date weeks/milliseconds (past & future).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@@ -46,7 +46,7 @@ public void RussianPhraseTableUsesCompactGrammarAwareYamlForms()

Assert.True(table.TryGetDatePhrase(TimeUnit.Week, Tense.Future, out var futureWeek));
Comment on lines 29 to 34
multiple:
forms: 'миллисекунд'
forms:
default: 'миллисекунд'
singular: 'миллисекунду'
dual: 'миллисекунды'
afterCount: 'назад'
@coderabbitai

coderabbitai Bot commented May 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7a66e241-df6a-442c-9a08-1eedd72a4491

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • ✅ Review completed - (🔄 Check again to review again)
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs (1)

47-50: ⚡ Quick win

Add assertions for all modified RU relative-date entries.

This assertion is correct, but this PR changed four RU phrase blocks. Adding checks for past week and past/future millisecond forms would close the regression gap with minimal effort.

Suggested test additions
         Assert.True(table.TryGetDatePhrase(TimeUnit.Week, Tense.Future, out var futureWeek));
         Assert.Equal("недель", futureWeek.Multiple?.Forms.Default);
         Assert.Equal("недели", futureWeek.Multiple?.Forms.Dual);
+
+        Assert.True(table.TryGetDatePhrase(TimeUnit.Week, Tense.Past, out var pastWeek));
+        Assert.Equal("недели", pastWeek.Multiple?.Forms.Dual);
+
+        Assert.True(table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Future, out var futureMillisecond));
+        Assert.Equal("миллисекунду", futureMillisecond.Multiple?.Forms.Singular);
+        Assert.Equal("миллисекунды", futureMillisecond.Multiple?.Forms.Dual);
+        Assert.Equal("миллисекунд", futureMillisecond.Multiple?.Forms.Default);
+
+        Assert.True(table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Past, out var pastMillisecond));
+        Assert.Equal("миллисекунду", pastMillisecond.Multiple?.Forms.Singular);
+        Assert.Equal("миллисекунды", pastMillisecond.Multiple?.Forms.Dual);
+        Assert.Equal("миллисекунд", pastMillisecond.Multiple?.Forms.Default);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs`
around lines 47 - 50, The test only asserts the RU future-week phrase (using
table.TryGetDatePhrase(TimeUnit.Week, Tense.Future, out var futureWeek) and
checks futureWeek.Multiple.Forms), but the PR changed four RU relative-date
blocks; add assertions for the corresponding past-week entry and for both past
and future millisecond entries: call table.TryGetDatePhrase(TimeUnit.Week,
Tense.Past, out var pastWeek) and assert pastWeek.Multiple.Forms matches the
expected "недель"/"недели" variants, and call
table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Past, out var pastMs) and
table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Future, out var futureMs) and
assert their Single/Multiple Forms (or appropriate .Forms.Default/.Dual) equal
the expected RU millisecond strings to cover all modified phrase blocks.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs`:
- Around line 47-50: The test only asserts the RU future-week phrase (using
table.TryGetDatePhrase(TimeUnit.Week, Tense.Future, out var futureWeek) and
checks futureWeek.Multiple.Forms), but the PR changed four RU relative-date
blocks; add assertions for the corresponding past-week entry and for both past
and future millisecond entries: call table.TryGetDatePhrase(TimeUnit.Week,
Tense.Past, out var pastWeek) and assert pastWeek.Multiple.Forms matches the
expected "недель"/"недели" variants, and call
table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Past, out var pastMs) and
table.TryGetDatePhrase(TimeUnit.Millisecond, Tense.Future, out var futureMs) and
assert their Single/Multiple Forms (or appropriate .Forms.Default/.Dual) equal
the expected RU millisecond strings to cover all modified phrase blocks.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3f5a3932-05a9-4b0c-a250-6cc132762dae

📥 Commits

Reviewing files that changed from the base of the PR and between 19527a5 and 6ea2a21.

📒 Files selected for processing (2)
  • src/Humanizer/Locales/ru.yml
  • tests/Humanizer.Tests/Localisation/GeneratedLocaleData/GeneratedLocaleDeRuPhraseMigrationTests.cs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants