From 4d8d075189f3c62bdb6417723b92e4cab840c3ff Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 04:27:15 +0000 Subject: [PATCH] feat(i18n): add current plural category accessor Co-Authored-By: Virgil --- localise.go | 8 ++++++++ localise_test.go | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/localise.go b/localise.go index 0989876..d854083 100644 --- a/localise.go +++ b/localise.go @@ -105,6 +105,14 @@ func CurrentDirection() TextDirection { // IsRTL returns true if the current language uses right-to-left text. func IsRTL() bool { return Direction() == DirRTL } +// CurrentPluralCategory returns the plural category for the current default language. +func CurrentPluralCategory(n int) PluralCategory { + if svc := Default(); svc != nil { + return svc.PluralCategory(n) + } + return GetPluralCategory("en", n) +} + func detectLanguage(supported []language.Tag) string { langEnv := os.Getenv("LANG") if langEnv == "" { diff --git a/localise_test.go b/localise_test.go index 73f2a0a..ced2a26 100644 --- a/localise_test.go +++ b/localise_test.go @@ -218,6 +218,28 @@ func TestIsRTL_Good(t *testing.T) { assert.False(t, IsRTL(), "English should not be RTL") } +// --- Package-level CurrentPluralCategory --- + +func TestCurrentPluralCategory_Good(t *testing.T) { + prev := Default() + t.Cleanup(func() { + SetDefault(prev) + }) + + svc, err := New() + require.NoError(t, err) + SetDefault(svc) + + assert.Equal(t, PluralOther, CurrentPluralCategory(0)) + assert.Equal(t, PluralOne, CurrentPluralCategory(1)) + assert.Equal(t, PluralOther, CurrentPluralCategory(2)) + + require.NoError(t, SetLanguage("fr")) + assert.Equal(t, PluralOne, CurrentPluralCategory(0)) + assert.Equal(t, PluralOne, CurrentPluralCategory(1)) + assert.Equal(t, PluralOther, CurrentPluralCategory(2)) +} + // --- detectLanguage --- func TestDetectLanguage_Good(t *testing.T) { -- 2.45.3