diff --git a/locale_darwin.go b/locale_darwin.go index f2ca4b9..e4a42aa 100644 --- a/locale_darwin.go +++ b/locale_darwin.go @@ -9,8 +9,8 @@ package locale #include -char *preferredLocalization(); -int preferredLocalizations(char ***); +const char * preferredLocalization(); +const char * preferredLocalizations(); */ import "C" import ( @@ -19,7 +19,6 @@ import ( "regexp" "strings" "syscall" - "unsafe" ) func execCommand(cmd string, args ...string) (status int, out string, err error) { @@ -70,14 +69,12 @@ var appleLanguagesRegex = regexp.MustCompile(`([a-z]{2}(?:-[A-Z]{2})?)`) // GetLocales retrieves the IETF BCP 47 language tags set on the system. func GetLocales() ([]string, error) { - var locs **C.char - - if n := C.preferredLocalizations(&locs); n > 0 { - r := make([]string, n) - for m, v := range unsafe.Slice(locs, n) { - r[m] = strings.Replace(C.GoString(v), "_", "-", 1) + str := C.preferredLocalizations() + if output := C.GoString(str); output != "" { + r := []string{} + for _, s := range strings.Split(output, ",") { + r = append(r, strings.Replace(s, "_", "-", 1)) } - return r, nil } diff --git a/locale_darwin.m b/locale_darwin.m index b55b4e2..23393d7 100644 --- a/locale_darwin.m +++ b/locale_darwin.m @@ -3,35 +3,14 @@ #import -char* preferredLocalization() { - NSString *localization = [NSBundle mainBundle].preferredLocalizations.firstObject; +const char * preferredLocalization() { + NSString *locale = [[[NSBundle mainBundle] preferredLocalizations] firstObject]; - return (char *) [localization UTF8String]; + return [locale UTF8String]; } -int preferredLocalizations(char ***list) { - NSArray *locs = [NSBundle mainBundle].preferredLocalizations; - int nlocs = [locs count]; - char **r = calloc(nlocs, sizeof(char *)); +const char * preferredLocalizations() { + NSString *locales = [[[NSBundle mainBundle] preferredLocalizations] componentsJoinedByString:@","]; - if (r == NULL) - return -1; - - for (int n = 0; n < nlocs; n++) { - r[n] = strdup([locs[n] UTF8String]); - if (r[n] == NULL) - goto fail; - } - - *list = r; - - return nlocs; - -fail: - for (int n = 0; n < nlocs; n++) { - if (r[n] != NULL) - free(r[n]); - } - free(r); - return -1; + return [locales UTF8String]; }