2016-06-09 10 views
2

Ich versuche, Go-Code zu schreiben, der überprüft, ob eine Zeichenfolge ein gültiges Gebietsschema darstellt.Validate Locale Zeichenfolge in Golang

import "golang.org/x/text/language" 

locale := "en" 
tag, err := language.Parse(locale) 
if err != nil { 
    return errors.New("Invalid locale: " + locale) 
} 

Ich glaube, das sollte funktionieren, und es scheint die meiste Zeit zu arbeiten, aber es gibt mir nicht immer einen Fehler, wenn ich es erwarten: Von der Dokumentation, habe ich hier bekommen . Zum Beispiel, wenn ich sage locale := "bcd" bekomme ich keinen Fehler.

Was fehlt mir hier?

+0

Könnte es sein, dass du verwirrst * valide * locale strings mit Strings zur Identifizierung von Locales * dem Paket bekannt? * Ich meine, "bcd" sieht für mich wie ein vollkommen legaler Locale-Name aus. Die Regeln für die Gebietsschemabenennung, die im entsprechenden RFC definiert sind, sind kompliziert, aber sie stellen keine Einschränkung für die vordefinierten Gebietsschema-Namen dar (und das wäre eine dumme Sache). – kostix

+0

Also, wenn Sie diese Dinge wirklich verwechseln, würde ich empfehlen, in den Quellcode des Pakets einzutauchen, um zu sehen, wie Sie einen vom Benutzer angegebenen Gebietsschema-Namen mit der Liste der Länder vergleichen können, die dem Paket bekannt sind. – kostix

+0

können Sie diese Datei kopieren und in Ihr Paket einfügen und nach Belieben bearbeiten https://github.com/golang/text/blob/master/language/tables.go – Plato

Antwort

4

bcd ist ein gültiger ISO 639-3-Sprachcode für die Nord-Babar-Sprache, und durch die Erweiterung ist dies ein gültiger Locale-Name.