Make UEFI boot-platform build again
[haiku.git] / src / bin / locale / locale.cpp
blob7f64768bc7c1ceba74efd1d87e6313bc4aae6293
1 /*
2 * Copyright 2011, Haiku, Inc.
3 * Distributed under the terms of the MIT license.
5 * Authors:
6 * Ryan Leavengood, leavengood@gmail.com
7 */
10 #include <FormattingConventions.h>
11 #include <Locale.h>
12 #include <LocaleRoster.h>
13 #include <Message.h>
14 #include <String.h>
16 #include <getopt.h>
17 #include <stdio.h>
18 #include <stdlib.h>
21 extern const char *__progname;
22 static const char *kProgramName = __progname;
25 BString
26 preferred_language()
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";
37 return firstPreferredLanguage;
41 void
42 print_formatting_conventions()
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());
55 void
56 print_time_conventions()
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" : "");
73 void
74 usage(int status)
76 printf("Usage: %s [-lftcm]\n"
77 " -l, --language\tPrint the currently set preferred language\n"
78 " -f, --format\t\tPrint the formatting-related locale\n"
79 " -t, --time\t\tPrint the time-related locale\n"
80 " -c, --message\t\tPrint the message-related locale\n"
81 " -m, --charmap\t\tList available character maps\n"
82 " -h, --help\t\tDisplay this help and exit\n",
83 kProgramName);
85 exit(status);
89 int
90 main(int argc, char **argv)
92 static struct option const longopts[] = {
93 {"language", no_argument, 0, 'l'},
94 {"format", no_argument, 0, 'f'},
95 {"time", no_argument, 0, 't'},
96 {"message", no_argument, 0, 'c'},
97 {"charmap", no_argument, 0, 'm'},
98 {"help", no_argument, 0, 'h'},
99 {NULL}
102 int c;
103 while ((c = getopt_long(argc, argv, "lcfmth", longopts, NULL)) != -1) {
104 switch (c) {
105 case 'l':
106 printf("%s\n", preferred_language().String());
107 break;
108 case 'f':
109 print_formatting_conventions();
110 break;
111 case 'c': // for compatibility, we used to use 'c' for ctype
112 printf("%s.UTF-8\n", preferred_language().String());
113 break;
114 case 't':
115 print_time_conventions();
116 break;
118 // POSIX mandatory options
119 case 'm':
120 puts("UTF-8");
121 break;
122 // TODO 'a', 'c', 'k'
124 case 'h':
125 usage(0);
126 break;
127 case 0:
128 break;
129 default:
130 usage(1);
131 break;
135 return 0;