From 3d824065b847f2702aa312c51734328fc414af5a Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Sun, 28 Nov 2010 18:49:04 +0100 Subject: [PATCH] Add g_get_locale_variants() Make _g_compute_locale_variants() public as g_get_locale_variants(). Bug #635998. --- docs/reference/glib/glib-sections.txt | 1 + glib/gkeyfile.c | 5 ++--- glib/glib.symbols | 1 + glib/gutils.c | 23 ++++++++++++++++++++++- glib/gutils.h | 2 ++ glib/tests/utils.c | 15 +++++++++++++++ 6 files changed, 43 insertions(+), 4 deletions(-) diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt index 05ba4f8..c45ee67 100644 --- a/docs/reference/glib/glib-sections.txt +++ b/docs/reference/glib/glib-sections.txt @@ -2730,6 +2730,7 @@ g_dpgettext2 g_strip_context g_get_language_names +g_get_locale_variants
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c index db90062..1f2a856 100644 --- a/glib/gkeyfile.c +++ b/glib/gkeyfile.c @@ -26,6 +26,7 @@ #include "config.h" #include "gkeyfile.h" +#include "gutils.h" #include #include @@ -1630,8 +1631,6 @@ g_key_file_set_locale_string (GKeyFile *key_file, g_free (value); } -extern gchar **_g_compute_locale_variants (const gchar *locale); - /** * g_key_file_get_locale_string: * @key_file: a #GKeyFile @@ -1677,7 +1676,7 @@ g_key_file_get_locale_string (GKeyFile *key_file, if (locale) { - languages = _g_compute_locale_variants (locale); + languages = g_get_locale_variants (locale); free_languages = TRUE; } else diff --git a/glib/glib.symbols b/glib/glib.symbols index 0c4b0d1..4591ecd 100644 --- a/glib/glib.symbols +++ b/glib/glib.symbols @@ -1657,6 +1657,7 @@ g_setenv_utf8 g_get_home_dir_utf8 #endif g_get_language_names +g_get_locale_variants g_get_prgname #ifndef _WIN64 g_get_real_name PRIVATE diff --git a/glib/gutils.c b/glib/gutils.c index 3e01dae..5512fd4 100644 --- a/glib/gutils.c +++ b/glib/gutils.c @@ -3201,8 +3201,29 @@ append_locale_variants (GPtrArray *array, g_free (modifier); } +/** + * g_get_locale_variants: + * @locale: a locale identifier + * + * Returns a list of derived variants of @locale, which can be used to + * e.g. construct locale-dependent filenames or search paths. The returned + * list is sorted from most desirable to least desirable. + * This function handles territory, charset and extra locale modifiers. + * + * For example, if @locale is "fr_BE", then the returned list + * is "fr_BE", "fr". + * + * If you need the list of variants for the current locale, + * use g_get_language_names(). + * + * Returns: (transfer full) (array zero-terminated="1") (element-type utf8): a newly + * allocated array of newly allocated strings with the locale variants. Free with + * g_strfreev(). + * + * Since: 2.28 + */ gchar ** -_g_compute_locale_variants (const gchar *locale) +g_get_locale_variants (const gchar *locale) { GPtrArray *array; diff --git a/glib/gutils.h b/glib/gutils.h index e4d8277..6b94efd 100644 --- a/glib/gutils.h +++ b/glib/gutils.h @@ -157,6 +157,8 @@ const gchar * g_get_user_runtime_dir (void); G_CONST_RETURN gchar* G_CONST_RETURN * g_get_language_names (void); +gchar **g_get_locale_variants (const gchar *locale); + /** * GUserDirectory: * @G_USER_DIRECTORY_DESKTOP: the user's Desktop directory diff --git a/glib/tests/utils.c b/glib/tests/utils.c index f586aa1..cf7d8dd 100644 --- a/glib/tests/utils.c +++ b/glib/tests/utils.c @@ -73,6 +73,20 @@ test_language_names (void) } static void +test_locale_variants (void) +{ + char **v; + + v = g_get_locale_variants ("fr_BE"); + g_assert (strv_check ((const gchar * const *) v, "fr_BE", "fr", NULL)); + g_strfreev (v); + + v = g_get_locale_variants ("sr_SR@latin"); + g_assert (strv_check ((const gchar * const *) v, "sr_SR@latin", "sr@latin", "sr_SR", "sr", NULL)); + g_strfreev (v); +} + +static void test_version (void) { g_print ("(header %d.%d.%d library %d.%d.%d) ", @@ -152,6 +166,7 @@ main (int argc, g_test_bug_base ("http://bugzilla.gnome.org/"); g_test_add_func ("/utils/language-names", test_language_names); + g_test_add_func ("/utils/locale-variants", test_locale_variants); g_test_add_func ("/utils/version", test_version); g_test_add_func ("/utils/appname", test_appname); g_test_add_func ("/utils/tmpdir", test_tmpdir); -- 2.7.4