From 43a7d725bf172cf60c78154a45db0563df6b3525 Mon Sep 17 00:00:00 2001 From: Bruno Lopes Date: Mon, 6 Apr 2026 20:57:05 -0300 Subject: [PATCH] tools: Support alternative iso_639-3 domain This is one of the official filenames listed on iso-codes meson.build and it is needed to work with iso-codes from vcpkg which uses that domain. https://salsa.debian.org/iso-codes-team/iso-codes/-/blob/main/meson.build?ref_type=heads The reason it was working with MSYS2 until now is that somehow meson from MSYS2 manually copy the symlinks as files. --- tools/gen-languages.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tools/gen-languages.c b/tools/gen-languages.c index 6f5d6aabfe..bc81f5fa21 100644 --- a/tools/gen-languages.c +++ b/tools/gen-languages.c @@ -303,6 +303,7 @@ gimp_language_store_parser_init (GError **error) /* Generate the localized language names. */ g_hash_table_iter_init (&lang_iter, l10n_lang_list); gimp_bind_text_domain ("iso_639_3", ISO_CODES_LOCALEDIR); + gimp_bind_text_domain ("iso_639-3", ISO_CODES_LOCALEDIR); while (g_hash_table_iter_next (&lang_iter, &key, NULL)) { gchar *code = (gchar*) key; @@ -332,6 +333,7 @@ gimp_language_store_parser_init (GError **error) if (english_name) { gchar *semicolon; + gchar *mo_name = NULL; /* If possible, we want to localize a language in itself. * If it fails, gettext fallbacks to C (en_US) itself. @@ -341,6 +343,13 @@ gimp_language_store_parser_init (GError **error) setlocale (LC_ALL, ""); localized_name = g_strdup (dgettext ("iso_639_3", english_name)); + mo_name = "iso_639_3"; + if (g_strcmp0 (english_name, localized_name) == 0) + { + g_free (localized_name); + localized_name = g_strdup (dgettext ("iso_639-3", english_name)); + mo_name = "iso_639-3"; + } /* If original and localized names are the same for other than English, * maybe localization failed. Try now in the main dialect. */ @@ -354,7 +363,7 @@ gimp_language_store_parser_init (GError **error) g_setenv ("LANG", base_code, TRUE); setlocale (LC_ALL, ""); - localized_name = g_strdup (dgettext ("iso_639_3", english_name)); + localized_name = g_strdup (dgettext (mo_name, english_name)); } /* there might be several language names; use the first one */ @@ -458,6 +467,12 @@ parse_iso_codes (GHashTable *base_lang_list, file = g_file_new_for_path (ISO_CODES_LOCATION G_DIR_SEPARATOR_S "iso_639_3.xml"); + if (! g_file_query_exists (file, NULL)) + { + g_object_unref (file); + file = g_file_new_for_path (ISO_CODES_LOCATION G_DIR_SEPARATOR_S + "iso_639-3.xml"); + } success = gimp_xml_parser_parse_gfile (xml_parser, file, error); if (*error) @@ -494,8 +509,10 @@ iso_codes_parser_init (void) return; gimp_bind_text_domain ("iso_639_3", ISO_CODES_LOCALEDIR); + gimp_bind_text_domain ("iso_639-3", ISO_CODES_LOCALEDIR); bind_textdomain_codeset ("iso_639_3", "UTF-8"); + bind_textdomain_codeset ("iso_639-3", "UTF-8"); initialized = TRUE; }