diff --git a/src/main.c b/src/main.c index 71b7546fd4b0a88df0ebd86ffde6e90c7bc3f695..109f2a119b23585da1cff9997cff0c18a24581a8 100644 --- a/src/main.c +++ b/src/main.c @@ -246,6 +246,7 @@ static void init_nc() { /* main program */ int main(int argc, char **argv) { setlocale(LC_ALL, ""); + read_locale(); argv_parse(argc, argv); if(dir_ui == 2) diff --git a/src/util.c b/src/util.c index 5da9db523dbeb2c76b663513903d66c83c8adaf1..137d16d3790d7eefee72de06fb8e3de25a10880e 100644 --- a/src/util.c +++ b/src/util.c @@ -28,9 +28,11 @@ #include <string.h> #include <stdlib.h> #include <ncurses.h> +#include <locale.h> int winrows, wincols; int subwinr, subwinc; +char thou_sep; char *cropstr(const char *from, int s) { @@ -88,7 +90,7 @@ char *fullsize(int64_t from) { while(i--) { dat[j++] = tmp[i]; if(i != 0 && i%3 == 0) - dat[j++] = '.'; + dat[j++] = thou_sep; } dat[j] = '\0'; @@ -96,6 +98,16 @@ char *fullsize(int64_t from) { } +void read_locale() { + char *locale_thou_sep = localeconv()->thousands_sep; + if (locale_thou_sep && 1 == strlen(locale_thou_sep)) { + thou_sep = locale_thou_sep[0]; + } else { + thou_sep = '.'; + } +} + + int ncresize(int minrows, int mincols) { int ch; diff --git a/src/util.h b/src/util.h index 933bf97acc2b00fa0ac2b7eb8fcbfe221c2eb005..d3b417f6a3f58ca54b8913d62220312f1b4aa98c 100644 --- a/src/util.h +++ b/src/util.h @@ -71,6 +71,9 @@ char *formatsize(int64_t ); /* int2string with thousand separators */ char *fullsize(int64_t); +/* read locale information from the environment */ +void read_locale(); + /* recursively free()s a directory tree */ void freedir(struct dir *);