internal/build: add Zone.Language string for BCP 47 language tag
Randy Reddig
3 years ago
7 | 7 | "unicode/utf8" |
8 | 8 | |
9 | 9 | "golang.org/x/net/idna" |
10 | "golang.org/x/text/language" | |
10 | 11 | ) |
11 | 12 | |
12 | 13 | // Zone represents a build-time DNS zone (public suffix). |
13 | 14 | type Zone struct { |
14 | 15 | Domain string `json:"domain,omitempty"` |
15 | 16 | InfoURL string `json:"infoURL,omitempty"` |
17 | Language string `json:"language,omitempty"` | |
16 | 18 | Tags []string `json:"tags,omitempty"` |
17 | 19 | Locations []string `json:"locations,omitempty"` |
18 | 20 | WhoisServer string `json:"whoisServer,omitempty"` |
36 | 38 | func (z *Zone) Normalize() { |
37 | 39 | z.Domain = Normalize(z.Domain) |
38 | 40 | z.InfoURL = NormalizeURL(z.InfoURL) |
41 | z.normalizeLanguage() | |
39 | 42 | var tags []string |
40 | 43 | tags = append(tags, z.Tags...) |
41 | 44 | z.Tags = NewSet(tags...).Values() |
45 | 48 | z.WhoisServer = Normalize(z.WhoisServer) |
46 | 49 | z.WhoisURL = NormalizeURL(z.WhoisURL) |
47 | 50 | z.normalizePolicies() |
51 | } | |
52 | ||
53 | func (z *Zone) normalizeLanguage() { | |
54 | if z.Language == "" { | |
55 | return | |
56 | } | |
57 | tag, err := language.Parse(z.Language) | |
58 | if err != nil { | |
59 | Trace("Zone %s has malformed language tag: %s\n", z.Domain, z.Language) | |
60 | z.Language = "" | |
61 | } else { | |
62 | z.Language = tag.String() | |
63 | } | |
48 | 64 | } |
49 | 65 | |
50 | 66 | func (z *Zone) normalizePolicies() { |