Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTPJu-000w7w-0Q for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 18:53:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTPIs-000dyX-0w for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 18:52:47 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTPIr-000dyP-2g for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 18:52:46 +0000 Received: from sss.pgh.pa.us ([68.162.161.243]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTPIq-00017W-2E for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 18:52:45 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.15.2/8.15.2) with ESMTP id 5BAIqfA1682609; Wed, 10 Dec 2025 13:52:41 -0500 From: Tom Lane To: Peter Eisentraut cc: pgsql-hackers@lists.postgresql.org Subject: Re: Solaris versus our NLS files In-reply-to: <638279.1765383282@sss.pgh.pa.us> References: <292844.1765315339@sss.pgh.pa.us> <638279.1765383282@sss.pgh.pa.us> Comments: In-reply-to Tom Lane message dated "Wed, 10 Dec 2025 11:14:42 -0500" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0" Content-ID: <682555.1765392717.0@sss.pgh.pa.us> Date: Wed, 10 Dec 2025 13:52:41 -0500 Message-ID: <682608.1765392761@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <682555.1765392717.1@sss.pgh.pa.us> I wrote: > Peter Eisentraut writes: >> How would one know all the country codes to create links for? > Yeah, I've been wrestling with that question. The best idea > I have at the moment is to look at "locale -a" output to see > which country codes Solaris thinks there are for each language, > and duplicate that. What's unclear is whether we should do > that on-the-fly to match the build machine, or do it once to > produce a curated list that could be subject to maintenance. It turns out to be a fairly minor patch to do it on-the-fly. With the attached, I've gotten my NLS-testing patch to pass on OpenIndiana. We end up with this in $INSTALL/share/locale/: drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 cs lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 cs_CZ.UTF-8 -> cs drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 de lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 de_AT.UTF-8 -> de lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 de_BE.UTF-8 -> de lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 de_CH.UTF-8 -> de lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 de_DE.UTF-8 -> de lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 de_LI.UTF-8 -> de lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 de_LU.UTF-8 -> de drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 el lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 el_CY.UTF-8 -> el lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 el_GR.UTF-8 -> el drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_AR.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_BO.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_CL.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_CO.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_CR.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_DO.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_EC.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_ES.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_GQ.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_GT.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_HN.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_MX.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_NI.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_PA.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_PE.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_PR.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_PY.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_SV.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_US.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_UY.UTF-8 -> es lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 es_VE.UTF-8 -> es drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_BE.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_CA.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_CF.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_CH.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_FR.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_GN.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_LU.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_MC.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_MG.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_ML.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_NE.UTF-8 -> fr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 fr_SN.UTF-8 -> fr drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 he lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 he_IL.UTF-8 -> he drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 id lrwxrwxrwx 1 tgl staff 2 Dec 10 18:18 id_ID.UTF-8 -> id drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 it lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 it_CH.UTF-8 -> it lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 it_IT.UTF-8 -> it drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 ja lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ja_JP.UTF-8 -> ja drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 ka lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ka_GE.UTF-8 -> ka drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 ko lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ko_KR.UTF-8 -> ko drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 nb lrwxrwxrwx 1 tgl staff 2 Dec 10 18:18 nb_NO.UTF-8 -> nb drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 pl lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 pl_PL.UTF-8 -> pl drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 pt_BR drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 ro lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ro_MD.UTF-8 -> ro lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ro_RO.UTF-8 -> ro drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 ru lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ru_MD.UTF-8 -> ru lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ru_RU.UTF-8 -> ru lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 ru_UA.UTF-8 -> ru drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 sv lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 sv_FI.UTF-8 -> sv lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 sv_SE.UTF-8 -> sv drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 ta lrwxrwxrwx 1 tgl staff 2 Dec 10 18:18 ta_IN.UTF-8 -> ta lrwxrwxrwx 1 tgl staff 2 Dec 10 18:18 ta_LK.UTF-8 -> ta drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 tr lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 tr_TR.UTF-8 -> tr drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 uk lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 uk_UA.UTF-8 -> uk drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 vi lrwxrwxrwx 1 tgl staff 2 Dec 10 18:19 vi_VN.UTF-8 -> vi drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 zh_CN drwxr-xr-x 3 tgl staff 3 Dec 10 18:18 zh_TW That's probably more links than we'd bother with in a curated list, but it's not a huge number. The attached patch only addresses the autoconf/make case. I might be missing something, but so far as I can find, meson wraps up the entire build/installation process for translation files into a black box without user-serviceable parts. So the lack of translation on Solaris is their bug to fix. I'm inclined to commit this and call it good. Probably we should back-patch, too, despite the lack of field complaints. regards, tom lane ------- =_aaaaaaaaaa0 Content-Type: text/x-diff; name="add-nls-symlinks-for-solaris.patch"; charset="us-ascii" Content-ID: <682555.1765392717.2@sss.pgh.pa.us> Content-Description: add-nls-symlinks-for-solaris.patch Content-Transfer-Encoding: quoted-printable diff --git a/src/nls-global.mk b/src/nls-global.mk index 73a6db10a1d..b33e25ad9a4 100644 --- a/src/nls-global.mk +++ b/src/nls-global.mk @@ -123,8 +123,22 @@ ifneq (,$(LANGUAGES)) done endif = +# On Solaris, we must make locale-named symlinks for each language direct= ory, +# else Sun's gettext implementation won't find the messages. But we only +# bother for UTF-8 locales, since our .mo files are in UTF-8 and Sun's ge= ttext +# can't do transcoding. (With Sun's sh, the final "exit 0" is required t= o +# prevent failure in case of the last grep invocation finding nothing.) installdirs-po: - $(if $(LANGUAGES),$(MKDIR_P) $(foreach lang, $(LANGUAGES), '$(DESTDIR)$(= localedir)'/$(lang)/LC_MESSAGES),:) +ifneq (,$(LANGUAGES)) + $(MKDIR_P) $(foreach lang, $(LANGUAGES), '$(DESTDIR)$(localedir)'/$(lang= )/LC_MESSAGES) +ifeq ($(PORTNAME), solaris) + cd '$(DESTDIR)$(localedir)' && for lang in $(LANGUAGES); do \ + for locale in `locale -a | grep "^$${lang}_.*UTF-8"`; do \ + rm -f "$$locale" && $(LN_S) $$lang "$$locale" || exit 1; \ + done ; \ + done ; exit 0 +endif +endif = uninstall-po: $(if $(LANGUAGES),rm -f $(foreach lang, $(LANGUAGES), '$(DESTDIR)$(local= edir)'/$(lang)/LC_MESSAGES/$(CATALOG_NAME)$(SO_MAJOR_VERSION)-$(MAJORVERSI= ON).mo),:) ------- =_aaaaaaaaaa0--