From cbcb9181d04100b6938870a1e73fe5f2f782f606 Mon Sep 17 00:00:00 2001 From: Luca Bacci Date: Wed, 11 Jan 2023 15:21:32 +0100 Subject: [PATCH] Add gimp_bind_text_domain () utility function On UNIX it's just a stub calling bindtextdomain () directly; on Windows it converts the path to UTF-16 and calls wbindtextdomain (). --- libgimpbase/gimpbase.def | 1 + libgimpbase/gimputils.c | 32 ++++++++++++++++++++++++++++++++ libgimpbase/gimputils.h | 2 ++ 3 files changed, 35 insertions(+) diff --git a/libgimpbase/gimpbase.def b/libgimpbase/gimpbase.def index 2d4279133d..99fd9caeef 100644 --- a/libgimpbase/gimpbase.def +++ b/libgimpbase/gimpbase.def @@ -7,6 +7,7 @@ EXPORTS gimp_array_new gimp_base_compat_enums_init gimp_base_init + gimp_bind_text_domain gimp_brush_generated_shape_get_type gimp_cache_directory gimp_canonicalize_identifier diff --git a/libgimpbase/gimputils.c b/libgimpbase/gimputils.c index 85f26c2e3d..9019fecdb7 100644 --- a/libgimpbase/gimputils.c +++ b/libgimpbase/gimputils.c @@ -1623,6 +1623,38 @@ gimp_range_estimate_settings (gdouble lower, } } +/** + * gimp_bind_text_domain: + * @domain_name: a gettext domain name + * @dir_name: path of the catalog directory + * + * This function wraps bindtextdomain on UNIX and wbintextdomain on Windows. + * @dir_name is expected to be in the encoding used by the C library on UNIX + * and UTF-8 on Windows. + * + * Since: 3.0 + **/ +void +gimp_bind_text_domain (const gchar *domain_name, + const gchar *dir_name) +{ +#if defined (_WIN32) && !defined (__CYGWIN__) + wchar_t *dir_name_utf16 = g_utf8_to_utf16 (dir_name, -1, NULL, NULL, NULL); + + if G_UNLIKELY (!dir_name_utf16) + { + g_printerr ("[%s] Cannot translate the catalog directory to UTF-16\n", __func__); + } + else + { + wbindtextdomain (domain_name, dir_name_utf16); + g_free (dir_name_utf16); + } +#else + bindtextdomain (domain_name, dir_name); +#endif +} + /* Private functions. */ diff --git a/libgimpbase/gimputils.h b/libgimpbase/gimputils.h index fae2d9a9e6..612e3150bd 100644 --- a/libgimpbase/gimputils.h +++ b/libgimpbase/gimputils.h @@ -88,6 +88,8 @@ void gimp_range_estimate_settings (gdouble lower, gdouble *page, gint *digits); +void gimp_bind_text_domain (const gchar *domain_name, + const gchar *dir_name); G_END_DECLS