blob: e851d23d6cd5a6d1c6b99a5d8f6f191c9876ad46 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package wski18n
import (
"path/filepath"
"strings"
goi18n "github.com/nicksnyder/go-i18n/i18n"
)
const (
DEFAULT_LOCALE = "en_US"
)
var SUPPORTED_LOCALES = []string{
"de_DE",
"en_US",
"es_ES",
"fr_FR",
"it_IT",
"ja_JA",
"ko_KR",
"pt_BR",
"zh_Hans",
"zh_Hant",
}
var resourcePath = filepath.Join("wski18n", "resources")
// TODO() when are these used?
func GetResourcePath() string {
return resourcePath
}
// TODO() when are these used?
func SetResourcePath(path string) {
resourcePath = path
}
var T goi18n.TranslateFunc
var curLocale string
func init() {
curLocale = Init(new(JibberJabberDetector))
}
// TODO() when are these used?
func CurLocale() string {
return curLocale
}
// TODO() when are these used?
func Locale(detector Detector) string {
// Use default locale until strings are translated
/*sysLocale := normalize(detector.DetectLocale())
if isSupported(sysLocale) {
return sysLocale
}
locale := defaultLocaleForLang(detector.DetectLanguage())
if locale != "" {
return locale
}*/
return DEFAULT_LOCALE
}
func Init(detector Detector) string {
l := Locale(detector)
InitWithLocale(l)
return l
}
func InitWithLocale(locale string) {
err := loadFromAsset(locale)
if err != nil {
panic(err)
}
T = goi18n.MustTfunc(locale)
}
func loadFromAsset(locale string) (err error) {
assetName := locale + ".all.json"
assetKey := filepath.Join(resourcePath, assetName)
bytes, err := Asset(assetKey)
if err != nil {
return
}
err = goi18n.ParseTranslationFileBytes(assetName, bytes)
return
}
// TODO() when are these used?
func normalize(locale string) string {
locale = strings.ToLower(strings.Replace(locale, "-", "_", 1))
for _, l := range SUPPORTED_LOCALES {
if strings.EqualFold(locale, l) {
return l
}
}
switch locale {
case "zh_cn", "zh_sg":
return "zh_Hans"
case "zh_hk", "zh_tw":
return "zh_Hant"
}
return locale
}
// TODO() when are these used?
func isSupported(locale string) bool {
for _, l := range SUPPORTED_LOCALES {
if strings.EqualFold(locale, l) {
return true
}
}
return false
}
// TODO() when are these used?
func defaultLocaleForLang(lang string) string {
if lang != "" {
lang = strings.ToLower(lang)
for _, l := range SUPPORTED_LOCALES {
if lang == LangOfLocale(l) {
return l
}
}
}
return ""
}
func LangOfLocale(locale string) string {
if len(locale) < 2 {
return ""
}
return locale[0:2]
}