[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/i18n/RFC.md fully. Find ONE feature... #123
2 changed files with 46 additions and 12 deletions
31
grammar.go
31
grammar.go
|
|
@ -371,10 +371,7 @@ func Pluralize(noun string, count int) string {
|
|||
}
|
||||
lower := core.Lower(noun)
|
||||
if form := getNounForm(currentLangForGrammar(), lower, "one"); form != "" {
|
||||
if unicode.IsUpper(rune(noun[0])) && len(form) > 0 {
|
||||
return core.Upper(string(form[0])) + form[1:]
|
||||
}
|
||||
return form
|
||||
return preserveInitialCapitalization(noun, form)
|
||||
}
|
||||
return noun
|
||||
}
|
||||
|
|
@ -389,16 +386,10 @@ func PluralForm(noun string) string {
|
|||
}
|
||||
lower := core.Lower(noun)
|
||||
if form := getNounForm(currentLangForGrammar(), lower, "other"); form != "" {
|
||||
if unicode.IsUpper(rune(noun[0])) && len(form) > 0 {
|
||||
return core.Upper(string(form[0])) + form[1:]
|
||||
}
|
||||
return form
|
||||
return preserveInitialCapitalization(noun, form)
|
||||
}
|
||||
if plural, ok := irregularNouns[lower]; ok {
|
||||
if unicode.IsUpper(rune(noun[0])) {
|
||||
return core.Upper(string(plural[0])) + plural[1:]
|
||||
}
|
||||
return plural
|
||||
return preserveInitialCapitalization(noun, plural)
|
||||
}
|
||||
return applyRegularPlural(noun)
|
||||
}
|
||||
|
|
@ -675,6 +666,22 @@ func isInitialism(word string) bool {
|
|||
return hasLetter
|
||||
}
|
||||
|
||||
func preserveInitialCapitalization(original, form string) string {
|
||||
if original == "" || form == "" {
|
||||
return form
|
||||
}
|
||||
originalRunes := []rune(original)
|
||||
formRunes := []rune(form)
|
||||
if len(originalRunes) == 0 || len(formRunes) == 0 {
|
||||
return form
|
||||
}
|
||||
if !unicode.IsUpper(originalRunes[0]) {
|
||||
return form
|
||||
}
|
||||
formRunes[0] = unicode.ToUpper(formRunes[0])
|
||||
return string(formRunes)
|
||||
}
|
||||
|
||||
func initialismUsesVowelSound(word string) bool {
|
||||
if word == "" {
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -263,6 +263,33 @@ func TestPluralize_UsesLocaleSingularOverride(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestPluralize_PreservesUnicodeCapitalization(t *testing.T) {
|
||||
prev := Default()
|
||||
t.Cleanup(func() {
|
||||
SetDefault(prev)
|
||||
})
|
||||
|
||||
svc, err := New()
|
||||
if err != nil {
|
||||
t.Fatalf("New() failed: %v", err)
|
||||
}
|
||||
SetDefault(svc)
|
||||
|
||||
if err := SetLanguage("fr"); err != nil {
|
||||
t.Fatalf("SetLanguage(fr) failed: %v", err)
|
||||
}
|
||||
|
||||
if got, want := Pluralize("Élément", 1), "Élément"; got != want {
|
||||
t.Fatalf("Pluralize(%q, 1) = %q, want %q", "Élément", got, want)
|
||||
}
|
||||
if got, want := Pluralize("Élément", 2), "Éléments"; got != want {
|
||||
t.Fatalf("Pluralize(%q, 2) = %q, want %q", "Élément", got, want)
|
||||
}
|
||||
if got, want := PluralForm("Élément"), "Éléments"; got != want {
|
||||
t.Fatalf("PluralForm(%q) = %q, want %q", "Élément", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPluralForm(t *testing.T) {
|
||||
svc, err := New()
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue