From 389475dbcc4fb8ac52367e103306a632ef3fd101 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 25 Mar 2019 23:32:09 +0200 Subject: [PATCH] * lisp/international/mule-cmds.el (ngettext): Move to editfns.c. * src/editfns.c (Fngettext): Move from mule-cmds.el and use gettext's ngettext when available. --- lisp/international/mule-cmds.el | 16 +------------- src/editfns.c | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 035932e395d..dfa9e4e6c8c 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -2430,7 +2430,7 @@ See `set-language-info-alist' for use in programs." ("ind" . "Latin-1") ; MS-Windows Indonesian ("sme" . "UTF-8") ; MS-Windows Northern Sami (Norway) ("smf" . "UTF-8") ; MS-Windows Northern Sami (Sweden) - ("smg" . "ITF-8") ; MS-Windows Northern Sami (Finland) + ("smg" . "UTF-8") ; MS-Windows Northern Sami (Finland) ("kdi" "Kannada" utf-8) ; MS-Windows Kannada ("mar" "Devanagari" utf-8) ; MS-Windows Marathi ("khm" "Khmer" utf-8) ; MS-Windows Khmer @@ -2798,20 +2798,6 @@ See also `locale-charset-language-names', `locale-language-names', 'a4))))))) nil) -;;; i18n (internationalization) - -(defun ngettext (msgid msgid_plural n) - "Return the plural form of the translation of the string. -This function is similar to the `gettext' function as it finds the message -catalogs in the same way. But it takes two extra arguments. The MSGID -parameter must contain the singular form of the string to be converted. -It is also used as the key for the search in the catalog. -The MSGID_PLURAL parameter is the plural form. The parameter N is used -to determine the plural form. If no message catalog is found MSGID is -returned if N is equal to 1, otherwise MSGID_PLURAL." - (if (= n 1) msgid msgid_plural)) - - ;;; Character property (put 'char-code-property-table 'char-table-extra-slots 5) diff --git a/src/editfns.c b/src/editfns.c index ac9b871835e..ab48cdb6fd1 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -53,6 +53,12 @@ along with GNU Emacs. If not, see . */ #include "window.h" #include "blockinput.h" +#ifdef _LIBC +# include +#else +# include "gettext.h" +#endif + static void update_buffer_properties (ptrdiff_t, ptrdiff_t); static Lisp_Object styled_format (ptrdiff_t, Lisp_Object *, bool); @@ -2836,6 +2842,35 @@ usage: (save-restriction &rest BODY) */) return unbind_to (count, val); } +/* i18n (internationalization). */ + +DEFUN ("ngettext", Fngettext, Sngettext, 3, 3, 0, + doc: /* Return the plural form of the translation of the string. +This function is similar to the `gettext' function as it finds the message +catalogs in the same way. But it takes two extra arguments. The MSGID +parameter must contain the singular form of the string to be converted. +It is also used as the key for the search in the catalog. +The MSGID_PLURAL parameter is the plural form. The parameter N is used +to determine the plural form. If no message catalog is found MSGID is +returned if N is equal to 1, otherwise MSGID_PLURAL. */) + (Lisp_Object msgid, Lisp_Object msgid_plural, Lisp_Object n) +{ + CHECK_STRING (msgid); + CHECK_STRING (msgid_plural); + CHECK_FIXNUM (n); + +#ifdef _LIBGETTEXT_H + return build_string (ngettext (SSDATA (msgid), + SSDATA (msgid_plural), + XFIXNUM (n))); +#else + if (XFIXNUM (n) == 1) + return msgid; + else + return msgid_plural; +#endif +} + DEFUN ("message", Fmessage, Smessage, 1, MANY, 0, doc: /* Display a message at the bottom of the screen. The message also goes into the `*Messages*' buffer, if `message-log-max' @@ -4554,6 +4589,8 @@ it to be non-nil. */); defsubr (&Sinsert_char); defsubr (&Sinsert_byte); + defsubr (&Sngettext); + defsubr (&Suser_login_name); defsubr (&Sgroup_name); defsubr (&Suser_real_login_name); -- 2.39.5