1 /* 2 * Copyright 2011, Haiku, Inc. 3 * Distributed under the terms of the MIT license. 4 * 5 * Authors: 6 * Ryan Leavengood, leavengood@gmail.com 7 */ 8 9 10 #include <FormattingConventions.h> 11 #include <Locale.h> 12 #include <LocaleRoster.h> 13 #include <Message.h> 14 #include <String.h> 15 16 #include <getopt.h> 17 #include <stdio.h> 18 #include <stdlib.h> 19 20 21 extern const char *__progname; 22 static const char *kProgramName = __progname; 23 24 25 BString 26 preferred_language() 27 { 28 BMessage preferredLanguages; 29 BLocaleRoster::Default()->GetPreferredLanguages(&preferredLanguages); 30 const char* firstPreferredLanguage; 31 if (preferredLanguages.FindString("language", &firstPreferredLanguage) 32 != B_OK) { 33 // Default to English 34 firstPreferredLanguage = "en"; 35 } 36 37 return firstPreferredLanguage; 38 } 39 40 41 void 42 print_formatting_conventions() 43 { 44 BFormattingConventions conventions; 45 BLocale::Default()->GetFormattingConventions(&conventions); 46 if (conventions.CountryCode() != NULL) { 47 printf("%s_%s.UTF-8\n", conventions.LanguageCode(), 48 conventions.CountryCode()); 49 } else { 50 printf("%s.UTF-8\n", conventions.LanguageCode()); 51 } 52 } 53 54 55 void 56 print_time_conventions() 57 { 58 BFormattingConventions conventions; 59 BLocale::Default()->GetFormattingConventions(&conventions); 60 if (conventions.CountryCode() != NULL) { 61 printf("%s_%s.UTF-8%s\n", conventions.LanguageCode(), 62 conventions.CountryCode(), 63 conventions.UseStringsFromPreferredLanguage() 64 ? "@strings=messages" : ""); 65 } else { 66 printf("%s.UTF-8%s\n", conventions.LanguageCode(), 67 conventions.UseStringsFromPreferredLanguage() 68 ? "@strings=messages" : ""); 69 } 70 } 71 72 73 void 74 usage(int status) 75 { 76 printf("Usage: %s [-lfmt]\n" 77 " -l, --language\tPrint the currently set preferred language\n" 78 " -f, --format\t\tPrint the formatting-related locale\n" 79 " -m, --message\t\tPrint the message-related locale\n" 80 " -t, --time\t\tPrint the time-related locale\n" 81 " -h, --help\t\tDisplay this help and exit\n", 82 kProgramName); 83 84 exit(status); 85 } 86 87 88 int 89 main(int argc, char **argv) 90 { 91 static struct option const longopts[] = { 92 {"language", no_argument, 0, 'l'}, 93 {"format", no_argument, 0, 'f'}, 94 {"message", no_argument, 0, 'm'}, 95 {"time", no_argument, 0, 't'}, 96 {"help", no_argument, 0, 'h'}, 97 {NULL} 98 }; 99 100 int c; 101 while ((c = getopt_long(argc, argv, "lcfmth", longopts, NULL)) != -1) { 102 switch (c) { 103 case 'l': 104 printf("%s\n", preferred_language().String()); 105 break; 106 case 'f': 107 print_formatting_conventions(); 108 break; 109 case 'c': // for compatibility, we used to use 'c' for ctype 110 case 'm': 111 printf("%s.UTF-8\n", preferred_language().String()); 112 break; 113 case 't': 114 print_time_conventions(); 115 break; 116 case 'h': 117 usage(0); 118 break; 119 case 0: 120 break; 121 default: 122 usage(1); 123 break; 124 } 125 } 126 127 return 0; 128 } 129