mirror of
https://github.com/photoprism/photoprism.git
synced 2025-09-26 21:01:58 +08:00
Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
@@ -19,3 +19,27 @@ func Locale(locale, defaultLocale string) string {
|
||||
|
||||
return defaultLocale
|
||||
}
|
||||
|
||||
// PosixLocale returns the normalized locale string in POSIX format with underscore, or the default locale otherwise.
|
||||
// See https://en.wikipedia.org/wiki/Locale_(computer_software) for details.
|
||||
func PosixLocale(locale, defaultLocale string) string {
|
||||
return Locale(locale, defaultLocale)
|
||||
}
|
||||
|
||||
// WebLocale returns a normalized locale string in BCP 47 format with a dash, or the default locale otherwise.
|
||||
// See https://en.wikipedia.org/wiki/Locale_(computer_software) for details.
|
||||
func WebLocale(locale, defaultLocale string) string {
|
||||
if locale == "" {
|
||||
return defaultLocale
|
||||
}
|
||||
|
||||
locale, _, _ = strings.Cut(strings.Replace(locale, "_", "-", 1), ".")
|
||||
|
||||
if l := len(locale); l == 2 {
|
||||
return strings.ToLower(locale)
|
||||
} else if l == 5 && locale[2] == '-' {
|
||||
return strings.ToLower(locale[:2]) + "-" + strings.ToUpper(locale[3:])
|
||||
}
|
||||
|
||||
return defaultLocale
|
||||
}
|
||||
|
@@ -30,3 +30,53 @@ func TestLocale(t *testing.T) {
|
||||
assert.Equal(t, "und", Locale("cs-CZX", "und"))
|
||||
})
|
||||
}
|
||||
|
||||
func TestPosixLocale(t *testing.T) {
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
assert.Equal(t, "", PosixLocale("", ""))
|
||||
assert.Equal(t, "de", PosixLocale("", "de"))
|
||||
assert.Equal(t, "und", PosixLocale("", "und"))
|
||||
})
|
||||
t.Run("Language", func(t *testing.T) {
|
||||
assert.Equal(t, "de", PosixLocale("de", ""))
|
||||
assert.Equal(t, "", PosixLocale("und", ""))
|
||||
assert.Equal(t, "de", PosixLocale("und", "de"))
|
||||
assert.Equal(t, "cs", PosixLocale("cs", "und"))
|
||||
})
|
||||
t.Run("Territory", func(t *testing.T) {
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("cs_CZ", ""))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("cs-CZ", ""))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("cs_cz", ""))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("cs-cz", ""))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("Cs_cz", ""))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("Cs-cz", ""))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("cs_CZ", "und"))
|
||||
assert.Equal(t, "cs_CZ", PosixLocale("cs-CZ", "und"))
|
||||
assert.Equal(t, "und", PosixLocale("cs-CZX", "und"))
|
||||
})
|
||||
}
|
||||
|
||||
func TestWebLocale(t *testing.T) {
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
assert.Equal(t, "", WebLocale("", ""))
|
||||
assert.Equal(t, "de", WebLocale("", "de"))
|
||||
assert.Equal(t, "und", WebLocale("", "und"))
|
||||
})
|
||||
t.Run("Language", func(t *testing.T) {
|
||||
assert.Equal(t, "de", WebLocale("de", ""))
|
||||
assert.Equal(t, "", WebLocale("und", ""))
|
||||
assert.Equal(t, "de", WebLocale("und", "de"))
|
||||
assert.Equal(t, "cs", WebLocale("cs", "und"))
|
||||
})
|
||||
t.Run("Territory", func(t *testing.T) {
|
||||
assert.Equal(t, "cs-CZ", WebLocale("cs-CZ", ""))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("cs_CZ", ""))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("cs-cz", ""))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("cs_cz", ""))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("Cs-cz", ""))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("Cs_cz", ""))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("cs-CZ", "und"))
|
||||
assert.Equal(t, "cs-CZ", WebLocale("cs_CZ", "und"))
|
||||
assert.Equal(t, "und", WebLocale("cs_CZX", "und"))
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user