156 lines
3.3 KiB
C++
156 lines
3.3 KiB
C++
/*
|
|
* Copyright 2011, Haiku, Inc.
|
|
* Distributed under the terms of the MIT license.
|
|
*
|
|
* Authors:
|
|
* Ryan Leavengood, leavengood@gmail.com
|
|
*/
|
|
|
|
|
|
#include <FormattingConventions.h>
|
|
#include <Locale.h>
|
|
#include <LocaleRoster.h>
|
|
#include <Message.h>
|
|
#include <String.h>
|
|
|
|
#include <getopt.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
|
|
extern const char *__progname;
|
|
static const char *kProgramName = __progname;
|
|
|
|
|
|
void
|
|
print_available_languages()
|
|
{
|
|
BMessage languages;
|
|
BLocaleRoster::Default()->GetAvailableLanguages(&languages);
|
|
BString language;
|
|
for (int i = 0; languages.FindString("language", i, &language) == B_OK;
|
|
i++) {
|
|
printf("%s.UTF-8\n", language.String());
|
|
}
|
|
printf("POSIX\n");
|
|
}
|
|
|
|
|
|
BString
|
|
preferred_language()
|
|
{
|
|
BMessage preferredLanguages;
|
|
BLocaleRoster::Default()->GetPreferredLanguages(&preferredLanguages);
|
|
const char* firstPreferredLanguage;
|
|
if (preferredLanguages.FindString("language", &firstPreferredLanguage)
|
|
!= B_OK) {
|
|
// Default to English
|
|
firstPreferredLanguage = "en";
|
|
}
|
|
|
|
return firstPreferredLanguage;
|
|
}
|
|
|
|
|
|
void
|
|
print_formatting_conventions()
|
|
{
|
|
BFormattingConventions conventions;
|
|
BLocale::Default()->GetFormattingConventions(&conventions);
|
|
if (conventions.CountryCode() != NULL) {
|
|
printf("%s_%s.UTF-8\n", conventions.LanguageCode(),
|
|
conventions.CountryCode());
|
|
} else {
|
|
printf("%s.UTF-8\n", conventions.LanguageCode());
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
print_time_conventions()
|
|
{
|
|
BFormattingConventions conventions;
|
|
BLocale::Default()->GetFormattingConventions(&conventions);
|
|
if (conventions.CountryCode() != NULL) {
|
|
printf("%s_%s.UTF-8%s\n", conventions.LanguageCode(),
|
|
conventions.CountryCode(),
|
|
conventions.UseStringsFromPreferredLanguage()
|
|
? "@strings=messages" : "");
|
|
} else {
|
|
printf("%s.UTF-8%s\n", conventions.LanguageCode(),
|
|
conventions.UseStringsFromPreferredLanguage()
|
|
? "@strings=messages" : "");
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
usage(int status)
|
|
{
|
|
printf("Usage: %s [-alftcm]\n"
|
|
" -a, --all\t\tPrint all available languages\n"
|
|
" -l, --language\tPrint the currently set preferred language\n"
|
|
" -f, --format\t\tPrint the formatting-related locale\n"
|
|
" -t, --time\t\tPrint the time-related locale\n"
|
|
" -c, --message\t\tPrint the message-related locale\n"
|
|
" -m, --charmap\t\tList available character maps\n"
|
|
" -h, --help\t\tDisplay this help and exit\n",
|
|
kProgramName);
|
|
|
|
exit(status);
|
|
}
|
|
|
|
|
|
int
|
|
main(int argc, char **argv)
|
|
{
|
|
static struct option const longopts[] = {
|
|
{"all", no_argument, 0, 'a'},
|
|
{"language", no_argument, 0, 'l'},
|
|
{"format", no_argument, 0, 'f'},
|
|
{"time", no_argument, 0, 't'},
|
|
{"message", no_argument, 0, 'c'},
|
|
{"charmap", no_argument, 0, 'm'},
|
|
{"help", no_argument, 0, 'h'},
|
|
{NULL}
|
|
};
|
|
|
|
int c;
|
|
while ((c = getopt_long(argc, argv, "lcfmath", longopts, NULL)) != -1) {
|
|
switch (c) {
|
|
case 'l':
|
|
printf("%s\n", preferred_language().String());
|
|
break;
|
|
case 'f':
|
|
print_formatting_conventions();
|
|
break;
|
|
case 'c': // for compatibility, we used to use 'c' for ctype
|
|
printf("%s.UTF-8\n", preferred_language().String());
|
|
break;
|
|
case 't':
|
|
print_time_conventions();
|
|
break;
|
|
|
|
// POSIX mandatory options
|
|
case 'm':
|
|
puts("UTF-8");
|
|
break;
|
|
case 'a':
|
|
print_available_languages();
|
|
break;
|
|
// TODO 'c', 'k'
|
|
|
|
case 'h':
|
|
usage(0);
|
|
break;
|
|
case 0:
|
|
break;
|
|
default:
|
|
usage(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|