mirror of
https://github.com/stashapp/stash.git
synced 2025-12-08 17:35:40 +01:00
* Add collation to directory listings. Closes #1806 Introduce a new `locale` arg to the `Query.directory` field. Set "en" as the default for the field for backward compatibility. Use the given locale, sending it through a language matcher, and use `x/text` as the collation engine for the matched language. Augment the file `ListDirs` call to optionally take a Collator. If the Collator is given, sort file listings according to the collators rules. While here, document the GraphQL schema a bit more. Add matchers by looking at the current front-end locales, and make sure each of these occur in the matcher list. * Language matcher touchups * Avoid having `en-US` twice. * Introduce `en-AU`. * Pass IgnoreCase and Numeric collation Allow the collator to be configured with options. Pass the options IgnoreCase and Numeric to the collator.
31 lines
929 B
Go
31 lines
929 B
Go
package api
|
|
|
|
import (
|
|
"golang.org/x/text/collate"
|
|
"golang.org/x/text/language"
|
|
)
|
|
|
|
// matcher defines a matcher for the languages we support
|
|
var matcher = language.NewMatcher([]language.Tag{
|
|
language.MustParse("en-US"), // The first language is used as fallback.
|
|
language.MustParse("en-GB"),
|
|
language.MustParse("en-AU"),
|
|
language.MustParse("de-DE"),
|
|
language.MustParse("pt-BR"),
|
|
language.MustParse("sv-SE"),
|
|
language.MustParse("zh-CN"),
|
|
language.MustParse("zh-TW"),
|
|
})
|
|
|
|
// newCollator parses a locale into a collator
|
|
// Go through the available matches and return a valid match, in practice the first is a fallback
|
|
// Optionally pass collation options through for creation.
|
|
// If passed a nil-locale string, return nil
|
|
func newCollator(locale *string, opts ...collate.Option) *collate.Collator {
|
|
if locale == nil {
|
|
return nil
|
|
}
|
|
|
|
tag, _ := language.MatchStrings(matcher, *locale)
|
|
return collate.New(tag, opts...)
|
|
}
|